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] f44: Revert "add ppc64le JIT" Date: Fri, 26 Jun 2026 10:18:45 GMT Message-ID: <178246912533.1.822416425008606925.rpms-firefox-430380f3f64c@fedoraproject.org> List-ID: X-Git-Repo: rpms/firefox X-Git-Branch: f44 X-Git-Rev: 430380f3f64c47eba746c7e67fa2160ef8865644 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvZmlyZWZveAogICAgICAgICAgICBCcmFuY2ggOiBmNDQKICAgICAgICAgICAg Q29tbWl0IDogNDMwMzgwZjNmNjRjNDdlYmE3NDZjN2U2N2ZhMjE2MGVmODg2NTY0NAogICAgICAg ICAgICBBdXRob3IgOiBEYW4gSG9yw6FrIDxkYW5AZGFubnkuY3o+CiAgICAgICAgICAgIERhdGUg ICA6IDIwMjYtMDYtMTZUMTM6MTE6MjYrMDA6MDAKICAgICAgICAgICAgU3RhdHMgIDogKzAvLTQy MDg2IGluIDQgZmlsZShzKQogICAgICAgICAgICBVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFw cm9qZWN0Lm9yZy9ycG1zL2ZpcmVmb3gvYy80MzAzODBmM2Y2NGM0N2ViYTc0NmM3ZTY3ZmEyMTYw ZWY4ODY1NjQ0P2JyYW5jaD1mNDQKCiAgICAgICAgICAgIExvZzoKICAgICAgICAgICAgUmV2ZXJ0 ICJhZGQgcHBjNjRsZSBKSVQiCgpUaGlzIHJldmVydHMgY29tbWl0IGU5OWYwZDQ5MjVhYzU5NmFk NzVmMmFlMDg0NjIwZDM2YzQ0YTg1YzIuCgotLS0KZGlmZiAtLWdpdCBhLzAwMDEtQWRkLVZTWC1p bnN0cnVjdGlvbnMtZm9yLVNLSUEucGF0Y2ggYi8wMDAxLUFkZC1WU1gtaW5zdHJ1Y3Rpb25zLWZv ci1TS0lBLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzNhMGQ4Li4wMDAw MDAwCi0tLSBhLzAwMDEtQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLVNLSUEucGF0Y2gKKysrIC9k ZXYvbnVsbApAQCAtMSwxMzQ3ICswLDAgQEAKLUZyb20gYTQ3Yzk5MWRiYmZiNzA5MTM0NzM3YTU0 ZThiYmU3ZTBiMWJjZTgwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ID0/VVRGLTg/ cT9UcnVuZz0yMEw9QzM9QUE/PSA8OEB0bGUuaWQuYXU+Ci1EYXRlOiBGcmksIDEyIEp1biAyMDI2 IDE1OjIzOjEwICsxMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8zXSBBZGQgVlNYIGluc3RydWN0aW9u cyBmb3IgU0tJQQotCi1BZGFwdGVkIGZyb20gd29yayBkb25lIGJ5IFJhcHRvciBFbmdpbmVlcmlu ZyBmb3IgY2hyb21pdW0ncyB2ZW5kb3JlZAotU0tJQQotCi1Dby1hdXRob3JlZC1ieTogVGltb3Ro eSBQZWFyc29uIDx0cGVhcnNvbkByYXB0b3JlbmdpbmVlcmluZy5jb20+Ci0tLS0KLSBnZngvc2tp YS9za2lhL3NyYy9iYXNlL1NrVnguaCAgICAgICAgICAgICAgICAgfCAgNTggKysrLQotIGdmeC9z a2lhL3NraWEvc3JjL2NvcmUvU2tCbGl0Um93X0QzMi5jcHAgICAgICB8ICA5OCArKysrKysKLSBn Zngvc2tpYS9za2lhL3NyYy9jb3JlL1NrQmxpdHRlcl9BUkdCMzIuY3BwICAgfCAyNjggKysrKysr KysrKysrKysrKwotIC4uLi9za2lhL3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX29wdHMuaCAg ICB8IDE2NCArKysrKysrKysrCi0gZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta0JsaXRSb3dfb3B0 cy5oICAgICAgIHwgIDQ4ICsrKwotIC4uLi9za2lhL3NyYy9vcHRzL1NrUmFzdGVyUGlwZWxpbmVf b3B0cy5oICAgICB8IDIzNyArKysrKysrKysrKysrKwotIGdmeC9za2lhL3NraWEvc3JjL29wdHMv U2tTd2l6emxlcl9vcHRzLmluYyAgICB8IDI4OSArKysrKysrKysrKysrKysrKysKLSA3IGZpbGVz IGNoYW5nZWQsIDExNjAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdp dCBhL2dmeC9za2lhL3NraWEvc3JjL2Jhc2UvU2tWeC5oIGIvZ2Z4L3NraWEvc2tpYS9zcmMvYmFz ZS9Ta1Z4LmgKLWluZGV4IGY4N2NhNDRkNGFmMC4uZWQ4MGM5MWZkMzhlIDEwMDY0NAotLS0tIGEv Z2Z4L3NraWEvc2tpYS9zcmMvYmFzZS9Ta1Z4LmgKLSsrKyBiL2dmeC9za2lhL3NraWEvc3JjL2Jh c2UvU2tWeC5oCi1AQCAtNTIsNiArNTIsOCBAQAotICAgICAgICAgI2luY2x1ZGUgPGFybV9uZW9u Lmg+Ci0gICAgICNlbGlmIGRlZmluZWQoX193YXNtX3NpbWQxMjhfXykKLSAgICAgICAgICNpbmNs dWRlIDx3YXNtX3NpbWQxMjguaD4KLSsgICAgI2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBk ZWZpbmVkKF9fVlNYX18pCi0rICAgICAgICAjaW5jbHVkZSA8YWx0aXZlYy5oPgotICAgICAjZWxp ZiBTS19DUFVfTFNYX0xFVkVMID49IFNLX0NQVV9MU1hfTEVWRUxfTEFTWAotICAgICAgICAgI2lu Y2x1ZGUgPGxhc3hpbnRyaW4uaD4KLSAgICAgICAgICNpbmNsdWRlIDxsc3hpbnRyaW4uaD4KLUBA IC01MDksNiArNTExLDE0IEBAIFNJTlQgVmVjPE4sVD4gaWZfdGhlbl9lbHNlKGNvbnN0IFZlYzxO LE08VD4+JiBjb25kLCBjb25zdCBWZWM8TixUPiYgdCwgY29uc3QgVmVjCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrX2JpdF9jYXN0PHVpbnQ4eDE2X3Q+ KGUpKSk7Ci0gICAgIH0KLSAjZW5kaWYKLSsjaWYgU0tWWF9VU0VfU0lNRCAmJiBkZWZpbmVkKFNL X0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKLSsgICAgaWYgY29uc3RleHByIChOKnNpemVv ZihUKSA9PSAxNikgewotKyAgICAgICAgcmV0dXJuIHNrX2JpdF9jYXN0PFZlYzxOLFQ+PigKLSsg ICAgICAgICAgICAgICAgdmVjX3NlbChza19iaXRfY2FzdDxfX3ZlY3RvciB1bnNpZ25lZCBjaGFy PihlKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICBza19iaXRfY2FzdDxfX3ZlY3RvciB1bnNp Z25lZCBjaGFyPih0KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICBza19iaXRfY2FzdDxfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyPihjb25kKSkpOwotKyAgICB9Ci0rI2VuZGlmCi0gI2lmIFNLVlhf VVNFX1NJTUQgJiYgU0tfQ1BVX0xTWF9MRVZFTCA+PSBTS19DUFVfTFNYX0xFVkVMX0xBU1gKLSAg ICAgaWYgY29uc3RleHByIChOKnNpemVvZihUKSA9PSAzMikgewotICAgICAgICAgcmV0dXJuIHNr X2JpdF9jYXN0PFZlYzxOLFQ+PihfX2xhc3hfeHZiaXRzZWxfdihza19iaXRfY2FzdDxfX20yNTZp PihlKSwKLUBAIC01NzksNiArNTg5LDExIEBAIFNJTlQgYm9vbCBhbnkoY29uc3QgVmVjPE4sVD4m IHgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2tfYml0X2Nhc3Q8X19tMTI4aT4oeCkpKTsKLSAgICAgICAgIHJldHVybiByZXR2 WzBdICE9IDBiMDAwMDsKLSAgICAgfQotKyNlbmRpZgotKyNpZiBTS1ZYX1VTRV9TSU1EICYmIGRl ZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQotKyAgICBpZiBjb25zdGV4cHIg KE4qc2l6ZW9mKFQpID09IDE2KSB7Ci0rICAgICAgICByZXR1cm4gdmVjX2FueV9uZShza19iaXRf Y2FzdDxfX3ZlY3RvciB1bnNpZ25lZCBpbnQ+KHgpLCB2ZWNfc3BsYXRzKDB1KSk7Ci0rICAgIH0K LSAjZW5kaWYKLSAgICAgcmV0dXJuIGFueSh4LmxvKQotICAgICAgICAgfHwgYW55KHguaGkpOwot QEAgLTYyMiw2ICs2MzcsMTEgQEAgU0lOVCBib29sIGFsbChjb25zdCBWZWM8TixUPiYgeCkgewot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBza19iaXRfY2FzdDxfX20xMjhpPih4KSkpOwotICAgICAgICAgcmV0dXJuIHJldHZbMF0gPT0g MGIxMTExOwotICAgICB9Ci0rI2VuZGlmCi0rI2lmIFNLVlhfVVNFX1NJTUQgJiYgZGVmaW5lZChT S19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCi0rICAgIGlmIGNvbnN0ZXhwciAoTipzaXpl b2YoVCkgPT0gMTYpIHsKLSsgICAgICAgIHJldHVybiB2ZWNfYWxsX25lKHNrX2JpdF9jYXN0PF9f dmVjdG9yIHVuc2lnbmVkIGludD4oeCksIHZlY19zcGxhdHMoMHUpKTsKLSsgICAgfQotICNlbmRp ZgotICAgICByZXR1cm4gYWxsKHgubG8pCi0gICAgICAgICAmJiBhbGwoeC5oaSk7Ci1AQCAtNjQ3 LDggKzY2NywyMiBAQCBTSVQgIFQgbWF4KGNvbnN0IFZlYzwxLFQ+JiB4KSB7IHJldHVybiB4LnZh bDsgfQotIFNJTlQgVCBtaW4oY29uc3QgVmVjPE4sVD4mIHgpIHsgcmV0dXJuIHN0ZDo6bWluKG1p bih4LmxvKSwgbWluKHguaGkpKTsgfQotIFNJTlQgVCBtYXgoY29uc3QgVmVjPE4sVD4mIHgpIHsg cmV0dXJuIHN0ZDo6bWF4KG1heCh4LmxvKSwgbWF4KHguaGkpKTsgfQotIAotLVNJTlQgVmVjPE4s VD4gbWluKGNvbnN0IFZlYzxOLFQ+JiB4LCBjb25zdCBWZWM8TixUPiYgeSkgeyByZXR1cm4gbmFp dmVfaWZfdGhlbl9lbHNlKHkgPCB4LCB5LCB4KTsgfQotLVNJTlQgVmVjPE4sVD4gbWF4KGNvbnN0 IFZlYzxOLFQ+JiB4LCBjb25zdCBWZWM8TixUPiYgeSkgeyByZXR1cm4gbmFpdmVfaWZfdGhlbl9l bHNlKHggPCB5LCB5LCB4KTsgfQotK1NJTlQgVmVjPE4sVD4gbWluKGNvbnN0IFZlYzxOLFQ+JiB4 LCBjb25zdCBWZWM8TixUPiYgeSkgewotKyNpZiBTS1ZYX1VTRV9TSU1EICYmIGRlZmluZWQoU0tf Q1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQotKyAgICBpZiBjb25zdGV4cHIgKE4qc2l6ZW9m KFQpID09IDE2KSB7Ci0rICAgICAgICByZXR1cm4gc2tfYml0X2Nhc3Q8VmVjPE4sVD4+KHZlY19t aW4odG9fdmV4dCh4KSwgdG9fdmV4dCh5KSkpOwotKyAgICB9Ci0rI2VuZGlmCi0rICAgIHJldHVy biBuYWl2ZV9pZl90aGVuX2Vsc2UoeSA8IHgsIHksIHgpOwotK30KLStTSU5UIFZlYzxOLFQ+IG1h eChjb25zdCBWZWM8TixUPiYgeCwgY29uc3QgVmVjPE4sVD4mIHkpIHsKLSsjaWYgU0tWWF9VU0Vf U0lNRCAmJiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKLSsgICAgaWYg Y29uc3RleHByIChOKnNpemVvZihUKSA9PSAxNikgewotKyAgICAgICAgcmV0dXJuIHNrX2JpdF9j YXN0PFZlYzxOLFQ+Pih2ZWNfbWF4KHRvX3ZleHQoeCksIHRvX3ZleHQoeSkpKTsKLSsgICAgfQot KyNlbmRpZgotKyAgICByZXR1cm4gbmFpdmVfaWZfdGhlbl9lbHNlKHggPCB5LCB5LCB4KTsKLSt9 Ci0gCi0gU0lOVFUgVmVjPE4sVD4gbWluKGNvbnN0IFZlYzxOLFQ+JiB4LCBVIHkpIHsgcmV0dXJu IG1pbih4LCBWZWM8TixUPih5KSk7IH0KLSBTSU5UVSBWZWM8TixUPiBtYXgoY29uc3QgVmVjPE4s VD4mIHgsIFUgeSkgeyByZXR1cm4gbWF4KHgsIFZlYzxOLFQ+KHkpKTsgfQotQEAgLTk2MCw2ICs5 OTQsMjYgQEAgU0lOIFZlYzxOLHVpbnQxNl90PiBtdWxoaShjb25zdCBWZWM8Tix1aW50MTZfdD4m IHgsCi0gICAgIH0gZWxzZSB7IC8vIE4gPiA4Ci0gICAgICAgICByZXR1cm4gam9pbihtdWxoaSh4 LmxvLCB5LmxvKSwgbXVsaGkoeC5oaSwgeS5oaSkpOwotICAgICB9Ci0rI2VsaWYgU0tWWF9VU0Vf U0lNRCAmJiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKLSsgICAgaWYg Y29uc3RleHByIChOID09IDgpIHsKLSsgICAgICAgIC8vIHUxNip1MTYgLT4gdTMyIGV2ZW4vb2Rk IHByb2R1Y3RzICh2bXVsZXVoL3ZtdWxvdWgpLCB0aGVuIGdhdGhlciB0aGUKLSsgICAgICAgIC8v IGhpZ2ggMTYgYml0cyBvZiBlYWNoIGJhY2sgaW50byBzZXF1ZW50aWFsIGxhbmVzLiBTYW1lIGlk aW9tIGFzIHRoZQotKyAgICAgICAgLy8gVlNYIHNjYWxlKCkgaW4gU2tTd2l6emxlcl9vcHRzLgot KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgeHMgPSBza19iaXRfY2FzdDxfX3ZlY3Rv ciB1bnNpZ25lZCBzaG9ydD4oeCk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB5 cyA9IHNrX2JpdF9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0Pih5KTsKLSsgICAgICAgIF9f dmVjdG9yIHVuc2lnbmVkIGludCBldmVuID0gdmVjX3ZtdWxldWgoeHMsIHlzKTsKLSsgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIGludCBvZGQgID0gdmVjX3ZtdWxvdWgoeHMsIHlzKTsKLSsgICAg ICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgaGkgPSB7Ci0rICAgICAgICAgICAgMHgw MiwweDAzLCAweDEyLDB4MTMsICAweDA2LDB4MDcsIDB4MTYsMHgxNywKLSsgICAgICAgICAgICAw eDBBLDB4MEIsIDB4MUEsMHgxQiwgIDB4MEUsMHgwRiwgMHgxRSwweDFGCi0rICAgICAgICB9Owot KyAgICAgICAgcmV0dXJuIHNrX2JpdF9jYXN0PFZlYzw4LHVpbnQxNl90Pj4oCi0rICAgICAgICAg ICAgdmVjX3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZXZlbiwgKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIpb2RkLCBoaSkpOwotKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChOIDwgOCkgewot KyAgICAgICAgcmV0dXJuIG11bGhpKGpvaW4oeCx4KSwgam9pbih5LHkpKS5sbzsKLSsgICAgfSBl bHNlIHsgLy8gTiA+IDgKLSsgICAgICAgIHJldHVybiBqb2luKG11bGhpKHgubG8sIHkubG8pLCBt dWxoaSh4LmhpLCB5LmhpKSk7Ci0rICAgIH0KLSAjZWxzZQotICAgICByZXR1cm4gc2t2eDo6Y2Fz dDx1aW50MTZfdD4obXVsbCh4LCB5KSA+PiAxNik7Ci0gI2VuZGlmCi1kaWZmIC0tZ2l0IGEvZ2Z4 L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXRSb3dfRDMyLmNwcCBiL2dmeC9za2lhL3NraWEvc3Jj L2NvcmUvU2tCbGl0Um93X0QzMi5jcHAKLWluZGV4IGJjYmYyZTY2YmQ0Ni4uOTIwZDZhOWIyMzY2 IDEwMDY0NAotLS0tIGEvZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXRSb3dfRDMyLmNwcAot KysrIGIvZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXRSb3dfRDMyLmNwcAotQEAgLTUxNyw2 ICs1MTcsMTA0IEBAIHN0YXRpYyB2b2lkIGJsaXRfcm93X3MzMl9vcGFxdWUoU2tQTUNvbG9yKiBk c3QsCi0gICAgICAgICB9Ci0gICAgIH0KLSAKLSsjZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMpICYm IGRlZmluZWQoX19WU1hfXykKLSsgICAgI2luY2x1ZGUgPGFsdGl2ZWMuaD4KLSsKLSsgICAgLy8g ZHN0ICsgKCgoc3JjIC0gZHN0KSAqIHNyY19zY2FsZSkgPj4gOCksIHNwbGF5ZWQgaW50byAxNi1i aXQgbGFuZXM7IHRoZQotKyAgICAvLyB2ZWNfKiB0cmFuc2NyaXB0aW9uIG9mIFNrUE1MZXJwX1NT RTIuCi0rICAgIHN0YXRpYyBpbmxpbmUgX192ZWN0b3IgdW5zaWduZWQgY2hhciBTa1BNTGVycF9W U1goX192ZWN0b3IgdW5zaWduZWQgY2hhciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBkc3Qs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgc3JjX3NjYWxlKSB7Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBp bnQgbWFzayA9IHZlY19zcGxhdHMoMHgwMEZGMDBGRnUpOwotKyAgICAgICAgY29uc3QgX192ZWN0 b3IgdW5zaWduZWQgc2hvcnQgZWlnaHQgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KTsK LSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHNyY19yYiA9IChfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydCl2ZWNfYW5kKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpc3JjLCBtYXNrKTsKLSsg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHNyY19hZyA9IHZlY19zcigoX192ZWN0b3Ig dW5zaWduZWQgc2hvcnQpc3JjLCBlaWdodCk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCBkc3RfcmIgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX2FuZCgoX192ZWN0b3Ig dW5zaWduZWQgaW50KWRzdCwgbWFzayk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCBkc3RfYWcgPSB2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWRzdCwgZWlnaHQpOwot KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgcyA9IHZlY19zcGxhdHMoKHVuc2lnbmVk IHNob3J0KXNyY19zY2FsZSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBkaWZm X3JiID0gdmVjX211bCh2ZWNfc3ViKHNyY19yYiwgZHN0X3JiKSwgcyk7Ci0rICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCBkaWZmX2FnID0gdmVjX211bCh2ZWNfc3ViKHNyY19hZywgZHN0 X2FnKSwgcyk7Ci0rICAgICAgICBkaWZmX3JiID0gdmVjX3NyKGRpZmZfcmIsIGVpZ2h0KTsKLSsg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBkaWZmID0gdmVjX29yKChfX3ZlY3RvciB1bnNp Z25lZCBpbnQpZGlmZl9yYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZlY19hbmRjKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpZGlmZl9hZywgbWFzaykpOwot KyAgICAgICAgcmV0dXJuIHZlY19hZGQoZHN0LCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilkaWZm KTsKLSsgICAgfQotKwotKyAgICBzdGF0aWMgdm9pZCBibGl0X3Jvd19zMzJfYmxlbmQoU2tQTUNv bG9yKiBkc3QsIGNvbnN0IFNrUE1Db2xvciogc3JjLCBpbnQgY291bnQsIFU4Q1BVIGFscGhhKSB7 Ci0rICAgICAgICBTa0FTU0VSVChhbHBoYSA8PSAyNTUpOwotKyAgICAgICAgdW5zaWduZWQgc3Jj X3NjYWxlID0gU2tBbHBoYTI1NVRvMjU2KGFscGhhKTsKLSsgICAgICAgIHdoaWxlIChjb3VudCA+ PSA0KSB7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBzID0gdmVjX3hsKDAs IChjb25zdCB1bnNpZ25lZCBjaGFyKilzcmMpOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIgZCA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopZHN0KTsKLSsgICAg ICAgICAgICB2ZWNfeHN0KFNrUE1MZXJwX1ZTWChzLCBkLCBzcmNfc2NhbGUpLCAwLCAodW5zaWdu ZWQgY2hhciopZHN0KTsKLSsgICAgICAgICAgICBzcmMgKz0gNDsgZHN0ICs9IDQ7IGNvdW50IC09 IDQ7Ci0rICAgICAgICB9Ci0rICAgICAgICB3aGlsZSAoY291bnQgLS0+IDApIHsKLSsgICAgICAg ICAgICAqZHN0ID0gU2tQTUxlcnAoKnNyYywgKmRzdCwgc3JjX3NjYWxlKTsKLSsgICAgICAgICAg ICBzcmMrKzsKLSsgICAgICAgICAgICBkc3QrKzsKLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAg ICAvLyBUaGUgdmVjXyogdHJhbnNjcmlwdGlvbiBvZiBTa0JsZW5kQVJHQjMyX1NTRTI6IHNjYWxl IHNyYyBieSBhYSBhbmQgZHN0IGJ5Ci0rICAgIC8vIFNrQWxwaGFNdWxJbnYyNTYoc3JjQSwgYWEp LCB0aGVuIGFkZCB0aGUgc3BsYXllZCBoYWx2ZXMuCi0rICAgIHN0YXRpYyBpbmxpbmUgX192ZWN0 b3IgdW5zaWduZWQgY2hhciBTa0JsZW5kQVJHQjMyX1ZTWChfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZHN0LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWEpIHsK LSsgICAgICAgIHVuc2lnbmVkIGFscGhhID0gU2tBbHBoYTI1NVRvMjU2KGFhKTsKLSsgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHNyY19zY2FsZSA9IHZlY19zcGxhdHMoKHVuc2lnbmVk IHNob3J0KWFscGhhKTsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGludCBtYXNr ID0gdmVjX3NwbGF0cygweDAwRkYwMEZGdSk7Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydCBlaWdodCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTgpOwotKwotKyAg ICAgICAgLy8gZHN0X3NjYWxlID0gU2tBbHBoYU11bEludjI1NihTa0dldFBhY2tlZEEzMihzcmMp LCBhbHBoYSksIHBlciAzMi1iaXQgbGFuZS4KLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGlu dCBzcmNBID0gdmVjX3NyKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpc3JjLCB2ZWNfc3BsYXRzKDI0 dSkpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGRzID0gKF9fdmVjdG9yIHVuc2ln bmVkIGludCl2ZWNfbXVsKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClzcmNBLCBzcmNfc2NhbGUp OwotKyAgICAgICAgZHMgPSB2ZWNfc3ViKHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkweEZGRkYp LCBkcyk7Ci0rICAgICAgICBkcyA9IHZlY19hZGQoZHMsIHZlY19zcihkcywgdmVjX3NwbGF0cyg4 dSkpKTsKLSsgICAgICAgIGRzID0gdmVjX3NyKGRzLCB2ZWNfc3BsYXRzKDh1KSk7Ci0rICAgICAg ICAvLyBEdXBsaWNhdGUgdGhlIGxvdyAxNi1iaXQgd29yZCBvZiBlYWNoIDMyLWJpdCBsYW5lIGlu dG8gYm90aCBoYWx2ZXMKLSsgICAgICAgIC8vICh0aGUgU1NFIHNodWZmbGVsby9zaHVmZmxlaGkg X01NX1NIVUZGTEUoMiwyLDAsMCkpLgotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQg Y2hhciBkdXAgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7Ci0rICAgICAgICAgICAgMCwxLDAs MSwgNCw1LDQsNSwgOCw5LDgsOSwgMTIsMTMsMTIsMTMKLSsgICAgICAgIH07Ci0rICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBkc3Rfc2NhbGUgPQotKyAgICAgICAgICAgIChfX3ZlY3Rv ciB1bnNpZ25lZCBzaG9ydCl2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilkcywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVu c2lnbmVkIGNoYXIpZHMsIGR1cCk7Ci0rCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCBzcmNfcmIgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX2FuZCgoX192ZWN0b3IgdW5z aWduZWQgaW50KXNyYywgbWFzayk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBz cmNfYWcgPSB2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXNyYywgZWlnaHQpOwotKyAg ICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZHN0X3JiID0gKF9fdmVjdG9yIHVuc2lnbmVk IHNob3J0KXZlY19hbmQoKF9fdmVjdG9yIHVuc2lnbmVkIGludClkc3QsIG1hc2spOwotKyAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZHN0X2FnID0gdmVjX3NyKChfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydClkc3QsIGVpZ2h0KTsKLSsKLSsgICAgICAgIHNyY19yYiA9IHZlY19tdWwoc3Jj X3JiLCBzcmNfc2NhbGUpOwotKyAgICAgICAgc3JjX2FnID0gdmVjX211bChzcmNfYWcsIHNyY19z Y2FsZSk7Ci0rICAgICAgICBkc3RfcmIgPSB2ZWNfbXVsKGRzdF9yYiwgZHN0X3NjYWxlKTsKLSsg ICAgICAgIGRzdF9hZyA9IHZlY19tdWwoZHN0X2FnLCBkc3Rfc2NhbGUpOwotKwotKyAgICAgICAg ZHN0X3JiID0gdmVjX2FkZChzcmNfcmIsIGRzdF9yYik7Ci0rICAgICAgICBkc3RfYWcgPSB2ZWNf YWRkKHNyY19hZywgZHN0X2FnKTsKLSsKLSsgICAgICAgIGRzdF9yYiA9IHZlY19zcihkc3RfcmIs IGVpZ2h0KTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBvdXQgPSB2ZWNfb3IoKF9f dmVjdG9yIHVuc2lnbmVkIGludClkc3RfcmIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZlY19hbmRjKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpZHN0X2FnLCBt YXNrKSk7Ci0rICAgICAgICByZXR1cm4gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpb3V0OwotKyAg ICB9Ci0rCi0rICAgIHN0YXRpYyB2b2lkIGJsaXRfcm93X3MzMmFfYmxlbmQoU2tQTUNvbG9yKiBk c3QsIGNvbnN0IFNrUE1Db2xvciogc3JjLCBpbnQgY291bnQsIFU4Q1BVIGFscGhhKSB7Ci0rICAg ICAgICBTa0FTU0VSVChhbHBoYSA8PSAyNTUpOwotKyAgICAgICAgd2hpbGUgKGNvdW50ID49IDQp IHsKLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHMgPSB2ZWNfeGwoMCwgKGNv bnN0IHVuc2lnbmVkIGNoYXIqKXNyYyk7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQg Y2hhciBkID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilkc3QpOwotKyAgICAgICAg ICAgIHZlY194c3QoU2tCbGVuZEFSR0IzMl9WU1gocywgZCwgYWxwaGEpLCAwLCAodW5zaWduZWQg Y2hhciopZHN0KTsKLSsgICAgICAgICAgICBzcmMgKz0gNDsgZHN0ICs9IDQ7IGNvdW50IC09IDQ7 Ci0rICAgICAgICB9Ci0rICAgICAgICB3aGlsZSAoY291bnQgLS0+IDApIHsKLSsgICAgICAgICAg ICAqZHN0ID0gU2tCbGVuZEFSR0IzMigqc3JjLCAqZHN0LCBhbHBoYSk7Ci0rICAgICAgICAgICAg c3JjKys7Ci0rICAgICAgICAgICAgZHN0Kys7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSAjZWxz ZQotICAgICBzdGF0aWMgdm9pZCBibGl0X3Jvd19zMzJfYmxlbmQoU2tQTUNvbG9yKiBkc3QsIGNv bnN0IFNrUE1Db2xvciogc3JjLCBpbnQgY291bnQsIFU4Q1BVIGFscGhhKSB7Ci0gICAgICAgICBT a0FTU0VSVChhbHBoYSA8PSAyNTUpOwotZGlmZiAtLWdpdCBhL2dmeC9za2lhL3NraWEvc3JjL2Nv cmUvU2tCbGl0dGVyX0FSR0IzMi5jcHAgYi9nZngvc2tpYS9za2lhL3NyYy9jb3JlL1NrQmxpdHRl cl9BUkdCMzIuY3BwCi1pbmRleCBhNzUzODAyN2I4NWQuLjk2Njk0MzEyOTJiNiAxMDA2NDQKLS0t LSBhL2dmeC9za2lhL3NraWEvc3JjL2NvcmUvU2tCbGl0dGVyX0FSR0IzMi5jcHAKLSsrKyBiL2dm eC9za2lhL3NraWEvc3JjL2NvcmUvU2tCbGl0dGVyX0FSR0IzMi5jcHAKLUBAIC00ODAsNiArNDgw LDI3NCBAQCBzdGF0aWMgaW5saW5lIFNrUE1Db2xvciBibGVuZF9sY2QxNl9vcGFxdWUoaW50IHNy Y1IsIGludCBzcmNHLCBpbnQgc3JjQiwKLSAgICAgICAgIH0KLSAgICAgfQotIAotKyNlbGlmIGRl ZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQotKyAgICAjaW5jbHVkZSA8YWx0 aXZlYy5oPgotKwotKyAgICAvLyBOYXRpdmUgVlNYL0FsdGlWZWMgcG9ydCBvZiB0aGUgU1NFMiBM Q0Qtc3VicGl4ZWwgYmxlbmQgYmxvY2sgYmVsb3cuCi0rICAgIC8vIFNhbWUgYWxnb3JpdGhtIOKA lCBvbmx5IHRoZSBpbnRyaW5zaWNzIGNoYW5nZS4gVHJhbnNsYXRpb25zIGZvbGxvdyB0aGUKLSsg ICAgLy8gR0NDIHBwY193cmFwcGVycyBwYXR0ZXJuICh2ZWNfbWVyZ2VoL2wsIHZlY19wYWNrc3Us IGV0Yy4pLgotKwotKyAgICAvLyBUaGUgZm9sbG93aW5nIChsZWZ0KSBzaGlmdHMgY2F1c2UgdGhl IHRvcCA1IGJpdHMgb2YgdGhlIG1hc2sgY29tcG9uZW50cyB0bwotKyAgICAvLyBsaW5lIHVwIHdp dGggdGhlIGNvcnJlc3BvbmRpbmcgY29tcG9uZW50cyBpbiBhbiBTa1BNQ29sb3IuCi0rICAgIC8v IE5vdGUgdGhhdCB0aGUgbWFzaydzIFJHQjE2IG9yZGVyIG1heSBkaWZmZXIgZnJvbSB0aGUgU2tQ TUNvbG9yIG9yZGVyLgotKyAgICAjZGVmaW5lIFNLX1IxNng1X1IzMng1X1NISUZUIChTS19SMzJf U0hJRlQgLSBTS19SMTZfU0hJRlQgLSBTS19SMTZfQklUUyArIDUpCi0rICAgICNkZWZpbmUgU0tf RzE2eDVfRzMyeDVfU0hJRlQgKFNLX0czMl9TSElGVCAtIFNLX0cxNl9TSElGVCAtIFNLX0cxNl9C SVRTICsgNSkKLSsgICAgI2RlZmluZSBTS19CMTZ4NV9CMzJ4NV9TSElGVCAoU0tfQjMyX1NISUZU IC0gU0tfQjE2X1NISUZUIC0gU0tfQjE2X0JJVFMgKyA1KQotKwotKyAgICAvLyBFYWNoIG1hY3Jv IG11c3QgYWx3YXlzIHJldHVybiBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgc28gdGhlIHN1cnJvdW5k aW5nCi0rICAgIC8vIHZlY19hbmQgZ2V0cyBtYXRjaGluZyBlbGVtZW50IHR5cGVzLiBUaGUgcGFz cy10aHJvdWdoIGNhc2UgKFNISUZUID09IDApCi0rICAgIC8vIHN0aWxsIG5lZWRzIGFuIGV4cGxp Y2l0IHJlaW50ZXJwcmV0LWNhc3Qgc2luY2UgYG1hc2tgIGlzIF9fdmVjdG9yCi0rICAgIC8vIHVu c2lnbmVkIGNoYXIgaW4gb3VyIGZ1bmN0aW9uIHNpZ25hdHVyZS4KLSsgICAgI2lmIFNLX1IxNng1 X1IzMng1X1NISUZUID09IDAKLSsgICAgICAgICNkZWZpbmUgU2tQYWNrZWRSMTZ4NVRvVW5tYXNr ZWRSMzJ4NV9WU1goeCkgKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpKQotKyAgICAjZWxpZiBT S19SMTZ4NV9SMzJ4NV9TSElGVCA+IDAKLSsgICAgICAgICNkZWZpbmUgU2tQYWNrZWRSMTZ4NVRv VW5tYXNrZWRSMzJ4NV9WU1goeCkgXAotKyAgICAgICAgICAgIHZlY19zbCgoX192ZWN0b3IgdW5z aWduZWQgaW50KSh4KSwgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KVNLX1IxNng1X1IzMng1X1NI SUZUKSkKLSsgICAgI2Vsc2UKLSsgICAgICAgICNkZWZpbmUgU2tQYWNrZWRSMTZ4NVRvVW5tYXNr ZWRSMzJ4NV9WU1goeCkgXAotKyAgICAgICAgICAgIHZlY19zcigoX192ZWN0b3IgdW5zaWduZWQg aW50KSh4KSwgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KSgtU0tfUjE2eDVfUjMyeDVfU0hJRlQp KSkKLSsgICAgI2VuZGlmCi0rCi0rICAgICNpZiBTS19HMTZ4NV9HMzJ4NV9TSElGVCA9PSAwCi0r ICAgICAgICAjZGVmaW5lIFNrUGFja2VkRzE2eDVUb1VubWFza2VkRzMyeDVfVlNYKHgpICgoX192 ZWN0b3IgdW5zaWduZWQgaW50KSh4KSkKLSsgICAgI2VsaWYgU0tfRzE2eDVfRzMyeDVfU0hJRlQg PiAwCi0rICAgICAgICAjZGVmaW5lIFNrUGFja2VkRzE2eDVUb1VubWFza2VkRzMyeDVfVlNYKHgp IFwKLSsgICAgICAgICAgICB2ZWNfc2woKF9fdmVjdG9yIHVuc2lnbmVkIGludCkoeCksIHZlY19z cGxhdHMoKHVuc2lnbmVkIGludClTS19HMTZ4NV9HMzJ4NV9TSElGVCkpCi0rICAgICNlbHNlCi0r ICAgICAgICAjZGVmaW5lIFNrUGFja2VkRzE2eDVUb1VubWFza2VkRzMyeDVfVlNYKHgpIFwKLSsg ICAgICAgICAgICB2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIGludCkoeCksIHZlY19zcGxhdHMo KHVuc2lnbmVkIGludCkoLVNLX0cxNng1X0czMng1X1NISUZUKSkpCi0rICAgICNlbmRpZgotKwot KyAgICAjaWYgU0tfQjE2eDVfQjMyeDVfU0hJRlQgPT0gMAotKyAgICAgICAgI2RlZmluZSBTa1Bh Y2tlZEIxNng1VG9Vbm1hc2tlZEIzMng1X1ZTWCh4KSAoKF9fdmVjdG9yIHVuc2lnbmVkIGludCko eCkpCi0rICAgICNlbGlmIFNLX0IxNng1X0IzMng1X1NISUZUID4gMAotKyAgICAgICAgI2RlZmlu ZSBTa1BhY2tlZEIxNng1VG9Vbm1hc2tlZEIzMng1X1ZTWCh4KSBcCi0rICAgICAgICAgICAgdmVj X3NsKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQp U0tfQjE2eDVfQjMyeDVfU0hJRlQpKQotKyAgICAjZWxzZQotKyAgICAgICAgI2RlZmluZSBTa1Bh Y2tlZEIxNng1VG9Vbm1hc2tlZEIzMng1X1ZTWCh4KSBcCi0rICAgICAgICAgICAgdmVjX3NyKChf X3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKC1TS19C MTZ4NV9CMzJ4NV9TSElGVCkpKQotKyAgICAjZW5kaWYKLSsKLSsgICAgc3RhdGljIF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIgYmxlbmRfbGNkMTZfdnN4KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXImIHNy YywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyJiBkc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciYgbWFzaywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyJiBzcmNBKSB7Ci0rICAgICAgICAvLyBHZXQgdGhlIFIsRyxCIG9mIGVh Y2ggMTZiaXQgbWFzayBwaXhlbCwgYWxsIGFsaWduZWQgdG8gNS1iaXQgcG9zaXRpb25zLgotKyAg ICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHIgPSB2ZWNfYW5kKFNrUGFja2VkUjE2eDVUb1Vu bWFza2VkUjMyeDVfVlNYKG1hc2spLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoMHgxRiA8PCBTS19SMzJfU0hJRlQp KSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgZyA9IHZlY19hbmQoU2tQYWNrZWRH MTZ4NVRvVW5tYXNrZWRHMzJ4NV9WU1gobWFzayksCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KSgweDFGIDw8IFNLX0cz Ml9TSElGVCkpKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBiID0gdmVjX2FuZChT a1BhY2tlZEIxNng1VG9Vbm1hc2tlZEIzMng1X1ZTWChtYXNrKSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKDB4MUYg PDwgU0tfQjMyX1NISUZUKSkpOwotKwotKyAgICAgICAgLy8gYSBuZWVkcyB0byBiZSBlaXRoZXIg dGhlIG1pbiBvciB0aGUgbWF4IG9mIHRoZSBMQ0QgY292ZXJhZ2VzLCBkZXBlbmRpbmcgb24gc3Jj QSA8IGRzdEEuCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgckEgPSB2ZWNfc2wociwg dmVjX3NwbGF0cygodW5zaWduZWQgaW50KShTS19BMzJfU0hJRlQgLSBTS19SMzJfU0hJRlQpKSk7 Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgZ0EgPSB2ZWNfc2woZywgdmVjX3NwbGF0 cygodW5zaWduZWQgaW50KShTS19BMzJfU0hJRlQgLSBTS19HMzJfU0hJRlQpKSk7Ci0rICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgYkEgPSB2ZWNfc2woYiwgdmVjX3NwbGF0cygodW5zaWdu ZWQgaW50KShTS19BMzJfU0hJRlQgLSBTS19CMzJfU0hJRlQpKSk7Ci0rICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyIGFNaW4gPSB2ZWNfbWluKHZlY19taW4oKF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIpckEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdBKSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpYkEp OwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBhTWF4ID0gdmVjX21heCh2ZWNfbWF4 KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXJBLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilnQSks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyKWJBKTsKLSsgICAgICAgIC8vIHNyY0EgaGFzIGJlZW4gYmlhc2VkIHRv IFswLTI1Nl07IGNvbXBhcmUgc3JjQSBhZ2FpbnN0IChkc3RBKzEpLgotKyAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgaW50IGRzdEEgPSB2ZWNfYW5kKHZlY19hZGQoKF9fdmVjdG9yIHVuc2lnbmVk IGludClkc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKDEgPDwgU0tfQTMyX1NISUZUKSkpLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcGxhdHMo KHVuc2lnbmVkIGludClTS19BMzJfTUFTSykpOwotKyAgICAgICAgX192ZWN0b3IgX19ib29sIGlu dCBhTFQgPSB2ZWNfY21wbHQoKF9fdmVjdG9yIHNpZ25lZCBpbnQpc3JjQSwgKF9fdmVjdG9yIHNp Z25lZCBpbnQpZHN0QSk7Ci0rICAgICAgICAvLyBhID0gKGFNaW4gJiBhTFQpIHwgKGFNYXggJiB+ YUxUKQotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBhID0gdmVjX29yKHZlY19hbmQo YU1pbiwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpYUxUKSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2ZWNfYW5kYyhhTWF4LCAoX192ZWN0b3IgdW5zaWduZWQg Y2hhcilhTFQpKTsKLSsKLSsgICAgICAgIC8vIFBhY2sgdGhlIDQgMTYtYml0IG1hc2sgcGl4ZWxz IGludG8gNCAzMi1iaXQgcGl4ZWxzIChtMEEsIG0wUiwgbTBHLCBtMEIsIC4uLikuCi0rICAgICAg ICBtYXNrID0gdmVjX29yKHZlY19vcihhLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilyKSwKLSsg ICAgICAgICAgICAgICAgICAgICAgdmVjX29yKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWcsIChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKWIpKTsKLSsKLSsgICAgICAgIC8vIEludGVybGVhdmUgaW50 byAxNi1iaXQgd29yZHMuCi0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHpl cm9zID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKLSsgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IG1hc2tMbyA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2Vo KG1hc2ssIHplcm9zKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IG1hc2tIaSA9 IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VsKG1hc2ssIHplcm9zKTsKLSsKLSsg ICAgICAgIC8vIFVwc2NhbGUgMC4uMzEgLT4gMC4uMzIgYnkgYWRkaW5nIChtYXNrID4+IDQpLgot KyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjQgPSB2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBzaG9ydCk0KTsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IHY4ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCk7Ci0rICAgICAgICBjb25zdCBfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCB2NSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTUpOwot KyAgICAgICAgbWFza0xvID0gdmVjX2FkZChtYXNrTG8sIHZlY19zcihtYXNrTG8sIHY0KSk7Ci0r ICAgICAgICBtYXNrSGkgPSB2ZWNfYWRkKG1hc2tIaSwgdmVjX3NyKG1hc2tIaSwgdjQpKTsKLSsK LSsgICAgICAgIC8vIE11bHRpcGx5IGJ5IHNyY0EgcGVyIDE2LWJpdCBsYW5lLgotKyAgICAgICAg bWFza0xvID0gdmVjX211bChtYXNrTG8sIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClzcmNBKTsK LSsgICAgICAgIG1hc2tIaSA9IHZlY19tdWwobWFza0hpLCAoX192ZWN0b3IgdW5zaWduZWQgc2hv cnQpc3JjQSk7Ci0rICAgICAgICAvLyBEaXZpZGUgYnkgMjU2IChyaWdodC1zaGlmdCA4KS4KLSsg ICAgICAgIG1hc2tMbyA9IHZlY19zcihtYXNrTG8sIHY4KTsKLSsgICAgICAgIG1hc2tIaSA9IHZl Y19zcihtYXNrSGksIHY4KTsKLSsKLSsgICAgICAgIC8vIFVucGFjayBkc3QgaW50byAxNi1iaXQg d29yZHMuCi0rICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgZHN0TG8gPSAoX192ZWN0b3Ig c2lnbmVkIHNob3J0KXZlY19tZXJnZWgoZHN0LCB6ZXJvcyk7Ci0rICAgICAgICBfX3ZlY3RvciBz aWduZWQgc2hvcnQgZHN0SGkgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19tZXJnZWwoZHN0 LCB6ZXJvcyk7Ci0rICAgICAgICAvLyBtYXNrID0gKHNyYyAtIGRzdCkgKiBtYXNrCi0rICAgICAg ICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgc3JjUyA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpc3Jj OwotKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IG1Mb1MgPSB2ZWNfbXVsKChfX3ZlY3Rv ciBzaWduZWQgc2hvcnQpbWFza0xvLCB2ZWNfc3ViKHNyY1MsIGRzdExvKSk7Ci0rICAgICAgICBf X3ZlY3RvciBzaWduZWQgc2hvcnQgbUhpUyA9IHZlY19tdWwoKF9fdmVjdG9yIHNpZ25lZCBzaG9y dCltYXNrSGksIHZlY19zdWIoc3JjUywgZHN0SGkpKTsKLSsgICAgICAgIC8vIGFyaXRobWV0aWMg c2hpZnQgcmlnaHQgYnkgNQotKyAgICAgICAgbUxvUyA9IHZlY19zcmEobUxvUywgKF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0KXY1KTsKLSsgICAgICAgIG1IaVMgPSB2ZWNfc3JhKG1IaVMsIChfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCl2NSk7Ci0rICAgICAgICAvLyByZXN1bHQgPSBkc3QgKyAoKHNy YyAtIGRzdCkgKiBtYXNrID4+IDUpCi0rICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgcmVz TG8gPSB2ZWNfYWRkKGRzdExvLCBtTG9TKTsKLSsgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9y dCByZXNIaSA9IHZlY19hZGQoZHN0SGksIG1IaVMpOwotKyAgICAgICAgLy8gUGFjayAxNi1iaXQg c2lnbmVkIC0+IDgtYml0IHVuc2lnbmVkIHdpdGggc2F0dXJhdGlvbi4KLSsgICAgICAgIHJldHVy biB2ZWNfcGFja3N1KHJlc0xvLCByZXNIaSk7Ci0rICAgIH0KLSsKLSsgICAgc3RhdGljIF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgYmxlbmRfbGNkMTZfb3BhcXVlX3ZzeChfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyJiBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXImIGRzdCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgY2hhciYgbWFzaykgewotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHIg PSB2ZWNfYW5kKFNrUGFja2VkUjE2eDVUb1VubWFza2VkUjMyeDVfVlNYKG1hc2spLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVk IGludCkoMHgxRiA8PCBTS19SMzJfU0hJRlQpKSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBpbnQgZyA9IHZlY19hbmQoU2tQYWNrZWRHMTZ4NVRvVW5tYXNrZWRHMzJ4NV9WU1gobWFzayks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygo dW5zaWduZWQgaW50KSgweDFGIDw8IFNLX0czMl9TSElGVCkpKTsKLSsgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIGludCBiID0gdmVjX2FuZChTa1BhY2tlZEIxNng1VG9Vbm1hc2tlZEIzMng1X1ZT WChtYXNrKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBpbnQpKDB4MUYgPDwgU0tfQjMyX1NISUZUKSkpOwotKwotKyAgICAg ICAgLy8gT3BhcXVlIHNyYzogYSA9IG1heChyLCBnLCBiKSBzaGlmdGVkIHRvIGFscGhhIGxhbmUu Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgckEgPSB2ZWNfc2wociwgdmVjX3NwbGF0 cygodW5zaWduZWQgaW50KShTS19BMzJfU0hJRlQgLSBTS19SMzJfU0hJRlQpKSk7Ci0rICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgZ0EgPSB2ZWNfc2woZywgdmVjX3NwbGF0cygodW5zaWdu ZWQgaW50KShTS19BMzJfU0hJRlQgLSBTS19HMzJfU0hJRlQpKSk7Ci0rICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBpbnQgYkEgPSB2ZWNfc2woYiwgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KShT S19BMzJfU0hJRlQgLSBTS19CMzJfU0hJRlQpKSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyIGEgPSB2ZWNfbWF4KHZlY19tYXgoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpckEsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyKWdBKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpYkEpOwotKwotKyAgICAgICAgbWFz ayA9IHZlY19vcih2ZWNfb3IoYSwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpciksCi0rICAgICAg ICAgICAgICAgICAgICAgIHZlY19vcigoX192ZWN0b3IgdW5zaWduZWQgY2hhcilnLCAoX192ZWN0 b3IgdW5zaWduZWQgY2hhciliKSk7Ci0rCi0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyIHplcm9zID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKLSsgICAgICAgIF9f dmVjdG9yIHVuc2lnbmVkIHNob3J0IG1hc2tMbyA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2 ZWNfbWVyZ2VoKG1hc2ssIHplcm9zKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IG1hc2tIaSA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VsKG1hc2ssIHplcm9z KTsKLSsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHY0ID0gdmVjX3Nw bGF0cygodW5zaWduZWQgc2hvcnQpNCk7Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCB2NSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTUpOwotKyAgICAgICAgbWFz a0xvID0gdmVjX2FkZChtYXNrTG8sIHZlY19zcihtYXNrTG8sIHY0KSk7Ci0rICAgICAgICBtYXNr SGkgPSB2ZWNfYWRkKG1hc2tIaSwgdmVjX3NyKG1hc2tIaSwgdjQpKTsKLSsKLSsgICAgICAgIF9f dmVjdG9yIHNpZ25lZCBzaG9ydCBkc3RMbyA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpdmVjX21l cmdlaChkc3QsIHplcm9zKTsKLSsgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBkc3RIaSA9 IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpdmVjX21lcmdlbChkc3QsIHplcm9zKTsKLSsgICAgICAg IF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBzcmNTID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydClzcmM7 Ci0rICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgbUxvUyA9IHZlY19tdWwoKF9fdmVjdG9y IHNpZ25lZCBzaG9ydCltYXNrTG8sIHZlY19zdWIoc3JjUywgZHN0TG8pKTsKLSsgICAgICAgIF9f dmVjdG9yIHNpZ25lZCBzaG9ydCBtSGlTID0gdmVjX211bCgoX192ZWN0b3Igc2lnbmVkIHNob3J0 KW1hc2tIaSwgdmVjX3N1YihzcmNTLCBkc3RIaSkpOwotKyAgICAgICAgbUxvUyA9IHZlY19zcmEo bUxvUywgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXY1KTsKLSsgICAgICAgIG1IaVMgPSB2ZWNf c3JhKG1IaVMsIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2NSk7Ci0rICAgICAgICBfX3ZlY3Rv ciBzaWduZWQgc2hvcnQgcmVzTG8gPSB2ZWNfYWRkKGRzdExvLCBtTG9TKTsKLSsgICAgICAgIF9f dmVjdG9yIHNpZ25lZCBzaG9ydCByZXNIaSA9IHZlY19hZGQoZHN0SGksIG1IaVMpOwotKyAgICAg ICAgcmV0dXJuIHZlY19wYWNrc3UocmVzTG8sIHJlc0hpKTsKLSsgICAgfQotKwotKyAgICB2b2lk IGJsaXRfcm93X2xjZDE2KFNrUE1Db2xvciBkc3RbXSwgY29uc3QgdWludDE2X3QgbWFza1tdLCBT a0NvbG9yIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIFNrUE1Db2xv cikgewotKyAgICAgICAgaWYgKHdpZHRoIDw9IDApIHsKLSsgICAgICAgICAgICByZXR1cm47Ci0r ICAgICAgICB9Ci0rICAgICAgICBpbnQgc3JjQSA9IFNrQ29sb3JHZXRBKHNyYyk7Ci0rICAgICAg ICBpbnQgc3JjUiA9IFNrQ29sb3JHZXRSKHNyYyk7Ci0rICAgICAgICBpbnQgc3JjRyA9IFNrQ29s b3JHZXRHKHNyYyk7Ci0rICAgICAgICBpbnQgc3JjQiA9IFNrQ29sb3JHZXRCKHNyYyk7Ci0rICAg ICAgICBzcmNBID0gU2tBbHBoYTI1NVRvMjU2KHNyY0EpOwotKwotKyAgICAgICAgaWYgKHdpZHRo ID49IDQpIHsKLSsgICAgICAgICAgICBTa0FTU0VSVChTa0lzQWxpZ240KCh1aW50cHRyX3QpIGRz dCkpOwotKyAgICAgICAgICAgIHdoaWxlICghU2tJc0FsaWduMTYoKHVpbnRwdHJfdCkgZHN0KSkg ewotKyAgICAgICAgICAgICAgICAqZHN0ID0gYmxlbmRfbGNkMTYoc3JjQSwgc3JjUiwgc3JjRywg c3JjQiwgKmRzdCwgKm1hc2spOwotKyAgICAgICAgICAgICAgICBtYXNrKys7IGRzdCsrOyB3aWR0 aC0tOwotKyAgICAgICAgICAgIH0KLSsKLSsgICAgICAgICAgICAvLyBSZXBsaWNhdGUgc291cmNl IGFjcm9zcyA0IGxhbmVzLCB0aGVuIHVucGFjayBsb3cgaGFsZiB0byBpbnRlcmxlYXZlZCAxNi1i aXQuCi0rICAgICAgICAgICAgdWludDMyX3Qgc3JjUE0gPSBTa1BhY2tBUkdCMzIoMHhGRiwgc3Jj Uiwgc3JjRywgc3JjQik7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHNyY192 MzIgPSB2ZWNfc3BsYXRzKHNyY1BNKTsKLSsgICAgICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNp Z25lZCBjaGFyIHplcm9zID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKLSsgICAgICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHNyY192ID0gdmVjX21lcmdlaCgoX192ZWN0b3Ig dW5zaWduZWQgY2hhcilzcmNfdjMyLCB6ZXJvcyk7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgY2hhciBzcmNBX3YgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBzaG9ydClzcmNBKTsKLSsKLSsgICAgICAgICAgICB3aGlsZSAod2lkdGggPj0gNCkg ewotKyAgICAgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGRzdF92ID0gdmVjX3hs KDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilkc3QpOwotKyAgICAgICAgICAgICAgICAvLyBMb2Fk IDggYnl0ZXMgKDR4IHVpbnQxNiBtYXNrKSBpbnRvIGxvdyBoYWxmIG9mIHZlY3Rvci4KLSsgICAg ICAgICAgICAgICAgdWludDY0X3QgbWxvOwotKyAgICAgICAgICAgICAgICBtZW1jcHkoJm1sbywg bWFzaywgc2l6ZW9mKG1sbykpOwotKyAgICAgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBs b25nIGxvbmcgbWFza19sb3cgPQotKyAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2ln bmVkIGxvbmcgbG9uZyl7bWxvLCAwfTsKLSsgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgY2hhciBtYXNrX3YgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhciltYXNrX2xvdzsKLSsKLSsg ICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIG1hc2sgdmFsdWVzIGFyZSB6ZXJvIChza2lw IGJsZW5kaW5nIGlmIHNvKS4KLSsgICAgICAgICAgICAgICAgaWYgKCF2ZWNfYWxsX2VxKChfX3Zl Y3RvciB1bnNpZ25lZCBsb25nIGxvbmcpbWFza192LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgbG9uZyBsb25nKTApKSkgewotKyAgICAgICAg ICAgICAgICAgICAgLy8gVW5wYWNrIGxvdyA4IGJ5dGVzIG9mIG1hc2sgKDR4IHVpbnQxNikgaW50 byA0eCB1aW50MzIgKHdpdGggemVyb3MpLgotKyAgICAgICAgICAgICAgICAgICAgLy8gWmVyby1l eHRlbmQgdGhlIDQgdWludDE2IG1hc2tzIHRvIDQgdWludDMyICgxNi1iaXQtZ3JhbnVsYXJpdHkK LSsgICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlLCBtYXRjaGluZyBTU0UyJ3MgX21tX3VucGFj a2xvX2VwaTE2KTsgYSBjaGFyLWdyYW51bGFyaXR5Ci0rICAgICAgICAgICAgICAgICAgICAvLyBt ZXJnZSB3b3VsZCBieXRlLXN0cmV0Y2ggdGhlIFJHQjU2NSB2YWx1ZSBhbmQgbWlzcGxhY2UgdGhl IHNoaWZ0cy4KLSsgICAgICAgICAgICAgICAgICAgIG1hc2tfdiA9IChfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyKXZlY19tZXJnZWgoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KW1hc2tfdiwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpemVyb3MpOwotKyAgICAgICAgICAgICAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgY2hhciByZXN1bHQgPQotKyAgICAgICAgICAgICAgICAgICAgICAg IGJsZW5kX2xjZDE2X3ZzeChzcmNfdiwgZHN0X3YsIG1hc2tfdiwgc3JjQV92KTsKLSsgICAgICAg ICAgICAgICAgICAgIHZlY194c3QocmVzdWx0LCAwLCAodW5zaWduZWQgY2hhciopZHN0KTsKLSsg ICAgICAgICAgICAgICAgfQotKyAgICAgICAgICAgICAgICBkc3QgKz0gNDsgbWFzayArPSA0OyB3 aWR0aCAtPSA0OwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsKLSsgICAgICAgIHdoaWxl ICh3aWR0aCA+IDApIHsKLSsgICAgICAgICAgICAqZHN0ID0gYmxlbmRfbGNkMTYoc3JjQSwgc3Jj Uiwgc3JjRywgc3JjQiwgKmRzdCwgKm1hc2spOwotKyAgICAgICAgICAgIG1hc2srKzsgZHN0Kys7 IHdpZHRoLS07Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBibGl0X3Jvd19sY2Qx Nl9vcGFxdWUoU2tQTUNvbG9yIGRzdFtdLCBjb25zdCB1aW50MTZfdCBtYXNrW10sCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNrQ29sb3Igc3JjLCBpbnQgd2lkdGgsIFNrUE1Db2xv ciBvcGFxdWVEc3QpIHsKLSsgICAgICAgIGlmICh3aWR0aCA8PSAwKSB7Ci0rICAgICAgICAgICAg cmV0dXJuOwotKyAgICAgICAgfQotKyAgICAgICAgaW50IHNyY1IgPSBTa0NvbG9yR2V0UihzcmMp OwotKyAgICAgICAgaW50IHNyY0cgPSBTa0NvbG9yR2V0RyhzcmMpOwotKyAgICAgICAgaW50IHNy Y0IgPSBTa0NvbG9yR2V0QihzcmMpOwotKwotKyAgICAgICAgaWYgKHdpZHRoID49IDQpIHsKLSsg ICAgICAgICAgICBTa0FTU0VSVChTa0lzQWxpZ240KCh1aW50cHRyX3QpIGRzdCkpOwotKyAgICAg ICAgICAgIHdoaWxlICghU2tJc0FsaWduMTYoKHVpbnRwdHJfdCkgZHN0KSkgewotKyAgICAgICAg ICAgICAgICAqZHN0ID0gYmxlbmRfbGNkMTZfb3BhcXVlKHNyY1IsIHNyY0csIHNyY0IsICpkc3Qs ICptYXNrLCBvcGFxdWVEc3QpOwotKyAgICAgICAgICAgICAgICBtYXNrKys7IGRzdCsrOyB3aWR0 aC0tOwotKyAgICAgICAgICAgIH0KLSsKLSsgICAgICAgICAgICB1aW50MzJfdCBzcmNQTSA9IFNr UGFja0FSR0IzMigweEZGLCBzcmNSLCBzcmNHLCBzcmNCKTsKLSsgICAgICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBpbnQgc3JjX3YzMiA9IHZlY19zcGxhdHMoc3JjUE0pOwotKyAgICAgICAgICAg IGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgemVyb3MgPSB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBjaGFyKTApOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc3JjX3YgPSB2 ZWNfbWVyZ2VoKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXNyY192MzIsIHplcm9zKTsKLSsKLSsg ICAgICAgICAgICB3aGlsZSAod2lkdGggPj0gNCkgewotKyAgICAgICAgICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyIGRzdF92ID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilk c3QpOwotKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtbG87Ci0rICAgICAgICAgICAgICAgIG1l bWNweSgmbWxvLCBtYXNrLCBzaXplb2YobWxvKSk7Ci0rICAgICAgICAgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIGxvbmcgbG9uZyBtYXNrX2xvdyA9Ci0rICAgICAgICAgICAgICAgICAgICAoX192 ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXttbG8sIDB9OwotKyAgICAgICAgICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIG1hc2tfdiA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKW1hc2tf bG93OwotKwotKyAgICAgICAgICAgICAgICBpZiAoIXZlY19hbGxfZXEoKF9fdmVjdG9yIHVuc2ln bmVkIGxvbmcgbG9uZyltYXNrX3YsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBsb25nIGxvbmcpMCkpKSB7Ci0rICAgICAgICAgICAgICAgICAg ICAvLyBaZXJvLWV4dGVuZCB0aGUgNCB1aW50MTYgbWFza3MgdG8gNCB1aW50MzIgKDE2LWJpdC1n cmFudWxhcml0eQotKyAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UsIG1hdGNoaW5nIFNTRTIn cyBfbW1fdW5wYWNrbG9fZXBpMTYpOyBhIGNoYXItZ3JhbnVsYXJpdHkKLSsgICAgICAgICAgICAg ICAgICAgIC8vIG1lcmdlIHdvdWxkIGJ5dGUtc3RyZXRjaCB0aGUgUkdCNTY1IHZhbHVlIGFuZCBt aXNwbGFjZSB0aGUgc2hpZnRzLgotKyAgICAgICAgICAgICAgICAgICAgbWFza192ID0gKF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIpdmVjX21lcmdlaCgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpbWFz a192LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl6ZXJvcyk7Ci0rICAgICAgICAg ICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHJlc3VsdCA9Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgYmxlbmRfbGNkMTZfb3BhcXVlX3ZzeChzcmNfdiwgZHN0X3YsIG1hc2tfdik7 Ci0rICAgICAgICAgICAgICAgICAgICB2ZWNfeHN0KHJlc3VsdCwgMCwgKHVuc2lnbmVkIGNoYXIq KWRzdCk7Ci0rICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAgICAgZHN0ICs9IDQ7IG1h c2sgKz0gNDsgd2lkdGggLT0gNDsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rCi0rICAg ICAgICB3aGlsZSAod2lkdGggPiAwKSB7Ci0rICAgICAgICAgICAgKmRzdCA9IGJsZW5kX2xjZDE2 X29wYXF1ZShzcmNSLCBzcmNHLCBzcmNCLCAqZHN0LCAqbWFzaywgb3BhcXVlRHN0KTsKLSsgICAg ICAgICAgICBtYXNrKys7IGRzdCsrOyB3aWR0aC0tOwotKyAgICAgICAgfQotKyAgICB9Ci0rCi0g I2VsaWYgZGVmaW5lZChTS19BUk1fSEFTX05FT04pCi0gICAgICNpbmNsdWRlIDxhcm1fbmVvbi5o PgotIAotZGlmZiAtLWdpdCBhL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3Rh dGVfb3B0cy5oIGIvZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRz LmgKLWluZGV4IDZkMDFhMmY0NDU4Zi4uODdiMTYwZWQ3YTFlIDEwMDY0NAotLS0tIGEvZ2Z4L3Nr aWEvc2tpYS9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRzLmgKLSsrKyBiL2dmeC9za2lh L3NraWEvc3JjL29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfb3B0cy5oCi1AQCAtMjksNiArMjksOCBA QAotICAgICAjaW5jbHVkZSA8bGFzeGludHJpbi5oPgotICNlbGlmIFNLX0NQVV9MU1hfTEVWRUwg Pj0gU0tfQ1BVX0xTWF9MRVZFTF9MU1gKLSAgICAgI2luY2x1ZGUgPGxzeGludHJpbi5oPgotKyNl bGlmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQotKyAgICAjaW5jbHVk ZSA8YWx0aXZlYy5oPgotICNlbmRpZgotIAotIG5hbWVzcGFjZSBTS19PUFRTX05TIHsKLUBAIC0y NjAsNiArMjYyLDE2OCBAQCBzdGF0aWMgdm9pZCBkZWNvZGVfcGFja2VkX2Nvb3JkaW5hdGVzX2Fu ZF93ZWlnaHQoVTMyIHBhY2tlZCwgT3V0KiB2MCwgT3V0KiB2MSwgTwotICAgICAgICAgfQotICAg ICB9Ci0gCi0rI2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCi0r Ci0rICAgIC8vIEhlbHBlcjogc2NhbGFyIHVpbnQzMl90IC0+IDE2LWJ5dGUgdmVjdG9yIHdpdGgg eCBpbiBsb3cgMzIgYml0cywgemVybyBlbHNld2hlcmUuCi0rICAgIC8vIEVxdWl2YWxlbnQgb2Yg eDg2J3MgX21tX2N2dHNpMzJfc2kxMjguCi0rICAgIHN0YXRpYyBpbmxpbmUgX192ZWN0b3IgdW5z aWduZWQgY2hhciB2c3hfY3Z0X3UzMl90b192ZWModWludDMyX3QgeCkgewotKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgaW50IHYgPSAoX192ZWN0b3IgdW5zaWduZWQgaW50KXt4LCAwLCAwLCAw fTsKLSsgICAgICAgIHJldHVybiAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil2OwotKyAgICB9Ci0r Ci0rICAgIC8vIEhlbHBlcjogUFBDNjQgVlNYIGVxdWl2YWxlbnQgb2YgeDg2J3MgX21tX21hZGR1 YnNfZXBpMTYuIE11bHRpcGxpZXMgcGFpcnMgb2YKLSsgICAgLy8gKHVuc2lnbmVkIGJ5dGUsIHNp Z25lZCBieXRlKSBhbmQgYWRkcyBhZGphY2VudCBwYWlycyB0byBwcm9kdWNlIDE2LWJpdCBzaWdu ZWQKLSsgICAgLy8gdmFsdWVzLCBzYXR1cmF0aW5nIHRvIGludDE2LiBJbXBsZW1lbnRhdGlvbiB0 cmFuc2NyaWJlcyB0aGUgR0NDIHBwY193cmFwcGVycwotKyAgICAvLyB0bW1pbnRyaW4uaCBzZXF1 ZW5jZSBmb3IgZW5kaWFubmVzcyBjb3JyZWN0bmVzcyBvbiBMRSBQUEM2NC4KLSsgICAgc3RhdGlj IGlubGluZSBfX3ZlY3RvciBzaWduZWQgc2hvcnQgdnN4X21hZGR1YnNfZXBpMTYoX192ZWN0b3Ig dW5zaWduZWQgY2hhciBBLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBjaGFyIEIpIHsKLSsgICAgICAg IF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2ZmID0gdmVjX3NwbGF0cygoc2lnbmVkIHNob3J0KTB4 MDBGRik7Ci0rICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgX19DID0gdmVjX2FuZCh2ZWNf dW5wYWNraCgoX192ZWN0b3Igc2lnbmVkIGNoYXIpQSksIF9fZmYpOwotKyAgICAgICAgX192ZWN0 b3Igc2lnbmVkIHNob3J0IF9fRCA9IHZlY19hbmQodmVjX3VucGFja2woKF9fdmVjdG9yIHNpZ25l ZCBjaGFyKUEpLCBfX2ZmKTsKLSsgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0UgPSB2 ZWNfdW5wYWNraChCKTsKLSsgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0YgPSB2ZWNf dW5wYWNrbChCKTsKLSsgICAgICAgIF9fQyA9IHZlY19tdWwoX19DLCBfX0UpOwotKyAgICAgICAg X19EID0gdmVjX211bChfX0QsIF9fRik7Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyIF9fb2RkcyAgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7Ci0rICAgICAgICAgICAg MCwxLCA0LDUsIDgsOSwgMTIsMTMsICAxNiwxNywgMjAsMjEsIDI0LDI1LCAyOCwyOQotKyAgICAg ICAgfTsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19ldmVucyA9IChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKLSsgICAgICAgICAgICAyLDMsIDYsNywgMTAsMTEsIDE0 LDE1LCAgMTgsMTksIDIyLDIzLCAyNiwyNywgMzAsMzEKLSsgICAgICAgIH07Ci0rICAgICAgICBf X0UgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBj aGFyKV9fQywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpX19ELCBfX29kZHMpOwotKyAgICAgICAgX19GID0gKF9f dmVjdG9yIHNpZ25lZCBzaG9ydCl2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilfX0Ms Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyKV9fRCwgX19ldmVucyk7Ci0rICAgICAgICByZXR1cm4gdmVjX2FkZHMo X19FLCBfX0YpOwotKyAgICB9Ci0rCi0rICAgIC8qbm90IHN0YXRpYyovIGlubGluZQotKyAgICB2 b2lkIFMzMl9hbHBoYV9EMzJfZmlsdGVyX0RYKGNvbnN0IFNrQml0bWFwUHJvY1N0YXRlJiBzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiB4eSwgaW50 IGNvdW50LCB1aW50MzJfdCogY29sb3JzKSB7Ci0rICAgICAgICBTa0FTU0VSVChjb3VudCA+IDAg JiYgY29sb3JzICE9IG51bGxwdHIpOwotKyAgICAgICAgU2tBU1NFUlQocy5mQmlsZXJwKTsKLSsg ICAgICAgIFNrQVNTRVJUKGtOMzJfU2tDb2xvclR5cGUgPT0gcy5mUGl4bWFwLmNvbG9yVHlwZSgp KTsKLSsgICAgICAgIFNrQVNTRVJUKHMuZkFscGhhU2NhbGUgPD0gMjU2KTsKLSsKLSsgICAgICAg IC8vIGludGVycG9sYXRlX2luX3goKSBpcyB0aGUgY3J1eCBvZiB0aGUgaW1wbGVtZW50YXRpb24s IGludGVycG9sYXRpbmcgaW4gWAotKyAgICAgICAgLy8gZm9yIHVwIHRvIHR3byBvdXRwdXQgcGl4 ZWxzIChBIGFuZCBCKSB1c2luZyB2c3hfbWFkZHVic19lcGkxNigpLgotKyAgICAgICAgYXV0byBp bnRlcnBvbGF0ZV9pbl94ID0gW10odWludDMyX3QgQTAsIHVpbnQzMl90IEExLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQjAsIHVpbnQzMl90IEIxLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVkIGNoYXIgaW50 ZXJsYWNlZF94X3dlaWdodHMpIHsKLSsgICAgICAgICAgICAvLyBfbW1fdW5wYWNrbG9fZXBpOChf bW1fY3Z0c2kzMl9zaTEyOChBMCksIF9tbV9jdnRzaTMyX3NpMTI4KEExKSkKLSsgICAgICAgICAg ICAvLyA9IHZlY19tZXJnZWggb24gdWNoYXIsIHNpbmNlIHRoZSBpbnB1dCB2ZWN0b3JzIGhhdmUg b25seSB0aGUgbG93IDMyIGJpdHMgc2V0LgotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIgaW50ZXJsYWNlZF9BID0gdmVjX21lcmdlaCh2c3hfY3Z0X3UzMl90b192ZWMoQTApLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnN4X2N2dF91MzJfdG9fdmVjKEExKSk7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgY2hhciBpbnRlcmxhY2VkX0IgPSB2ZWNfbWVyZ2VoKHZzeF9jdnRfdTMyX3RvX3ZlYyhC MCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2c3hfY3Z0X3UzMl90b192ZWMoQjEpKTsKLSsgICAgICAgICAgICAvLyBfbW1f dW5wYWNrbG9fZXBpNjQgPSB2ZWNfbWVyZ2VoIG9uIGxvbmcgbG9uZy4KLSsgICAgICAgICAgICBf X3ZlY3RvciBsb25nIGxvbmcgbG82NCA9IHZlY19tZXJnZWgoKF9fdmVjdG9yIGxvbmcgbG9uZylp bnRlcmxhY2VkX0EsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChfX3ZlY3RvciBsb25nIGxvbmcpaW50ZXJsYWNlZF9CKTsKLSsgICAgICAgICAgICBy ZXR1cm4gdnN4X21hZGR1YnNfZXBpMTYoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpbG82NCwgaW50 ZXJsYWNlZF94X3dlaWdodHMpOwotKyAgICAgICAgfTsKLSsKLSsgICAgICAgIC8vIEludGVycG9s YXRlIHtBMC4uQTN9IC0tPiBvdXRwdXQgcGl4ZWwgQSwgYW5kIHtCMC4uQjN9IC0tPiBvdXRwdXQg cGl4ZWwgQi4KLSsgICAgICAgIC8vIFJldHVybnMgdHdvIHBpeGVscywgd2l0aCBlYWNoIGNvbG9y IGNoYW5uZWwgaW4gYSAxNi1iaXQgbGFuZSBvZiB0aGUgcmVzdWx0LgotKyAgICAgICAgYXV0byBp bnRlcnBvbGF0ZV9pbl94X2FuZF95ID0gWyZdKHVpbnQzMl90IEEwLCB1aW50MzJfdCBBMSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBBMiwgdWlu dDMyX3QgQTMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgQjAsIHVpbnQzMl90IEIxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IEIyLCB1aW50MzJfdCBCMywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQgY2hhciBpbnRlcmxhY2VkX3hf d2VpZ2h0cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg d3kpIHsKLSsgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgdG9wID0gaW50ZXJwb2xh dGVfaW5feChBMCxBMSwgQjAsQjEsIGludGVybGFjZWRfeF93ZWlnaHRzKTsKLSsgICAgICAgICAg ICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgYm90ID0gaW50ZXJwb2xhdGVfaW5feChBMixBMywgQjIs QjMsIGludGVybGFjZWRfeF93ZWlnaHRzKTsKLSsKLSsgICAgICAgICAgICAvLyAxNip0b3AgKyAo Ym90LXRvcCkqd3ksIG1pcnJvcmluZyB0aGUgU1NFMiBmb3JtIChzYXZlcyBvbmUgbXVsdGlwbHkg dnMuIHRoZQotKyAgICAgICAgICAgIC8vIHN0cmFpZ2h0Zm9yd2FyZCB0b3AqKDE2LXd5KSArIGJv dCp3eSkuCi0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjQgPSB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBzaG9ydCk0KTsKLSsgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hv cnQgd3lfdiA9IHZlY19zcGxhdHMoKHNpZ25lZCBzaG9ydCl3eSk7Ci0rICAgICAgICAgICAgX192 ZWN0b3Igc2lnbmVkIHNob3J0IHB4ID0gdmVjX2FkZCh2ZWNfc2wodG9wLCB2NCksIHZlY19tdWwo dmVjX3N1Yihib3QsIHRvcCksIHd5X3YpKTsKLSsKLSsgICAgICAgICAgICAvLyBTY2FsZSBkb3du IGJ5IHRvdGFsIG1heCB3ZWlnaHQgMTZ4MTYgPSAyNTYuCi0rICAgICAgICAgICAgcHggPSAoX192 ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19zcigoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpcHgsIHZl Y19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTgpKTsKLSsKLSsgICAgICAgICAgICAvLyBTY2FsZSBi eSBhbHBoYSBpZiBuZWVkZWQuCi0rICAgICAgICAgICAgaWYgKHMuZkFscGhhU2NhbGUgPCAyNTYp IHsKLSsgICAgICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHNjYWxlX3YgPSB2ZWNf c3BsYXRzKChzaWduZWQgc2hvcnQpcy5mQWxwaGFTY2FsZSk7Ci0rICAgICAgICAgICAgICAgIHB4 ID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydCl2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 KXZlY19tdWwocHgsIHNjYWxlX3YpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTgpKTsKLSsgICAg ICAgICAgICB9Ci0rICAgICAgICAgICAgcmV0dXJuIHB4OwotKyAgICAgICAgfTsKLSsKLSsgICAg ICAgIC8vIFdlJ3JlIGluIF9EWCBtb2RlIGhlcmUsIHNvIHdlJ3JlIG9ubHkgdmFyeWluZyBpbiBY LgotKyAgICAgICAgLy8gVGhhdCBtZWFucyB0aGUgZmlyc3QgZW50cnkgb2YgeHkgaXMgb3VyIGNv bnN0YW50IHBhaXIgb2YgWSBjb29yZGluYXRlcyBhbmQgd2VpZ2h0IGluIFkuCi0rICAgICAgICBp bnQgeTAsIHkxLCB3eTsKLSsgICAgICAgIGRlY29kZV9wYWNrZWRfY29vcmRpbmF0ZXNfYW5kX3dl aWdodCgqeHkrKywgJnkwLCAmeTEsICZ3eSk7Ci0rCi0rICAgICAgICBhdXRvIHJvdzAgPSAoY29u c3QgdWludDMyX3QqKSgoY29uc3QgdWludDhfdCopcy5mUGl4bWFwLmFkZHIoKSArIHkwICogcy5m UGl4bWFwLnJvd0J5dGVzKCkpLAotKyAgICAgICAgICAgICByb3cxID0gKGNvbnN0IHVpbnQzMl90 KikoKGNvbnN0IHVpbnQ4X3QqKXMuZlBpeG1hcC5hZGRyKCkgKyB5MSAqIHMuZlBpeG1hcC5yb3dC eXRlcygpKTsKLSsKLSsgICAgICAgIHdoaWxlIChjb3VudCA+PSA0KSB7Ci0rICAgICAgICAgICAg Ly8gV2UgY2FuIHJlYWxseSBnZXQgZ29pbmcsIGxvYWRpbmcgNCBYLXBhaXJzIGF0IGEgdGltZSB0 byBwcm9kdWNlIDQgb3V0cHV0IHBpeGVscy4KLSsgICAgICAgICAgICBpbnQgeDBbNF0sCi0rICAg ICAgICAgICAgICAgIHgxWzRdOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCB3 eDsKLSsKLSsgICAgICAgICAgICAvLyBkZWNvZGVfcGFja2VkX2Nvb3JkaW5hdGVzX2FuZF93ZWln aHQoKSwgNHguCi0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHBhY2tlZCA9IChf X3ZlY3RvciB1bnNpZ25lZCBpbnQpdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKil4eSk7 Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHgwX3YgPSB2ZWNfc3IocGFja2Vk LCB2ZWNfc3BsYXRzKDE4dSkpOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCB4 MV92ID0gdmVjX2FuZChwYWNrZWQsIHZlY19zcGxhdHMoMHgzZmZmdSkpOwotKyAgICAgICAgICAg IHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpeDBfdiwgMCwgKHVuc2lnbmVkIGNoYXIq KXgwKTsKLSsgICAgICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXgxX3Ys IDAsICh1bnNpZ25lZCBjaGFyKil4MSk7Ci0rICAgICAgICAgICAgd3ggPSB2ZWNfYW5kKHZlY19z cihwYWNrZWQsIHZlY19zcGxhdHMoMTR1KSksIHZlY19zcGxhdHMoMHhmdSkpOyAgLy8gWzAsMTVd Ci0rCi0rICAgICAgICAgICAgLy8gU3BsYXQgZWFjaCB4IHdlaWdodCA0eCAoZm9yIGVhY2ggY29s b3IgY2hhbm5lbCkgYXMgd3IgZm9yIHBpeGVscyBvbiB0aGUgcmlnaHQgYXQgeDEsCi0rICAgICAg ICAgICAgLy8gYW5kIHNpeHRlZW4gbWludXMgdGhhdCBhcyB3bCBmb3IgcGl4ZWxzIG9uIHRoZSBs ZWZ0IGF0IHgwLgotKyAgICAgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgd3Jf bWFzayA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKLSsgICAgICAgICAgICAgICAgMCwwLDAs MCwgNCw0LDQsNCwgOCw4LDgsOCwgMTIsMTIsMTIsMTIKLSsgICAgICAgICAgICB9OwotKyAgICAg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgd3IgPSB2ZWNfcGVybSgoX192ZWN0b3IgdW5z aWduZWQgY2hhcil3eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXd4LCB3cl9tYXNrKTsKLSsgICAgICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHdsID0gdmVjX3N1Yih2ZWNfc3BsYXRzKCh1bnNp Z25lZCBjaGFyKTE2KSwgd3IpOwotKwotKyAgICAgICAgICAgIC8vIEludGVybGFjZSB3bCBhbmQg d3IgZm9yIHZzeF9tYWRkdWJzX2VwaTE2KCkuCi0rICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVk IGNoYXIgaW50ZXJsYWNlZF94X3dlaWdodHNfQUIgPSAoX192ZWN0b3Igc2lnbmVkIGNoYXIpdmVj X21lcmdlaCh3bCwgd3IpOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBjaGFyIGludGVy bGFjZWRfeF93ZWlnaHRzX0NEID0gKF9fdmVjdG9yIHNpZ25lZCBjaGFyKXZlY19tZXJnZWwod2ws IHdyKTsKLSsKLSsgICAgICAgICAgICBlbnVtIHsgQSxCLEMsRCB9OwotKwotKyAgICAgICAgICAg IF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBBQiA9IGludGVycG9sYXRlX2luX3hfYW5kX3koCi0rICAg ICAgICAgICAgICAgICAgICByb3cwW3gwW0FdXSwgcm93MFt4MVtBXV0sIHJvdzFbeDBbQV1dLCBy b3cxW3gxW0FdXSwKLSsgICAgICAgICAgICAgICAgICAgIHJvdzBbeDBbQl1dLCByb3cwW3gxW0Jd XSwgcm93MVt4MFtCXV0sIHJvdzFbeDFbQl1dLAotKyAgICAgICAgICAgICAgICAgICAgaW50ZXJs YWNlZF94X3dlaWdodHNfQUIsIHd5KTsKLSsgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hv cnQgQ0QgPSBpbnRlcnBvbGF0ZV9pbl94X2FuZF95KAotKyAgICAgICAgICAgICAgICAgICAgcm93 MFt4MFtDXV0sIHJvdzBbeDFbQ11dLCByb3cxW3gwW0NdXSwgcm93MVt4MVtDXV0sCi0rICAgICAg ICAgICAgICAgICAgICByb3cwW3gwW0RdXSwgcm93MFt4MVtEXV0sIHJvdzFbeDBbRF1dLCByb3cx W3gxW0RdXSwKLSsgICAgICAgICAgICAgICAgICAgIGludGVybGFjZWRfeF93ZWlnaHRzX0NELCB3 eSk7Ci0rCi0rICAgICAgICAgICAgLy8gUGFjayAxNi1iaXQgc2lnbmVkIC0+IDgtYml0IHVuc2ln bmVkIHdpdGggc2F0dXJhdGlvbiwgd3JpdGUgNCBwaXhlbHMuCi0rICAgICAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgY2hhciBwYWNrZWRfb3V0ID0gdmVjX3BhY2tzdShBQiwgQ0QpOwotKyAgICAg ICAgICAgIHZlY194c3QocGFja2VkX291dCwgMCwgKHVuc2lnbmVkIGNoYXIqKWNvbG9ycyk7Ci0r ICAgICAgICAgICAgeHkgICAgICs9IDQ7Ci0rICAgICAgICAgICAgY29sb3JzICs9IDQ7Ci0rICAg ICAgICAgICAgY291bnQgIC09IDQ7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICB3aGlsZSAoY291 bnQgLS0+IDApIHsKLSsgICAgICAgICAgICAvLyBTYW1lIGZsb3cgYXMgdGhlIGNvdW50ID49IDQg bG9vcCwgYnV0IHdyaXRpbmcgb25lIHBpeGVsLgotKyAgICAgICAgICAgIGludCB4MCwgeDEsIHd4 OwotKyAgICAgICAgICAgIGRlY29kZV9wYWNrZWRfY29vcmRpbmF0ZXNfYW5kX3dlaWdodCgqeHkr KywgJngwLCAmeDEsICZ3eCk7Ci0rCi0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hh ciB3ciA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpd3gpOwotKyAgICAgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgd2wgPSB2ZWNfc3ViKHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIp MTYpLCB3cik7Ci0rICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVkIGNoYXIgaW50ZXJsYWNlZF94 X3dlaWdodHMgPSAoX192ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX21lcmdlaCh3bCwgd3IpOwotKwot KyAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBBdiA9IGludGVycG9sYXRlX2luX3hf YW5kX3koCi0rICAgICAgICAgICAgICAgICAgICByb3cwW3gwXSwgcm93MFt4MV0sIHJvdzFbeDBd LCByb3cxW3gxXSwKLSsgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsCi0rICAgICAgICAg ICAgICAgICAgICBpbnRlcmxhY2VkX3hfd2VpZ2h0cywgd3kpOwotKyAgICAgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgcGFja2VkX291dCA9IHZlY19wYWNrc3UoQXYsCi0rICAgICAgICAg ICAgICAgICAgICAoX192ZWN0b3Igc2lnbmVkIHNob3J0KShfX3ZlY3RvciB1bnNpZ25lZCBjaGFy KXswfSk7Ci0rICAgICAgICAgICAgKmNvbG9ycysrID0gKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQp cGFja2VkX291dClbMF07Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSAjZWxpZiBTS19DUFVfTFNY X0xFVkVMID49IFNLX0NQVV9MU1hfTEVWRUxfTEFTWAotICAgICAvKm5vdCBzdGF0aWMqLyBpbmxp bmUKLSAgICAgdm9pZCBTMzJfYWxwaGFfRDMyX2ZpbHRlcl9EWChjb25zdCBTa0JpdG1hcFByb2NT dGF0ZSYgcywKLWRpZmYgLS1naXQgYS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrQmxpdFJvd19v cHRzLmggYi9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrQmxpdFJvd19vcHRzLmgKLWluZGV4IGQx ZGU1NjgxYTcyZS4uZDAzOTA4YTAzYTMyIDEwMDY0NAotLS0tIGEvZ2Z4L3NraWEvc2tpYS9zcmMv b3B0cy9Ta0JsaXRSb3dfb3B0cy5oCi0rKysgYi9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrQmxp dFJvd19vcHRzLmgKLUBAIC02OCw2ICs2OCw0MyBAQAotICAgICB9Ci0gI2VuZGlmCi0gCi0rI2lm IGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQotKyAgICAjaW5jbHVkZSA8 YWx0aXZlYy5oPgotKwotKyAgICAvLyBOYXRpdmUgVlNYL0FsdGlWZWMgcG9ydCBvZiBTa1BNU3Jj T3Zlcl9TU0UyLgotKyAgICAvLyBTYW1lIGFsZ29yaXRobTogc3JjICsgZHN0KigyNTYtc3JjQWxw aGEpLzI1Ni4KLSsgICAgc3RhdGljIGlubGluZSBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIFNrUE1T cmNPdmVyX1ZTWChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHNyYywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyIGRzdCkgewotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHNyY191MzIgPSAo X192ZWN0b3IgdW5zaWduZWQgaW50KXNyYzsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGlu dCBkc3RfdTMyID0gKF9fdmVjdG9yIHVuc2lnbmVkIGludClkc3Q7Ci0rCi0rICAgICAgICAvLyBz Y2FsZSA9IDI1NiAtIChzcmMgPj4gMjQpICAocGVyIDMyLWJpdCBsYW5lKQotKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgaW50IHNjYWxlID0gdmVjX3N1Yih2ZWNfc3BsYXRzKCh1bnNpZ25lZCBp bnQpMjU2KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmVjX3NyKHNyY191MzIsIHZlY19zcGxhdHMoMjR1KSkpOwotKyAgICAgICAgLy8gc2NhbGVfeDIg PSAoc2NhbGUgPDwgMTYpIHwgc2NhbGUgIC0tIHNwbGF0IHRoZSBzY2FsZSBpbnRvIGJvdGggMTYt Yml0IGhhbHZlcwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHNjYWxlX3gyID0gdmVj X29yKHZlY19zbChzY2FsZSwgdmVjX3NwbGF0cygxNnUpKSwgc2NhbGUpOwotKwotKyAgICAgICAg Y29uc3QgX192ZWN0b3IgdW5zaWduZWQgaW50IHJiX21hc2sgPSB2ZWNfc3BsYXRzKDB4MDBGRjAw RkZ1KTsKLSsKLSsgICAgICAgIC8vIHJiID0gKGRzdCAmIDB4MDBGRjAwRkYpICogc2NhbGVfeDIg Pj4gOCAgIChSIGFuZCBCIGNoYW5uZWxzIGluIDE2LWJpdCBsYW5lcykKLSsgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0IHJiID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19hbmQo cmJfbWFzaywgZHN0X3UzMik7Ci0rICAgICAgICByYiA9IHZlY19tdWwocmIsIChfX3ZlY3RvciB1 bnNpZ25lZCBzaG9ydClzY2FsZV94Mik7Ci0rICAgICAgICByYiA9IHZlY19zcihyYiwgdmVjX3Nw bGF0cygodW5zaWduZWQgc2hvcnQpOCkpOwotKwotKyAgICAgICAgLy8gZ2EgPSAoZHN0ID4+IDgp ICogc2NhbGVfeDIgIHRoZW4gbWFzayBvdXQgdGhlIHJiIGNoYW5uZWxzCi0rICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCBnYSA9IHZlY19zcigoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQp ZHN0X3UzMiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZl Y19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTgpKTsKLSsgICAgICAgIGdhID0gdmVjX211bChnYSwg KF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXNjYWxlX3gyKTsKLSsgICAgICAgIC8vIGFuZGMoZ2Es IHJiX21hc2spID0gZ2EgJiB+cmJfbWFzayAgLS0ga2VlcCBvbmx5IEcgYW5kIEEgY2hhbm5lbHMg aW4gMTYtYml0IGxhbmVzCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgZ2FfdTMyID0g dmVjX2FuZGMoKF9fdmVjdG9yIHVuc2lnbmVkIGludClnYSwgcmJfbWFzayk7Ci0rCi0rICAgICAg ICAvLyByZXN1bHQgPSBzcmMgKyBhZGRzX2VwdTgocmIgfCBnYSkKLSsgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIgbWVyZ2VkID0KLSsgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQg Y2hhcil2ZWNfb3IoKF9fdmVjdG9yIHVuc2lnbmVkIGludClyYiwgZ2FfdTMyKTsKLSsgICAgICAg IHJldHVybiB2ZWNfYWRkcyhzcmMsIG1lcmdlZCk7Ci0rICAgIH0KLSsjZW5kaWYKLSsKLSAjaWYg U0tfQ1BVX1NTRV9MRVZFTCA+PSBTS19DUFVfU1NFX0xFVkVMX1NTRTIKLSAgICAgI2luY2x1ZGUg PGltbWludHJpbi5oPgotIAotQEAgLTE3Niw2ICsyMTMsMTcgQEAgaW5saW5lIHZvaWQgYmxpdF9y b3dfczMyYV9vcGFxdWUoU2tQTUNvbG9yKiBkc3QsIGNvbnN0IFNrUE1Db2xvciogc3JjLCBpbnQg bGVuLAotICAgICB9Ci0gI2VuZGlmCi0gCi0rI2lmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVm aW5lZChfX1ZTWF9fKQotKyAgICB3aGlsZSAobGVuID49IDQpIHsKLSsgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIgdnNyYyA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopc3Jj KTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmRzdCA9IHZlY194bCgwLCAoY29u c3QgdW5zaWduZWQgY2hhciopZHN0KTsKLSsgICAgICAgIHZlY194c3QoU2tQTVNyY092ZXJfVlNY KHZzcmMsIHZkc3QpLCAwLCAodW5zaWduZWQgY2hhciopZHN0KTsKLSsgICAgICAgIHNyYyArPSA0 OwotKyAgICAgICAgZHN0ICs9IDQ7Ci0rICAgICAgICBsZW4gLT0gNDsKLSsgICAgfQotKyNlbmRp ZgotKwotICNpZiBTS19DUFVfU1NFX0xFVkVMID49IFNLX0NQVV9TU0VfTEVWRUxfU1NFMgotICAg ICB3aGlsZSAobGVuID49IDQpIHsKLSAgICAgICAgIF9tbV9zdG9yZXVfc2kxMjgoKF9fbTEyOGkq KWRzdCwgU2tQTVNyY092ZXJfU1NFMihfbW1fbG9hZHVfc2kxMjgoKGNvbnN0IF9fbTEyOGkqKXNy YyksCi1kaWZmIC0tZ2l0IGEvZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta1Jhc3RlclBpcGVsaW5l X29wdHMuaCBiL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tSYXN0ZXJQaXBlbGluZV9vcHRzLmgK LWluZGV4IDY5NWI3MTQzNGY4Yy4uZTJhZjBiOTRmMzkyIDEwMDY0NAotLS0tIGEvZ2Z4L3NraWEv c2tpYS9zcmMvb3B0cy9Ta1Jhc3RlclBpcGVsaW5lX29wdHMuaAotKysrIGIvZ2Z4L3NraWEvc2tp YS9zcmMvb3B0cy9Ta1Jhc3RlclBpcGVsaW5lX29wdHMuaAotQEAgLTg3LDYgKzg3LDggQEAgdXNp bmcgTm9DdHggPSBjb25zdCB2b2lkKjsKLSAgICAgI2RlZmluZSBTS1JQX0NQVV9TQ0FMQVIKLSAj ZWxpZiBkZWZpbmVkKFNLX0FSTV9IQVNfTkVPTikKLSAgICAgI2RlZmluZSBTS1JQX0NQVV9ORU9O Ci0rI2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCi0rICAgICNk ZWZpbmUgU0tSUF9DUFVfVlNYCi0gI2VsaWYgU0tfQ1BVX1NTRV9MRVZFTCA+PSBTS19DUFVfU1NF X0xFVkVMX1NLWAotICAgICAjZGVmaW5lIFNLUlBfQ1BVX1NLWAotICNlbGlmIFNLX0NQVV9TU0Vf TEVWRUwgPj0gU0tfQ1BVX1NTRV9MRVZFTF9BVlgyCi1AQCAtMTA5LDYgKzExMSw4IEBAIHVzaW5n IE5vQ3R4ID0gY29uc3Qgdm9pZCo7Ci0gICAgICNpbmNsdWRlIDxtYXRoLmg+Ci0gI2VsaWYgZGVm aW5lZChTS1JQX0NQVV9ORU9OKQotICAgICAjaW5jbHVkZSA8YXJtX25lb24uaD4KLSsjZWxpZiBk ZWZpbmVkKFNLUlBfQ1BVX1ZTWCkKLSsgICAgI2luY2x1ZGUgPGFsdGl2ZWMuaD4KLSAjZWxpZiBk ZWZpbmVkKFNLUlBfQ1BVX0xBU1gpCi0gICAgICNpbmNsdWRlIDxsYXN4aW50cmluLmg+Ci0gICAg ICNpbmNsdWRlIDxsc3hpbnRyaW4uaD4KLUBAIC0zMzcsNiArMzQxLDIzOSBAQCBuYW1lc3BhY2Ug U0tfT1BUU19OUyB7Ci0gICAgICAgICB2c3Q0cV9mMzIocHRyLCAoZmxvYXQzMng0eDRfdHt7cixn LGIsYX19KSk7Ci0gICAgIH0KLSAKLSsjZWxpZiBkZWZpbmVkKFNLUlBfQ1BVX1ZTWCkKLSsgICAg Ly8gUmV1c2UgdGhlIGZpbGUtc2NvcGUgVmVjPE4sVD4gZGVmaW5lZCBhYm92ZS4gSXQgYWxyZWFk eSBoYW5kbGVzIHRoZQotKyAgICAvLyBHQ0MtdnMtQ2xhbmcgZGl2ZXJnZW5jZSAoZXh0X3ZlY3Rv cl90eXBlIG9uIENsYW5nOyB2ZWN0b3Jfc2l6ZSB2aWEKLSsgICAgLy8gVmVjSGVscGVyIG9uIEdD QykgYW5kIHByb2R1Y2VzIHRoZSByaWdodCB2ZWN0b3ItcmVnaXN0ZXItcGFzc2luZyBBQkkKLSsg ICAgLy8gb24gUFBDNjQuIFRoZSB2ZWNfKiBpbnRyaW5zaWNzIGluIDxhbHRpdmVjLmg+IGFjY2Vw dCBlaXRoZXIgZm9ybS4KLSsgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHVzaW5nIFYgPSBWZWM8 NCwgVD47Ci0rICAgIHVzaW5nIEYgICA9IFY8ZmxvYXQgICA+OwotKyAgICB1c2luZyBJMzIgPSBW PCBpbnQzMl90PjsKLSsgICAgdXNpbmcgVTY0ID0gVjx1aW50NjRfdD47Ci0rICAgIHVzaW5nIFUz MiA9IFY8dWludDMyX3Q+OwotKyAgICB1c2luZyBVMTYgPSBWPHVpbnQxNl90PjsKLSsgICAgdXNp bmcgVTggID0gVjx1aW50OF90ID47Ci0rCi0rICAgIC8vIFdlIHBvbHlmaWxsIGEgZmV3IHJvdXRp bmVzIHRoYXQgQ2xhbmcgZG9lc24ndCBidWlsZCBpbnRvIGV4dF92ZWN0b3JfdHlwZXMuCi0rICAg IFNJIEYgICBtaW4oRiBhLCBGIGIpICAgICB7IHJldHVybiB2ZWNfbWluKGEsYik7IH0KLSsgICAg U0kgSTMyIG1pbihJMzIgYSwgSTMyIGIpIHsgcmV0dXJuIHZlY19taW4oYSxiKTsgfQotKyAgICBT SSBVMzIgbWluKFUzMiBhLCBVMzIgYikgeyByZXR1cm4gdmVjX21pbihhLGIpOyB9Ci0rICAgIFNJ IEYgICBtYXgoRiBhLCBGIGIpICAgICB7IHJldHVybiB2ZWNfbWF4KGEsYik7IH0KLSsgICAgU0kg STMyIG1heChJMzIgYSwgSTMyIGIpIHsgcmV0dXJuIHZlY19tYXgoYSxiKTsgfQotKyAgICBTSSBV MzIgbWF4KFUzMiBhLCBVMzIgYikgeyByZXR1cm4gdmVjX21heChhLGIpOyB9Ci0rCi0rICAgIFNJ IEYgICBhYnNfICAoRiB2KSAgIHsgcmV0dXJuIHZlY19hYnModik7IH0KLSsgICAgU0kgSTMyIGFi c18gIChJMzIgdikgeyByZXR1cm4gdmVjX2Ficyh2KTsgfQotKyAgICBTSSBGICAgcmNwX2FwcHJv eChGIHYpIHsgcmV0dXJuIHZlY19yZSh2KTsgfQotKyAgICBTSSBGICAgcmNwX3ByZWNpc2UgKEYg dikgeyBGIGUgPSByY3BfYXBwcm94KHYpOyByZXR1cm4gZSAqICgyLjBmIC0gdiAqIGUpOyB9Ci0r ICAgIFNJIEYgICByc3FydF9hcHByb3ggKEYgdikgICB7IHJldHVybiB2ZWNfcnNxcnRlKHYpOyB9 Ci0rCi0rICAgIFNJIFUxNiBwYWNrKFUzMiB2KSAgICAgICB7IHJldHVybiBfX2J1aWx0aW5fY29u dmVydHZlY3Rvcih2LCBVMTYpOyB9Ci0rICAgIFNJIFU4ICBwYWNrKFUxNiB2KSAgICAgICB7IHJl dHVybiBfX2J1aWx0aW5fY29udmVydHZlY3Rvcih2LCAgVTgpOyB9Ci0rCi0rICAgIFNJIEYgaWZf dGhlbl9lbHNlKEkzMiBjLCBGIHQsIEYgZSkgewotKyAgICAgICAgcmV0dXJuIHZlY19vcigoX192 ZWN0b3IgZmxvYXQpdmVjX2FuZCgoX192ZWN0b3IgZmxvYXQpYywgKF9fdmVjdG9yIGZsb2F0KXQp LCAoX192ZWN0b3IgZmxvYXQpdmVjX2FuZGMoKF9fdmVjdG9yIGZsb2F0KWUsIChfX3ZlY3RvciBm bG9hdCljKSk7Ci0rICAgIH0KLSsgICAgU0kgSTMyIGlmX3RoZW5fZWxzZShJMzIgYywgSTMyIHQs IEkzMiBlKSB7Ci0rICAgICAgICByZXR1cm4gKEkzMil2ZWNfb3IoKF9fdmVjdG9yIHVuc2lnbmVk IGludCl2ZWNfYW5kKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpYywgKF9fdmVjdG9yIHVuc2lnbmVk IGludCl0KSwgKF9fdmVjdG9yIHVuc2lnbmVkIGludCl2ZWNfYW5kYygoX192ZWN0b3IgdW5zaWdu ZWQgaW50KWUsIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpYykpOwotKyAgICB9Ci0rCi0rICAgIC8v IEluIGJvdGggQWx0aVZlYyBhbmQgU1NFIHRoZXJlIGlzIG5vIGhvcml6b250YWwgZWxlbWVudCBj b21wYXJlLCB1bmxpa2UgQVJNLiAgRmFsbCBiYWNrIHRvIHNjYWxhciBvcGVyYXRpb25zIGhlcmUu Li4KLSsgICAgU0kgYm9vbCBhbnkoSTMyIGMpIHsKLSsgICAgICAgIGlmICh2ZWNfZXh0cmFjdCgo VTMyKWMsIDApICE9IDApIHJldHVybiAxOwotKyAgICAgICAgaWYgKHZlY19leHRyYWN0KChVMzIp YywgMSkgIT0gMCkgcmV0dXJuIDE7Ci0rICAgICAgICBpZiAodmVjX2V4dHJhY3QoKFUzMiljLCAy KSAhPSAwKSByZXR1cm4gMTsKLSsgICAgICAgIGlmICh2ZWNfZXh0cmFjdCgoVTMyKWMsIDMpICE9 IDApIHJldHVybiAxOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAgU0kgYm9vbCBh bGwoSTMyIGMpIHsKLSsgICAgICAgIGlmICh2ZWNfZXh0cmFjdCgoVTMyKWMsIDApID09IDApIHJl dHVybiAwOwotKyAgICAgICAgaWYgKHZlY19leHRyYWN0KChVMzIpYywgMSkgPT0gMCkgcmV0dXJu IDA7Ci0rICAgICAgICBpZiAodmVjX2V4dHJhY3QoKFUzMiljLCAyKSA9PSAwKSByZXR1cm4gMDsK LSsgICAgICAgIGlmICh2ZWNfZXh0cmFjdCgoVTMyKWMsIDMpID09IDApIHJldHVybiAwOwotKyAg ICAgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsgICAgU0kgRiAgICAgbWFkKEYgZiwgRiBtLCBG IGEpIHsgcmV0dXJuIHZlY19tYWRkKGYsbSxhKTsgfQotKyAgICBTSSBGICAgIG5tYWQoRiBmLCBG IG0sIEYgYSkgeyByZXR1cm4gdmVjX25tc3ViKGYsbSxhKTsgfQotKyAgICBTSSBGICBmbG9vcl8o RiB2KSB7IHJldHVybiB2ZWNfZmxvb3Iodik7IH0KLSsgICAgU0kgRiAgIGNlaWxfKEYgdikgeyBy ZXR1cm4gdmVjX2NlaWwodik7IH0KLSsgICAgU0kgRiAgIHNxcnRfKEYgdikgeyByZXR1cm4gdmVj X3NxcnQodik7IH0KLSsgICAgU0kgSTMyIGlyb3VuZChGIHYpIHsgcmV0dXJuIHZlY19jdHMoKF9f dmVjdG9yIGZsb2F0KXZlY19yaW50KHYpLCAwKTsgfQotKyAgICBTSSBVMzIgcm91bmQoRiB2KSAg eyByZXR1cm4gdmVjX2N0dSgoX192ZWN0b3IgZmxvYXQpdmVjX3JpbnQodiksIDApOyB9Ci0rICAg IFNJIFUzMiByb3VuZChGIHYsIEYgc2NhbGUpIHsgcmV0dXJuIChVMzIpdmVjX2N0cygoX192ZWN0 b3IgZmxvYXQpdmVjX3JpbnQodipzY2FsZSksIDApOyB9Ci0rCi0rICAgIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgotKyAgICBTSSBWPFQ+IGdhdGhlcihjb25zdCBUKiBwLCBVMzIgaXgpIHsKLSsgICAg ICAgIHJldHVybiBWPFQ+e3BbaXhbMF1dLCBwW2l4WzFdXSwgcFtpeFsyXV0sIHBbaXhbM11dfTsK LSsgICAgfQotKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSsgICAgU0kgVjxUPiBnYXRoZXJf dW5hbGlnbmVkKGNvbnN0IFQqIHB0ciwgVTMyIGl4KSB7Ci0rICAgICAgICAvLyBUaGlzIHRlbGxz IHRoZSBjb21waWxlciBwdHIgbWlnaHQgbm90IGJlIGFsaWduZWQgYXBwcm9wcmlhdGVseSwgc28K LSsgICAgICAgIC8vIGl0IGdlbmVyYXRlcyBiZXR0ZXIgYXNzZW1ibHkuCi0rICAgICAgICB0eXBl ZGVmIFQgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDEpKSkgdW5hbGlnbmVkX3B0cjsKLSsgICAg ICAgIGNvbnN0IHVuYWxpZ25lZF9wdHIqIHVwdHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1bmFsaWdu ZWRfcHRyKj4ocHRyKTsKLSsgICAgICAgIHJldHVybiBWPFQ+e3VwdHJbaXhbMF1dLCB1cHRyW2l4 WzFdXSwgdXB0cltpeFsyXV0sIHVwdHJbaXhbM11dfTsKLSsgICAgfQotKyAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgViwgdHlwZW5hbWUgUz4KLSsgICAgU0kgdm9pZCBzY2F0dGVyX21hc2tlZChWIHNy YywgUyogZHN0LCBVMzIgaXgsIEkzMiBtYXNrKSB7Ci0rICAgICAgICBWIGJlZm9yZSA9IGdhdGhl cihkc3QsIGl4KTsKLSsgICAgICAgIFYgYWZ0ZXIgPSBpZl90aGVuX2Vsc2UobWFzaywgc3JjLCBi ZWZvcmUpOwotKyAgICAgICAgZHN0W2l4WzBdXSA9IGFmdGVyWzBdOwotKyAgICAgICAgZHN0W2l4 WzFdXSA9IGFmdGVyWzFdOwotKyAgICAgICAgZHN0W2l4WzJdXSA9IGFmdGVyWzJdOwotKyAgICAg ICAgZHN0W2l4WzNdXSA9IGFmdGVyWzNdOwotKyAgICB9Ci0rCi0rICAgIC8vIE5hdGl2ZSBWU1gv QWx0aVZlYyBwb3J0cyBvZiB0aGUgbG9hZDIvc3RvcmUyL2xvYWQzL2xvYWQ0L3N0b3JlNCBoZWxw ZXJzLgotKyAgICAvLyBFYWNoIHVzZXMgdmVjX3hsL3ZlY194c3QgZm9yIHVuYWxpZ25lZCAxNi1i eXRlIGxvYWRzL3N0b3JlcywgdmVjX21lcmdlaC8KLSsgICAgLy8gdmVjX21lcmdlbCBmb3IgU1NF LXN0eWxlIGVwaTE2L2VwaTMyL3BzIHVucGFjayBvcHMsIGFuZCB2ZWNfcGVybSB3aXRoIGEKLSsg ICAgLy8gYnl0ZS1tYXNrIGZvciB0aGUgU1NFIHNodWZmbGVsby9zaHVmZmxlaGkvc2h1ZmZsZS9z cmxpX3NpMTI4IG9wcy4gVGhlCi0rICAgIC8vIFBQQzY0IExFIHJlZ2lzdGVyLXRvLW1lbW9yeSBi eXRlIG9yZGVyIG1hdGNoZXMgeDg2IExFLCBzbyB0aGUgYnl0ZS1tYXNrCi0rICAgIC8vIHBhdHRl cm5zIGFyZSBpZGVudGljYWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgX21tX3NldHJfZXBpOCBmb3Jt cy4KLSsKLSsgICAgU0kgdm9pZCBsb2FkMihjb25zdCB1aW50MTZfdCogcHRyLCBVMTYqIHIsIFUx NiogZykgewotKyAgICAgICAgLy8gTG9hZCA4IHVpbnQxNjogcjAgZzAgcjEgZzEgcjIgZzIgcjMg ZzMgKGluIExFIG1lbW9yeSBvcmRlcikuCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IHYgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXB0cik7Ci0rICAgICAgICAvLyBF eHRyYWN0IGV2ZXJ5LW90aGVyIDE2LWJpdCB2YWx1ZSB2aWEgdmVjX3Blcm0gKGhpZ2ggaGFsZiBv ZiByZXN1bHQgaXMgdW51c2VkCi0rICAgICAgICAvLyBidXQgd3JpdHRlbjsgc2tfdW5hbGlnbmVk X2xvYWQgYmVsb3cgcGlja3MgdXAgdGhlIGxvdyA4IGJ5dGVzKS4KLSsgICAgICAgIGNvbnN0IF9f dmVjdG9yIHVuc2lnbmVkIGNoYXIgcl9tYXNrID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpewot KyAgICAgICAgICAgIDAsMSwgNCw1LCA4LDksIDEyLDEzLCAgMCwwLDAsMCwwLDAsMCwwCi0rICAg ICAgICB9OwotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBnX21hc2sgPSAo X192ZWN0b3IgdW5zaWduZWQgY2hhcil7Ci0rICAgICAgICAgICAgMiwzLCA2LDcsIDEwLDExLCAx NCwxNSwgIDAsMCwwLDAsMCwwLDAsMAotKyAgICAgICAgfTsKLSsgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIGNoYXIgUl92ID0gdmVjX3Blcm0odiwgdiwgcl9tYXNrKTsKLSsgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgR192ID0gdmVjX3Blcm0odiwgdiwgZ19tYXNrKTsKLSsgICAgICAg ICpyID0gc2tfdW5hbGlnbmVkX2xvYWQ8VTE2PigmUl92KTsKLSsgICAgICAgICpnID0gc2tfdW5h bGlnbmVkX2xvYWQ8VTE2PigmR192KTsKLSsgICAgfQotKwotKyAgICBTSSB2b2lkIHN0b3JlMih1 aW50MTZfdCogcHRyLCBVMTYgciwgVTE2IGcpIHsKLSsgICAgICAgIC8vIEludGVybGVhdmU6IHJn ID0gcjAgZzAgcjEgZzEgcjIgZzIgcjMgZzMuCi0rICAgICAgICAvLyByIGFuZCBnIGFyZSA4LWJ5 dGUgdmVjdG9yczsgd2lkZW4gdG8gMTYgYW5kIHZlY19tZXJnZWggb24gdXNob3J0IHRha2VzCi0r ICAgICAgICAvLyB0aGUgbG93IDQgbGFuZXMgb2YgZWFjaC4KLSsgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IHJ3ID0gd2lkZW5fY2FzdDxfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydD4ocik7 Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBndyA9IHdpZGVuX2Nhc3Q8X192ZWN0 b3IgdW5zaWduZWQgc2hvcnQ+KGcpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQg cmcgPSB2ZWNfbWVyZ2VoKHJ3LCBndyk7Ci0rICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNp Z25lZCBjaGFyKXJnLCAwLCAodW5zaWduZWQgY2hhciopcHRyKTsKLSsgICAgfQotKwotKyAgICBT SSB2b2lkIGxvYWQzKGNvbnN0IHVpbnQxNl90KiBwdHIsIFUxNiogciwgVTE2KiBnLCBVMTYqIGIp IHsKLSsgICAgICAgIC8vIDQgcGl4ZWxzIHggMyBjaGFubmVscyB4IDIgYnl0ZXMgPSAyNCBieXRl cy4gVHdvIDE2LWJ5dGUgbG9hZHMgd2l0aCBvdmVybGFwCi0rICAgICAgICAvLyBhdm9pZCByZWFk aW5nIHBhc3QgdGhlIDI0LWJ5dGUgc291cmNlLgotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQg Y2hhciB2MDEgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShwdHIgKyAwKSk7Ci0r ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHYyM19yYXcgPSB2ZWNfeGwoMCwgKGNvbnN0 IHVuc2lnbmVkIGNoYXIqKShwdHIgKyA0KSk7Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNp Z25lZCBjaGFyIHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAgICAgICAg Ly8gdjIzID0gdjIzX3JhdyA+PiA0IGJ5dGVzIChkcm9wcyB0aGUgb3ZlcmxhcHBpbmcgcGl4ZWwt MSB0cmFpbGluZyBSKS4KLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc2hp ZnQ0ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpewotKyAgICAgICAgICAgIDQsNSw2LDcsIDgs OSwxMCwxMSwgMTIsMTMsMTQsMTUsIDE2LDE2LDE2LDE2Ci0rICAgICAgICB9OwotKyAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgY2hhciB2MjMgPSB2ZWNfcGVybSh2MjNfcmF3LCB6ZXJvLCBzaGlm dDQpOwotKyAgICAgICAgLy8gX04gaG9sZHMgUixHLEIgZm9yIHBpeGVsIE4gaW4gaXRzIGxvd2Vy IDMgbGFuZXMuIHNoaWZ0NiBhZHZhbmNlcyB0byB0aGUgbmV4dCBwaXhlbC4KLSsgICAgICAgIGNv bnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc2hpZnQ2ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIpewotKyAgICAgICAgICAgIDYsNyw4LDksIDEwLDExLDEyLDEzLCAxNCwxNSwgMTYsMTYsIDE2 LDE2LCAxNiwxNgotKyAgICAgICAgfTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIg XzAgPSB2MDE7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIF8xID0gdmVjX3Blcm0o djAxLCB6ZXJvLCBzaGlmdDYpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBfMiA9 IHYyMzsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgXzMgPSB2ZWNfcGVybSh2MjMs IHplcm8sIHNoaWZ0Nik7Ci0rICAgICAgICAvLyBEZS1pbnRlcmxhY2UgdG8gUixHLEIgcGVyIHRo ZSBTU0UgZmxvdy4KLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IF8wMiA9IHZlY19t ZXJnZWgoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KV8wLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KV8y KTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IF8xMyA9IHZlY19tZXJnZWgoKF9f dmVjdG9yIHVuc2lnbmVkIHNob3J0KV8xLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KV8zKTsKLSsgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IFJfdiA9IHZlY19tZXJnZWgoXzAyLCBfMTMpOwot KyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBzaGlmdDggPSAoX192ZWN0b3Ig dW5zaWduZWQgY2hhcil7Ci0rICAgICAgICAgICAgOCw5LDEwLDExLCAxMiwxMywxNCwxNSwgMTYs MTYsMTYsMTYsIDE2LDE2LDE2LDE2Ci0rICAgICAgICB9OwotKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgY2hhciBHX3YgPSB2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilSX3YsIHpl cm8sIHNoaWZ0OCk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBCX3YgPSB2ZWNf bWVyZ2VsKF8wMiwgXzEzKTsKLSsgICAgICAgICpyID0gc2tfdW5hbGlnbmVkX2xvYWQ8VTE2Pigm Ul92KTsKLSsgICAgICAgICpnID0gc2tfdW5hbGlnbmVkX2xvYWQ8VTE2PigmR192KTsKLSsgICAg ICAgICpiID0gc2tfdW5hbGlnbmVkX2xvYWQ8VTE2PigmQl92KTsKLSsgICAgfQotKwotKyAgICBT SSB2b2lkIGxvYWQ0KGNvbnN0IHVpbnQxNl90KiBwdHIsIFUxNiogciwgVTE2KiBnLCBVMTYqIGIs IFUxNiogYSkgewotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjAxID0gKF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0KQotKyAgICAgICAgICAgIHZlY194bCgwLCAoY29uc3QgdW5zaWdu ZWQgY2hhciopcHRyKTsgICAgICAgICAgICAvLyByMCBnMCBiMCBhMCByMSBnMSBiMSBhMQotKyAg ICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjIzID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0KQotKyAgICAgICAgICAgIHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopKHB0ciAr IDgpKTsgICAgICAvLyByMiBnMiBiMiBhMiByMyBnMyBiMyBhMwotKyAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgc2hvcnQgXzAyID0gdmVjX21lcmdlaCh2MDEsIHYyMyk7ICAvLyByMCByMiBnMCBn MiBiMCBiMiBhMCBhMgotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgXzEzID0gdmVj X21lcmdlbCh2MDEsIHYyMyk7ICAvLyByMSByMyBnMSBnMyBiMSBiMyBhMSBhMwotKyAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgc2hvcnQgcmcgID0gdmVjX21lcmdlaChfMDIsIF8xMyk7ICAvLyBy MCByMSByMiByMyBnMCBnMSBnMiBnMwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQg YmEgID0gdmVjX21lcmdlbChfMDIsIF8xMyk7ICAvLyBiMCBiMSBiMiBiMyBhMCBhMSBhMiBhMwot KyAgICAgICAgKnIgPSBza191bmFsaWduZWRfbG9hZDxVMTY+KChjb25zdCB1aW50MTZfdCopJnJn ICsgMCk7Ci0rICAgICAgICAqZyA9IHNrX3VuYWxpZ25lZF9sb2FkPFUxNj4oKGNvbnN0IHVpbnQx Nl90KikmcmcgKyA0KTsKLSsgICAgICAgICpiID0gc2tfdW5hbGlnbmVkX2xvYWQ8VTE2PigoY29u c3QgdWludDE2X3QqKSZiYSArIDApOwotKyAgICAgICAgKmEgPSBza191bmFsaWduZWRfbG9hZDxV MTY+KChjb25zdCB1aW50MTZfdCopJmJhICsgNCk7Ci0rICAgIH0KLSsKLSsgICAgU0kgdm9pZCBz dG9yZTQodWludDE2X3QqIHB0ciwgVTE2IHIsIFUxNiBnLCBVMTYgYiwgVTE2IGEpIHsKLSsgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHJ3ID0gd2lkZW5fY2FzdDxfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydD4ocik7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBndyA9IHdp ZGVuX2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgc2hvcnQ+KGcpOwotKyAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgc2hvcnQgYncgPSB3aWRlbl9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0Pihi KTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGF3ID0gd2lkZW5fY2FzdDxfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydD4oYSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCByZyA9IHZlY19tZXJnZWgocncsIGd3KTsgIC8vIHIwIGcwIHIxIGcxIHIyIGcyIHIzIGczCi0r ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBiYSA9IHZlY19tZXJnZWgoYncsIGF3KTsg IC8vIGIwIGEwIGIxIGExIGIyIGEyIGIzIGEzCi0rICAgICAgICAvLyBOb3cgaW50ZXJsZWF2ZSAz Mi1iaXQgbGFuZXMgKGVhY2ggcmcgcGFpciA9IDEgbGFuZSwgZWFjaCBiYSBwYWlyID0gMSBsYW5l KS4KLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCByZ2JhX2xvID0gdmVjX21lcmdlaCgo X192ZWN0b3IgdW5zaWduZWQgaW50KXJnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgaW50KWJhKTsKLSsgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCByZ2JhX2hpID0gdmVjX21lcmdlbCgoX192ZWN0b3Ig dW5zaWduZWQgaW50KXJnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgaW50KWJhKTsKLSsgICAgICAgIHZlY194 c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpcmdiYV9sbywgMCwgKHVuc2lnbmVkIGNoYXIqKXB0 cik7Ci0rICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXJnYmFfaGksIDAs ICh1bnNpZ25lZCBjaGFyKikocHRyICsgOCkpOwotKyAgICB9Ci0rCi0rICAgIFNJIHZvaWQgbG9h ZDIoY29uc3QgZmxvYXQqIHB0ciwgRiogciwgRiogZykgewotKyAgICAgICAgX192ZWN0b3IgZmxv YXQgXzAxID0gdmVjX3hsKDAsIHB0cik7ICAgICAgICAgIC8vIHIwIGcwIHIxIGcxCi0rICAgICAg ICBfX3ZlY3RvciBmbG9hdCBfMjMgPSB2ZWNfeGwoMCwgcHRyICsgNCk7ICAgICAgLy8gcjIgZzIg cjMgZzMKLSsgICAgICAgIC8vIHIgPSBsYW5lcyB7XzAxWzBdLCBfMDFbMl0sIF8yM1swXSwgXzIz WzJdfTsgZyA9IHtfMDFbMV0sIF8wMVszXSwgXzIzWzFdLCBfMjNbM119LgotKyAgICAgICAgY29u c3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciByX21hc2sgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hh cil7Ci0rICAgICAgICAgICAgMCwxLDIsMywgOCw5LDEwLDExLCAxNiwxNywxOCwxOSwgMjQsMjUs MjYsMjcKLSsgICAgICAgIH07Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IGdfbWFzayA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKLSsgICAgICAgICAgICA0LDUsNiw3 LCAxMiwxMywxNCwxNSwgMjAsMjEsMjIsMjMsIDI4LDI5LDMwLDMxCi0rICAgICAgICB9OwotKyAg ICAgICAgKnIgPSAoRil2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilfMDEsIChfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyKV8yMywgcl9tYXNrKTsKLSsgICAgICAgICpnID0gKEYpdmVjX3Bl cm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpXzAxLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilf MjMsIGdfbWFzayk7Ci0rICAgIH0KLSsKLSsgICAgU0kgdm9pZCBzdG9yZTIoZmxvYXQqIHB0ciwg RiByLCBGIGcpIHsKLSsgICAgICAgIF9fdmVjdG9yIGZsb2F0IF8wMSA9IHZlY19tZXJnZWgoKF9f dmVjdG9yIGZsb2F0KXIsIChfX3ZlY3RvciBmbG9hdClnKTsgICAvLyByMCBnMCByMSBnMQotKyAg ICAgICAgX192ZWN0b3IgZmxvYXQgXzIzID0gdmVjX21lcmdlbCgoX192ZWN0b3IgZmxvYXQpciwg KF9fdmVjdG9yIGZsb2F0KWcpOyAgIC8vIHIyIGcyIHIzIGczCi0rICAgICAgICB2ZWNfeHN0KChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKV8wMSwgMCwgKHVuc2lnbmVkIGNoYXIqKXB0cik7Ci0rICAg ICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKV8yMywgMCwgKHVuc2lnbmVkIGNo YXIqKShwdHIgKyA0KSk7Ci0rICAgIH0KLSsKLSsgICAgU0kgdm9pZCBsb2FkNChjb25zdCBmbG9h dCogcHRyLCBGKiByLCBGKiBnLCBGKiBiLCBGKiBhKSB7Ci0rICAgICAgICAvLyA0eDQgZmxvYXQg bWF0cml4IHRyYW5zcG9zZTogcm93cyAtPiBjb2x1bW5zLgotKyAgICAgICAgX192ZWN0b3IgZmxv YXQgcm93MCA9IHZlY194bCgwLCBwdHIgKyAgMCk7Ci0rICAgICAgICBfX3ZlY3RvciBmbG9hdCBy b3cxID0gdmVjX3hsKDAsIHB0ciArICA0KTsKLSsgICAgICAgIF9fdmVjdG9yIGZsb2F0IHJvdzIg PSB2ZWNfeGwoMCwgcHRyICsgIDgpOwotKyAgICAgICAgX192ZWN0b3IgZmxvYXQgcm93MyA9IHZl Y194bCgwLCBwdHIgKyAxMik7Ci0rICAgICAgICBfX3ZlY3RvciBmbG9hdCBUMCA9IHZlY19tZXJn ZWgocm93MCwgcm93Mik7ICAvLyB7cm93MFswXSwgcm93MlswXSwgcm93MFsxXSwgcm93MlsxXX0K LSsgICAgICAgIF9fdmVjdG9yIGZsb2F0IFQxID0gdmVjX21lcmdlaChyb3cxLCByb3czKTsKLSsg ICAgICAgIF9fdmVjdG9yIGZsb2F0IFQyID0gdmVjX21lcmdlbChyb3cwLCByb3cyKTsKLSsgICAg ICAgIF9fdmVjdG9yIGZsb2F0IFQzID0gdmVjX21lcmdlbChyb3cxLCByb3czKTsKLSsgICAgICAg ICpyID0gKEYpdmVjX21lcmdlaChUMCwgVDEpOyAgLy8ge3JvdzBbMF0sIHJvdzFbMF0sIHJvdzJb MF0sIHJvdzNbMF19Ci0rICAgICAgICAqZyA9IChGKXZlY19tZXJnZWwoVDAsIFQxKTsKLSsgICAg ICAgICpiID0gKEYpdmVjX21lcmdlaChUMiwgVDMpOwotKyAgICAgICAgKmEgPSAoRil2ZWNfbWVy Z2VsKFQyLCBUMyk7Ci0rICAgIH0KLSsKLSsgICAgU0kgdm9pZCBzdG9yZTQoZmxvYXQqIHB0ciwg RiByLCBGIGcsIEYgYiwgRiBhKSB7Ci0rICAgICAgICAvLyA0eDQgZmxvYXQgbWF0cml4IHRyYW5z cG9zZSwgdGhlbiBzdG9yZSByb3dzLgotKyAgICAgICAgX192ZWN0b3IgZmxvYXQgVDAgPSB2ZWNf bWVyZ2VoKChfX3ZlY3RvciBmbG9hdClyLCAoX192ZWN0b3IgZmxvYXQpYik7Ci0rICAgICAgICBf X3ZlY3RvciBmbG9hdCBUMSA9IHZlY19tZXJnZWgoKF9fdmVjdG9yIGZsb2F0KWcsIChfX3ZlY3Rv ciBmbG9hdClhKTsKLSsgICAgICAgIF9fdmVjdG9yIGZsb2F0IFQyID0gdmVjX21lcmdlbCgoX192 ZWN0b3IgZmxvYXQpciwgKF9fdmVjdG9yIGZsb2F0KWIpOwotKyAgICAgICAgX192ZWN0b3IgZmxv YXQgVDMgPSB2ZWNfbWVyZ2VsKChfX3ZlY3RvciBmbG9hdClnLCAoX192ZWN0b3IgZmxvYXQpYSk7 Ci0rICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19tZXJnZWgoVDAs IFQxKSwgMCwgKHVuc2lnbmVkIGNoYXIqKShwdHIgKyAgMCkpOwotKyAgICAgICAgdmVjX3hzdCgo X192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2VsKFQwLCBUMSksIDAsICh1bnNpZ25lZCBj aGFyKikocHRyICsgIDQpKTsKLSsgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIpdmVjX21lcmdlaChUMiwgVDMpLCAwLCAodW5zaWduZWQgY2hhciopKHB0ciArICA4KSk7Ci0r ICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19tZXJnZWwoVDIsIFQz KSwgMCwgKHVuc2lnbmVkIGNoYXIqKShwdHIgKyAxMikpOwotKyAgICB9Ci0rCi0gI2VsaWYgZGVm aW5lZChTS1JQX0NQVV9TS1gpCi0gICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB1c2luZyBWID0g VmVjPDE2LCBUPjsKLSAgICAgdXNpbmcgRiAgID0gVjxmbG9hdCAgID47Ci1kaWZmIC0tZ2l0IGEv Z2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta1N3aXp6bGVyX29wdHMuaW5jIGIvZ2Z4L3NraWEvc2tp YS9zcmMvb3B0cy9Ta1N3aXp6bGVyX29wdHMuaW5jCi1pbmRleCA2NzFkYjNmMDVmNjEuLmM1Nzgy MzhhOWU1OCAxMDA2NDQKLS0tLSBhL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tTd2l6emxlcl9v cHRzLmluYwotKysrIGIvZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta1N3aXp6bGVyX29wdHMuaW5j Ci1AQCAtODQsNiArODQsMjkgQEAgU0kgZmxvYXQgcmVjaXByb2NhbF9hbHBoYShmbG9hdCBhKSB7 Ci0gICAgIGF1dG8gcSA9IEY0ezEuMGZ9IC8gdkE7Ci0gICAgIHJldHVybiBfbW1fYW5kX3BzKHNr X2JpdF9jYXN0PF9fbTEyOD4odkEgIT0gRjR7MC4wZn0pLCBxKVswXTsKLSB9Ci0rI2VsaWYgZGVm aW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCi0rLy8gLS0gVlNYIC0tIEhhcmRl biBhZ2FpbnN0IHRpbWluZyBhdHRhY2tzLgotKy8vIHZlY19zcGxhdHMgLyB2ZWNfZGl2IC8gdmVj X2NtcGd0IC8gdmVjX2FuZCBlYWNoIG1hcCB0byBhIHNpbmdsZSBWU1ggb3Agb24KLSsvLyBib3Ro IEdDQyBhbmQgQ2xhbmcuIHZlY19jbXBndCh2QSwgMCkgaXMgZXhhY3QgZm9yIHRoZSBub24tbmVn YXRpdmUtYWxwaGEKLSsvLyBjb250cmFjdCAoMCA8PSBhKSBhbmQgYXZvaWRzIENsYW5nJ3Mgc3Rh dGljX2Nhc3Q8ZmxvYXQ+KHZlY3RvcikgZXh0ZW5zaW9uCi0rLy8gdGhhdCBHQ0MgZG9lcyBub3Qg c3VwcG9ydC4KLStTS19OT19TQU5JVElaRSgiZmxvYXQtZGl2aWRlLWJ5LXplcm8iKQotK1NJIGZs b2F0IHJlY2lwcm9jYWxfYWxwaGFfdGltZXNfMjU1KGZsb2F0IGEpIHsKLSsgICAgU2tBU1NFUlQo MCA8PSBhICYmIGEgPD0gMjU1KTsKLSsgICAgX192ZWN0b3IgZmxvYXQgdkEgPSB2ZWNfc3BsYXRz KGEpOwotKyAgICBfX3ZlY3RvciBmbG9hdCBxID0gdmVjX2Rpdih2ZWNfc3BsYXRzKDI1NS4wZiks IHZBKTsKLSsgICAgX192ZWN0b3IgZmxvYXQgdk1hc2sgPSAoX192ZWN0b3IgZmxvYXQpdmVjX2Nt cGd0KHZBLCB2ZWNfc3BsYXRzKDAuMGYpKTsKLSsgICAgcmV0dXJuIHZlY19hbmQodk1hc2ssIHEp WzBdOwotK30KLSsKLStTS19OT19TQU5JVElaRSgiZmxvYXQtZGl2aWRlLWJ5LXplcm8iKQotK1NJ IGZsb2F0IHJlY2lwcm9jYWxfYWxwaGEoZmxvYXQgYSkgewotKyAgICBTa0FTU0VSVCgwIDw9IGEg JiYgYSA8PSAxKTsKLSsgICAgX192ZWN0b3IgZmxvYXQgdkEgPSB2ZWNfc3BsYXRzKGEpOwotKyAg ICBfX3ZlY3RvciBmbG9hdCBxID0gdmVjX2Rpdih2ZWNfc3BsYXRzKDEuMGYpLCB2QSk7Ci0rICAg IF9fdmVjdG9yIGZsb2F0IHZNYXNrID0gKF9fdmVjdG9yIGZsb2F0KXZlY19jbXBndCh2QSwgdmVj X3NwbGF0cygwLjBmKSk7Ci0rICAgIHJldHVybiB2ZWNfYW5kKHZNYXNrLCBxKVswXTsKLSt9Ci0g I2Vsc2UKLSAvLyAtLSBQb3J0YWJsZSAtLSAqTm90KiBoYXJkZW5lZCBhZ2FpbnN0IHRpbWluZyBh dHRhY2tzCi0gU0kgZmxvYXQgcmVjaXByb2NhbF9hbHBoYV90aW1lc18yNTUoZmxvYXQgYSkgewot QEAgLTEwODUsNiArMTEwOCwyMDggQEAgdm9pZCByZ2JBX3RvX0JHUkEodWludDMyX3QqIGRzdCwg Y29uc3QgdWludDMyX3QqIHNyYywgaW50IGNvdW50KSB7Ci0gICAgIHJnYkFfdG9fQkdSQV9wb3J0 YWJsZShkc3QsIHNyYywgY291bnQpOwotIH0KLSAKLSsjZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMp ICYmIGRlZmluZWQoX19WU1hfXykKLSsvLyAtLSBWU1ggLS0gTmF0aXZlIFBvd2VyIFZTWC9BbHRp VmVjIHBvcnRzIG9mIHRoZSBTU1NFMyBzd2l6emxlcnMgYmVsb3cuCi0rLy8gRWFjaCBfbW1fKiBv cGVyYXRpb24gaXMgcmVwbGFjZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgdmVjXyogc2VxdWVuY2Ug cGVyCi0rLy8gdGhlIEdDQyBwcGNfd3JhcHBlcnMgdHJhbnNsYXRpb24gcGF0dGVybiAodmVjX21l cmdlaC9sLCB2ZWNfcGVybSwgYW5kIHRoZQotKy8vIHZlY192bXVsZXVoL3ZtdWxvdWggKyBwZXJt dXRlIGlkaW9tIGZvciBfbW1fbXVsaGlfZXB1MTYpLiBUaGUgcGVybXV0ZQotKy8vIG1hc2tzIGZv ciBieXRlLXNodWZmbGVzIHVzZSB0aGUgc2FtZSBieXRlLW9yZGVyIGxheW91dCBhcyB0aGUgU1NF Ci0rLy8gX21tX3NldHJfZXBpOCBmb3JtcyBiZWNhdXNlIFBQQzY0IExFIHJlZ2lzdGVyLXRvLW1l bW9yeSBieXRlIG9yZGVyIGlzIHRoZQotKy8vIHNhbWUgYXMgeDg2IExFLgotKwotKy8vIFNjYWxl OiAoKHgqeSkgKyAxMjgpICogMjU3ID4+IDE2LCBwZXIgMTYtYml0IGxhbmUgKG1hdGNoZXMgdGhl IFNTU0UzIGZvcm0pLgotK3N0YXRpYyBpbmxpbmUgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgc2Nh bGUoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgeCwgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgeSkg ewotKyAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2MTI4ID0gdmVjX3NwbGF0cygo dW5zaWduZWQgc2hvcnQpMTI4KTsKLSsgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQg djI1NyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTI1Nyk7Ci0rICAgIF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IHN1bW0gPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpKChfX3ZlY3RvciB1 bnNpZ25lZCBzaG9ydCkoeCAqIHkpICsgdjEyOCk7Ci0rICAgIC8vIF9tbV9tdWxoaV9lcHUxNiBl cXVpdmFsZW50OiAxNngxNiAtPiBoaWdoIDE2IGJpdHMsIHZpYSBtdWxlK211bG8rcGVybXV0ZS4K LSsgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGV2ZW4gPSB2ZWNfdm11bGV1aChzdW1tLCB2MjU3 KTsKLSsgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IG9kZCAgPSB2ZWNfdm11bG91aChzdW1tLCB2 MjU3KTsKLSsgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciB4Zm9ybSA9IChfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyKXsKLSsgICAgICAgIDB4MDIsIDB4MDMsIDB4MTIsIDB4MTMsICAweDA2 LCAweDA3LCAweDE2LCAweDE3LAotKyAgICAgICAgMHgwQSwgMHgwQiwgMHgxQSwgMHgxQiwgIDB4 MEUsIDB4MEYsIDB4MUUsIDB4MUYKLSsgICAgfTsKLSsgICAgcmV0dXJuIChfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydCl2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilldmVuLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyKW9kZCwgeGZvcm0pOwotK30KLSsKLStzdGF0aWMgdm9pZCBwcmVtdWxfc2hvdWxkX3N3 YXBSQihib29sIGtTd2FwUkIsIHVpbnQzMl90KiBkc3QsIGNvbnN0IHVpbnQzMl90KiBzcmMsIGlu dCBjb3VudCkgewotKyAgICBhdXRvIHByZW11bDggPSBbPV0oX192ZWN0b3IgdW5zaWduZWQgY2hh ciogbG8sIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIqIGhpKSB7Ci0rICAgICAgICBjb25zdCBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIHplcm9zID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezB9Owot KyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBwbGFuYXIgPSBrU3dhcFJCCi0r ICAgICAgICAgICAgPyAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7Miw2LDEwLDE0LCAxLDUsOSwx MywgMCw0LDgsMTIsIDMsNywxMSwxNX0KLSsgICAgICAgICAgICA6IChfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyKXswLDQsOCwxMiwgMSw1LDksMTMsIDIsNiwxMCwxNCwgMyw3LDExLDE1fTsKLSsKLSsg ICAgICAgIC8vIFN3aXp6bGUgZWFjaCAxNi1ieXRlIGNodW5rIGludG8gOC1iaXQgcGxhbmFyIGxh eW91dC4KLSsgICAgICAgICpsbyA9IHZlY19wZXJtKCpsbywgKmxvLCBwbGFuYXIpOyAgICAgICAg ICAgICAgICAgICAgICAgIC8vIHJycnJnZ2dnIGJiYmJhYWFhCi0rICAgICAgICAqaGkgPSB2ZWNf cGVybSgqaGksICpoaSwgcGxhbmFyKTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBSUlJSR0dH RyBCQkJCQUFBQQotKwotKyAgICAgICAgLy8gSW50ZXJsZWF2ZSB0aGUgdHdvIGhhbHZlcyBhdCAz Mi1iaXQgZ3JhbnVsYXJpdHkuCi0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHJnID0g KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpCi0rICAgICAgICAgICAgdmVjX21lcmdlaCgoX192ZWN0 b3IgdW5zaWduZWQgaW50KSpsbywgKF9fdmVjdG9yIHVuc2lnbmVkIGludCkqaGkpOyAgLy8gcnJy clJSUlIgZ2dnZ0dHR0cKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgYmEgPSAoX192 ZWN0b3IgdW5zaWduZWQgY2hhcikKLSsgICAgICAgICAgICB2ZWNfbWVyZ2VsKChfX3ZlY3RvciB1 bnNpZ25lZCBpbnQpKmxvLCAoX192ZWN0b3IgdW5zaWduZWQgaW50KSpoaSk7ICAvLyBiYmJiQkJC QiBhYWFhQUFBQQotKwotKyAgICAgICAgLy8gVW5wYWNrIHRvIDE2LWJpdCBwbGFuYXIuCi0rICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCByID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 KXZlY19tZXJnZWgocmcsIHplcm9zKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IGcgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX21lcmdlbChyZywgemVyb3MpOwotKyAg ICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgYiA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCl2ZWNfbWVyZ2VoKGJhLCB6ZXJvcyk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCBhID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19tZXJnZWwoYmEsIHplcm9zKTsKLSsK LSsgICAgICAgIC8vIFByZW11bHRpcGx5IGVhY2ggY29sb3VyIGNoYW5uZWwgYnkgYWxwaGEuCi0r ICAgICAgICByID0gc2NhbGUociwgYSk7Ci0rICAgICAgICBnID0gc2NhbGUoZywgYSk7Ci0rICAg ICAgICBiID0gc2NhbGUoYiwgYSk7Ci0rCi0rICAgICAgICAvLyBSZXBhY2sgaW50byBpbnRlcmxh Y2VkIHBpeGVscy4KLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHY4ID0g dmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCByZzIgPSB2ZWNfb3IociwgdmVjX3NsKGcsIHY4KSk7Ci0rICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBzaG9ydCBiYTIgPSB2ZWNfb3IoYiwgdmVjX3NsKGEsIHY4KSk7Ci0rICAgICAg ICAqbG8gPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2VoKHJnMiwgYmEyKTsKLSsg ICAgICAgICpoaSA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19tZXJnZWwocmcyLCBiYTIp OwotKyAgICB9OwotKwotKyAgICB3aGlsZSAoY291bnQgPj0gOCkgewotKyAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgY2hhciBsbyA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopKHNy YyArIDApKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgaGkgPSB2ZWNfeGwoMCwg KGNvbnN0IHVuc2lnbmVkIGNoYXIqKShzcmMgKyA0KSk7Ci0rICAgICAgICBwcmVtdWw4KCZsbywg JmhpKTsKLSsgICAgICAgIHZlY194c3QobG8sIDAsICh1bnNpZ25lZCBjaGFyKikoZHN0ICsgMCkp OwotKyAgICAgICAgdmVjX3hzdChoaSwgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyA0KSk7Ci0r ICAgICAgICBzcmMgKz0gODsgZHN0ICs9IDg7IGNvdW50IC09IDg7Ci0rICAgIH0KLSsKLSsgICAg aWYgKGNvdW50ID49IDQpIHsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgbG8gPSB2 ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXNyYyk7Ci0rICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyIGhpID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezB9OwotKyAgICAgICAg cHJlbXVsOCgmbG8sICZoaSk7Ci0rICAgICAgICB2ZWNfeHN0KGxvLCAwLCAodW5zaWduZWQgY2hh ciopZHN0KTsKLSsgICAgICAgIHNyYyArPSA0OyBkc3QgKz0gNDsgY291bnQgLT0gNDsKLSsgICAg fQotKwotKyAgICBhdXRvIHByb2MgPSBrU3dhcFJCID8gUkdCQV90b19iZ3JBX3BvcnRhYmxlIDog UkdCQV90b19yZ2JBX3BvcnRhYmxlOwotKyAgICBwcm9jKGRzdCwgc3JjLCBjb3VudCk7Ci0rfQot KwotK3ZvaWQgUkdCQV90b19yZ2JBKHVpbnQzMl90KiBkc3QsIGNvbnN0IHVpbnQzMl90KiBzcmMs IGludCBjb3VudCkgewotKyAgICBwcmVtdWxfc2hvdWxkX3N3YXBSQihmYWxzZSwgZHN0LCBzcmMs IGNvdW50KTsKLSt9Ci0rCi0rdm9pZCBSR0JBX3RvX2JnckEodWludDMyX3QqIGRzdCwgY29uc3Qg dWludDMyX3QqIHNyYywgaW50IGNvdW50KSB7Ci0rICAgIHByZW11bF9zaG91bGRfc3dhcFJCKHRy dWUsIGRzdCwgc3JjLCBjb3VudCk7Ci0rfQotKwotK3ZvaWQgUkdCQV90b19CR1JBKHVpbnQzMl90 KiBkc3QsIGNvbnN0IHVpbnQzMl90KiBzcmMsIGludCBjb3VudCkgewotKyAgICBjb25zdCBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIHN3YXBSQiA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKLSsg ICAgICAgIDIsMSwwLDMsIDYsNSw0LDcsIDEwLDksOCwxMSwgMTQsMTMsMTIsMTUKLSsgICAgfTsK LSsgICAgd2hpbGUgKGNvdW50ID49IDQpIHsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIgcmdiYSA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopc3JjKTsKLSsgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgYmdyYSA9IHZlY19wZXJtKHJnYmEsIHJnYmEsIHN3YXBS Qik7Ci0rICAgICAgICB2ZWNfeHN0KGJncmEsIDAsICh1bnNpZ25lZCBjaGFyKilkc3QpOwotKyAg ICAgICAgc3JjICs9IDQ7IGRzdCArPSA0OyBjb3VudCAtPSA0OwotKyAgICB9Ci0rICAgIFJHQkFf dG9fQkdSQV9wb3J0YWJsZShkc3QsIHNyYywgY291bnQpOwotK30KLSsKLSt2b2lkIGdyYXlBX3Rv X1JHQkEodWludDMyX3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywgaW50IGNvdW50KSB7Ci0r ICAgIHdoaWxlIChjb3VudCA+PSA4KSB7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCBnYSA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfeGwoMCwgc3JjKTsKLSsgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdnID0gdmVjX29yKAotKyAgICAgICAgICAgICAgICB2 ZWNfYW5kKGdhLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkweDAwRkYpKSwKLSsgICAgICAg ICAgICAgICAgdmVjX3NsIChnYSwgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCkpKTsKLSsg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdnZ2FfbG8gPSB2ZWNfbWVyZ2VoKGdnLCBn YSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnZ2dhX2hpID0gdmVjX21lcmdl bChnZywgZ2EpOwotKyAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilnZ2dh X2xvLCAwLCAodW5zaWduZWQgY2hhciopKGRzdCArIDApKTsKLSsgICAgICAgIHZlY194c3QoKF9f dmVjdG9yIHVuc2lnbmVkIGNoYXIpZ2dnYV9oaSwgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyA0 KSk7Ci0rICAgICAgICBzcmMgKz0gOCAqIDI7IGRzdCArPSA4OyBjb3VudCAtPSA4OwotKyAgICB9 Ci0rICAgIGdyYXlBX3RvX1JHQkFfcG9ydGFibGUoZHN0LCBzcmMsIGNvdW50KTsKLSt9Ci0rCi0r dm9pZCBncmF5QV90b19yZ2JBKHVpbnQzMl90IGRzdFtdLCBjb25zdCB1aW50OF90KiBzcmMsIGlu dCBjb3VudCkgewotKyAgICB3aGlsZSAoY291bnQgPj0gOCkgewotKyAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgc2hvcnQgZ3JheUEgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX3hsKDAs IHNyYyk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnMCA9IHZlY19hbmQoZ3Jh eUEsIHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTB4MDBGRikpOwotKyAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgc2hvcnQgYTAgPSB2ZWNfc3IgICAoZ3JheUEsIHZlY19zcGxhdHMoKHVuc2ln bmVkIHNob3J0KTgpKTsKLSsgICAgICAgIGcwID0gc2NhbGUoZzAsIGEwKTsKLSsgICAgICAgIGNv bnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHY4ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hv cnQpOCk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnZyA9IHZlY19vcihnMCwg dmVjX3NsKGcwLCB2OCkpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2EgPSB2 ZWNfb3IoZzAsIHZlY19zbChhMCwgdjgpKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0IGdnZ2FfbG8gPSB2ZWNfbWVyZ2VoKGdnLCBnYSk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydCBnZ2dhX2hpID0gdmVjX21lcmdlbChnZywgZ2EpOwotKyAgICAgICAgdmVjX3hz dCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilnZ2dhX2xvLCAwLCAodW5zaWduZWQgY2hhciopKGRz dCArIDApKTsKLSsgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ2dnYV9o aSwgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyA0KSk7Ci0rICAgICAgICBzcmMgKz0gOCAqIDI7 IGRzdCArPSA4OyBjb3VudCAtPSA4OwotKyAgICB9Ci0rICAgIGdyYXlBX3RvX3JnYkFfcG9ydGFi bGUoZHN0LCBzcmMsIGNvdW50KTsKLSt9Ci0rCi0rZW51bSBGb3JtYXQgeyBrUkdCMSwga0JHUjEg fTsKLStzdGF0aWMgdm9pZCBpbnZlcnRlZF9jbXlrX3RvKEZvcm1hdCBmb3JtYXQsIHVpbnQzMl90 KiBkc3QsIGNvbnN0IHVpbnQzMl90KiBzcmMsIGludCBjb3VudCkgewotKyAgICBhdXRvIGNvbnZl cnQ4ID0gWz1dKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIqIGxvLCBfX3ZlY3RvciB1bnNpZ25lZCBj aGFyKiBoaSkgewotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciB6ZXJvcyA9 IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXswfTsKLSsgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVu c2lnbmVkIGNoYXIgcGxhbmFyID0gKGtCR1IxID09IGZvcm1hdCkKLSsgICAgICAgICAgICA/IChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsyLDYsMTAsMTQsIDEsNSw5LDEzLCAwLDQsOCwxMiwgMyw3 LDExLDE1fQotKyAgICAgICAgICAgIDogKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezAsNCw4LDEy LCAxLDUsOSwxMywgMiw2LDEwLDE0LCAzLDcsMTEsMTV9OwotKwotKyAgICAgICAgKmxvID0gdmVj X3Blcm0oKmxvLCAqbG8sIHBsYW5hcik7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2NjY21t bW0geXl5eWtra2sKLSsgICAgICAgICpoaSA9IHZlY19wZXJtKCpoaSwgKmhpLCBwbGFuYXIpOyAg ICAgICAgICAgICAgICAgICAgICAgIC8vIENDQ0NNTU1NIFlZWVlLS0tLCi0rICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIGNtID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpCi0rICAgICAg ICAgICAgdmVjX21lcmdlaCgoX192ZWN0b3IgdW5zaWduZWQgaW50KSpsbywgKF9fdmVjdG9yIHVu c2lnbmVkIGludCkqaGkpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB5ayA9IChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKQotKyAgICAgICAgICAgIHZlY19tZXJnZWwoKF9fdmVjdG9y IHVuc2lnbmVkIGludCkqbG8sIChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKmhpKTsKLSsKLSsgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGMgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQp dmVjX21lcmdlaChjbSwgemVyb3MpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQg bSA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VsKGNtLCB6ZXJvcyk7Ci0rICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB5ID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 KXZlY19tZXJnZWgoeWssIHplcm9zKTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IGsgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX21lcmdlbCh5aywgemVyb3MpOwotKwot KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgciA9IHNjYWxlKGMsIGspOwotKyAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZyA9IHNjYWxlKG0sIGspOwotKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQgYiA9IHNjYWxlKHksIGspOwotKwotKyAgICAgICAgY29uc3Qg X192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjggPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4 KTsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHJnID0gdmVjX29yKHIsIHZlY19z bChnLCB2OCkpOwotKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgYmEgPSB2ZWNfb3Io YiwgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMHhGRjAwKSk7Ci0rICAgICAgICAqbG8gPSAo X192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2VoKHJnLCBiYSk7Ci0rICAgICAgICAqaGkg PSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2VsKHJnLCBiYSk7Ci0rICAgIH07Ci0r Ci0rICAgIHdoaWxlIChjb3VudCA+PSA4KSB7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBj aGFyIGxvID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKikoc3JjICsgMCkpOwotKyAg ICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBoaSA9IHZlY194bCgwLCAoY29uc3QgdW5zaWdu ZWQgY2hhciopKHNyYyArIDQpKTsKLSsgICAgICAgIGNvbnZlcnQ4KCZsbywgJmhpKTsKLSsgICAg ICAgIHZlY194c3QobG8sIDAsICh1bnNpZ25lZCBjaGFyKikoZHN0ICsgMCkpOwotKyAgICAgICAg dmVjX3hzdChoaSwgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyA0KSk7Ci0rICAgICAgICBzcmMg Kz0gODsgZHN0ICs9IDg7IGNvdW50IC09IDg7Ci0rICAgIH0KLSsgICAgaWYgKGNvdW50ID49IDQp IHsKLSsgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgbG8gPSB2ZWNfeGwoMCwgKGNvbnN0 IHVuc2lnbmVkIGNoYXIqKXNyYyk7Ci0rICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGhp ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezB9OwotKyAgICAgICAgY29udmVydDgoJmxvLCAm aGkpOwotKyAgICAgICAgdmVjX3hzdChsbywgMCwgKHVuc2lnbmVkIGNoYXIqKWRzdCk7Ci0rICAg ICAgICBzcmMgKz0gNDsgZHN0ICs9IDQ7IGNvdW50IC09IDQ7Ci0rICAgIH0KLSsgICAgYXV0byBw cm9jID0gKGtCR1IxID09IGZvcm1hdCkgPyBpbnZlcnRlZF9DTVlLX3RvX0JHUjFfcG9ydGFibGUg OiBpbnZlcnRlZF9DTVlLX3RvX1JHQjFfcG9ydGFibGU7Ci0rICAgIHByb2MoZHN0LCBzcmMsIGNv dW50KTsKLSt9Ci0rCi0rdm9pZCBpbnZlcnRlZF9DTVlLX3RvX1JHQjEodWludDMyX3QgZHN0W10s IGNvbnN0IHVpbnQzMl90KiBzcmMsIGludCBjb3VudCkgewotKyAgICBpbnZlcnRlZF9jbXlrX3Rv KGtSR0IxLCBkc3QsIHNyYywgY291bnQpOwotK30KLSsKLSt2b2lkIGludmVydGVkX0NNWUtfdG9f QkdSMSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDMyX3QqIHNyYywgaW50IGNvdW50KSB7Ci0r ICAgIGludmVydGVkX2NteWtfdG8oa0JHUjEsIGRzdCwgc3JjLCBjb3VudCk7Ci0rfQotKwotK3Zv aWQgcmdiQV90b19SR0JBKHVpbnQzMl90KiBkc3QsIGNvbnN0IHVpbnQzMl90KiBzcmMsIGludCBj b3VudCkgewotKyAgICByZ2JBX3RvX1JHQkFfcG9ydGFibGUoZHN0LCBzcmMsIGNvdW50KTsKLSt9 Ci0rCi0rdm9pZCByZ2JBX3RvX0JHUkEodWludDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNy YywgaW50IGNvdW50KSB7Ci0rICAgIHJnYkFfdG9fQkdSQV9wb3J0YWJsZShkc3QsIHNyYywgY291 bnQpOwotK30KLSsKLSAjZWxpZiBTS19DUFVfTFNYX0xFVkVMID49IFNLX0NQVV9MU1hfTEVWRUxf TEFTWAotIC8vIC0tIExBU1ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIAotQEAg LTE3MzYsNiArMTk2MSwzOSBAQCBzdGF0aWMgdm9pZCBncmF5X3RvX1JHQjFfcG9ydGFibGUodWlu dDMyX3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywgaW50IGNvdW50KQotICAgICAgICAgfQot ICAgICAgICAgZ3JheV90b19SR0IxX3BvcnRhYmxlKGRzdCwgc3JjLCBjb3VudCk7Ci0gICAgIH0K LSsjZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKLSsgICAgdm9p ZCBncmF5X3RvX1JHQjEodWludDMyX3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywgaW50IGNv dW50KSB7Ci0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGFscGhhcyA9IHZl Y19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMHhGRik7Ci0rICAgICAgICB3aGlsZSAoY291bnQgPj0g MTYpIHsKLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGdyYXlzID0gdmVjX3hs KDAsIHNyYyk7Ci0rCi0rICAgICAgICAgICAgLy8gUmVwbGljYXRlIGdyYXkgYnl0ZTogZ2cgPSB1 bnBhY2soZ3JheSwgZ3JheSkgcGVyIDgtYml0IGxhbmUuCi0rICAgICAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgY2hhciBnZ19sbyA9IHZlY19tZXJnZWgoZ3JheXMsIGdyYXlzKTsKLSsgICAgICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGdnX2hpID0gdmVjX21lcmdlbChncmF5cywgZ3Jh eXMpOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZ2FfbG8gPSB2ZWNfbWVy Z2VoKGdyYXlzLCBhbHBoYXMpOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIg Z2FfaGkgPSB2ZWNfbWVyZ2VsKGdyYXlzLCBhbHBoYXMpOwotKwotKyAgICAgICAgICAgIC8vIElu dGVybGVhdmUgZy1wYWlycyBhbmQgZ2EtcGFpcnMgYXQgMTYtYml0IGdyYW51bGFyaXR5LgotKyAg ICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdnZ2EwID0gdmVjX21lcmdlaCgoX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQpZ2dfbG8sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClnYV9s byk7Ci0rICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2dnYTEgPSB2ZWNfbWVy Z2VsKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClnZ19sbywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0KWdhX2xvKTsKLSsgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnZ2dhMiA9 IHZlY19tZXJnZWgoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWdnX2hpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5z aWduZWQgc2hvcnQpZ2FfaGkpOwotKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IGdnZ2EzID0gdmVjX21lcmdlbCgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpZ2dfaGksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydClnYV9oaSk7Ci0rCi0rICAgICAgICAgICAgdmVjX3hzdCgoX192 ZWN0b3IgdW5zaWduZWQgY2hhcilnZ2dhMCwgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyAgMCkp OwotKyAgICAgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ2dnYTEsIDAs ICh1bnNpZ25lZCBjaGFyKikoZHN0ICsgIDQpKTsKLSsgICAgICAgICAgICB2ZWNfeHN0KChfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyKWdnZ2EyLCAwLCAodW5zaWduZWQgY2hhciopKGRzdCArICA4KSk7 Ci0rICAgICAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilnZ2dhMywgMCwg KHVuc2lnbmVkIGNoYXIqKShkc3QgKyAxMikpOwotKwotKyAgICAgICAgICAgIHNyYyArPSAxNjsK LSsgICAgICAgICAgICBkc3QgKz0gMTY7Ci0rICAgICAgICAgICAgY291bnQgLT0gMTY7Ci0rICAg ICAgICB9Ci0rICAgICAgICBncmF5X3RvX1JHQjFfcG9ydGFibGUoZHN0LCBzcmMsIGNvdW50KTsK LSsgICAgfQotICNlbGlmIFNLX0NQVV9MU1hfTEVWRUwgPj0gU0tfQ1BVX0xTWF9MRVZFTF9MQVNY Ci0gICAgIC8qbm90IHN0YXRpYyovIGlubGluZSB2b2lkIGdyYXlfdG9fUkdCMSh1aW50MzJfdCBk c3RbXSwgY29uc3QgdWludDhfdCogc3JjLCBpbnQgY291bnQpIHsKLSAgICAgICAgIGNvbnN0IF9f bTI1NmkgYWxwaGFzID0gX19sYXN4X3h2cmVwbGdyMnZyX2IoMHhGRik7Ci1AQCAtMTkyMCw2ICsy MTc4LDM3IEBAIHN0YXRpYyB2b2lkIFJHQl90b19CR1IxX3BvcnRhYmxlKHVpbnQzMl90IGRzdFtd LCBjb25zdCB1aW50OF90KiBzcmMsIGludCBjb3VudCkKLSAgICAgICAgIHByb2MoZHN0LCBzcmMs IGNvdW50KTsKLSAgICAgfQotIAotKyAgICB2b2lkIFJHQl90b19SR0IxKHVpbnQzMl90IGRzdFtd LCBjb25zdCB1aW50OF90KiBzcmMsIGludCBjb3VudCkgewotKyAgICAgICAgaW5zZXJ0X2FscGhh X3Nob3VsZF9zd2FwcmIoZmFsc2UsIGRzdCwgc3JjLCBjb3VudCk7Ci0rICAgIH0KLSsgICAgdm9p ZCBSR0JfdG9fQkdSMSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhfdCogc3JjLCBpbnQgY291 bnQpIHsKLSsgICAgICAgIGluc2VydF9hbHBoYV9zaG91bGRfc3dhcHJiKHRydWUsIGRzdCwgc3Jj LCBjb3VudCk7Ci0rICAgIH0KLSsjZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQo X19WU1hfXykKLSsgICAgc3RhdGljIHZvaWQgaW5zZXJ0X2FscGhhX3Nob3VsZF9zd2FwcmIoYm9v bCBrU3dhcFJCLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhfdCogc3JjLCBpbnQgY291bnQpIHsKLSsgICAgICAg IC8vIGFscGhhTWFzayA9IDB4RkYwMDAwMDAgcGVyIDMyLWJpdCBsYW5lIC0+IGJ5dGVzIChpbiBM RSBtZW1vcnkgbGF5b3V0KSBhcmUKLSsgICAgICAgIC8vIHswMCwwMCwwMCxGRiwgMDAsMDAsMDAs RkYsIC4uLn0uCi0rICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGFscGhhTWFz ayA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKLSsgICAgICAgICAgICAwLDAsMCwweEZGLCAw LDAsMCwweEZGLCAwLDAsMCwweEZGLCAwLDAsMCwweEZGCi0rICAgICAgICB9OwotKyAgICAgICAg Ly8gJ1gnICg9IDApIGlzIGlycmVsZXZhbnQ6IHRoZSBhbHBoYU1hc2sgT1Igb3ZlcndyaXRlcyB0 aG9zZSBsYW5lcyB3aXRoIEZGLgotKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hh ciBleHBhbmQgPSBrU3dhcFJCCi0rICAgICAgICAgICAgPyAoX192ZWN0b3IgdW5zaWduZWQgY2hh cil7MiwxLDAsMCwgNSw0LDMsMCwgOCw3LDYsMCwgMTEsMTAsOSwwfQotKyAgICAgICAgICAgIDog KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezAsMSwyLDAsIDMsNCw1LDAsIDYsNyw4LDAsICA5LDEw LDExLDB9OwotKwotKyAgICAgICAgd2hpbGUgKGNvdW50ID49IDYpIHsKLSsgICAgICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyIHJnYiA9IHZlY194bCgwLCBzcmMpOwotKyAgICAgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmdiYSA9IHZlY19vcih2ZWNfcGVybShyZ2IsIHJnYiwg ZXhwYW5kKSwgYWxwaGFNYXNrKTsKLSsgICAgICAgICAgICB2ZWNfeHN0KHJnYmEsIDAsICh1bnNp Z25lZCBjaGFyKilkc3QpOwotKyAgICAgICAgICAgIHNyYyArPSA0KjM7Ci0rICAgICAgICAgICAg ZHN0ICs9IDQ7Ci0rICAgICAgICAgICAgY291bnQgLT0gNDsKLSsgICAgICAgIH0KLSsgICAgICAg IGF1dG8gcHJvYyA9IGtTd2FwUkIgPyBSR0JfdG9fQkdSMV9wb3J0YWJsZSA6IFJHQl90b19SR0Ix X3BvcnRhYmxlOwotKyAgICAgICAgcHJvYyhkc3QsIHNyYywgY291bnQpOwotKyAgICB9Ci0rCi0g ICAgIHZvaWQgUkdCX3RvX1JHQjEodWludDMyX3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywg aW50IGNvdW50KSB7Ci0gICAgICAgICBpbnNlcnRfYWxwaGFfc2hvdWxkX3N3YXByYihmYWxzZSwg ZHN0LCBzcmMsIGNvdW50KTsKLSAgICAgfQotCi1iYXNlLWNvbW1pdDogYThkNTMwYWMxM2YwY2U3 ZTkzN2MwNDdmMDFmMGQzNjc2NGY1ZDM0ZQotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAw MDItQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLWxpYndlYnAucGF0Y2ggYi8wMDAyLUFkZC1WU1gt aW5zdHJ1Y3Rpb25zLWZvci1saWJ3ZWJwLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAxZjg1N2E3Li4wMDAwMDAwCi0tLSBhLzAwMDItQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9y LWxpYndlYnAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNTI0ICswLDAgQEAKLUZyb20gYjll MTE2ODk4ODMwYTBmOWVkZDFiMDU2NjY1MWNlMmQ0OTg5NjE4ZCBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKLUZyb206ID0/VVRGLTg/cT9UcnVuZz0yMEw9QzM9QUE/PSA8OEB0bGUuaWQuYXU+Ci1E YXRlOiBGcmksIDEyIEp1biAyMDI2IDE1OjMwOjEzICsxMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMi8z XSBBZGQgVlNYIGluc3RydWN0aW9ucyBmb3IgbGlid2VicAotCi1Bc3Npc3RlZC1ieTogTGFuY2Ug QWxiZXJ0c29uIDxsYW5jZUBvc3Vvc2wub3JnPgotQXNzaXN0ZWQtYnk6IFRodXNoYW4gRmVybmFu ZG8gPHRodXNoYW5AdGh1c2hhbmZlcm5hbmRvLmNvbT4KLS0tLQotIG1lZGlhL2xpYndlYnAvc3Jj L2RzcC9hbHBoYV9wcm9jZXNzaW5nLmMgICAgIHwgICA2ICsKLSBtZWRpYS9saWJ3ZWJwL3NyYy9k c3AvYWxwaGFfcHJvY2Vzc2luZ192c3guYyB8IDI0NiArKysrKysrCi0gbWVkaWEvbGlid2VicC9z cmMvZHNwL2NwdS5oICAgICAgICAgICAgICAgICAgfCAgMTQgKy0KLSBtZWRpYS9saWJ3ZWJwL3Ny Yy9kc3AvZGVjLmMgICAgICAgICAgICAgICAgICB8ICAgNiArCi0gbWVkaWEvbGlid2VicC9zcmMv ZHNwL2RlY192c3guYyAgICAgICAgICAgICAgfCA3MzcgKysrKysrKysrKysrKysrKysrKwotIG1l ZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzLmMgICAgICAgICAgICAgIHwgICA2ICsKLSBtZWRp YS9saWJ3ZWJwL3NyYy9kc3AvZmlsdGVyc192c3guYyAgICAgICAgICB8IDE2MiArKysrCi0gbWVk aWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzLmMgICAgICAgICAgICAgfCAgIDYgKwotIG1lZGlh L2xpYndlYnAvc3JjL2RzcC9sb3NzbGVzc192c3guYyAgICAgICAgIHwgNDQ5ICsrKysrKysrKysr Ci0gbWVkaWEvbGlid2VicC9zcmMvZHNwL21vei5idWlsZCAgICAgICAgICAgICAgfCAgMTQgKwot IG1lZGlhL2xpYndlYnAvc3JjL2RzcC9yZXNjYWxlci5jICAgICAgICAgICAgIHwgICA2ICsKLSBt ZWRpYS9saWJ3ZWJwL3NyYy9kc3AvcmVzY2FsZXJfdnN4LmMgICAgICAgICB8IDIwMSArKysrKwot IG1lZGlhL2xpYndlYnAvc3JjL2RzcC91cHNhbXBsaW5nLmMgICAgICAgICAgIHwgIDEyICsKLSBt ZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZ192c3guYyAgICAgICB8IDE1MSArKysrCi0g bWVkaWEvbGlid2VicC9zcmMvZHNwL3l1di5jICAgICAgICAgICAgICAgICAgfCAgIDYgKwotIG1l ZGlhL2xpYndlYnAvc3JjL2RzcC95dXYuaCAgICAgICAgICAgICAgICAgIHwgIDIxICsKLSBtZWRp YS9saWJ3ZWJwL3NyYy9kc3AveXV2X3ZzeC5jICAgICAgICAgICAgICB8IDIwNiArKysrKysKLSBt ZWRpYS9saWJ3ZWJwL3NyYy9tb3ovY3B1LmNwcCAgICAgICAgICAgICAgICB8ICAgNCArCi0gMTgg ZmlsZXMgY2hhbmdlZCwgMjI1MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0gY3JlYXRl IG1vZGUgMTAwNjQ0IG1lZGlhL2xpYndlYnAvc3JjL2RzcC9hbHBoYV9wcm9jZXNzaW5nX3ZzeC5j Ci0gY3JlYXRlIG1vZGUgMTAwNjQ0IG1lZGlhL2xpYndlYnAvc3JjL2RzcC9kZWNfdnN4LmMKLSBj cmVhdGUgbW9kZSAxMDA2NDQgbWVkaWEvbGlid2VicC9zcmMvZHNwL2ZpbHRlcnNfdnN4LmMKLSBj cmVhdGUgbW9kZSAxMDA2NDQgbWVkaWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzX3ZzeC5jCi0g Y3JlYXRlIG1vZGUgMTAwNjQ0IG1lZGlhL2xpYndlYnAvc3JjL2RzcC9yZXNjYWxlcl92c3guYwot IGNyZWF0ZSBtb2RlIDEwMDY0NCBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZ192c3gu YwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2X3ZzeC5jCi0K LWRpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jIGIv bWVkaWEvbGlid2VicC9zcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmcuYwotaW5kZXggNDkyN2U3M2U4 MWJmLi41ZjkxNTJiZjcwMWEgMTAwNjQ0Ci0tLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxw aGFfcHJvY2Vzc2luZy5jCi0rKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vz c2luZy5jCi1AQCAtNDM0LDYgKzQzNCw3IEBAIGV4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9j ZXNzaW5nTUlQU2RzcFIyKHZvaWQpOwotIGV4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9jZXNz aW5nU1NFMih2b2lkKTsKLSBleHRlcm4gdm9pZCBXZWJQSW5pdEFscGhhUHJvY2Vzc2luZ1NTRTQx KHZvaWQpOwotIGV4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9jZXNzaW5nTkVPTih2b2lkKTsK LStleHRlcm4gdm9pZCBXZWJQSW5pdEFscGhhUHJvY2Vzc2luZ1ZTWCh2b2lkKTsKLSAKLSBXRUJQ X0RTUF9JTklUX0ZVTkMoV2ViUEluaXRBbHBoYVByb2Nlc3NpbmcpIHsKLSAgIFdlYlBNdWx0QVJH QlJvdyA9IFdlYlBNdWx0QVJHQlJvd19DOwotQEAgLTQ3Miw2ICs0NzMsMTEgQEAgV0VCUF9EU1Bf SU5JVF9GVU5DKFdlYlBJbml0QWxwaGFQcm9jZXNzaW5nKSB7Ci0gICAgIGlmIChWUDhHZXRDUFVJ bmZvKGtNSVBTZHNwUjIpKSB7Ci0gICAgICAgV2ViUEluaXRBbHBoYVByb2Nlc3NpbmdNSVBTZHNw UjIoKTsKLSAgICAgfQotKyNlbmRpZgotKyNpZiBkZWZpbmVkKFdFQlBfSEFWRV9WU1gpCi0rICAg IGlmIChWUDhHZXRDUFVJbmZvKGtWU1gpKSB7Ci0rICAgICAgV2ViUEluaXRBbHBoYVByb2Nlc3Np bmdWU1goKTsKLSsgICAgfQotICNlbmRpZgotICAgfQotIAotZGlmZiAtLWdpdCBhL21lZGlhL2xp YndlYnAvc3JjL2RzcC9hbHBoYV9wcm9jZXNzaW5nX3ZzeC5jIGIvbWVkaWEvbGlid2VicC9zcmMv ZHNwL2FscGhhX3Byb2Nlc3NpbmdfdnN4LmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAw MDAwMDAwMDAwMDAuLjJhYWQxY2Q4YjY0OAotLS0tIC9kZXYvbnVsbAotKysrIGIvbWVkaWEvbGli d2VicC9zcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmdfdnN4LmMKLUBAIC0wLDAgKzEsMjQ2IEBACi0r Ly8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSsvLwot Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp Y2Vuc2UKLSsvLyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSBy b290IG9mIHRoZSBzb3VyY2UKLSsvLyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0rLy8gaW4gdGhlIGZpbGUgUEFURU5U Uy4gQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0rLy8gYmUgZm91bmQgaW4g dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0rLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSsvLwotKy8vIFZTWCAoUG93ZXJQQykgdmVyc2lvbiBvZiBhbHBo YSBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4KLSsKLSsjaW5jbHVkZSAic3JjL2RzcC9kc3AuaCIKLSsK LSsjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gpCi0rCi0rI2luY2x1ZGUgPGFsdGl2ZWMuaD4KLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgInNyYy9kc3AvY3B1LmgiCi0rI2luY2x1 ZGUgInNyYy93ZWJwL3R5cGVzLmgiCi0rCi0rdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IHU4eDE2OwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdTE2eDg7Ci0rdHlwZWRl ZiBfX3ZlY3RvciBzaWduZWQgc2hvcnQgaTE2eDg7Ci0rdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25l ZCBpbnQgdTMyeDQ7Ci0rdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgaW50IGkzMng0OwotKwotKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gQWxwaGEgZGlzcGF0Y2ggLyBleHRyYWN0aW9uLgot KwotK3N0YXRpYyBpbnQgRGlzcGF0Y2hBbHBoYV9WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNU UklDVCBhbHBoYSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9zdHJp ZGUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0LCBpbnQgZHN0X3N0cmlkZSkgewotKyAgdWludDMy X3QgYWxwaGFfYW5kID0gMHhmZjsKLSsgIGludCBpLCBqLCBrOwotKyAgY29uc3QgdTh4MTYgemVy byA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7Ci0rICBjb25zdCB1MTZ4OCB6MTYgPSB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkwKTsKLSsgIGNvbnN0IHUzMng0IGFfbWFzayA9IHZl Y19zcGxhdHMoKHVpbnQzMl90KTB4ZmYpOyAgLy8gc2VsZWN0cyB0aGUgbG93IGJ5dGUKLSsgIHU4 eDE2IGFsbF9hbmQgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTB4ZmYpOwotKyAgY29uc3Qg aW50IGxpbWl0ID0gd2lkdGggJiB+MTU7Ci0rCi0rICBmb3IgKGogPSAwOyBqIDwgaGVpZ2h0OyAr K2opIHsKLSsgICAgdWludDhfdCogcHRyID0gZHN0OwotKyAgICBmb3IgKGkgPSAwOyBpIDwgbGlt aXQ7IGkgKz0gMTYpIHsKLSsgICAgICBjb25zdCB1OHgxNiBhMCA9IHZlY194bCgwLCAodW5zaWdu ZWQgY2hhciopJmFscGhhW2ldKTsKLSsgICAgICAvLyBTcHJlYWQgdGhlIDE2IGFscGhhIGJ5dGVz IHRvIHRoZSBsb3cgYnl0ZSBvZiAxNiAzMi1iaXQgbGFuZXMuCi0rICAgICAgY29uc3QgdTE2eDgg YTFfbG8gPSAodTE2eDgpdmVjX21lcmdlaChhMCwgemVybyk7Ci0rICAgICAgY29uc3QgdTE2eDgg YTFfaGkgPSAodTE2eDgpdmVjX21lcmdlbChhMCwgemVybyk7Ci0rICAgICAgY29uc3QgdTMyeDQg czAgPSAodTMyeDQpdmVjX21lcmdlaChhMV9sbywgejE2KTsKLSsgICAgICBjb25zdCB1MzJ4NCBz MSA9ICh1MzJ4NCl2ZWNfbWVyZ2VsKGExX2xvLCB6MTYpOwotKyAgICAgIGNvbnN0IHUzMng0IHMy ID0gKHUzMng0KXZlY19tZXJnZWgoYTFfaGksIHoxNik7Ci0rICAgICAgY29uc3QgdTMyeDQgczMg PSAodTMyeDQpdmVjX21lcmdlbChhMV9oaSwgejE2KTsKLSsgICAgICBjb25zdCB1MzJ4NCogc3By ZWFkWzRdID0geyZzMCwgJnMxLCAmczIsICZzM307Ci0rICAgICAgZm9yIChrID0gMDsgayA8IDQ7 ICsraykgewotKyAgICAgICAgY29uc3QgdTMyeDQgZCA9IHZlY194bCgwLCAodWludDMyX3QqKShw dHIgKyAxNiAqIGspKTsKLSsgICAgICAgIHZlY194c3QodmVjX3NlbChkLCAqc3ByZWFkW2tdLCBh X21hc2spLCAwLCAodWludDMyX3QqKShwdHIgKyAxNiAqIGspKTsKLSsgICAgICB9Ci0rICAgICAg YWxsX2FuZCA9IHZlY19hbmQoYWxsX2FuZCwgYTApOwotKyAgICAgIHB0ciArPSA2NDsKLSsgICAg fQotKyAgICBmb3IgKDsgaSA8IHdpZHRoOyArK2kpIHsKLSsgICAgICBjb25zdCB1aW50MzJfdCBh bHBoYV92YWx1ZSA9IGFscGhhW2ldOwotKyAgICAgIGRzdFs0ICogaV0gPSBhbHBoYV92YWx1ZTsK LSsgICAgICBhbHBoYV9hbmQgJj0gYWxwaGFfdmFsdWU7Ci0rICAgIH0KLSsgICAgYWxwaGEgKz0g YWxwaGFfc3RyaWRlOwotKyAgICBkc3QgKz0gZHN0X3N0cmlkZTsKLSsgIH0KLSsgIHsKLSsgICAg dW5zaWduZWQgY2hhciB0bXBbMTZdOwotKyAgICBtZW1jcHkodG1wLCAmYWxsX2FuZCwgMTYpOwot KyAgICBmb3IgKGsgPSAwOyBrIDwgMTY7ICsraykgYWxwaGFfYW5kICY9IHRtcFtrXTsKLSsgIH0K LSsgIHJldHVybiAoYWxwaGFfYW5kICE9IDB4ZmYpOwotK30KLSsKLStzdGF0aWMgdm9pZCBEaXNw YXRjaEFscGhhVG9HcmVlbl9WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBhbHBoYSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX3N0cmlkZSwg aW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCogV0VCUF9SRVNUUklDVCBkc3QsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBkc3Rfc3RyaWRlKSB7Ci0rICBpbnQgaSwgajsKLSsgIGNvbnN0 IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAgY29uc3QgdTE2 eDggejE2ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMCk7Ci0rICBjb25zdCBpbnQgbGlt aXQgPSB3aWR0aCAmIH4xNTsKLSsgIGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7ICsraikgewotKyAg ICBmb3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkgKz0gMTYpIHsKLSsgICAgICBjb25zdCB1OHgxNiBh MCA9IHZlY194bCgwLCAodW5zaWduZWQgY2hhciopJmFscGhhW2ldKTsKLSsgICAgICAvLyBQbGFj ZSBlYWNoIGFscGhhIGJ5dGUgaW50byB0aGUgZ3JlZW4gc2xvdCAoPDwgOCkgb2YgYSAzMi1iaXQg bGFuZS4KLSsgICAgICBjb25zdCB1MTZ4OCBhMV9sbyA9ICh1MTZ4OCl2ZWNfbWVyZ2VoKHplcm8s IGEwKTsgIC8vIG5vdGUgdGhlICd6ZXJvJyBmaXJzdAotKyAgICAgIGNvbnN0IHUxNng4IGExX2hp ID0gKHUxNng4KXZlY19tZXJnZWwoemVybywgYTApOwotKyAgICAgIGNvbnN0IHUzMng0IGcwID0g KHUzMng0KXZlY19tZXJnZWgoYTFfbG8sIHoxNik7Ci0rICAgICAgY29uc3QgdTMyeDQgZzEgPSAo dTMyeDQpdmVjX21lcmdlbChhMV9sbywgejE2KTsKLSsgICAgICBjb25zdCB1MzJ4NCBnMiA9ICh1 MzJ4NCl2ZWNfbWVyZ2VoKGExX2hpLCB6MTYpOwotKyAgICAgIGNvbnN0IHUzMng0IGczID0gKHUz Mng0KXZlY19tZXJnZWwoYTFfaGksIHoxNik7Ci0rICAgICAgdmVjX3hzdChnMCwgMCwgJmRzdFtp ICsgMF0pOwotKyAgICAgIHZlY194c3QoZzEsIDAsICZkc3RbaSArIDRdKTsKLSsgICAgICB2ZWNf eHN0KGcyLCAwLCAmZHN0W2kgKyA4XSk7Ci0rICAgICAgdmVjX3hzdChnMywgMCwgJmRzdFtpICsg MTJdKTsKLSsgICAgfQotKyAgICBmb3IgKDsgaSA8IHdpZHRoOyArK2kpIGRzdFtpXSA9IGFscGhh W2ldIDw8IDg7Ci0rICAgIGFscGhhICs9IGFscGhhX3N0cmlkZTsKLSsgICAgZHN0ICs9IGRzdF9z dHJpZGU7Ci0rICB9Ci0rfQotKwotK3N0YXRpYyBpbnQgRXh0cmFjdEFscGhhX1ZTWChjb25zdCB1 aW50OF90KiBXRUJQX1JFU1RSSUNUIGFyZ2IsIGludCBhcmdiX3N0cmlkZSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50OF90KiBXRUJQX1JF U1RSSUNUIGFscGhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfc3Ry aWRlKSB7Ci0rICB1aW50MzJfdCBhbHBoYV9hbmQgPSAweGZmOwotKyAgaW50IGksIGosIGs7Ci0r ICBjb25zdCB1MzJ4NCBhX21hc2sgPSB2ZWNfc3BsYXRzKCh1aW50MzJfdCkweGZmKTsgIC8vIGtl ZXBzIHRoZSBsb3cgYnl0ZQotKyAgdTh4MTYgYWxsX2FuZCA9IHZlY19zcGxhdHMoKHVuc2lnbmVk IGNoYXIpMHhmZik7Ci0rICBjb25zdCBpbnQgbGltaXQgPSB3aWR0aCAmIH43OwotKwotKyAgZm9y IChqID0gMDsgaiA8IGhlaWdodDsgKytqKSB7Ci0rICAgIGNvbnN0IHVpbnQzMl90KiBzcmMgPSAo Y29uc3QgdWludDMyX3QqKWFyZ2I7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSArPSA4 KSB7Ci0rICAgICAgY29uc3QgdTMyeDQgYTAgPSB2ZWNfYW5kKHZlY194bCgwLCAodWludDMyX3Qq KShzcmMgKyAwKSksIGFfbWFzayk7Ci0rICAgICAgY29uc3QgdTMyeDQgYTEgPSB2ZWNfYW5kKHZl Y194bCgwLCAodWludDMyX3QqKShzcmMgKyA0KSksIGFfbWFzayk7Ci0rICAgICAgY29uc3QgaTE2 eDggYzAgPSB2ZWNfcGFja3MoKGkzMng0KWEwLCAoaTMyeDQpYTEpOwotKyAgICAgIGNvbnN0IHU4 eDE2IGQwID0gdmVjX3BhY2tzdShjMCwgYzApOyAgLy8gOCBhbHBoYSBieXRlcyBpbiB0aGUgbG93 IGhhbGYKLSsgICAgICBtZW1jcHkoJmFscGhhW2ldLCAmZDAsIDgpOwotKyAgICAgIGFsbF9hbmQg PSB2ZWNfYW5kKGFsbF9hbmQsIGQwKTsKLSsgICAgICBzcmMgKz0gODsKLSsgICAgfQotKyAgICBm b3IgKDsgaSA8IHdpZHRoOyArK2kpIHsKLSsgICAgICBjb25zdCB1aW50MzJfdCBhbHBoYV92YWx1 ZSA9IGFyZ2JbNCAqIGldOwotKyAgICAgIGFscGhhW2ldID0gYWxwaGFfdmFsdWU7Ci0rICAgICAg YWxwaGFfYW5kICY9IGFscGhhX3ZhbHVlOwotKyAgICB9Ci0rICAgIGFyZ2IgKz0gYXJnYl9zdHJp ZGU7Ci0rICAgIGFscGhhICs9IGFscGhhX3N0cmlkZTsKLSsgIH0KLSsgIHsKLSsgICAgdW5zaWdu ZWQgY2hhciB0bXBbMTZdOwotKyAgICBtZW1jcHkodG1wLCAmYWxsX2FuZCwgMTYpOwotKyAgICBm b3IgKGsgPSAwOyBrIDwgODsgKytrKSBhbHBoYV9hbmQgJj0gdG1wW2tdOwotKyAgfQotKyAgcmV0 dXJuIChhbHBoYV9hbmQgPT0gMHhmZik7Ci0rfQotKwotK3N0YXRpYyB2b2lkIEV4dHJhY3RHcmVl bl9WU1goY29uc3QgdWludDMyX3QqIFdFQlBfUkVTVFJJQ1QgYXJnYiwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgYWxwaGEsIGludCBzaXplKSB7 Ci0rICBpbnQgaTsKLSsgIGNvbnN0IHUzMng0IG1hc2sgPSB2ZWNfc3BsYXRzKCh1aW50MzJfdCkw eGZmKTsKLSsgIGNvbnN0IHUzMng0IHNoOCA9IHZlY19zcGxhdHMoKHVpbnQzMl90KTgpOwotKyAg Zm9yIChpID0gMDsgaSArIDE2IDw9IHNpemU7IGkgKz0gMTYpIHsKLSsgICAgY29uc3QgdTMyeDQg YTAgPQotKyAgICAgICAgdmVjX2FuZCh2ZWNfc3IodmVjX3hsKDAsICh1aW50MzJfdCopKGFyZ2Ig KyBpICsgMCkpLCBzaDgpLCBtYXNrKTsKLSsgICAgY29uc3QgdTMyeDQgYTEgPQotKyAgICAgICAg dmVjX2FuZCh2ZWNfc3IodmVjX3hsKDAsICh1aW50MzJfdCopKGFyZ2IgKyBpICsgNCkpLCBzaDgp LCBtYXNrKTsKLSsgICAgY29uc3QgdTMyeDQgYTIgPQotKyAgICAgICAgdmVjX2FuZCh2ZWNfc3Io dmVjX3hsKDAsICh1aW50MzJfdCopKGFyZ2IgKyBpICsgOCkpLCBzaDgpLCBtYXNrKTsKLSsgICAg Y29uc3QgdTMyeDQgYTMgPQotKyAgICAgICAgdmVjX2FuZCh2ZWNfc3IodmVjX3hsKDAsICh1aW50 MzJfdCopKGFyZ2IgKyBpICsgMTIpKSwgc2g4KSwgbWFzayk7Ci0rICAgIGNvbnN0IGkxNng4IGQw ID0gdmVjX3BhY2tzKChpMzJ4NClhMCwgKGkzMng0KWExKTsKLSsgICAgY29uc3QgaTE2eDggZDEg PSB2ZWNfcGFja3MoKGkzMng0KWEyLCAoaTMyeDQpYTMpOwotKyAgICBjb25zdCB1OHgxNiBlID0g dmVjX3BhY2tzdShkMCwgZDEpOwotKyAgICB2ZWNfeHN0KGUsIDAsICZhbHBoYVtpXSk7Ci0rICB9 Ci0rICBmb3IgKDsgaSA8IHNpemU7ICsraSkgYWxwaGFbaV0gPSBhcmdiW2ldID4+IDg7Ci0rfQot KwotKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gUHJlbXVsdGlwbHkuCi0rCi0rI2RlZmlu ZSBNVUxUSVBMSUVSKGEpICgoYSkgKiAzMjg5N1UpCi0rI2RlZmluZSBQUkVNVUxUSVBMWSh4LCBt KSAoKCh4KSAqIChtKSkgPj4gMjMpCi0rCi0rLy8gU3ByZWFkcyB0aGUgYWxwaGEgbGFuZSBhY3Jv c3Mgci9nL2IgYW5kIGluc2VydHMgMHhmZiBpbiB0aGUgYWxwaGEgbGFuZSwgZm9yCi0rLy8gdGhl IHR3byBwaXhlbHMgcGFja2VkIGluIGEgMTYtYml0LXBlci1jaGFubmVsIHZlY3Rvci4gQnVpbHQg YWdhaW5zdCB0aGUKLSsvLyBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXI7IHNyYyBpcyB0aGUgY2hh bm5lbCB2ZWN0b3IsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcwotKy8vIGFuIGFsbC0weGZmIHZlY3Rv ci4KLStzdGF0aWMgY29uc3QgdTh4MTYga1NwcmVhZEFscGhhTGFzdCA9IHs2LCAgNywgIDYsICA3 LCAgNiwgIDcsICAxNiwgNywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxNCwgMTUsIDE0LCAxNSwgMTQsIDE1LCAxNiwgMTV9OwotK3N0YXRpYyBjb25zdCB1OHgxNiBr U3ByZWFkQWxwaGFGaXJzdCA9IHsxNiwgMSwgMCwgMSwgMCwgMSwgMCwgMSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIDksIDgsIDksIDgsIDksIDgsIDl9Owot KwotK3N0YXRpYyBXRUJQX0lOTElORSB1MTZ4OCBNdWxIaTE2KHUxNng4IGEsIHUxNng4IGIpIHsK LSsgIGNvbnN0IHUzMng0IHNoID0gdmVjX3NwbGF0cygodW5zaWduZWQgaW50KTE2KTsKLSsgIGNv bnN0IHUzMng0IGUgPSB2ZWNfc3IodmVjX211bGUoYSwgYiksIHNoKTsKLSsgIGNvbnN0IHUzMng0 IG8gPSB2ZWNfc3IodmVjX211bG8oYSwgYiksIHNoKTsKLSsgIHJldHVybiB2ZWNfcGFjayh2ZWNf bWVyZ2VoKGUsIG8pLCB2ZWNfbWVyZ2VsKGUsIG8pKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgQXBw bHlBbHBoYU11bHRpcGx5X1ZTWCh1aW50OF90KiByZ2JhLCBpbnQgYWxwaGFfZmlyc3QsIGludCB3 LCBpbnQgaCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJpZGUp IHsKLSsgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwot KyAgY29uc3QgdTh4MTYgYWxsZmYgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTB4ZmYpOwot KyAgY29uc3QgdTE2eDggejE2ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMCk7Ci0rICBj b25zdCB1MTZ4OCBrTXVsdCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTB4ODA4MSk7Ci0r ICBjb25zdCB1MTZ4OCBzaDcgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk3KTsKLSsgIGNv bnN0IHU4eDE2IGN0cmwgPSBhbHBoYV9maXJzdCA/IGtTcHJlYWRBbHBoYUZpcnN0IDoga1NwcmVh ZEFscGhhTGFzdDsKLSsgIGNvbnN0IGludCBrU3BhbiA9IDQ7Ci0rICB3aGlsZSAoaC0tID4gMCkg ewotKyAgICB1aW50OF90KiBjb25zdCByZ2J4ID0gcmdiYTsKLSsgICAgaW50IGk7Ci0rICAgIGZv ciAoaSA9IDA7IGkgKyBrU3BhbiA8PSB3OyBpICs9IGtTcGFuKSB7Ci0rICAgICAgY29uc3QgdTh4 MTYgYXJnYjAgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIqKShyZ2J4ICsgNCAqIGkpKTsKLSsg ICAgICBjb25zdCB1MTZ4OCBsbyA9ICh1MTZ4OCl2ZWNfbWVyZ2VoKGFyZ2IwLCB6ZXJvKTsKLSsg ICAgICBjb25zdCB1MTZ4OCBoaSA9ICh1MTZ4OCl2ZWNfbWVyZ2VsKGFyZ2IwLCB6ZXJvKTsKLSsg ICAgICBjb25zdCB1MTZ4OCBhX2xvID0gKHUxNng4KXZlY19wZXJtKCh1OHgxNilsbywgYWxsZmYs IGN0cmwpOwotKyAgICAgIGNvbnN0IHUxNng4IGFfaGkgPSAodTE2eDgpdmVjX3Blcm0oKHU4eDE2 KWhpLCBhbGxmZiwgY3RybCk7Ci0rICAgICAgY29uc3QgdTE2eDggQTBsbyA9IHZlY19tbGFkZChh X2xvLCBsbywgejE2KTsKLSsgICAgICBjb25zdCB1MTZ4OCBBMGhpID0gdmVjX21sYWRkKGFfaGks IGhpLCB6MTYpOwotKyAgICAgIGNvbnN0IHUxNng4IEEybG8gPSB2ZWNfc3IoTXVsSGkxNihBMGxv LCBrTXVsdCksIHNoNyk7Ci0rICAgICAgY29uc3QgdTE2eDggQTJoaSA9IHZlY19zcihNdWxIaTE2 KEEwaGksIGtNdWx0KSwgc2g3KTsKLSsgICAgICBjb25zdCB1OHgxNiBvdXQgPSB2ZWNfcGFja3N1 KChpMTZ4OClBMmxvLCAoaTE2eDgpQTJoaSk7Ci0rICAgICAgdmVjX3hzdChvdXQsIDAsICh1bnNp Z25lZCBjaGFyKikocmdieCArIDQgKiBpKSk7Ci0rICAgIH0KLSsgICAgLy8gRmluaXNoIHdpdGgg bGVmdC1vdmVycy4KLSsgICAgZm9yICg7IGkgPCB3OyArK2kpIHsKLSsgICAgICB1aW50OF90KiBj b25zdCByZ2IgPSByZ2JhICsgKGFscGhhX2ZpcnN0ID8gMSA6IDApOwotKyAgICAgIGNvbnN0IHVp bnQ4X3QqIGNvbnN0IGFscGhhID0gcmdiYSArIChhbHBoYV9maXJzdCA/IDAgOiAzKTsKLSsgICAg ICBjb25zdCB1aW50MzJfdCBhID0gYWxwaGFbNCAqIGldOwotKyAgICAgIGlmIChhICE9IDB4ZmYp IHsKLSsgICAgICAgIGNvbnN0IHVpbnQzMl90IG11bHQgPSBNVUxUSVBMSUVSKGEpOwotKyAgICAg ICAgcmdiWzQgKiBpICsgMF0gPSBQUkVNVUxUSVBMWShyZ2JbNCAqIGkgKyAwXSwgbXVsdCk7Ci0r ICAgICAgICByZ2JbNCAqIGkgKyAxXSA9IFBSRU1VTFRJUExZKHJnYls0ICogaSArIDFdLCBtdWx0 KTsKLSsgICAgICAgIHJnYls0ICogaSArIDJdID0gUFJFTVVMVElQTFkocmdiWzQgKiBpICsgMl0s IG11bHQpOwotKyAgICAgIH0KLSsgICAgfQotKyAgICByZ2JhICs9IHN0cmlkZTsKLSsgIH0KLSt9 Ci0rCi0rI3VuZGVmIE1VTFRJUExJRVIKLSsjdW5kZWYgUFJFTVVMVElQTFkKLSsKLSsvLy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotKwotK2V4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9jZXNzaW5n VlNYKHZvaWQpOwotKwotK1dFQlBfVFNBTl9JR05PUkVfRlVOQ1RJT04gdm9pZCBXZWJQSW5pdEFs cGhhUHJvY2Vzc2luZ1ZTWCh2b2lkKSB7Ci0rICBXZWJQQXBwbHlBbHBoYU11bHRpcGx5ID0gQXBw bHlBbHBoYU11bHRpcGx5X1ZTWDsKLSsgIFdlYlBEaXNwYXRjaEFscGhhID0gRGlzcGF0Y2hBbHBo YV9WU1g7Ci0rICBXZWJQRGlzcGF0Y2hBbHBoYVRvR3JlZW4gPSBEaXNwYXRjaEFscGhhVG9HcmVl bl9WU1g7Ci0rICBXZWJQRXh0cmFjdEFscGhhID0gRXh0cmFjdEFscGhhX1ZTWDsKLSsgIFdlYlBF eHRyYWN0R3JlZW4gPSBFeHRyYWN0R3JlZW5fVlNYOwotK30KLSsKLSsjZWxzZSAgLy8gIVdFQlBf VVNFX1ZTWAotKwotK1dFQlBfRFNQX0lOSVRfU1RVQihXZWJQSW5pdEFscGhhUHJvY2Vzc2luZ1ZT WCkKLSsKLSsjZW5kaWYgIC8vIFdFQlBfVVNFX1ZTWAotZGlmZiAtLWdpdCBhL21lZGlhL2xpYndl YnAvc3JjL2RzcC9jcHUuaCBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9jcHUuaAotaW5kZXggMTdj NGRiOTcxYzdmLi5kMWQ0YjMxMjdjODQgMTAwNjQ0Ci0tLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9k c3AvY3B1LmgKLSsrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9jcHUuaAotQEAgLTE1NCw2ICsx NTQsMTcgQEAKLSAjZGVmaW5lIFdFQlBfVVNFX01TQQotICNlbmRpZgotIAotKy8vLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0rLy8gUFBDNjQgLyBQb3dlciBWU1ggKElTQSAyLjA3IC8gUE9XRVI4IGJh c2VsaW5lKS4KLSsKLSsjaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSAmJiBkZWZpbmVkKF9fVlNY X18pCi0rI2RlZmluZSBXRUJQX1VTRV9WU1gKLSsjZW5kaWYKLSsKLSsjaWYgZGVmaW5lZChXRUJQ X1VTRV9WU1gpICYmICFkZWZpbmVkKFdFQlBfSEFWRV9WU1gpCi0rI2RlZmluZSBXRUJQX0hBVkVf VlNYCi0rI2VuZGlmCi0rCi0gLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAKLSAjaWZuZGVmIFdF QlBfRFNQX09NSVRfQ19DT0RFCi1AQCAtMzA4LDcgKzMxOSw4IEBAIHR5cGVkZWYgZW51bSB7Ci0g ICBrTkVPTiwKLSAgIGtNSVBTMzIsCi0gICBrTUlQU2RzcFIyLAotLSAga01TQQotKyAga01TQSwK LSsgIGtWU1gKLSB9IENQVUZlYXR1cmU7Ci0gCi0gLy8gcmV0dXJucyB0cnVlIGlmIHRoZSBDUFUg c3VwcG9ydHMgdGhlIGZlYXR1cmUuCi1kaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNw L2RlYy5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2RlYy5jCi1pbmRleCA0ZjM4MzA5OTgwY2Uu LmYzNDI3NmJhNzMxNiAxMDA2NDQKLS0tLSBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9kZWMuYwot KysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2RlYy5jCi1AQCAtNzUyLDYgKzc1Miw3IEBAIGV4 dGVybiB2b2lkIFZQOERzcEluaXRORU9OKHZvaWQpOwotIGV4dGVybiB2b2lkIFZQOERzcEluaXRN SVBTMzIodm9pZCk7Ci0gZXh0ZXJuIHZvaWQgVlA4RHNwSW5pdE1JUFNkc3BSMih2b2lkKTsKLSBl eHRlcm4gdm9pZCBWUDhEc3BJbml0TVNBKHZvaWQpOwotK2V4dGVybiB2b2lkIFZQOERzcEluaXRW U1godm9pZCk7Ci0gCi0gV0VCUF9EU1BfSU5JVF9GVU5DKFZQOERzcEluaXQpIHsKLSAgIFZQOElu aXRDbGlwVGFibGVzKCk7Ci1AQCAtODQzLDYgKzg0NCwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMo VlA4RHNwSW5pdCkgewotICAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrTVNBKSkgewotICAgICAgIFZQ OERzcEluaXRNU0EoKTsKLSAgICAgfQotKyNlbmRpZgotKyNpZiBkZWZpbmVkKFdFQlBfSEFWRV9W U1gpCi0rICAgIGlmIChWUDhHZXRDUFVJbmZvKGtWU1gpKSB7Ci0rICAgICAgVlA4RHNwSW5pdFZT WCgpOwotKyAgICB9Ci0gI2VuZGlmCi0gICB9Ci0gCi1kaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2Vi cC9zcmMvZHNwL2RlY192c3guYyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9kZWNfdnN4LmMKLW5l dyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLmUwYzFjYmMzYjcxYgotLS0t IC9kZXYvbnVsbAotKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2RlY192c3guYwotQEAgLTAs MCArMSw3MzcgQEAKLSsvLyBDb3B5cmlnaHQgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJl c2VydmVkLgotKy8vCi0rLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg YSBCU0Qtc3R5bGUgbGljZW5zZQotKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5H IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotKy8vIHRyZWUuIEFuIGFkZGl0aW9uYWwg aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSsvLyBpbiB0 aGUgZmlsZSBQQVRFTlRTLiBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSsv LyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug dHJlZS4KLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vCi0rLy8gVlNYIChQb3dlclBDKSB2 ZXJzaW9uIG9mIGRlY29kaW5nIGZ1bmN0aW9ucy4KLSsKLSsjaW5jbHVkZSAic3JjL2RzcC9kc3Au aCIKLSsKLSsjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gpCi0rCi0rI2luY2x1ZGUgPGFsdGl2ZWMu aD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgc2hv cnQgICAgIGkxNng4OwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgICB1MTZ4ODsK LSt0eXBlZGVmIF9fdmVjdG9yIHNpZ25lZCBpbnQgICAgICAgaTMyeDQ7Ci0rdHlwZWRlZiBfX3Zl Y3RvciB1bnNpZ25lZCBpbnQgICAgIHUzMng0OwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQg Y2hhciAgICB1OHgxNjsKLSt0eXBlZGVmIF9fdmVjdG9yIHNpZ25lZCBjaGFyICAgICAgaTh4MTY7 Ci0rdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgbG9uZyBsb25nIGk2NHgyOwotKwotKy8vIFNpZ25l ZCBtdWx0aXBseS1oaWdoIG9mIHBhY2tlZCAxNi1iaXQgbGFuZXMgKFBPV0VSOCBoYXMgbm8gdm11 bGhzaCkuCi0rc3RhdGljIFdFQlBfSU5MSU5FIGkxNng4IE11bEhpMTZfUyhpMTZ4OCBhLCBpMTZ4 OCBiKSB7Ci0rICBjb25zdCB1MzJ4NCBzaCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkxNik7 Ci0rICBjb25zdCBpMzJ4NCBlID0gdmVjX3NyYSh2ZWNfbXVsZShhLCBiKSwgc2gpOwotKyAgY29u c3QgaTMyeDQgbyA9IHZlY19zcmEodmVjX211bG8oYSwgYiksIHNoKTsKLSsgIHJldHVybiAoaTE2 eDgpdmVjX3BhY2sodmVjX21lcmdlaChlLCBvKSwgdmVjX21lcmdlbChlLCBvKSk7Ci0rfQotKwot Ky8vIFRyYW5zcG9zZSB0d28gaW50ZXJsZWF2ZWQgNHg0IGJsb2NrcyBvZiAxNi1iaXQgdmFsdWVz LgotK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFRyYW5zcG9zZTJfNHg0KGkxNng4IGluMCwgaTE2 eDggaW4xLCBpMTZ4OCBpbjIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaTE2eDggaW4zLCBpMTZ4OCogb3V0MCwgaTE2eDgqIG91dDEsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaTE2eDgqIG91dDIsIGkxNng4KiBvdXQzKSB7Ci0rICBj b25zdCBpMTZ4OCB0MCA9IChpMTZ4OCl2ZWNfbWVyZ2VoKGluMCwgaW4xKTsKLSsgIGNvbnN0IGkx Nng4IHQxID0gKGkxNng4KXZlY19tZXJnZWgoaW4yLCBpbjMpOwotKyAgY29uc3QgaTE2eDggdDIg PSAoaTE2eDgpdmVjX21lcmdlbChpbjAsIGluMSk7Ci0rICBjb25zdCBpMTZ4OCB0MyA9IChpMTZ4 OCl2ZWNfbWVyZ2VsKGluMiwgaW4zKTsKLSsgIGNvbnN0IGkzMng0IHUwID0gdmVjX21lcmdlaCgo aTMyeDQpdDAsIChpMzJ4NCl0MSk7Ci0rICBjb25zdCBpMzJ4NCB1MSA9IHZlY19tZXJnZWgoKGkz Mng0KXQyLCAoaTMyeDQpdDMpOwotKyAgY29uc3QgaTMyeDQgdTIgPSB2ZWNfbWVyZ2VsKChpMzJ4 NCl0MCwgKGkzMng0KXQxKTsKLSsgIGNvbnN0IGkzMng0IHUzID0gdmVjX21lcmdlbCgoaTMyeDQp dDIsIChpMzJ4NCl0Myk7Ci0rICAqb3V0MCA9IChpMTZ4OCl2ZWNfbWVyZ2VoKChpNjR4Mil1MCwg KGk2NHgyKXUxKTsKLSsgICpvdXQxID0gKGkxNng4KXZlY19tZXJnZWwoKGk2NHgyKXUwLCAoaTY0 eDIpdTEpOwotKyAgKm91dDIgPSAoaTE2eDgpdmVjX21lcmdlaCgoaTY0eDIpdTIsIChpNjR4Mil1 Myk7Ci0rICAqb3V0MyA9IChpMTZ4OCl2ZWNfbWVyZ2VsKChpNjR4Mil1MiwgKGk2NHgyKXUzKTsK LSt9Ci0rCi0rLy8gQm91bmRlZCA0LWNvZWZmaWNpZW50IGxvYWQgaW50byB0aGUgbG93IGhhbGYg b2YgYSAxNi1iaXQgdmVjdG9yLgotK3N0YXRpYyBXRUJQX0lOTElORSBpMTZ4OCBMb2FkNENvZWZm cyhjb25zdCBpbnQxNl90KiBXRUJQX1JFU1RSSUNUIHApIHsKLSsgIGludDE2X3QgdG1wWzhdID0g ezB9OwotKyAgbWVtY3B5KHRtcCwgcCwgNCAqIHNpemVvZihpbnQxNl90KSk7Ci0rICByZXR1cm4g Kihjb25zdCBpMTZ4OCopdG1wOwotK30KLSsKLSsvLyBCb3VuZGVkIGxvYWQgb2YgbiBwaXhlbHMs IHplcm8tZXh0ZW5kZWQgdG8gMTYtYml0IGxhbmVzLgotK3N0YXRpYyBXRUJQX0lOTElORSBpMTZ4 OCBMb2FkRHN0KGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgcCwgaW50IG4pIHsKLSsgIHVu c2lnbmVkIGNoYXIgdG1wWzE2XSA9IHswfTsKLSsgIG1lbWNweSh0bXAsIHAsIG4pOwotKyAgcmV0 dXJuIChpMTZ4OCl2ZWNfbWVyZ2VoKHZlY194bCgwLCB0bXApLCB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBjaGFyKTApKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgVHJhbnNmb3JtX1ZTWChjb25zdCBpbnQx Nl90KiBXRUJQX1JFU1RSSUNUIGluLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf dCogV0VCUF9SRVNUUklDVCBkc3QsIGludCBkb190d28pIHsKLSsgIGNvbnN0IGkxNng4IGsxID0g dmVjX3NwbGF0cygoc2hvcnQpMjAwOTEpOwotKyAgY29uc3QgaTE2eDggazIgPSB2ZWNfc3BsYXRz KChzaG9ydCktMzAwNjgpOwotKyAgY29uc3QgdTE2eDggdGhyZWUgPSB2ZWNfc3BsYXRzKCh1bnNp Z25lZCBzaG9ydCkzKTsKLSsgIGkxNng4IGluMCA9IExvYWQ0Q29lZmZzKGluICsgMCksIGluMSA9 IExvYWQ0Q29lZmZzKGluICsgNCk7Ci0rICBpMTZ4OCBpbjIgPSBMb2FkNENvZWZmcyhpbiArIDgp LCBpbjMgPSBMb2FkNENvZWZmcyhpbiArIDEyKTsKLSsgIGkxNng4IFQwLCBUMSwgVDIsIFQzOwot KwotKyAgaWYgKGRvX3R3bykgewotKyAgICBpbjAgPSAoaTE2eDgpdmVjX21lcmdlaCgoaTY0eDIp aW4wLCAoaTY0eDIpTG9hZDRDb2VmZnMoaW4gKyAxNikpOwotKyAgICBpbjEgPSAoaTE2eDgpdmVj X21lcmdlaCgoaTY0eDIpaW4xLCAoaTY0eDIpTG9hZDRDb2VmZnMoaW4gKyAyMCkpOwotKyAgICBp bjIgPSAoaTE2eDgpdmVjX21lcmdlaCgoaTY0eDIpaW4yLCAoaTY0eDIpTG9hZDRDb2VmZnMoaW4g KyAyNCkpOwotKyAgICBpbjMgPSAoaTE2eDgpdmVjX21lcmdlaCgoaTY0eDIpaW4zLCAoaTY0eDIp TG9hZDRDb2VmZnMoaW4gKyAyOCkpOwotKyAgfQotKwotKyAgeyAgLy8gVmVydGljYWwgcGFzcyAr IHRyYW5zcG9zZS4KLSsgICAgY29uc3QgaTE2eDggYSA9IHZlY19hZGQoaW4wLCBpbjIpOwotKyAg ICBjb25zdCBpMTZ4OCBiID0gdmVjX3N1YihpbjAsIGluMik7Ci0rICAgIGNvbnN0IGkxNng4IGMg PSB2ZWNfYWRkKHZlY19zdWIoaW4xLCBpbjMpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2ZWNfc3ViKE11bEhpMTZfUyhpbjEsIGsyKSwgTXVsSGkxNl9TKGluMywgazEpKSk7Ci0rICAg IGNvbnN0IGkxNng4IGQgPSB2ZWNfYWRkKHZlY19hZGQoaW4xLCBpbjMpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2ZWNfYWRkKE11bEhpMTZfUyhpbjEsIGsxKSwgTXVsSGkxNl9TKGlu MywgazIpKSk7Ci0rICAgIFRyYW5zcG9zZTJfNHg0KHZlY19hZGQoYSwgZCksIHZlY19hZGQoYiwg YyksIHZlY19zdWIoYiwgYyksIHZlY19zdWIoYSwgZCksCi0rICAgICAgICAgICAgICAgICAgICZU MCwgJlQxLCAmVDIsICZUMyk7Ci0rICB9Ci0rICB7ICAvLyBIb3Jpem9udGFsIHBhc3MgKyB0cmFu c3Bvc2UuCi0rICAgIGNvbnN0IGkxNng4IGRjID0gdmVjX2FkZChUMCwgdmVjX3NwbGF0cygoc2hv cnQpNCkpOwotKyAgICBjb25zdCBpMTZ4OCBhID0gdmVjX2FkZChkYywgVDIpOwotKyAgICBjb25z dCBpMTZ4OCBiID0gdmVjX3N1YihkYywgVDIpOwotKyAgICBjb25zdCBpMTZ4OCBjID0gdmVjX2Fk ZCh2ZWNfc3ViKFQxLCBUMyksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zdWIo TXVsSGkxNl9TKFQxLCBrMiksIE11bEhpMTZfUyhUMywgazEpKSk7Ci0rICAgIGNvbnN0IGkxNng4 IGQgPSB2ZWNfYWRkKHZlY19hZGQoVDEsIFQzKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmVjX2FkZChNdWxIaTE2X1MoVDEsIGsxKSwgTXVsSGkxNl9TKFQzLCBrMikpKTsKLSsgICAg Y29uc3QgaTE2eDggczAgPSB2ZWNfc3JhKHZlY19hZGQoYSwgZCksIHRocmVlKTsKLSsgICAgY29u c3QgaTE2eDggczEgPSB2ZWNfc3JhKHZlY19hZGQoYiwgYyksIHRocmVlKTsKLSsgICAgY29uc3Qg aTE2eDggczIgPSB2ZWNfc3JhKHZlY19zdWIoYiwgYyksIHRocmVlKTsKLSsgICAgY29uc3QgaTE2 eDggczMgPSB2ZWNfc3JhKHZlY19zdWIoYSwgZCksIHRocmVlKTsKLSsgICAgVHJhbnNwb3NlMl80 eDQoczAsIHMxLCBzMiwgczMsICZUMCwgJlQxLCAmVDIsICZUMyk7Ci0rICB9Ci0rICB7ICAvLyBB ZGQgdG8gdGhlIHJlZmVyZW5jZSBwaXhlbHMgYW5kIHN0b3JlIHdpdGggc2F0dXJhdGlvbi4KLSsg ICAgY29uc3QgaW50IG4gPSBkb190d28gPyA4IDogNDsKLSsgICAgY29uc3QgaTE2eDggZDAgPSBM b2FkRHN0KGRzdCArIDAgKiBCUFMsIG4pOwotKyAgICBjb25zdCBpMTZ4OCBkMSA9IExvYWREc3Qo ZHN0ICsgMSAqIEJQUywgbik7Ci0rICAgIGNvbnN0IGkxNng4IGQyID0gTG9hZERzdChkc3QgKyAy ICogQlBTLCBuKTsKLSsgICAgY29uc3QgaTE2eDggZDMgPSBMb2FkRHN0KGRzdCArIDMgKiBCUFMs IG4pOwotKyAgICBjb25zdCB1OHgxNiByMCA9IHZlY19wYWNrc3UodmVjX2FkZChkMCwgVDApLCB2 ZWNfYWRkKGQwLCBUMCkpOwotKyAgICBjb25zdCB1OHgxNiByMSA9IHZlY19wYWNrc3UodmVjX2Fk ZChkMSwgVDEpLCB2ZWNfYWRkKGQxLCBUMSkpOwotKyAgICBjb25zdCB1OHgxNiByMiA9IHZlY19w YWNrc3UodmVjX2FkZChkMiwgVDIpLCB2ZWNfYWRkKGQyLCBUMikpOwotKyAgICBjb25zdCB1OHgx NiByMyA9IHZlY19wYWNrc3UodmVjX2FkZChkMywgVDMpLCB2ZWNfYWRkKGQzLCBUMykpOwotKyAg ICB1bnNpZ25lZCBjaGFyIGIwWzE2XSwgYjFbMTZdLCBiMlsxNl0sIGIzWzE2XTsKLSsgICAgbWVt Y3B5KGIwLCAmcjAsIDE2KTsgbWVtY3B5KGIxLCAmcjEsIDE2KTsKLSsgICAgbWVtY3B5KGIyLCAm cjIsIDE2KTsgbWVtY3B5KGIzLCAmcjMsIDE2KTsKLSsgICAgbWVtY3B5KGRzdCArIDAgKiBCUFMs IGIwLCBuKTsgbWVtY3B5KGRzdCArIDEgKiBCUFMsIGIxLCBuKTsKLSsgICAgbWVtY3B5KGRzdCAr IDIgKiBCUFMsIGIyLCBuKTsgbWVtY3B5KGRzdCArIDMgKiBCUFMsIGIzLCBuKTsKLSsgIH0KLSt9 Ci0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBTaW1wbGUgaW4tbG9vcCBlZGdlIGZp bHRlcmluZy4KLSsKLSsjZGVmaW5lIEFCU1UocCwgcSkgdmVjX29yKHZlY19zdWJzKCh1OHgxNiko cSksICh1OHgxNikocCkpLCBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3Vicygo dTh4MTYpKHApLCAodTh4MTYpKHEpKSkKLSsKLSsvLyBQZXItYnl0ZSBzaWduZWQgYXJpdGhtZXRp YyA+PjMsIHBhY2tlZCB3aXRoIHNhdHVyYXRpb24uCi0rc3RhdGljIFdFQlBfSU5MSU5FIGk4eDE2 IFNpZ25lZFNoaWZ0MyhpOHgxNiB4KSB7Ci0rICBjb25zdCB1OHgxNiB6ID0gdmVjX3NwbGF0cygo dW5zaWduZWQgY2hhcikwKTsKLSsgIGNvbnN0IHUxNng4IHNoID0gdmVjX3NwbGF0cygodW5zaWdu ZWQgc2hvcnQpKDMgKyA4KSk7Ci0rICBjb25zdCBpMTZ4OCBsbyA9IHZlY19zcmEoKGkxNng4KXZl Y19tZXJnZWgoeiwgKHU4eDE2KXgpLCBzaCk7Ci0rICBjb25zdCBpMTZ4OCBoaSA9IHZlY19zcmEo KGkxNng4KXZlY19tZXJnZWwoeiwgKHU4eDE2KXgpLCBzaCk7Ci0rICByZXR1cm4gKGk4eDE2KXZl Y19wYWNrcyhsbywgaGkpOwotK30KLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBEb0ZpbHRl cjJfVlNYKHU4eDE2KiBXRUJQX1JFU1RSSUNUIHAxLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdTh4MTYqIFdFQlBfUkVTVFJJQ1QgcDAsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1OHgxNiogV0VCUF9SRVNUUklDVCBxMCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4eDE2KiBXRUJQX1JFU1RSSUNUIHExLCBp bnQgdGhyZXNoKSB7Ci0rICBjb25zdCB1OHgxNiBzaWduID0gdmVjX3NwbGF0cygodW5zaWduZWQg Y2hhcikweDgwKTsKLSsgIGNvbnN0IHU4eDE2IHQxID0gQUJTVSgqcDEsICpxMSk7Ci0rICBjb25z dCB1OHgxNiB0MiA9IHZlY19hbmQodDEsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMHhGRSkp OwotKyAgY29uc3QgdTh4MTYgdDMgPSAodTh4MTYpdmVjX3NyKCh1MTZ4OCl0MiwgdmVjX3NwbGF0 cygodW5zaWduZWQgc2hvcnQpMSkpOwotKyAgY29uc3QgdTh4MTYgdDQgPSBBQlNVKCpwMCwgKnEw KTsKLSsgIGNvbnN0IHU4eDE2IHQ2ID0gdmVjX2FkZHModmVjX2FkZHModDQsIHQ0KSwgdDMpOwot KyAgY29uc3QgdTh4MTYgdDcgPSB2ZWNfc3Vicyh0NiwgdmVjX3NwbGF0cygodW5zaWduZWQgY2hh cil0aHJlc2gpKTsKLSsgIGNvbnN0IHU4eDE2IG1hc2sgPSAodTh4MTYpdmVjX2NtcGVxKHQ3LCB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApKTsKLSsKLSsgIGNvbnN0IGk4eDE2IHAxcyA9IChp OHgxNil2ZWNfeG9yKCpwMSwgc2lnbik7Ci0rICBjb25zdCBpOHgxNiBxMXMgPSAoaTh4MTYpdmVj X3hvcigqcTEsIHNpZ24pOwotKyAgaTh4MTYgUDAgPSAoaTh4MTYpdmVjX3hvcigqcDAsIHNpZ24p OwotKyAgaTh4MTYgUTAgPSAoaTh4MTYpdmVjX3hvcigqcTAsIHNpZ24pOwotKwotKyAgY29uc3Qg aTh4MTYgZDAgPSB2ZWNfc3VicyhRMCwgUDApOwotKyAgY29uc3QgaTh4MTYgczEgPSB2ZWNfYWRk cyh2ZWNfc3VicyhwMXMsIHExcyksIGQwKTsKLSsgIGk4eDE2IGEgPSB2ZWNfYWRkcyhkMCwgdmVj X2FkZHMoZDAsIHMxKSk7Ci0rICBhID0gdmVjX2FuZChhLCAoaTh4MTYpbWFzayk7Ci0rICBjb25z dCBpOHgxNiB2MyA9IFNpZ25lZFNoaWZ0Myh2ZWNfYWRkcyhhLCB2ZWNfc3BsYXRzKChzaWduZWQg Y2hhcikzKSkpOwotKyAgY29uc3QgaTh4MTYgdjQgPSBTaWduZWRTaGlmdDModmVjX2FkZHMoYSwg dmVjX3NwbGF0cygoc2lnbmVkIGNoYXIpNCkpKTsKLSsgIFEwID0gdmVjX3N1YnMoUTAsIHY0KTsK LSsgIFAwID0gdmVjX2FkZHMoUDAsIHYzKTsKLSsgICpwMCA9IHZlY194b3IoKHU4eDE2KVAwLCBz aWduKTsKLSsgICpxMCA9IHZlY194b3IoKHU4eDE2KVEwLCBzaWduKTsKLSt9Ci0rCi0rc3RhdGlj IHZvaWQgU2ltcGxlVkZpbHRlcjE2X1ZTWCh1aW50OF90KiBwLCBpbnQgc3RyaWRlLCBpbnQgdGhy ZXNoKSB7Ci0rICB1OHgxNiBwMSA9IHZlY194bCgwLCBwIC0gMiAqIHN0cmlkZSk7Ci0rICB1OHgx NiBwMCA9IHZlY194bCgwLCBwIC0gc3RyaWRlKTsKLSsgIHU4eDE2IHEwID0gdmVjX3hsKDAsIHAp OwotKyAgdTh4MTYgcTEgPSB2ZWNfeGwoMCwgcCArIHN0cmlkZSk7Ci0rICBEb0ZpbHRlcjJfVlNY KCZwMSwgJnAwLCAmcTAsICZxMSwgdGhyZXNoKTsKLSsgIHZlY194c3QocDAsIDAsIHAgLSBzdHJp ZGUpOwotKyAgdmVjX3hzdChxMCwgMCwgcCk7Ci0rfQotKwotK3N0YXRpYyB2b2lkIFNpbXBsZVZG aWx0ZXIxNmlfVlNYKHVpbnQ4X3QqIHAsIGludCBzdHJpZGUsIGludCB0aHJlc2gpIHsKLSsgIGlu dCBrOwotKyAgZm9yIChrID0gMzsgayA+IDA7IC0taykgewotKyAgICBwICs9IDQgKiBzdHJpZGU7 Ci0rICAgIFNpbXBsZVZGaWx0ZXIxNl9WU1gocCwgc3RyaWRlLCB0aHJlc2gpOwotKyAgfQotK30K LSsKLSsvLyBUcmFuc3Bvc2UgZm91ciBjb2x1bW5zIG91dCBvZiAvIGludG8gMTYgcm93cyBmb3Ig aG9yaXpvbnRhbC1lZGdlIGZpbHRlcmluZy4KLStzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBMb2Fk OHg0KGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgYiwgaW50IHMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1OHgxNiogV0VCUF9SRVNUUklDVCBwLCB1OHgxNiogV0VCUF9S RVNUUklDVCBxKSB7Ci0rICB1aW50MzJfdCBhMFs0XSwgYTFbNF07Ci0rICBtZW1jcHkoJmEwWzBd LCBiICsgMCAqIHMsIDQpOyBtZW1jcHkoJmEwWzFdLCBiICsgNCAqIHMsIDQpOwotKyAgbWVtY3B5 KCZhMFsyXSwgYiArIDIgKiBzLCA0KTsgbWVtY3B5KCZhMFszXSwgYiArIDYgKiBzLCA0KTsKLSsg IG1lbWNweSgmYTFbMF0sIGIgKyAxICogcywgNCk7IG1lbWNweSgmYTFbMV0sIGIgKyA1ICogcywg NCk7Ci0rICBtZW1jcHkoJmExWzJdLCBiICsgMyAqIHMsIDQpOyBtZW1jcHkoJmExWzNdLCBiICsg NyAqIHMsIDQpOwotKyAgY29uc3QgdTh4MTYgQTAgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIq KWEwKTsKLSsgIGNvbnN0IHU4eDE2IEExID0gdmVjX3hsKDAsICh1bnNpZ25lZCBjaGFyKilhMSk7 Ci0rICBjb25zdCB1OHgxNiBCMCA9IHZlY19tZXJnZWgoQTAsIEExKSwgQjEgPSB2ZWNfbWVyZ2Vs KEEwLCBBMSk7Ci0rICBjb25zdCB1MTZ4OCBDMCA9IHZlY19tZXJnZWgoKHUxNng4KUIwLCAodTE2 eDgpQjEpOwotKyAgY29uc3QgdTE2eDggQzEgPSB2ZWNfbWVyZ2VsKCh1MTZ4OClCMCwgKHUxNng4 KUIxKTsKLSsgICpwID0gKHU4eDE2KXZlY19tZXJnZWgoKHUzMng0KUMwLCAodTMyeDQpQzEpOwot KyAgKnEgPSAodTh4MTYpdmVjX21lcmdlbCgodTMyeDQpQzAsICh1MzJ4NClDMSk7Ci0rfQotKwot K3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIExvYWQxNng0KGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgcjAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhf dCogV0VCUF9SRVNUUklDVCByOCwgaW50IHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdTh4MTYqIHAxLCB1OHgxNiogcDAsIHU4eDE2KiBxMCwgdTh4MTYqIHExKSB7Ci0rICBM b2FkOHg0KHIwLCBzLCBwMSwgcTApOwotKyAgTG9hZDh4NChyOCwgcywgcDAsIHExKTsKLSsgIGNv bnN0IHU4eDE2IHQxID0gKnAxLCB0MiA9ICpxMDsKLSsgICpwMSA9ICh1OHgxNil2ZWNfbWVyZ2Vo KChpNjR4Mil0MSwgKGk2NHgyKSpwMCk7Ci0rICAqcDAgPSAodTh4MTYpdmVjX21lcmdlbCgoaTY0 eDIpdDEsIChpNjR4MikqcDApOwotKyAgKnEwID0gKHU4eDE2KXZlY19tZXJnZWgoKGk2NHgyKXQy LCAoaTY0eDIpKnExKTsKLSsgICpxMSA9ICh1OHgxNil2ZWNfbWVyZ2VsKChpNjR4Mil0MiwgKGk2 NHgyKSpxMSk7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFN0b3JlNHg0KHU4eDE2 IHgsIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0LCBpbnQgcykgewotKyAgdW5zaWduZWQgY2hh ciBiWzE2XTsKLSsgIGludCBpOwotKyAgbWVtY3B5KGIsICZ4LCAxNik7Ci0rICBmb3IgKGkgPSAw OyBpIDwgNDsgKytpKSBtZW1jcHkoZHN0ICsgaSAqIHMsIGIgKyA0ICogaSwgNCk7Ci0rfQotKwot K3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFN0b3JlMTZ4NCh1OHgxNiBwMSwgdTh4MTYgcDAsIHU4 eDE2IHEwLCB1OHgxNiBxMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDhfdCogV0VCUF9SRVNUUklDVCByMCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDhfdCogV0VCUF9SRVNUUklDVCByOCwgaW50IHMpIHsKLSsgIHU4eDE2IHQgPSBwMDsK LSsgIHU4eDE2IHAwcyA9IHZlY19tZXJnZWgocDEsIHQpLCBwMXMgPSB2ZWNfbWVyZ2VsKHAxLCB0 KTsKLSsgIHQgPSBxMDsKLSsgIHU4eDE2IHEwcyA9IHZlY19tZXJnZWgodCwgcTEpLCBxMXMgPSB2 ZWNfbWVyZ2VsKHQsIHExKTsKLSsgIHQgPSBwMHM7Ci0rICBwMHMgPSAodTh4MTYpdmVjX21lcmdl aCgodTE2eDgpdCwgKHUxNng4KXEwcyk7Ci0rICBxMHMgPSAodTh4MTYpdmVjX21lcmdlbCgodTE2 eDgpdCwgKHUxNng4KXEwcyk7Ci0rICB0ID0gcDFzOwotKyAgcDFzID0gKHU4eDE2KXZlY19tZXJn ZWgoKHUxNng4KXQsICh1MTZ4OClxMXMpOwotKyAgcTFzID0gKHU4eDE2KXZlY19tZXJnZWwoKHUx Nng4KXQsICh1MTZ4OClxMXMpOwotKyAgU3RvcmU0eDQocDBzLCByMCwgcyk7IFN0b3JlNHg0KHEw cywgcjAgKyA0ICogcywgcyk7Ci0rICBTdG9yZTR4NChwMXMsIHI4LCBzKTsgU3RvcmU0eDQocTFz LCByOCArIDQgKiBzLCBzKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgU2ltcGxlSEZpbHRlcjE2X1ZT WCh1aW50OF90KiBwLCBpbnQgc3RyaWRlLCBpbnQgdGhyZXNoKSB7Ci0rICB1OHgxNiBwMSwgcDAs IHEwLCBxMTsKLSsgIHAgLT0gMjsgIC8vIGJlZ2lubmluZyBvZiBwMQotKyAgTG9hZDE2eDQocCwg cCArIDggKiBzdHJpZGUsIHN0cmlkZSwgJnAxLCAmcDAsICZxMCwgJnExKTsKLSsgIERvRmlsdGVy Ml9WU1goJnAxLCAmcDAsICZxMCwgJnExLCB0aHJlc2gpOwotKyAgU3RvcmUxNng0KHAxLCBwMCwg cTAsIHExLCBwLCBwICsgOCAqIHN0cmlkZSwgc3RyaWRlKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQg U2ltcGxlSEZpbHRlcjE2aV9WU1godWludDhfdCogcCwgaW50IHN0cmlkZSwgaW50IHRocmVzaCkg ewotKyAgaW50IGs7Ci0rICBmb3IgKGsgPSAzOyBrID4gMDsgLS1rKSB7Ci0rICAgIHAgKz0gNDsK LSsgICAgU2ltcGxlSEZpbHRlcjE2X1ZTWChwLCBzdHJpZGUsIHRocmVzaCk7Ci0rICB9Ci0rfQot KwotKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gQ29tcGxleCBpbi1sb29wIGVkZ2UgZmls dGVyaW5nICh2ZXJ0aWNhbC9sdW1hKS4KLSsKLStzdGF0aWMgY29uc3QgdTh4MTYga1NpZ25CaXQg PSB7Ci0rICAgIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAs Ci0rICAgIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODB9Owot KyNkZWZpbmUgRkxJUEIoeCkgKCh4KSA9IChpOHgxNil2ZWNfeG9yKCh1OHgxNikoeCksIGtTaWdu Qml0KSkKLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdTh4MTYgR2V0Tm90SEVWKHU4eDE2IHAxLCB1 OHgxNiBwMCwgdTh4MTYgcTAsIHU4eDE2IHExLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGhldl90aHJlc2gpIHsKLSsgIGNvbnN0IHU4eDE2IGQgPSB2ZWNfc3Vicyh2 ZWNfbWF4KEFCU1UocDEsIHAwKSwgQUJTVShxMSwgcTApKSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKWhldl90aHJlc2gpKTsKLSsgIHJldHVy biAodTh4MTYpdmVjX2NtcGVxKGQsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCkpOwotK30K LSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgaTh4MTYgR2V0QmFzZURlbHRhKGk4eDE2IHAxLCBpOHgx NiBwMCwgaTh4MTYgcTAsIGk4eDE2IHExKSB7Ci0rICBjb25zdCBpOHgxNiBkID0gdmVjX3N1YnMo cTAsIHAwKTsKLSsgIGNvbnN0IGk4eDE2IHMxID0gdmVjX2FkZHModmVjX3N1YnMocDEsIHExKSwg ZCk7Ci0rICByZXR1cm4gdmVjX2FkZHMoZCwgdmVjX2FkZHMoZCwgczEpKTsKLSt9Ci0rCi0rc3Rh dGljIFdFQlBfSU5MSU5FIHZvaWQgRG9TaW1wbGVGaWx0ZXJTKGk4eDE2KiBwMCwgaTh4MTYqIHEw LCBpOHgxNiBmKSB7Ci0rICAqcTAgPSB2ZWNfc3VicygqcTAsIFNpZ25lZFNoaWZ0Myh2ZWNfYWRk cyhmLCB2ZWNfc3BsYXRzKChzaWduZWQgY2hhcik0KSkpKTsKLSsgICpwMCA9IHZlY19hZGRzKCpw MCwgU2lnbmVkU2hpZnQzKHZlY19hZGRzKGYsIHZlY19zcGxhdHMoKHNpZ25lZCBjaGFyKTMpKSkp OwotK30KLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBVcGRhdGUyUGl4ZWxzKGk4eDE2KiBw aSwgaTh4MTYqIHFpLCBpMTZ4OCBsbywgaTE2eDggaGkpIHsKLSsgIGNvbnN0IHUxNng4IHM3ID0g dmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpNyk7Ci0rICBjb25zdCBpOHgxNiBkID0gKGk4eDE2 KXZlY19wYWNrcyh2ZWNfc3JhKGxvLCBzNyksIHZlY19zcmEoaGksIHM3KSk7Ci0rICAqcGkgPSB2 ZWNfYWRkcygqcGksIGQpOwotKyAgKnFpID0gdmVjX3N1YnMoKnFpLCBkKTsKLSsgIEZMSVBCKCpw aSk7Ci0rICBGTElQQigqcWkpOwotK30KLSsKLSsvLyBtYXNrID0gKG1heCBpbm5lciBhYnMtZGlm ZiA8PSBpdGhyZXNoKSAmJiBOZWVkc0ZpbHRlcih0aHJlc2gpLgotK3N0YXRpYyBXRUJQX0lOTElO RSB1OHgxNiBDb21wbGV4TWFzayh1OHgxNiBwMywgdTh4MTYgcDIsIHU4eDE2IHAxLCB1OHgxNiBw MCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTh4MTYgcTAsIHU4eDE2 IHExLCB1OHgxNiBxMiwgdTh4MTYgcTMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCB0aHJlc2gsIGludCBpdGhyZXNoKSB7Ci0rICB1OHgxNiBtID0gQUJTVShwMSwg cDApOwotKyAgbSA9IHZlY19tYXgobSwgQUJTVShwMywgcDIpKTsKLSsgIG0gPSB2ZWNfbWF4KG0s IEFCU1UocDIsIHAxKSk7Ci0rICBtID0gdmVjX21heChtLCBBQlNVKHExLCBxMCkpOwotKyAgbSA9 IHZlY19tYXgobSwgQUJTVShxMywgcTIpKTsKLSsgIG0gPSB2ZWNfbWF4KG0sIEFCU1UocTIsIHEx KSk7Ci0rICBjb25zdCB1OHgxNiB0bSA9ICh1OHgxNil2ZWNfY21wZXEoCi0rICAgICAgdmVjX3N1 YnMobSwgdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcilpdGhyZXNoKSksCi0rICAgICAgdmVjX3Nw bGF0cygodW5zaWduZWQgY2hhcikwKSk7Ci0rICBjb25zdCB1OHgxNiB0MiA9IHZlY19hbmQoQUJT VShwMSwgcTEpLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTB4RkUpKTsKLSsgIGNvbnN0IHU4 eDE2IHQzID0gKHU4eDE2KXZlY19zcigodTE2eDgpdDIsIHZlY19zcGxhdHMoKHVuc2lnbmVkIHNo b3J0KTEpKTsKLSsgIGNvbnN0IHU4eDE2IHQ2ID0gdmVjX2FkZHModmVjX2FkZHMoQUJTVShwMCwg cTApLCBBQlNVKHAwLCBxMCkpLCB0Myk7Ci0rICBjb25zdCB1OHgxNiBmbSA9ICh1OHgxNil2ZWNf Y21wZXEoCi0rICAgICAgdmVjX3N1YnModDYsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpdGhy ZXNoKSksCi0rICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKSk7Ci0rICByZXR1cm4g dmVjX2FuZCh0bSwgZm0pOwotK30KLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBEb0ZpbHRl cjQodTh4MTYqIHAxdSwgdTh4MTYqIHAwdSwgdTh4MTYqIHEwdSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdTh4MTYqIHExdSwgdTh4MTYgbWFzaywgaW50IGhldl90aHJlc2gp IHsKLSsgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwot KyAgY29uc3QgdTh4MTYgbm90X2hldiA9IEdldE5vdEhFVigqcDF1LCAqcDB1LCAqcTB1LCAqcTF1 LCBoZXZfdGhyZXNoKTsKLSsgIGk4eDE2IHAxID0gKGk4eDE2KXZlY194b3IoKnAxdSwga1NpZ25C aXQpLCBwMCA9IChpOHgxNil2ZWNfeG9yKCpwMHUsIGtTaWduQml0KTsKLSsgIGk4eDE2IHEwID0g KGk4eDE2KXZlY194b3IoKnEwdSwga1NpZ25CaXQpLCBxMSA9IChpOHgxNil2ZWNfeG9yKCpxMXUs IGtTaWduQml0KTsKLSsgIGk4eDE2IHQxID0gdmVjX2FuZGModmVjX3N1YnMocDEsIHExKSwgKGk4 eDE2KW5vdF9oZXYpOwotKyAgY29uc3QgaTh4MTYgdDIgPSB2ZWNfc3VicyhxMCwgcDApOwotKyAg dDEgPSB2ZWNfYWRkcyh0MSwgdDIpOyB0MSA9IHZlY19hZGRzKHQxLCB0Mik7IHQxID0gdmVjX2Fk ZHModDEsIHQyKTsKLSsgIHQxID0gdmVjX2FuZCh0MSwgKGk4eDE2KW1hc2spOwotKyAgY29uc3Qg aTh4MTYgYTMgPSBTaWduZWRTaGlmdDModmVjX2FkZHModDEsIHZlY19zcGxhdHMoKHNpZ25lZCBj aGFyKTQpKSk7Ci0rICBwMCA9IHZlY19hZGRzKHAwLCBTaWduZWRTaGlmdDModmVjX2FkZHModDEs IHZlY19zcGxhdHMoKHNpZ25lZCBjaGFyKTMpKSkpOwotKyAgcTAgPSB2ZWNfc3VicyhxMCwgYTMp OwotKyAgRkxJUEIocDApOyBGTElQQihxMCk7Ci0rICBjb25zdCBpOHgxNiB0ID0gdmVjX2FkZChh MywgKGk4eDE2KWtTaWduQml0KTsKLSsgIGk4eDE2IHQzID0gdmVjX3N1YigoaTh4MTYpdmVjX2F2 ZygodTh4MTYpdCwgemVybyksIHZlY19zcGxhdHMoKHNpZ25lZCBjaGFyKTY0KSk7Ci0rICB0MyA9 IHZlY19hbmQoKGk4eDE2KW5vdF9oZXYsIHQzKTsKLSsgIHExID0gdmVjX3N1YnMocTEsIHQzKTsg cDEgPSB2ZWNfYWRkcyhwMSwgdDMpOwotKyAgRkxJUEIocDEpOyBGTElQQihxMSk7Ci0rICAqcDF1 ID0gKHU4eDE2KXAxOyAqcDB1ID0gKHU4eDE2KXAwOyAqcTB1ID0gKHU4eDE2KXEwOyAqcTF1ID0g KHU4eDE2KXExOwotK30KLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBEb0ZpbHRlcjYodTh4 MTYqIHAydSwgdTh4MTYqIHAxdSwgdTh4MTYqIHAwdSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdTh4MTYqIHEwdSwgdTh4MTYqIHExdSwgdTh4MTYqIHEydSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdTh4MTYgbWFzaywgaW50IGhldl90aHJlc2gpIHsK LSsgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAg Y29uc3QgdTh4MTYgbm90X2hldiA9IEdldE5vdEhFVigqcDF1LCAqcDB1LCAqcTB1LCAqcTF1LCBo ZXZfdGhyZXNoKTsKLSsgIGk4eDE2IHAyID0gKGk4eDE2KXZlY194b3IoKnAydSwga1NpZ25CaXQp LCBwMSA9IChpOHgxNil2ZWNfeG9yKCpwMXUsIGtTaWduQml0KTsKLSsgIGk4eDE2IHAwID0gKGk4 eDE2KXZlY194b3IoKnAwdSwga1NpZ25CaXQpLCBxMCA9IChpOHgxNil2ZWNfeG9yKCpxMHUsIGtT aWduQml0KTsKLSsgIGk4eDE2IHExID0gKGk4eDE2KXZlY194b3IoKnExdSwga1NpZ25CaXQpLCBx MiA9IChpOHgxNil2ZWNfeG9yKCpxMnUsIGtTaWduQml0KTsKLSsgIGNvbnN0IGk4eDE2IGEgPSBH ZXRCYXNlRGVsdGEocDEsIHAwLCBxMCwgcTEpOwotKyAgeyAgLy8gaGV2IHBpeGVsczogc2ltcGxl IGZpbHRlcgotKyAgICBjb25zdCBpOHgxNiBmID0gdmVjX2FuZChhLCAoaTh4MTYpdmVjX2FuZGMo bWFzaywgbm90X2hldikpOwotKyAgICBEb1NpbXBsZUZpbHRlclMoJnAwLCAmcTAsIGYpOwotKyAg fQotKyAgeyAgLy8gbm9uLWhldiBwaXhlbHM6IHN0cm9uZyBmaWx0ZXIKLSsgICAgY29uc3QgaTh4 MTYgZiA9IHZlY19hbmQoYSwgdmVjX2FuZCgoaTh4MTYpbm90X2hldiwgKGk4eDE2KW1hc2spKTsK LSsgICAgY29uc3QgaTE2eDggazkgPSB2ZWNfc3BsYXRzKChzaG9ydCkweDA5MDApLCBrNjMgPSB2 ZWNfc3BsYXRzKChzaG9ydCk2Myk7Ci0rICAgIGNvbnN0IGkxNng4IGY5bG8gPSBNdWxIaTE2X1Mo KGkxNng4KXZlY19tZXJnZWgoemVybywgKHU4eDE2KWYpLCBrOSk7Ci0rICAgIGNvbnN0IGkxNng4 IGY5aGkgPSBNdWxIaTE2X1MoKGkxNng4KXZlY19tZXJnZWwoemVybywgKHU4eDE2KWYpLCBrOSk7 Ci0rICAgIGNvbnN0IGkxNng4IGEybG8gPSB2ZWNfYWRkKGY5bG8sIGs2MyksIGEyaGkgPSB2ZWNf YWRkKGY5aGksIGs2Myk7Ci0rICAgIGNvbnN0IGkxNng4IGExbG8gPSB2ZWNfYWRkKGEybG8sIGY5 bG8pLCBhMWhpID0gdmVjX2FkZChhMmhpLCBmOWhpKTsKLSsgICAgY29uc3QgaTE2eDggYTBsbyA9 IHZlY19hZGQoYTFsbywgZjlsbyksIGEwaGkgPSB2ZWNfYWRkKGExaGksIGY5aGkpOwotKyAgICBV cGRhdGUyUGl4ZWxzKCZwMiwgJnEyLCBhMmxvLCBhMmhpKTsKLSsgICAgVXBkYXRlMlBpeGVscygm cDEsICZxMSwgYTFsbywgYTFoaSk7Ci0rICAgIFVwZGF0ZTJQaXhlbHMoJnAwLCAmcTAsIGEwbG8s IGEwaGkpOwotKyAgfQotKyAgKnAydSA9ICh1OHgxNilwMjsgKnAxdSA9ICh1OHgxNilwMTsgKnAw dSA9ICh1OHgxNilwMDsKLSsgICpxMHUgPSAodTh4MTYpcTA7ICpxMXUgPSAodTh4MTYpcTE7ICpx MnUgPSAodTh4MTYpcTI7Ci0rfQotKwotK3N0YXRpYyB2b2lkIFZGaWx0ZXIxNl9WU1godWludDhf dCogcCwgaW50IHMsIGludCB0aHJlc2gsIGludCBpdGhyZXNoLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGhldl90aHJlc2gpIHsKLSsgIHU4eDE2IHAzID0gdmVjX3hsKDAsIHAgLSA0 ICogcyksIHAyID0gdmVjX3hsKDAsIHAgLSAzICogcyk7Ci0rICB1OHgxNiBwMSA9IHZlY194bCgw LCBwIC0gMiAqIHMpLCBwMCA9IHZlY194bCgwLCBwIC0gcyk7Ci0rICB1OHgxNiBxMCA9IHZlY194 bCgwLCBwKSwgcTEgPSB2ZWNfeGwoMCwgcCArIHMpOwotKyAgdTh4MTYgcTIgPSB2ZWNfeGwoMCwg cCArIDIgKiBzKSwgcTMgPSB2ZWNfeGwoMCwgcCArIDMgKiBzKTsKLSsgIGNvbnN0IHU4eDE2IG0g PSBDb21wbGV4TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwgaXRo cmVzaCk7Ci0rICBEb0ZpbHRlcjYoJnAyLCAmcDEsICZwMCwgJnEwLCAmcTEsICZxMiwgbSwgaGV2 X3RocmVzaCk7Ci0rICB2ZWNfeHN0KHAyLCAwLCBwIC0gMyAqIHMpOyB2ZWNfeHN0KHAxLCAwLCBw IC0gMiAqIHMpOyB2ZWNfeHN0KHAwLCAwLCBwIC0gcyk7Ci0rICB2ZWNfeHN0KHEwLCAwLCBwKTsg dmVjX3hzdChxMSwgMCwgcCArIHMpOyB2ZWNfeHN0KHEyLCAwLCBwICsgMiAqIHMpOwotK30KLSsK LStzdGF0aWMgdm9pZCBWRmlsdGVyMTZpX1ZTWCh1aW50OF90KiBwLCBpbnQgcywgaW50IHRocmVz aCwgaW50IGl0aHJlc2gsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhldl90aHJl c2gpIHsKLSsgIGludCBrOwotKyAgZm9yIChrID0gMzsgayA+IDA7IC0taykgewotKyAgICBwICs9 IDQgKiBzOwotKyAgICB1OHgxNiBwMyA9IHZlY194bCgwLCBwIC0gNCAqIHMpLCBwMiA9IHZlY194 bCgwLCBwIC0gMyAqIHMpOwotKyAgICB1OHgxNiBwMSA9IHZlY194bCgwLCBwIC0gMiAqIHMpLCBw MCA9IHZlY194bCgwLCBwIC0gcyk7Ci0rICAgIHU4eDE2IHEwID0gdmVjX3hsKDAsIHApLCBxMSA9 IHZlY194bCgwLCBwICsgcyk7Ci0rICAgIHU4eDE2IHEyID0gdmVjX3hsKDAsIHAgKyAyICogcyks IHEzID0gdmVjX3hsKDAsIHAgKyAzICogcyk7Ci0rICAgIGNvbnN0IHU4eDE2IG0gPSBDb21wbGV4 TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwgaXRocmVzaCk7Ci0r ICAgIERvRmlsdGVyNCgmcDEsICZwMCwgJnEwLCAmcTEsIG0sIGhldl90aHJlc2gpOwotKyAgICB2 ZWNfeHN0KHAxLCAwLCBwIC0gMiAqIHMpOyB2ZWNfeHN0KHAwLCAwLCBwIC0gcyk7Ci0rICAgIHZl Y194c3QocTAsIDAsIHApOyB2ZWNfeHN0KHExLCAwLCBwICsgcyk7Ci0rICB9Ci0rfQotKwotKy8v IENvbXBsZXggaG9yaXpvbnRhbCBsdW1hOiB0d28gMTZ4NCB0cmFuc3Bvc2VzIGFyb3VuZCB0aGUg dmVydGljYWwgZWRnZSBmZWVkCi0rLy8gdGhlIHNhbWUgRG9GaWx0ZXI0L0RvRmlsdGVyNiB1c2Vk IGJ5IHRoZSB2ZXJ0aWNhbCB2YXJpYW50cy4KLStzdGF0aWMgdm9pZCBIRmlsdGVyMTZfVlNYKHVp bnQ4X3QqIHAsIGludCBzLCBpbnQgdGhyZXNoLCBpbnQgaXRocmVzaCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBoZXZfdGhyZXNoKSB7Ci0rICB1aW50OF90KiBjb25zdCBiID0gcCAt IDQ7Ci0rICB1OHgxNiBwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTM7Ci0rICBMb2FkMTZ4 NChiLCBiICsgOCAqIHMsIHMsICZwMywgJnAyLCAmcDEsICZwMCk7Ci0rICBMb2FkMTZ4NChwLCBw ICsgOCAqIHMsIHMsICZxMCwgJnExLCAmcTIsICZxMyk7Ci0rICBjb25zdCB1OHgxNiBtID0gQ29t cGxleE1hc2socDMsIHAyLCBwMSwgcDAsIHEwLCBxMSwgcTIsIHEzLCB0aHJlc2gsIGl0aHJlc2gp OwotKyAgRG9GaWx0ZXI2KCZwMiwgJnAxLCAmcDAsICZxMCwgJnExLCAmcTIsIG0sIGhldl90aHJl c2gpOwotKyAgU3RvcmUxNng0KHAzLCBwMiwgcDEsIHAwLCBiLCBiICsgOCAqIHMsIHMpOwotKyAg U3RvcmUxNng0KHEwLCBxMSwgcTIsIHEzLCBwLCBwICsgOCAqIHMsIHMpOwotK30KLSsKLStzdGF0 aWMgdm9pZCBIRmlsdGVyMTZpX1ZTWCh1aW50OF90KiBwLCBpbnQgcywgaW50IHRocmVzaCwgaW50 IGl0aHJlc2gsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhldl90aHJlc2gpIHsK LSsgIGludCBrOwotKyAgZm9yIChrID0gMzsgayA+IDA7IC0taykgewotKyAgICBwICs9IDQ7Ci0r ICAgIHU4eDE2IHAzLCBwMiwgcDEsIHAwLCBxMCwgcTEsIHEyLCBxMzsKLSsgICAgTG9hZDE2eDQo cCAtIDQsIHAgLSA0ICsgOCAqIHMsIHMsICZwMywgJnAyLCAmcDEsICZwMCk7Ci0rICAgIExvYWQx Nng0KHAsIHAgKyA4ICogcywgcywgJnEwLCAmcTEsICZxMiwgJnEzKTsKLSsgICAgY29uc3QgdTh4 MTYgbSA9Ci0rICAgICAgICBDb21wbGV4TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwg cTMsIHRocmVzaCwgaXRocmVzaCk7Ci0rICAgIERvRmlsdGVyNCgmcDEsICZwMCwgJnEwLCAmcTEs IG0sIGhldl90aHJlc2gpOwotKyAgICBTdG9yZTE2eDQocDEsIHAwLCBxMCwgcTEsIHAgLSAyLCBw IC0gMiArIDggKiBzLCBzKTsKLSsgIH0KLSt9Ci0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSsvLyBDb21wbGV4IGNocm9tYSBmaWx0ZXJpbmc6IG9wZXJhdGUgb24gdGhlIHUgYW5kIHYgcGxh bmVzICg4IHdpZGUpIHRvZ2V0aGVyLgotKwotKy8vIFBhY2sgOCB1LWJ5dGVzIGludG8gdGhlIGxv dyBoYWxmIGFuZCA4IHYtYnl0ZXMgaW50byB0aGUgaGlnaCBoYWxmLgotK3N0YXRpYyBXRUJQX0lO TElORSB1OHgxNiBMb2FkVVYoY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB1LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB2 KSB7Ci0rICB1bnNpZ25lZCBjaGFyIGJbMTZdOwotKyAgbWVtY3B5KGIsIHUsIDgpOwotKyAgbWVt Y3B5KGIgKyA4LCB2LCA4KTsKLSsgIHJldHVybiB2ZWNfeGwoMCwgYik7Ci0rfQotKwotK3N0YXRp YyBXRUJQX0lOTElORSB2b2lkIFN0b3JlVVYodTh4MTYgeCwgdWludDhfdCogV0VCUF9SRVNUUklD VCB1LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNU UklDVCB2KSB7Ci0rICB1bnNpZ25lZCBjaGFyIGJbMTZdOwotKyAgbWVtY3B5KGIsICZ4LCAxNik7 Ci0rICBtZW1jcHkodSwgYiwgOCk7Ci0rICBtZW1jcHkodiwgYiArIDgsIDgpOwotK30KLSsKLStz dGF0aWMgdm9pZCBWRmlsdGVyOF9WU1godWludDhfdCogV0VCUF9SRVNUUklDVCB1LCB1aW50OF90 KiBXRUJQX1JFU1RSSUNUIHYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzLCBpbnQg dGhyZXNoLCBpbnQgaXRocmVzaCwgaW50IGhldl90aHJlc2gpIHsKLSsgIHU4eDE2IHAzID0gTG9h ZFVWKHUgLSA0ICogcywgdiAtIDQgKiBzKSwgcDIgPSBMb2FkVVYodSAtIDMgKiBzLCB2IC0gMyAq IHMpOwotKyAgdTh4MTYgcDEgPSBMb2FkVVYodSAtIDIgKiBzLCB2IC0gMiAqIHMpLCBwMCA9IExv YWRVVih1IC0gcywgdiAtIHMpOwotKyAgdTh4MTYgcTAgPSBMb2FkVVYodSwgdiksIHExID0gTG9h ZFVWKHUgKyBzLCB2ICsgcyk7Ci0rICB1OHgxNiBxMiA9IExvYWRVVih1ICsgMiAqIHMsIHYgKyAy ICogcyksIHEzID0gTG9hZFVWKHUgKyAzICogcywgdiArIDMgKiBzKTsKLSsgIGNvbnN0IHU4eDE2 IG0gPSBDb21wbGV4TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwg aXRocmVzaCk7Ci0rICBEb0ZpbHRlcjYoJnAyLCAmcDEsICZwMCwgJnEwLCAmcTEsICZxMiwgbSwg aGV2X3RocmVzaCk7Ci0rICBTdG9yZVVWKHAyLCB1IC0gMyAqIHMsIHYgLSAzICogcyk7IFN0b3Jl VVYocDEsIHUgLSAyICogcywgdiAtIDIgKiBzKTsKLSsgIFN0b3JlVVYocDAsIHUgLSBzLCB2IC0g cyk7IFN0b3JlVVYocTAsIHUsIHYpOwotKyAgU3RvcmVVVihxMSwgdSArIHMsIHYgKyBzKTsgU3Rv cmVVVihxMiwgdSArIDIgKiBzLCB2ICsgMiAqIHMpOwotK30KLSsKLStzdGF0aWMgdm9pZCBWRmls dGVyOGlfVlNYKHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwgdWludDhfdCogV0VCUF9SRVNUUklD VCB2LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHMsIGludCB0aHJlc2gsIGludCBp dGhyZXNoLCBpbnQgaGV2X3RocmVzaCkgewotKyAgdSArPSA0ICogczsgdiArPSA0ICogczsKLSsg IHU4eDE2IHAzID0gTG9hZFVWKHUgLSA0ICogcywgdiAtIDQgKiBzKSwgcDIgPSBMb2FkVVYodSAt IDMgKiBzLCB2IC0gMyAqIHMpOwotKyAgdTh4MTYgcDEgPSBMb2FkVVYodSAtIDIgKiBzLCB2IC0g MiAqIHMpLCBwMCA9IExvYWRVVih1IC0gcywgdiAtIHMpOwotKyAgdTh4MTYgcTAgPSBMb2FkVVYo dSwgdiksIHExID0gTG9hZFVWKHUgKyBzLCB2ICsgcyk7Ci0rICB1OHgxNiBxMiA9IExvYWRVVih1 ICsgMiAqIHMsIHYgKyAyICogcyksIHEzID0gTG9hZFVWKHUgKyAzICogcywgdiArIDMgKiBzKTsK LSsgIGNvbnN0IHU4eDE2IG0gPSBDb21wbGV4TWFzayhwMywgcDIsIHAxLCBwMCwgcTAsIHExLCBx MiwgcTMsIHRocmVzaCwgaXRocmVzaCk7Ci0rICBEb0ZpbHRlcjQoJnAxLCAmcDAsICZxMCwgJnEx LCBtLCBoZXZfdGhyZXNoKTsKLSsgIFN0b3JlVVYocDEsIHUgLSAyICogcywgdiAtIDIgKiBzKTsg U3RvcmVVVihwMCwgdSAtIHMsIHYgLSBzKTsKLSsgIFN0b3JlVVYocTAsIHUsIHYpOyBTdG9yZVVW KHExLCB1ICsgcywgdiArIHMpOwotK30KLSsKLStzdGF0aWMgdm9pZCBIRmlsdGVyOF9WU1godWlu dDhfdCogV0VCUF9SRVNUUklDVCB1LCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBzLCBpbnQgdGhyZXNoLCBpbnQgaXRocmVzaCwgaW50IGhl dl90aHJlc2gpIHsKLSsgIHU4eDE2IHAzLCBwMiwgcDEsIHAwLCBxMCwgcTEsIHEyLCBxMzsKLSsg IExvYWQxNng0KHUgLSA0LCB2IC0gNCwgcywgJnAzLCAmcDIsICZwMSwgJnAwKTsKLSsgIExvYWQx Nng0KHUsIHYsIHMsICZxMCwgJnExLCAmcTIsICZxMyk7Ci0rICBjb25zdCB1OHgxNiBtID0gQ29t cGxleE1hc2socDMsIHAyLCBwMSwgcDAsIHEwLCBxMSwgcTIsIHEzLCB0aHJlc2gsIGl0aHJlc2gp OwotKyAgRG9GaWx0ZXI2KCZwMiwgJnAxLCAmcDAsICZxMCwgJnExLCAmcTIsIG0sIGhldl90aHJl c2gpOwotKyAgU3RvcmUxNng0KHAzLCBwMiwgcDEsIHAwLCB1IC0gNCwgdiAtIDQsIHMpOwotKyAg U3RvcmUxNng0KHEwLCBxMSwgcTIsIHEzLCB1LCB2LCBzKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQg SEZpbHRlcjhpX1ZTWCh1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUsIHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzLCBpbnQgdGhyZXNoLCBp bnQgaXRocmVzaCwgaW50IGhldl90aHJlc2gpIHsKLSsgIHUgKz0gNDsgdiArPSA0OwotKyAgdTh4 MTYgcDMsIHAyLCBwMSwgcDAsIHEwLCBxMSwgcTIsIHEzOwotKyAgTG9hZDE2eDQodSAtIDQsIHYg LSA0LCBzLCAmcDMsICZwMiwgJnAxLCAmcDApOwotKyAgTG9hZDE2eDQodSwgdiwgcywgJnEwLCAm cTEsICZxMiwgJnEzKTsKLSsgIGNvbnN0IHU4eDE2IG0gPSBDb21wbGV4TWFzayhwMywgcDIsIHAx LCBwMCwgcTAsIHExLCBxMiwgcTMsIHRocmVzaCwgaXRocmVzaCk7Ci0rICBEb0ZpbHRlcjQoJnAx LCAmcDAsICZxMCwgJnExLCBtLCBoZXZfdGhyZXNoKTsKLSsgIFN0b3JlMTZ4NChwMSwgcDAsIHEw LCBxMSwgdSAtIDIsIHYgLSAyLCBzKTsKLSt9Ci0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSsvLyBJbnRyYSBwcmVkaWN0aW9uICgxNngxNiBsdW1hLCA4eDggY2hyb21hKS4gREMgdG9wLXN1 bXMgYXJlIHNjYWxhciAodGhlIFNJTUQKLSsvLyB3aW4gaXMgdGhlIGJsb2NrIGZpbGwpOyBUcnVl TW90aW9uL1ZFL0hFIGFyZSB2ZWN0b3JpemVkLgotKwotK3N0YXRpYyBXRUJQX0lOTElORSB2b2lk IFB1dDE2KHVpbnQ4X3QgdiwgdWludDhfdCogZHN0KSB7Ci0rICBjb25zdCB1OHgxNiB4ID0gdmVj X3NwbGF0cyh2KTsKLSsgIGludCBqOwotKyAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHZlY194 c3QoeCwgMCwgZHN0ICsgaiAqIEJQUyk7Ci0rfQotK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFB1 dDh4OHV2KHVpbnQ4X3QgdiwgdWludDhfdCogZHN0KSB7Ci0rICBjb25zdCB1OHgxNiB4ID0gdmVj X3NwbGF0cyh2KTsKLSsgIHVuc2lnbmVkIGNoYXIgYlsxNl07Ci0rICBpbnQgajsKLSsgIG1lbWNw eShiLCAmeCwgMTYpOwotKyAgZm9yIChqID0gMDsgaiA8IDg7ICsraikgbWVtY3B5KGRzdCArIGog KiBCUFMsIGIsIDgpOwotK30KLSsKLStzdGF0aWMgdm9pZCBWRTE2X1ZTWCh1aW50OF90KiBkc3Qp IHsKLSsgIGNvbnN0IHU4eDE2IHRvcCA9IHZlY194bCgwLCBkc3QgLSBCUFMpOwotKyAgaW50IGo7 Ci0rICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgdmVjX3hzdCh0b3AsIDAsIGRzdCArIGogKiBC UFMpOwotK30KLStzdGF0aWMgdm9pZCBIRTE2X1ZTWCh1aW50OF90KiBkc3QpIHsKLSsgIGludCBq OwotKyAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHZlY194c3QodmVjX3NwbGF0cyhkc3RbLTEg KyBqICogQlBTXSksIDAsIGRzdCArIGogKiBCUFMpOwotK30KLStzdGF0aWMgdm9pZCBEQzE2X1ZT WCh1aW50OF90KiBkc3QpIHsKLSsgIGludCBzID0gMTYsIGo7Ci0rICBmb3IgKGogPSAwOyBqIDwg MTY7ICsraikgcyArPSBkc3RbLUJQUyArIGpdICsgZHN0Wy0xICsgaiAqIEJQU107Ci0rICBQdXQx NihzID4+IDUsIGRzdCk7Ci0rfQotK3N0YXRpYyB2b2lkIERDMTZOb1RvcF9WU1godWludDhfdCog ZHN0KSB7Ci0rICBpbnQgcyA9IDgsIGo7Ci0rICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgcyAr PSBkc3RbLTEgKyBqICogQlBTXTsKLSsgIFB1dDE2KHMgPj4gNCwgZHN0KTsKLSt9Ci0rc3RhdGlj IHZvaWQgREMxNk5vTGVmdF9WU1godWludDhfdCogZHN0KSB7Ci0rICBpbnQgcyA9IDgsIGo7Ci0r ICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgcyArPSBkc3RbLUJQUyArIGpdOwotKyAgUHV0MTYo cyA+PiA0LCBkc3QpOwotK30KLStzdGF0aWMgdm9pZCBEQzE2Tm9Ub3BMZWZ0X1ZTWCh1aW50OF90 KiBkc3QpIHsgUHV0MTYoMHg4MCwgZHN0KTsgfQotK3N0YXRpYyB2b2lkIFRNMTZfVlNYKHVpbnQ4 X3QqIGRzdCkgewotKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNo YXIpMCk7Ci0rICBjb25zdCB1OHgxNiB0ID0gdmVjX3hsKDAsIGRzdCAtIEJQUyk7Ci0rICBjb25z dCBpMTZ4OCB0bCA9IChpMTZ4OCl2ZWNfbWVyZ2VoKHQsIHplcm8pLCB0aCA9IChpMTZ4OCl2ZWNf bWVyZ2VsKHQsIHplcm8pOwotKyAgY29uc3QgaW50IGMgPSBkc3RbLUJQUyAtIDFdOwotKyAgaW50 IHk7Ci0rICBmb3IgKHkgPSAwOyB5IDwgMTY7ICsreSkgewotKyAgICBjb25zdCBpMTZ4OCBiID0g dmVjX3NwbGF0cygoc2hvcnQpKGRzdFstMSArIHkgKiBCUFNdIC0gYykpOwotKyAgICB2ZWNfeHN0 KCh1OHgxNil2ZWNfcGFja3N1KHZlY19hZGQoYiwgdGwpLCB2ZWNfYWRkKGIsIHRoKSksIDAsIGRz dCArIHkgKiBCUFMpOwotKyAgfQotK30KLSsKLStzdGF0aWMgdm9pZCBWRTh1dl9WU1godWludDhf dCogZHN0KSB7Ci0rICB1bnNpZ25lZCBjaGFyIHRbOF07Ci0rICBpbnQgajsKLSsgIG1lbWNweSh0 LCBkc3QgLSBCUFMsIDgpOwotKyAgZm9yIChqID0gMDsgaiA8IDg7ICsraikgbWVtY3B5KGRzdCAr IGogKiBCUFMsIHQsIDgpOwotK30KLStzdGF0aWMgdm9pZCBEQzh1dl9WU1godWludDhfdCogZHN0 KSB7Ci0rICBpbnQgcyA9IDgsIGo7Ci0rICBmb3IgKGogPSAwOyBqIDwgODsgKytqKSBzICs9IGRz dFstQlBTICsgal0gKyBkc3RbLTEgKyBqICogQlBTXTsKLSsgIFB1dDh4OHV2KHMgPj4gNCwgZHN0 KTsKLSt9Ci0rc3RhdGljIHZvaWQgREM4dXZOb1RvcF9WU1godWludDhfdCogZHN0KSB7Ci0rICBp bnQgcyA9IDQsIGo7Ci0rICBmb3IgKGogPSAwOyBqIDwgODsgKytqKSBzICs9IGRzdFstMSArIGog KiBCUFNdOwotKyAgUHV0OHg4dXYocyA+PiAzLCBkc3QpOwotK30KLStzdGF0aWMgdm9pZCBEQzh1 dk5vTGVmdF9WU1godWludDhfdCogZHN0KSB7Ci0rICBpbnQgcyA9IDQsIGo7Ci0rICBmb3IgKGog PSAwOyBqIDwgODsgKytqKSBzICs9IGRzdFstQlBTICsgal07Ci0rICBQdXQ4eDh1dihzID4+IDMs IGRzdCk7Ci0rfQotK3N0YXRpYyB2b2lkIERDOHV2Tm9Ub3BMZWZ0X1ZTWCh1aW50OF90KiBkc3Qp IHsgUHV0OHg4dXYoMHg4MCwgZHN0KTsgfQotK3N0YXRpYyB2b2lkIFRNOHV2X1ZTWCh1aW50OF90 KiBkc3QpIHsKLSsgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFy KTApOwotKyAgY29uc3QgdTh4MTYgdCA9IHZlY194bCgwLCBkc3QgLSBCUFMpOwotKyAgY29uc3Qg aTE2eDggdGwgPSAoaTE2eDgpdmVjX21lcmdlaCh0LCB6ZXJvKTsKLSsgIGNvbnN0IGludCBjID0g ZHN0Wy1CUFMgLSAxXTsKLSsgIGludCB5OwotKyAgZm9yICh5ID0gMDsgeSA8IDg7ICsreSkgewot KyAgICBjb25zdCBpMTZ4OCBiID0gdmVjX3NwbGF0cygoc2hvcnQpKGRzdFstMSArIHkgKiBCUFNd IC0gYykpOwotKyAgICBjb25zdCB1OHgxNiBvID0gKHU4eDE2KXZlY19wYWNrc3UodmVjX2FkZChi LCB0bCksIHZlY19zcGxhdHMoKHNob3J0KTApKTsKLSsgICAgdW5zaWduZWQgY2hhciBiYlsxNl07 Ci0rICAgIG1lbWNweShiYiwgJm8sIDE2KTsKLSsgICAgbWVtY3B5KGRzdCArIHkgKiBCUFMsIGJi LCA4KTsKLSsgIH0KLSt9Ci0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyA0eDQgbHVt YSBpbnRyYSBwcmVkaWN0aW9uLiBXaG9sZS12ZWN0b3IgYnl0ZSBzaGlmdHMgd2luZG93IHRoZSBl ZGdlIHNhbXBsZXM6Ci0rLy8gICBzcmxpX3NpMTI4KHgsbikgPT0gdmVjX3NsZCh6ZXJvLCB4LCAx NiAtIG4pCi0rLy8gICBzbGxpX3NpMTI4KHgsbikgPT0gdmVjX3NsZCh4LCB6ZXJvLCBuKQotKwot KyNkZWZpbmUgU1JMSSh4LCBuKSB2ZWNfc2xkKHplcm8sICh4KSwgMTYgLSAobikpCi0rI2RlZmlu ZSBTTExJKHgsIG4pIHZlY19zbGQoKHgpLCB6ZXJvLCAobikpCi0rI2RlZmluZSBJTlMxNih2LCB2 YWwsIGkpICgodTh4MTYpdmVjX2luc2VydCgoc2hvcnQpKHZhbCksIChpMTZ4OCkodiksIChpKSkp Ci0rI2RlZmluZSBBVkczQyhhLCBiLCBjKSAoKHVpbnQ4X3QpKCgoYSkgKyAyICogKGIpICsgKGMp ICsgMikgPj4gMikpCi0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHU4eDE2IExvYWQ2NChjb25zdCB1 aW50OF90KiBXRUJQX1JFU1RSSUNUIHApIHsKLSsgIHVuc2lnbmVkIGNoYXIgYlsxNl0gPSB7MH07 Ci0rICBtZW1jcHkoYiwgcCwgOCk7Ci0rICByZXR1cm4gdmVjX3hsKDAsIGIpOwotK30KLStzdGF0 aWMgV0VCUF9JTkxJTkUgdWludDMyX3QgR2V0V29yZCh1OHgxNiB2KSB7Ci0rICB1bnNpZ25lZCBj aGFyIGJbMTZdOwotKyAgdWludDMyX3QgcjsKLSsgIG1lbWNweShiLCAmdiwgMTYpOwotKyAgbWVt Y3B5KCZyLCBiLCA0KTsKLSsgIHJldHVybiByOwotK30KLStzdGF0aWMgV0VCUF9JTkxJTkUgdTh4 MTYgU2V0V29yZCh1aW50MzJfdCB2KSB7Ci0rICB1bnNpZ25lZCBjaGFyIGJbMTZdID0gezB9Owot KyAgbWVtY3B5KGIsICZ2LCA0KTsKLSsgIHJldHVybiB2ZWNfeGwoMCwgYik7Ci0rfQotK3N0YXRp YyBXRUJQX0lOTElORSB2b2lkIFN0b3JlV29yZCh1aW50MzJfdCB2LCB1aW50OF90KiBkc3QpIHsK LSsgIG1lbWNweShkc3QsICZ2LCA0KTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgVkU0X1ZTWCh1aW50 OF90KiBkc3QpIHsKLSsgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBj aGFyKTApLCBvbmUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTEpOwotKyAgY29uc3QgdTh4 MTYgQSA9IExvYWQ2NChkc3QgLSBCUFMgLSAxKSwgQiA9IFNSTEkoQSwgMSksIEMgPSBTUkxJKEEs IDIpOwotKyAgY29uc3QgdTh4MTYgYSA9IHZlY19hdmcoQSwgQyksIGxzYiA9IHZlY19hbmQodmVj X3hvcihBLCBDKSwgb25lKTsKLSsgIGNvbnN0IHU4eDE2IGF2ZyA9IHZlY19hdmcodmVjX3N1YnMo YSwgbHNiKSwgQik7Ci0rICBjb25zdCB1aW50MzJfdCB2ID0gR2V0V29yZChhdmcpOwotKyAgaW50 IGk7Ci0rICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSBTdG9yZVdvcmQodiwgZHN0ICsgaSAqIEJQ Uyk7Ci0rfQotK3N0YXRpYyB2b2lkIExENF9WU1godWludDhfdCogZHN0KSB7Ci0rICBjb25zdCB1 OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKSwgb25lID0gdmVjX3NwbGF0 cygodW5zaWduZWQgY2hhcikxKTsKLSsgIGNvbnN0IHU4eDE2IEEgPSBMb2FkNjQoZHN0IC0gQlBT KSwgQiA9IFNSTEkoQSwgMSksIEMgPSBTUkxJKEEsIDIpOwotKyAgY29uc3QgdTh4MTYgQ0ggPSBJ TlMxNihDLCBkc3RbLUJQUyArIDddLCAzKTsKLSsgIGNvbnN0IHU4eDE2IGExID0gdmVjX2F2ZyhB LCBDSCksIGxzYiA9IHZlY19hbmQodmVjX3hvcihBLCBDSCksIG9uZSk7Ci0rICBjb25zdCB1OHgx NiByID0gdmVjX2F2Zyh2ZWNfc3VicyhhMSwgbHNiKSwgQik7Ci0rICBTdG9yZVdvcmQoR2V0V29y ZChyKSwgZHN0ICsgMCAqIEJQUyk7Ci0rICBTdG9yZVdvcmQoR2V0V29yZChTUkxJKHIsIDEpKSwg ZHN0ICsgMSAqIEJQUyk7Ci0rICBTdG9yZVdvcmQoR2V0V29yZChTUkxJKHIsIDIpKSwgZHN0ICsg MiAqIEJQUyk7Ci0rICBTdG9yZVdvcmQoR2V0V29yZChTUkxJKHIsIDMpKSwgZHN0ICsgMyAqIEJQ Uyk7Ci0rfQotK3N0YXRpYyB2b2lkIFZSNF9WU1godWludDhfdCogZHN0KSB7Ci0rICBjb25zdCB1 OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKSwgb25lID0gdmVjX3NwbGF0 cygodW5zaWduZWQgY2hhcikxKTsKLSsgIGNvbnN0IGludCBJID0gZHN0Wy0xICsgMCAqIEJQU10s IEogPSBkc3RbLTEgKyAxICogQlBTXSwgSyA9IGRzdFstMSArIDIgKiBCUFNdOwotKyAgY29uc3Qg aW50IFggPSBkc3RbLTEgLSBCUFNdOwotKyAgY29uc3QgdTh4MTYgWEEgPSBMb2FkNjQoZHN0IC0g QlBTIC0gMSksIEEwID0gU1JMSShYQSwgMSk7Ci0rICBjb25zdCB1OHgxNiBhYmNkID0gdmVjX2F2 ZyhYQSwgQTApOwotKyAgY29uc3QgdTh4MTYgSVggPSBJTlMxNihTTExJKFhBLCAxKSwgKEkgfCAo WCA8PCA4KSksIDApOwotKyAgY29uc3QgdTh4MTYgYTEgPSB2ZWNfYXZnKElYLCBBMCksIGxzYiA9 IHZlY19hbmQodmVjX3hvcihJWCwgQTApLCBvbmUpOwotKyAgY29uc3QgdTh4MTYgZWZnaCA9IHZl Y19hdmcodmVjX3N1YnMoYTEsIGxzYiksIFhBKTsKLSsgIFN0b3JlV29yZChHZXRXb3JkKGFiY2Qp LCBkc3QgKyAwICogQlBTKTsKLSsgIFN0b3JlV29yZChHZXRXb3JkKGVmZ2gpLCBkc3QgKyAxICog QlBTKTsKLSsgIFN0b3JlV29yZChHZXRXb3JkKFNMTEkoYWJjZCwgMSkpLCBkc3QgKyAyICogQlBT KTsKLSsgIFN0b3JlV29yZChHZXRXb3JkKFNMTEkoZWZnaCwgMSkpLCBkc3QgKyAzICogQlBTKTsK LSsgIGRzdFswICsgMiAqIEJQU10gPSBBVkczQyhKLCBJLCBYKTsKLSsgIGRzdFswICsgMyAqIEJQ U10gPSBBVkczQyhLLCBKLCBJKTsKLSt9Ci0rc3RhdGljIHZvaWQgVkw0X1ZTWCh1aW50OF90KiBk c3QpIHsKLSsgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTAp LCBvbmUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTEpOwotKyAgY29uc3QgdTh4MTYgQSA9 IExvYWQ2NChkc3QgLSBCUFMpLCBCID0gU1JMSShBLCAxKSwgQyA9IFNSTEkoQSwgMik7Ci0rICBj b25zdCB1OHgxNiBhMSA9IHZlY19hdmcoQSwgQiksIGEyID0gdmVjX2F2ZyhDLCBCKSwgYTMgPSB2 ZWNfYXZnKGExLCBhMik7Ci0rICBjb25zdCB1OHgxNiBsc2IxID0gdmVjX2FuZCh2ZWNfeG9yKGEx LCBhMiksIG9uZSk7Ci0rICBjb25zdCB1OHgxNiBhYmJjID0gdmVjX29yKHZlY194b3IoQSwgQiks IHZlY194b3IoQywgQikpOwotKyAgY29uc3QgdTh4MTYgYTQgPSB2ZWNfc3VicyhhMywgdmVjX2Fu ZChhYmJjLCBsc2IxKSk7Ci0rICBjb25zdCB1aW50MzJfdCBleHRyYSA9IEdldFdvcmQoU1JMSShh NCwgNCkpOwotKyAgU3RvcmVXb3JkKEdldFdvcmQoYTEpLCBkc3QgKyAwICogQlBTKTsKLSsgIFN0 b3JlV29yZChHZXRXb3JkKGE0KSwgZHN0ICsgMSAqIEJQUyk7Ci0rICBTdG9yZVdvcmQoR2V0V29y ZChTUkxJKGExLCAxKSksIGRzdCArIDIgKiBCUFMpOwotKyAgU3RvcmVXb3JkKEdldFdvcmQoU1JM SShhNCwgMSkpLCBkc3QgKyAzICogQlBTKTsKLSsgIGRzdFszICsgMiAqIEJQU10gPSAoZXh0cmEg Pj4gMCkgJiAweGZmOwotKyAgZHN0WzMgKyAzICogQlBTXSA9IChleHRyYSA+PiA4KSAmIDB4ZmY7 Ci0rfQotK3N0YXRpYyB2b2lkIFJENF9WU1godWludDhfdCogZHN0KSB7Ci0rICBjb25zdCB1OHgx NiB6ZXJvID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKSwgb25lID0gdmVjX3NwbGF0cygo dW5zaWduZWQgY2hhcikxKTsKLSsgIGNvbnN0IHVpbnQzMl90IEkgPSBkc3RbLTEgKyAwICogQlBT XSwgSiA9IGRzdFstMSArIDEgKiBCUFNdOwotKyAgY29uc3QgdWludDMyX3QgSyA9IGRzdFstMSAr IDIgKiBCUFNdLCBMID0gZHN0Wy0xICsgMyAqIEJQU107Ci0rICBjb25zdCB1OHgxNiBYQSA9IExv YWQ2NChkc3QgLSBCUFMgLSAxKTsKLSsgIGNvbnN0IHU4eDE2IGFsbCA9IHZlY19vcihTZXRXb3Jk KCh1aW50MzJfdCkoTCB8IChLIDw8IDgpIHwgKEogPDwgMTYpIHwgKEkgPDwgMjQpKSksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgU0xMSShYQSwgNCkpOwotKyAgY29uc3QgdTh4MTYgazEg PSBTUkxJKGFsbCwgMSksIGoyID0gU1JMSShhbGwsIDIpOwotKyAgY29uc3QgdTh4MTYgYTEgPSB2 ZWNfYXZnKGoyLCBhbGwpLCBsc2IgPSB2ZWNfYW5kKHZlY194b3IoajIsIGFsbCksIG9uZSk7Ci0r ICBjb25zdCB1OHgxNiByID0gdmVjX2F2Zyh2ZWNfc3VicyhhMSwgbHNiKSwgazEpOwotKyAgU3Rv cmVXb3JkKEdldFdvcmQociksIGRzdCArIDMgKiBCUFMpOwotKyAgU3RvcmVXb3JkKEdldFdvcmQo U1JMSShyLCAxKSksIGRzdCArIDIgKiBCUFMpOwotKyAgU3RvcmVXb3JkKEdldFdvcmQoU1JMSShy LCAyKSksIGRzdCArIDEgKiBCUFMpOwotKyAgU3RvcmVXb3JkKEdldFdvcmQoU1JMSShyLCAzKSks IGRzdCArIDAgKiBCUFMpOwotK30KLStzdGF0aWMgdm9pZCBUTTRfVlNYKHVpbnQ4X3QqIGRzdCkg ewotKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7Ci0r ICBjb25zdCB1OHgxNiB0ID0gTG9hZDY0KGRzdCAtIEJQUyk7Ci0rICBjb25zdCBpMTZ4OCB0YiA9 IChpMTZ4OCl2ZWNfbWVyZ2VoKHQsIHplcm8pOwotKyAgY29uc3QgaW50IGMgPSBkc3RbLUJQUyAt IDFdOwotKyAgaW50IHk7Ci0rICBmb3IgKHkgPSAwOyB5IDwgNDsgKyt5KSB7Ci0rICAgIGNvbnN0 IGkxNng4IGIgPSB2ZWNfc3BsYXRzKChzaG9ydCkoZHN0Wy0xICsgeSAqIEJQU10gLSBjKSk7Ci0r ICAgIGNvbnN0IHU4eDE2IG8gPSAodTh4MTYpdmVjX3BhY2tzdSh2ZWNfYWRkKGIsIHRiKSwgdmVj X3NwbGF0cygoc2hvcnQpMCkpOwotKyAgICBTdG9yZVdvcmQoR2V0V29yZChvKSwgZHN0ICsgeSAq IEJQUyk7Ci0rICB9Ci0rfQotKyN1bmRlZiBTUkxJCi0rI3VuZGVmIFNMTEkKLSsjdW5kZWYgSU5T MTYKLSsjdW5kZWYgQVZHM0MKLSsKLStleHRlcm4gdm9pZCBWUDhEc3BJbml0VlNYKHZvaWQpOwot KwotK1dFQlBfVFNBTl9JR05PUkVfRlVOQ1RJT04gdm9pZCBWUDhEc3BJbml0VlNYKHZvaWQpIHsK LSsgIFZQOFRyYW5zZm9ybSA9IFRyYW5zZm9ybV9WU1g7Ci0rICBWUDhTaW1wbGVWRmlsdGVyMTYg PSBTaW1wbGVWRmlsdGVyMTZfVlNYOwotKyAgVlA4U2ltcGxlVkZpbHRlcjE2aSA9IFNpbXBsZVZG aWx0ZXIxNmlfVlNYOwotKyAgVlA4U2ltcGxlSEZpbHRlcjE2ID0gU2ltcGxlSEZpbHRlcjE2X1ZT WDsKLSsgIFZQOFNpbXBsZUhGaWx0ZXIxNmkgPSBTaW1wbGVIRmlsdGVyMTZpX1ZTWDsKLSsgIFZQ OFZGaWx0ZXIxNiA9IFZGaWx0ZXIxNl9WU1g7Ci0rICBWUDhWRmlsdGVyMTZpID0gVkZpbHRlcjE2 aV9WU1g7Ci0rICBWUDhIRmlsdGVyMTYgPSBIRmlsdGVyMTZfVlNYOwotKyAgVlA4SEZpbHRlcjE2 aSA9IEhGaWx0ZXIxNmlfVlNYOwotKyAgVlA4VkZpbHRlcjggPSBWRmlsdGVyOF9WU1g7Ci0rICBW UDhWRmlsdGVyOGkgPSBWRmlsdGVyOGlfVlNYOwotKyAgVlA4SEZpbHRlcjggPSBIRmlsdGVyOF9W U1g7Ci0rICBWUDhIRmlsdGVyOGkgPSBIRmlsdGVyOGlfVlNYOwotKwotKyAgVlA4UHJlZEx1bWEx NlswXSA9IERDMTZfVlNYOwotKyAgVlA4UHJlZEx1bWExNlsxXSA9IFRNMTZfVlNYOwotKyAgVlA4 UHJlZEx1bWExNlsyXSA9IFZFMTZfVlNYOwotKyAgVlA4UHJlZEx1bWExNlszXSA9IEhFMTZfVlNY OwotKyAgVlA4UHJlZEx1bWExNls0XSA9IERDMTZOb1RvcF9WU1g7Ci0rICBWUDhQcmVkTHVtYTE2 WzVdID0gREMxNk5vTGVmdF9WU1g7Ci0rICBWUDhQcmVkTHVtYTE2WzZdID0gREMxNk5vVG9wTGVm dF9WU1g7Ci0rICBWUDhQcmVkQ2hyb21hOFswXSA9IERDOHV2X1ZTWDsKLSsgIFZQOFByZWRDaHJv bWE4WzFdID0gVE04dXZfVlNYOwotKyAgVlA4UHJlZENocm9tYThbMl0gPSBWRTh1dl9WU1g7Ci0r ICBWUDhQcmVkQ2hyb21hOFs0XSA9IERDOHV2Tm9Ub3BfVlNYOwotKyAgVlA4UHJlZENocm9tYThb NV0gPSBEQzh1dk5vTGVmdF9WU1g7Ci0rICBWUDhQcmVkQ2hyb21hOFs2XSA9IERDOHV2Tm9Ub3BM ZWZ0X1ZTWDsKLSsgIFZQOFByZWRMdW1hNFsxXSA9IFRNNF9WU1g7Ci0rICBWUDhQcmVkTHVtYTRb Ml0gPSBWRTRfVlNYOwotKyAgVlA4UHJlZEx1bWE0WzRdID0gUkQ0X1ZTWDsKLSsgIFZQOFByZWRM dW1hNFs1XSA9IFZSNF9WU1g7Ci0rICBWUDhQcmVkTHVtYTRbNl0gPSBMRDRfVlNYOwotKyAgVlA4 UHJlZEx1bWE0WzddID0gVkw0X1ZTWDsKLSt9Ci0rCi0rI2Vsc2UgIC8vICFXRUJQX1VTRV9WU1gK LSsKLStXRUJQX0RTUF9JTklUX1NUVUIoVlA4RHNwSW5pdFZTWCkKLSsKLSsjZW5kaWYgIC8vIFdF QlBfVVNFX1ZTWAotZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzLmMg Yi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZmlsdGVycy5jCi1pbmRleCAzOGRhNTI1MmRmM2EuLjk5 NjJlMTI4NzQwMiAxMDA2NDQKLS0tLSBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzLmMK LSsrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9maWx0ZXJzLmMKLUBAIC0yMTcsNiArMjE3LDcg QEAgZXh0ZXJuIHZvaWQgVlA4RmlsdGVyc0luaXRNSVBTZHNwUjIodm9pZCk7Ci0gZXh0ZXJuIHZv aWQgVlA4RmlsdGVyc0luaXRNU0Eodm9pZCk7Ci0gZXh0ZXJuIHZvaWQgVlA4RmlsdGVyc0luaXRO RU9OKHZvaWQpOwotIGV4dGVybiB2b2lkIFZQOEZpbHRlcnNJbml0U1NFMih2b2lkKTsKLStleHRl cm4gdm9pZCBWUDhGaWx0ZXJzSW5pdFZTWCh2b2lkKTsKLSAKLSBXRUJQX0RTUF9JTklUX0ZVTkMo VlA4RmlsdGVyc0luaXQpIHsKLSAgIFdlYlBVbmZpbHRlcnNbV0VCUF9GSUxURVJfTk9ORV0gPSBO b25lVW5maWx0ZXJfQzsKLUBAIC0yNDgsNiArMjQ5LDExIEBAIFdFQlBfRFNQX0lOSVRfRlVOQyhW UDhGaWx0ZXJzSW5pdCkgewotICAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrTVNBKSkgewotICAgICAg IFZQOEZpbHRlcnNJbml0TVNBKCk7Ci0gICAgIH0KLSsjZW5kaWYKLSsjaWYgZGVmaW5lZChXRUJQ X0hBVkVfVlNYKQotKyAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrVlNYKSkgewotKyAgICAgIFZQOEZp bHRlcnNJbml0VlNYKCk7Ci0rICAgIH0KLSAjZW5kaWYKLSAgIH0KLSAKLWRpZmYgLS1naXQgYS9t ZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZmlsdGVyc192c3guYyBiL21lZGlhL2xpYndlYnAvc3JjL2Rz cC9maWx0ZXJzX3ZzeC5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAw Li5hZThlNTdhYzY4NWMKLS0tLSAvZGV2L251bGwKLSsrKyBiL21lZGlhL2xpYndlYnAvc3JjL2Rz cC9maWx0ZXJzX3ZzeC5jCi1AQCAtMCwwICsxLDE2MiBAQAotKy8vIENvcHlyaWdodCAyMDE1IEdv b2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0rLy8KLSsvLyBVc2Ugb2YgdGhpcyBzb3Vy Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0rLy8gdGhhdCBjYW4g YmUgZm91bmQgaW4gdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0r Ly8gdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50 IGNhbiBiZSBmb3VuZAotKy8vIGluIHRoZSBmaWxlIFBBVEVOVFMuIEFsbCBjb250cmlidXRpbmcg cHJvamVjdCBhdXRob3JzIG1heQotKy8vIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0r Ly8KLSsvLyBWU1ggKFBvd2VyUEMpIHZlcnNpb24gb2YgZmlsdGVyaW5nIGZ1bmN0aW9ucy4KLSsK LSsjaW5jbHVkZSAic3JjL2RzcC9kc3AuaCIKLSsKLSsjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gp Ci0rCi0rI2luY2x1ZGUgPGFsdGl2ZWMuaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1 ZGUgPHN0cmluZy5oPgotKwotKyNpbmNsdWRlICJzcmMvZHNwL2NwdS5oIgotKyNpbmNsdWRlICJz cmMvd2VicC90eXBlcy5oIgotKwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgY2hhciB1OHgx NjsKLSt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHUxNng4OwotK3R5cGVkZWYgX192 ZWN0b3Igc2lnbmVkIHNob3J0IGkxNng4OwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgbG9u ZyBsb25nIHU2NHgyOwotKwotKy8vIEJ5dGUtd2lzZSBzaGlmdHMgb2YgdGhlIHdob2xlIDEyOC1i aXQgcmVnaXN0ZXIsIG1hdGNoaW5nIHRoZSBsaXR0bGUtZW5kaWFuCi0rLy8gc2VtYW50aWNzIG9m IF9tbV9zbGxpX3NpMTI4IC8gX21tX3NybGlfc2kxMjguICduJyBtdXN0IGJlIGEgbGl0ZXJhbC4K LSsjZGVmaW5lIFNMTEkoeCwgbikgdmVjX3NsZCgoeCksIHplcm8sIChuKSkKLSsjZGVmaW5lIFNS TEkoeCwgbikgdmVjX3NsZCh6ZXJvLCAoeCksIDE2IC0gKG4pKQotKwotKy8vIExvYWRzIDggYnl0 ZXMgZnJvbSAncCcgaW50byB0aGUgbG93IGhhbGYgb2YgYSB2ZWN0b3IgKGhpZ2ggaGFsZiB1bmRl ZmluZWQpLgotK3N0YXRpYyBXRUJQX0lOTElORSB1OHgxNiBMb2FkOChjb25zdCB1aW50OF90KiBw KSB7Ci0rICB1aW50NjRfdCB2OwotKyAgbWVtY3B5KCZ2LCBwLCA4KTsKLSsgIHJldHVybiAodTh4 MTYpdmVjX3NwbGF0cyh2KTsKLSt9Ci0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBI b3Jpem9udGFsIHVuZmlsdGVyOiBvdXRbaV0gPSBpbltpXSArIG91dFtpIC0gMV0gKGEgcHJlZml4 IHN1bSkuCi0rCi0rc3RhdGljIHZvaWQgSG9yaXpvbnRhbFVuZmlsdGVyX1ZTWChjb25zdCB1aW50 OF90KiBwcmV2LCBjb25zdCB1aW50OF90KiBpbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QqIG91dCwgaW50IHdpZHRoKSB7Ci0rICBjb25zdCB1OHgxNiB6ZXJv ID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKLSsgIGNvbnN0IHU2NHgyIHNoNTYgPSB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBsb25nIGxvbmcpNTYpOwotKyAgdTh4MTYgbGFzdDsKLSsgIGlu dCBpOwotKyAgb3V0WzBdID0gKHVpbnQ4X3QpKGluWzBdICsgKHByZXYgPT0gTlVMTCA/IDAgOiBw cmV2WzBdKSk7Ci0rICBpZiAod2lkdGggPD0gMSkgcmV0dXJuOwotKyAgbGFzdCA9IHZlY19pbnNl cnQob3V0WzBdLCB6ZXJvLCAwKTsKLSsgIGZvciAoaSA9IDE7IGkgKyA4IDw9IHdpZHRoOyBpICs9 IDgpIHsKLSsgICAgY29uc3QgdTh4MTYgQTAgPSBMb2FkOChpbiArIGkpOwotKyAgICBjb25zdCB1 OHgxNiBBMSA9IHZlY19hZGQoQTAsIGxhc3QpOwotKyAgICBjb25zdCB1OHgxNiBBMiA9IFNMTEko QTEsIDEpOwotKyAgICBjb25zdCB1OHgxNiBBMyA9IHZlY19hZGQoQTEsIEEyKTsKLSsgICAgY29u c3QgdTh4MTYgQTQgPSBTTExJKEEzLCAyKTsKLSsgICAgY29uc3QgdTh4MTYgQTUgPSB2ZWNfYWRk KEEzLCBBNCk7Ci0rICAgIGNvbnN0IHU4eDE2IEE2ID0gU0xMSShBNSwgNCk7Ci0rICAgIGNvbnN0 IHU4eDE2IEE3ID0gdmVjX2FkZChBNSwgQTYpOwotKyAgICBtZW1jcHkob3V0ICsgaSwgJkE3LCA4 KTsKLSsgICAgbGFzdCA9ICh1OHgxNil2ZWNfc3IoKHU2NHgyKUE3LCBzaDU2KTsgIC8vIGJyb2Fk Y2FzdCBvdXRbaSArIDddIHRvIGJ5dGUgMAotKyAgfQotKyAgZm9yICg7IGkgPCB3aWR0aDsgKytp KSBvdXRbaV0gPSAodWludDhfdCkoaW5baV0gKyBvdXRbaSAtIDFdKTsKLSt9Ci0rCi0rLy8tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBWZXJ0aWNhbCB1bmZpbHRlcjogb3V0W2ldID0gaW5baV0g KyBwcmV2W2ldLgotKwotK3N0YXRpYyB2b2lkIFZlcnRpY2FsVW5maWx0ZXJfVlNYKGNvbnN0IHVp bnQ4X3QqIHByZXYsIGNvbnN0IHVpbnQ4X3QqIGluLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QqIG91dCwgaW50IHdpZHRoKSB7Ci0rICBpZiAocHJldiA9PSBOVUxM KSB7Ci0rICAgIEhvcml6b250YWxVbmZpbHRlcl9WU1goTlVMTCwgaW4sIG91dCwgd2lkdGgpOwot KyAgfSBlbHNlIHsKLSsgICAgaW50IGk7Ci0rICAgIGNvbnN0IGludCBtYXhfcG9zID0gd2lkdGgg JiB+MzE7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCBtYXhfcG9zOyBpICs9IDMyKSB7Ci0rICAgICAg Y29uc3QgdTh4MTYgQTAgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIqKSZpbltpICsgMF0pOwot KyAgICAgIGNvbnN0IHU4eDE2IEExID0gdmVjX3hsKDAsICh1bnNpZ25lZCBjaGFyKikmaW5baSAr IDE2XSk7Ci0rICAgICAgY29uc3QgdTh4MTYgQjAgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIq KSZwcmV2W2kgKyAwXSk7Ci0rICAgICAgY29uc3QgdTh4MTYgQjEgPSB2ZWNfeGwoMCwgKHVuc2ln bmVkIGNoYXIqKSZwcmV2W2kgKyAxNl0pOwotKyAgICAgIHZlY194c3QodmVjX2FkZChBMCwgQjAp LCAwLCAodW5zaWduZWQgY2hhciopJm91dFtpICsgMF0pOwotKyAgICAgIHZlY194c3QodmVjX2Fk ZChBMSwgQjEpLCAwLCAodW5zaWduZWQgY2hhciopJm91dFtpICsgMTZdKTsKLSsgICAgfQotKyAg ICBmb3IgKDsgaSA8IHdpZHRoOyArK2kpIG91dFtpXSA9ICh1aW50OF90KShpbltpXSArIHByZXZb aV0pOwotKyAgfQotK30KLSsKLSsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIEdyYWRpZW50 IHVuZmlsdGVyOiByb3dbaV0gPSBpbltpXSArIGNsaXAocm93W2ktMV0gKyB0b3BbaV0gLSB0b3Bb aS0xXSkuCi0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIGludCBHcmFkaWVudFByZWRpY3Rvcl9WU1go dWludDhfdCBhLCB1aW50OF90IGIsIHVpbnQ4X3QgYykgewotKyAgY29uc3QgaW50IGcgPSBhICsg YiAtIGM7Ci0rICByZXR1cm4gKChnICYgfjB4ZmYpID09IDApID8gZyA6IChnIDwgMCkgPyAwIDog MjU1OwotK30KLSsKLStzdGF0aWMgdm9pZCBHcmFkaWVudFByZWRpY3RJbnZlcnNlX1ZTWChjb25z dCB1aW50OF90KiBpbiwgY29uc3QgdWludDhfdCogdG9wLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHJvdywgaW50IGxlbmd0aCkgewotKyAgaWYgKGxl bmd0aCA+IDApIHsKLSsgICAgaW50IGk7Ci0rICAgIGNvbnN0IGludCBtYXhfcG9zID0gbGVuZ3Ro ICYgfjc7Ci0rICAgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFy KTApOwotKyAgICB1OHgxNiBBID0gdmVjX2luc2VydCgodW5zaWduZWQgY2hhcilyb3dbLTFdLCB6 ZXJvLCAwKTsgIC8vIGxlZnQgc2FtcGxlCi0rICAgIGZvciAoaSA9IDA7IGkgPCBtYXhfcG9zOyBp ICs9IDgpIHsKLSsgICAgICBjb25zdCB1OHgxNiB0MCA9IExvYWQ4KHRvcCArIGkpOwotKyAgICAg IGNvbnN0IHU4eDE2IHQxID0gTG9hZDgodG9wICsgaSAtIDEpOwotKyAgICAgIGNvbnN0IHUxNng4 IEIgPSAodTE2eDgpdmVjX21lcmdlaCh0MCwgemVybyk7Ci0rICAgICAgY29uc3QgdTE2eDggQyA9 ICh1MTZ4OCl2ZWNfbWVyZ2VoKHQxLCB6ZXJvKTsKLSsgICAgICBjb25zdCB1OHgxNiBEID0gTG9h ZDgoaW4gKyBpKTsgIC8vIGJhc2UgaW5wdXQKLSsgICAgICBjb25zdCB1MTZ4OCBFID0gdmVjX3N1 YihCLCBDKTsgIC8vIHVuY2xpcHBlZCBncmFkaWVudCBiYXNpcyBiIC0gYwotKyAgICAgIHU4eDE2 IG91dCA9IHplcm87ICAgICAgICAgICAgICAgLy8gYWNjdW11bGF0b3IgZm9yIG91dHB1dAotKyAg ICAgIHU4eDE2IG1hc2tfaGkgPSB2ZWNfaW5zZXJ0KCh1bnNpZ25lZCBjaGFyKTB4ZmYsIHplcm8s IDApOwotKyAgICAgIGludCBrID0gODsKLSsgICAgICB3aGlsZSAoMSkgewotKyAgICAgICAgY29u c3QgdTE2eDggdG1wMyA9IHZlY19hZGQoKHUxNng4KUEsIEUpOyAgLy8gZGVsdGEgPSBhICsgYiAt IGMKLSsgICAgICAgIGNvbnN0IHU4eDE2IHRtcDQgPSB2ZWNfcGFja3N1KChpMTZ4OCl0bXAzLCAo aTE2eDgpemVybyk7ICAvLyBzYXQuIGRlbHRhCi0rICAgICAgICBjb25zdCB1OHgxNiB0bXA1ID0g dmVjX2FkZCh0bXA0LCBEKTsgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRvIGluW10KLSsg ICAgICAgIEEgPSB2ZWNfYW5kKHRtcDUsIG1hc2tfaGkpOyAgLy8ga2VlcCBuZXcgc2FtcGxlCi0r ICAgICAgICBvdXQgPSB2ZWNfb3Iob3V0LCBBKTsgICAgICAgIC8vIGFjY3VtdWxhdGUgb3V0cHV0 Ci0rICAgICAgICBpZiAoLS1rID09IDApIGJyZWFrOwotKyAgICAgICAgQSA9IFNMTEkoQSwgMSk7 ICAgICAgICAgICAgICAgICAgLy8gcm90YXRlIGxlZnQgc2FtcGxlCi0rICAgICAgICBtYXNrX2hp ID0gU0xMSShtYXNrX2hpLCAxKTsgICAgICAvLyByb3RhdGUgbWFzawotKyAgICAgICAgQSA9ICh1 OHgxNil2ZWNfbWVyZ2VoKEEsIHplcm8pOyAgLy8gY29udmVydCA4YiAtPiAxNmIKLSsgICAgICB9 Ci0rICAgICAgQSA9IFNSTEkoQSwgNyk7ICAvLyBwcmVwYXJlIGxlZnQgc2FtcGxlIGZvciBuZXh0 IGl0ZXJhdGlvbgotKyAgICAgIG1lbWNweShyb3cgKyBpLCAmb3V0LCA4KTsKLSsgICAgfQotKyAg ICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0rICAgICAgY29uc3QgaW50IGRlbHRhID0gR3Jh ZGllbnRQcmVkaWN0b3JfVlNYKHJvd1tpIC0gMV0sIHRvcFtpXSwgdG9wW2kgLSAxXSk7Ci0rICAg ICAgcm93W2ldID0gKHVpbnQ4X3QpKGluW2ldICsgZGVsdGEpOwotKyAgICB9Ci0rICB9Ci0rfQot KwotK3N0YXRpYyB2b2lkIEdyYWRpZW50VW5maWx0ZXJfVlNYKGNvbnN0IHVpbnQ4X3QqIHByZXYs IGNvbnN0IHVpbnQ4X3QqIGluLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QqIG91dCwgaW50IHdpZHRoKSB7Ci0rICBpZiAocHJldiA9PSBOVUxMKSB7Ci0rICAgIEhv cml6b250YWxVbmZpbHRlcl9WU1goTlVMTCwgaW4sIG91dCwgd2lkdGgpOwotKyAgfSBlbHNlIHsK LSsgICAgb3V0WzBdID0gKHVpbnQ4X3QpKGluWzBdICsgcHJldlswXSk7ICAvLyBwcmVkaWN0IGZy b20gYWJvdmUKLSsgICAgR3JhZGllbnRQcmVkaWN0SW52ZXJzZV9WU1goaW4gKyAxLCBwcmV2ICsg MSwgb3V0ICsgMSwgd2lkdGggLSAxKTsKLSsgIH0KLSt9Ci0rCi0rI3VuZGVmIFNMTEkKLSsjdW5k ZWYgU1JMSQotKwotKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rZXh0ZXJuIHZvaWQgVlA4 RmlsdGVyc0luaXRWU1godm9pZCk7Ci0rCi0rV0VCUF9UU0FOX0lHTk9SRV9GVU5DVElPTiB2b2lk IFZQOEZpbHRlcnNJbml0VlNYKHZvaWQpIHsKLSsgIFdlYlBVbmZpbHRlcnNbV0VCUF9GSUxURVJf SE9SSVpPTlRBTF0gPSBIb3Jpem9udGFsVW5maWx0ZXJfVlNYOwotKyAgV2ViUFVuZmlsdGVyc1tX RUJQX0ZJTFRFUl9WRVJUSUNBTF0gPSBWZXJ0aWNhbFVuZmlsdGVyX1ZTWDsKLSsgIFdlYlBVbmZp bHRlcnNbV0VCUF9GSUxURVJfR1JBRElFTlRdID0gR3JhZGllbnRVbmZpbHRlcl9WU1g7Ci0rfQot KwotKyNlbHNlICAvLyAhV0VCUF9VU0VfVlNYCi0rCi0rV0VCUF9EU1BfSU5JVF9TVFVCKFZQOEZp bHRlcnNJbml0VlNYKQotKwotKyNlbmRpZiAgLy8gV0VCUF9VU0VfVlNYCi1kaWZmIC0tZ2l0IGEv bWVkaWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzLmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3Av bG9zc2xlc3MuYwotaW5kZXggMWEzZDgwMGMzZmJjLi40OGI1ZDRhM2FlZGMgMTAwNjQ0Ci0tLS0g YS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbG9zc2xlc3MuYwotKysrIGIvbWVkaWEvbGlid2VicC9z cmMvZHNwL2xvc3NsZXNzLmMKLUBAIC02MDYsNiArNjA2LDcgQEAgZXh0ZXJuIHZvaWQgVlA4TERz cEluaXRBVlgyKHZvaWQpOwotIGV4dGVybiB2b2lkIFZQOExEc3BJbml0TkVPTih2b2lkKTsKLSBl eHRlcm4gdm9pZCBWUDhMRHNwSW5pdE1JUFNkc3BSMih2b2lkKTsKLSBleHRlcm4gdm9pZCBWUDhM RHNwSW5pdE1TQSh2b2lkKTsKLStleHRlcm4gdm9pZCBWUDhMRHNwSW5pdFZTWCh2b2lkKTsKLSAK LSAjZGVmaW5lIENPUFlfUFJFRElDVE9SX0FSUkFZKElOLCBPVVQpIGRvIHsgICAgICAgICAgICAg ICAgXAotICAgKE9VVClbMF0gPSBJTiMjMF9DOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi1AQCAtNjczLDYgKzY3NCwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMoVlA4TERz cEluaXQpIHsKLSAgICAgaWYgKFZQOEdldENQVUluZm8oa01TQSkpIHsKLSAgICAgICBWUDhMRHNw SW5pdE1TQSgpOwotICAgICB9Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQoV0VCUF9IQVZFX1ZTWCkK LSsgICAgaWYgKFZQOEdldENQVUluZm8oa1ZTWCkpIHsKLSsgICAgICBWUDhMRHNwSW5pdFZTWCgp OwotKyAgICB9Ci0gI2VuZGlmCi0gICB9Ci0gCi1kaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9z cmMvZHNwL2xvc3NsZXNzX3ZzeC5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzX3Zz eC5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi44OWRhMzBjOTU4 OWMKLS0tLSAvZGV2L251bGwKLSsrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9sb3NzbGVzc192 c3guYwotQEAgLTAsMCArMSw0NDkgQEAKLSsvLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBB bGwgUmlnaHRzIFJlc2VydmVkLgotKy8vCi0rLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGlu IHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotKy8vIHRyZWUuIEFu IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91 bmQKLSsvLyBpbiB0aGUgZmlsZSBQQVRFTlRTLiBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0 aG9ycyBtYXkKLSsvLyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m IHRoZSBzb3VyY2UgdHJlZS4KLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vCi0rLy8gVlNY IChQb3dlclBDKSB2ZXJzaW9uIG9mIGxvc3NsZXNzIGZ1bmN0aW9ucy4KLSsKLSsjaW5jbHVkZSAi c3JjL2RzcC9kc3AuaCIKLSsKLSsjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gpCi0rCi0rI2luY2x1 ZGUgPGFsdGl2ZWMuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgInNyYy9k c3AvY3B1LmgiCi0rI2luY2x1ZGUgInNyYy9kc3AvbG9zc2xlc3MuaCIKLSsjaW5jbHVkZSAic3Jj L2RzcC9sb3NzbGVzc19jb21tb24uaCIKLSsjaW5jbHVkZSAic3JjL3dlYnAvZm9ybWF0X2NvbnN0 YW50cy5oIgotKyNpbmNsdWRlICJzcmMvd2VicC90eXBlcy5oIgotKwotK3R5cGVkZWYgX192ZWN0 b3IgdW5zaWduZWQgY2hhciB1OHgxNjsKLSt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 IHUxNng4OwotK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIHNob3J0IGkxNng4OwotK3R5cGVkZWYg X192ZWN0b3IgdW5zaWduZWQgaW50IHUzMng0OwotK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIGlu dCBpMzJ4NDsKLSsKLSsvLyBTaWduZWQgbXVsdGlwbHktaGlnaCBvZiAxNi1iaXQgbGFuZXM6IChh ICogYikgPj4gMTYsIG1hdGNoaW5nCi0rLy8gX21tX211bGhpX2VwaTE2LgotK3N0YXRpYyBXRUJQ X0lOTElORSBpMTZ4OCBNdWxIaVMxNihpMTZ4OCBhLCBpMTZ4OCBiKSB7Ci0rICBjb25zdCB1MzJ4 NCBzaCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkxNik7Ci0rICBjb25zdCBpMzJ4NCBlID0g dmVjX3NyYSh2ZWNfbXVsZShhLCBiKSwgc2gpOwotKyAgY29uc3QgaTMyeDQgbyA9IHZlY19zcmEo dmVjX211bG8oYSwgYiksIHNoKTsKLSsgIHJldHVybiAoaTE2eDgpdmVjX3BhY2sodmVjX21lcmdl aChlLCBvKSwgdmVjX21lcmdlbChlLCBvKSk7Ci0rfQotKwotKy8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0rLy8gQ29sb3IgdHJhbnNmb3Jtcy4KLSsKLStzdGF0aWMgdm9pZCBBZGRHcmVlblRvQmx1 ZUFuZFJlZF9WU1goY29uc3QgdWludDMyX3QqIHNyYywgaW50IG51bV9waXhlbHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBkc3QpIHsKLSsgIGNvbnN0 IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOwotKyAgLy8gUmVwbGlj YXRlIHRoZSBncmVlbiBieXRlIChvZmZzZXQgMSBvZiBlYWNoIHBpeGVsKSBpbnRvIHRoZSBibHVl L3JlZCBzbG90cy4KLSsgIGNvbnN0IHU4eDE2IGtTcHJlYWRHcmVlbiA9IHsxLCAxNiwgMSwgMTYs IDUsICAxNiwgNSwgIDE2LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDksIDE2LCA5 LCAxNiwgMTMsIDE2LCAxMywgMTZ9OwotKyAgaW50IGk7Ci0rICBmb3IgKGkgPSAwOyBpICsgNCA8 PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsKLSsgICAgY29uc3QgdTh4MTYgaW4gPSAodTh4MTYpdmVj X3hsKDAsICh1aW50MzJfdCopJnNyY1tpXSk7Ci0rICAgIGNvbnN0IHU4eDE2IGcgPSB2ZWNfcGVy bShpbiwgemVybywga1NwcmVhZEdyZWVuKTsgIC8vIDAgZyAwIGcgcGVyIHBpeGVsCi0rICAgIHZl Y194c3QoKHUzMng0KXZlY19hZGQoaW4sIGcpLCAwLCAmZHN0W2ldKTsKLSsgIH0KLSsgIGlmIChp ICE9IG51bV9waXhlbHMpIHsKLSsgICAgVlA4TEFkZEdyZWVuVG9CbHVlQW5kUmVkX0Moc3JjICsg aSwgbnVtX3BpeGVscyAtIGksIGRzdCArIGkpOwotKyAgfQotK30KLSsKLStzdGF0aWMgdm9pZCBU cmFuc2Zvcm1Db2xvckludmVyc2VfVlNYKGNvbnN0IFZQOExNdWx0aXBsaWVycyogY29uc3QgbSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBz cmMsIGludCBudW1fcGl4ZWxzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QqIGRzdCkgewotKy8vIHNpZ24tZXh0ZW5kZWQgbXVsdGlwbHlpbmcgY29uc3Rh bnRzLCBwcmUtc2hpZnRlZCBieSA1IChzZWUgbG9zc2xlc3Nfc3NlMi5jKS4KLSsjZGVmaW5lIENT VChYKSAoKChpbnQxNl90KSgobS0+WCkgPDwgOCkpID4+IDUpCi0rICBjb25zdCBpMTZ4OCBtdWx0 c19yYiA9Ci0rICAgICAgKGkxNng4KXZlY19zcGxhdHMoKGludCkoKCh1aW50MzJfdCkodWludDE2 X3QpQ1NUKGdyZWVuX3RvX3JlZCkgPDwgMTYpIHwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKHVpbnQxNl90KUNTVChncmVlbl90b19ibHVlKSkpKTsKLSsgIGNvbnN0IGkxNng4IG11 bHRzX2IyID0KLSsgICAgICAoaTE2eDgpdmVjX3NwbGF0cygoaW50KSgodWludDMyX3QpKHVpbnQx Nl90KUNTVChyZWRfdG9fYmx1ZSkgPDwgMTYpKTsKLSsjdW5kZWYgQ1NUCi0rICBjb25zdCB1OHgx NiB6ZXJvID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKLSsgIGNvbnN0IHUzMng0IG1h c2tfYWcgPSB2ZWNfc3BsYXRzKCh1aW50MzJfdCkweGZmMDBmZjAwKTsgIC8vIGFscGhhL2dyZWVu Ci0rICBjb25zdCB1MTZ4OCBzaDhfMTYgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KTsK LSsgIGNvbnN0IHUzMng0IHNoOF8zMiA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCk4KTsKLSsg IC8vIEJyb2FkY2FzdCB0aGUgZ3JlZW4gYnl0ZSAob2Zmc2V0IDEpIGludG8gdGhlIGhpZ2ggYnl0 ZSBvZiBib3RoIDE2LWJpdAotKyAgLy8gaGFsdmVzIG9mIGVhY2ggcGl4ZWw6IHlpZWxkcyBnIDw8 IDggaW4gZWFjaCBsYW5lLgotKyAgY29uc3QgdTh4MTYga0dyZWVuSGkgPSB7MTYsIDEsIDE2LCAx LCAxNiwgNSwgIDE2LCA1LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIDksIDE2LCA5 LCAxNiwgMTMsIDE2LCAxM307Ci0rICBpbnQgaTsKLSsgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51 bV9waXhlbHM7IGkgKz0gNCkgewotKyAgICBjb25zdCB1OHgxNiBpbiA9ICh1OHgxNil2ZWNfeGwo MCwgKHVpbnQzMl90Kikmc3JjW2ldKTsKLSsgICAgY29uc3QgdTh4MTYgQSA9ICh1OHgxNil2ZWNf YW5kKCh1MzJ4NClpbiwgbWFza19hZyk7ICAgLy8gYSAwIGcgMAotKyAgICBjb25zdCBpMTZ4OCBD ID0gKGkxNng4KXZlY19wZXJtKEEsIHplcm8sIGtHcmVlbkhpKTsgICAvLyBnMGcwIChnIDw8IDgp Ci0rICAgIGNvbnN0IHU4eDE2IEQgPSAodTh4MTYpTXVsSGlTMTYoQywgbXVsdHNfcmIpOyAgICAg ICAgIC8vIHggZHIgeCBkYjEKLSsgICAgY29uc3QgdTh4MTYgRSA9IHZlY19hZGQoaW4sIEQpOyAg ICAgICAgICAgICAgICAgICAgICAgLy8geCByJyB4IGInCi0rICAgIGNvbnN0IHUxNng4IEYgPSB2 ZWNfc2woKHUxNng4KUUsIHNoOF8xNik7ICAgICAgICAgICAgIC8vIHInIDAgYicgMAotKyAgICBj b25zdCB1OHgxNiBHID0gKHU4eDE2KU11bEhpUzE2KChpMTZ4OClGLCBtdWx0c19iMik7ICAvLyB4 IGRiMiAwIDAKLSsgICAgY29uc3QgdTh4MTYgSCA9ICh1OHgxNil2ZWNfc3IoKHUzMng0KUcsIHNo OF8zMik7ICAgICAgLy8gMCB4IGRiMiAwCi0rICAgIGNvbnN0IHUxNng4IEkgPSAodTE2eDgpdmVj X2FkZChILCAodTh4MTYpRik7ICAgICAgICAgIC8vIHInIHggYicnIDAKLSsgICAgY29uc3QgdTh4 MTYgSiA9ICh1OHgxNil2ZWNfc3IoSSwgc2g4XzE2KTsgICAgICAgICAgICAgLy8gMCByJyAwIGIn JwotKyAgICB2ZWNfeHN0KHZlY19vcigodTMyeDQpSiwgKHUzMng0KUEpLCAwLCAmZHN0W2ldKTsK LSsgIH0KLSsgIGlmIChpICE9IG51bV9waXhlbHMpIHsKLSsgICAgVlA4TFRyYW5zZm9ybUNvbG9y SW52ZXJzZV9DKG0sIHNyYyArIGksIG51bV9waXhlbHMgLSBpLCBkc3QgKyBpKTsKLSsgIH0KLSt9 Ci0rCi0rLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBDb2xvci1zcGFjZSBjb252ZXJzaW9u IGZ1bmN0aW9ucy4KLSsKLStzdGF0aWMgdm9pZCBDb252ZXJ0QkdSQVRvUkdCQV9WU1goY29uc3Qg dWludDMyX3QqIFdFQlBfUkVTVFJJQ1Qgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbnVtX3BpeGVscywgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpIHsKLSsg IC8vIFN3YXAgdGhlIGJsdWUgKG9mZnNldCAwKSBhbmQgcmVkIChvZmZzZXQgMikgYnl0ZXMgb2Yg ZWFjaCBwaXhlbC4KLSsgIGNvbnN0IHU4eDE2IGtTd2FwQlIgPSB7MiwgMSwgMCwgMywgNiwgNSwg NCwgNywgMTAsIDksIDgsIDExLCAxNCwgMTMsIDEyLCAxNX07Ci0rICBpbnQgaTsKLSsgIGZvciAo aSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgewotKyAgICBjb25zdCB1OHgxNiBp biA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90Kikmc3JjW2ldKTsKLSsgICAgdmVjX3hzdCh2 ZWNfcGVybShpbiwgaW4sIGtTd2FwQlIpLCAwLCAmZHN0WzQgKiBpXSk7Ci0rICB9Ci0rICBpZiAo aSAhPSBudW1fcGl4ZWxzKSB7Ci0rICAgIFZQOExDb252ZXJ0QkdSQVRvUkdCQV9DKHNyYyArIGks IG51bV9waXhlbHMgLSBpLCBkc3QgKyA0ICogaSk7Ci0rICB9Ci0rfQotKwotK3N0YXRpYyB2b2lk IENvbnZlcnRCR1JBVG9SR0JfVlNYKGNvbnN0IHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIHNyYywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3BpeGVscywgdWludDhf dCogV0VCUF9SRVNUUklDVCBkc3QpIHsKLSsgIC8vIEJHUkEgLT4gUkdCOiBnYXRoZXIgUixHLEIg KG9mZnNldHMgMiwxLDApIG9mIGVhY2ggcGl4ZWwsIGRyb3AgYWxwaGEuCi0rICBjb25zdCB1OHgx NiBrVG9SR0IgPSB7MiwgMSwgMCwgNiwgNSwgNCwgMTAsIDksIDgsIDE0LCAxMywgMTIsIDAsIDAs IDAsIDB9OwotKyAgaW50IGk7Ci0rICBmb3IgKGkgPSAwOyBpICsgNCA8PSBudW1fcGl4ZWxzOyBp ICs9IDQpIHsKLSsgICAgY29uc3QgdTh4MTYgaW4gPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJf dCopJnNyY1tpXSk7Ci0rICAgIGNvbnN0IHU4eDE2IG91dCA9IHZlY19wZXJtKGluLCBpbiwga1Rv UkdCKTsKLSsgICAgbWVtY3B5KCZkc3RbMyAqIGldLCAmb3V0LCAxMik7Ci0rICB9Ci0rICBpZiAo aSAhPSBudW1fcGl4ZWxzKSB7Ci0rICAgIFZQOExDb252ZXJ0QkdSQVRvUkdCX0Moc3JjICsgaSwg bnVtX3BpeGVscyAtIGksIGRzdCArIDMgKiBpKTsKLSsgIH0KLSt9Ci0rCi0rc3RhdGljIHZvaWQg Q29udmVydEJHUkFUb0JHUl9WU1goY29uc3QgdWludDMyX3QqIFdFQlBfUkVTVFJJQ1Qgc3JjLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCB1aW50OF90 KiBXRUJQX1JFU1RSSUNUIGRzdCkgewotKyAgLy8gQkdSQSAtPiBCR1I6IGdhdGhlciBCLEcsUiAo b2Zmc2V0cyAwLDEsMikgb2YgZWFjaCBwaXhlbCwgZHJvcCBhbHBoYS4KLSsgIGNvbnN0IHU4eDE2 IGtUb0JHUiA9IHswLCAxLCAyLCA0LCA1LCA2LCA4LCA5LCAxMCwgMTIsIDEzLCAxNCwgMCwgMCwg MCwgMH07Ci0rICBpbnQgaTsKLSsgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkg Kz0gNCkgewotKyAgICBjb25zdCB1OHgxNiBpbiA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90 Kikmc3JjW2ldKTsKLSsgICAgY29uc3QgdTh4MTYgb3V0ID0gdmVjX3Blcm0oaW4sIGluLCBrVG9C R1IpOwotKyAgICBtZW1jcHkoJmRzdFszICogaV0sICZvdXQsIDEyKTsKLSsgIH0KLSsgIGlmIChp ICE9IG51bV9waXhlbHMpIHsKLSsgICAgVlA4TENvbnZlcnRCR1JBVG9CR1JfQyhzcmMgKyBpLCBu dW1fcGl4ZWxzIC0gaSwgZHN0ICsgMyAqIGkpOwotKyAgfQotK30KLSsKLSsvLy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotKy8vIFByZWRpY3RvciB0cmFuc2Zvcm0uCi0rCi0rLy8gQnl0ZS13aXNlIHNo aWZ0cyBvZiB0aGUgd2hvbGUgcmVnaXN0ZXIgKGxpdHRsZS1lbmRpYW4gX21tX3N7bCxyfWxpX3Np MTI4KS4KLSsjZGVmaW5lIFNMTEkoeCwgbikgdmVjX3NsZCgoeCksIGtaZXJvLCAobikpCi0rI2Rl ZmluZSBTUkxJKHgsIG4pIHZlY19zbGQoa1plcm8sICh4KSwgMTYgLSAobikpCi0rc3RhdGljIGNv bnN0IHU4eDE2IGtaZXJvID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDB9OwotKwotKy8vIFBlci1ieXRlIGZsb29yIGF2ZXJhZ2UgKGEgKyBiKSA+PiAxLCBt YXRjaGluZyB0aGUgQyBBdmVyYWdlMigpLgotK3N0YXRpYyBXRUJQX0lOTElORSB1OHgxNiBBdmVy YWdlMl91OCh1OHgxNiBhLCB1OHgxNiBiKSB7Ci0rICBjb25zdCB1OHgxNiBvbmUgPSB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBjaGFyKTEpOwotKyAgY29uc3QgdTh4MTYgYXZnMSA9IHZlY19hdmcoYSwg Yik7ICAvLyAoYSArIGIgKyAxKSA+PiAxCi0rICByZXR1cm4gdmVjX3N1YihhdmcxLCB2ZWNfYW5k KHZlY194b3IoYSwgYiksIG9uZSkpOwotK30KLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdTMyeDQg TGFuZTAodWludDMyX3QgdikgewotKyAgY29uc3QgdTMyeDQgciA9IHt2LCAwLCAwLCAwfTsKLSsg IHJldHVybiByOwotK30KLSsKLSsvLyBTaW5nbGUtcGl4ZWwgaGVscGVycyBvcGVyYXRpbmcgb24g dGhlIGxvdyAzMi1iaXQgbGFuZSBvbmx5LgotK3N0YXRpYyBXRUJQX0lOTElORSB1MTZ4OCBVbnBh Y2sxNih1aW50MzJfdCBhKSB7Ci0rICByZXR1cm4gKHUxNng4KXZlY19tZXJnZWgoKHU4eDE2KUxh bmUwKGEpLCBrWmVybyk7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElORSB1aW50MzJfdCBBdmVy YWdlMl9WU1godWludDMyX3QgYTAsIHVpbnQzMl90IGExKSB7Ci0rICByZXR1cm4gdmVjX2V4dHJh Y3QoKHUzMng0KUF2ZXJhZ2UyX3U4KCh1OHgxNilMYW5lMChhMCksICh1OHgxNilMYW5lMChhMSkp LCAwKTsKLSt9Ci0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHUxNng4IEF2ZXJhZ2UyXzE2KHVpbnQz Ml90IGEwLCB1aW50MzJfdCBhMSkgewotKyAgY29uc3QgdTE2eDggb25lID0gdmVjX3NwbGF0cygo dW5zaWduZWQgc2hvcnQpMSk7Ci0rICByZXR1cm4gdmVjX3NyKHZlY19hZGQoVW5wYWNrMTYoYTAp LCBVbnBhY2sxNihhMSkpLCBvbmUpOwotK30KLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUgdWludDMy X3QgQXZlcmFnZTNfVlNYKHVpbnQzMl90IGEwLCB1aW50MzJfdCBhMSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGEyKSB7Ci0rICBjb25zdCB1MTZ4 OCBvbmUgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxKTsKLSsgIGNvbnN0IHUxNng4IGF2 ZzEgPSBBdmVyYWdlMl8xNihhMCwgYTIpOwotKyAgY29uc3QgdTE2eDggYXZnMiA9IHZlY19zcih2 ZWNfYWRkKGF2ZzEsIFVucGFjazE2KGExKSksIG9uZSk7Ci0rICByZXR1cm4gdmVjX2V4dHJhY3Qo KHUzMng0KXZlY19wYWNrc3UoKGkxNng4KWF2ZzIsIChpMTZ4OClhdmcyKSwgMCk7Ci0rfQotKwot K3N0YXRpYyBXRUJQX0lOTElORSB1aW50MzJfdCBBdmVyYWdlNF9WU1godWludDMyX3QgYTAsIHVp bnQzMl90IGExLCB1aW50MzJfdCBhMiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IGEzKSB7Ci0rICBjb25zdCB1MTZ4OCBvbmUgPSB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBzaG9ydCkxKTsKLSsgIGNvbnN0IHUxNng4IGF2ZzEgPSBBdmVyYWdlMl8xNihh MCwgYTEpOwotKyAgY29uc3QgdTE2eDggYXZnMiA9IEF2ZXJhZ2UyXzE2KGEyLCBhMyk7Ci0rICBj b25zdCB1MTZ4OCBhdmczID0gdmVjX3NyKHZlY19hZGQoYXZnMSwgYXZnMiksIG9uZSk7Ci0rICBy ZXR1cm4gdmVjX2V4dHJhY3QoKHUzMng0KXZlY19wYWNrc3UoKGkxNng4KWF2ZzMsIChpMTZ4OClh dmczKSwgMCk7Ci0rfQotKwotK3N0YXRpYyBXRUJQX0lOTElORSB1aW50MzJfdCBDbGFtcGVkQWRk U3VidHJhY3RGdWxsX1ZTWCh1aW50MzJfdCBjMCwgdWludDMyX3QgYzEsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGMyKSB7 Ci0rICBjb25zdCBpMTZ4OCB2ID0KLSsgICAgICB2ZWNfc3ViKChpMTZ4OCl2ZWNfYWRkKFVucGFj azE2KGMwKSwgVW5wYWNrMTYoYzEpKSwgKGkxNng4KVVucGFjazE2KGMyKSk7Ci0rICByZXR1cm4g dmVjX2V4dHJhY3QoKHUzMng0KXZlY19wYWNrc3UodiwgdiksIDApOwotK30KLSsKLStzdGF0aWMg V0VCUF9JTkxJTkUgdWludDMyX3QgQ2xhbXBlZEFkZFN1YnRyYWN0SGFsZl9WU1godWludDMyX3Qg YzAsIHVpbnQzMl90IGMxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCBjMikgewotKyAgY29uc3QgdTE2eDggb25lID0gdmVj X3NwbGF0cygodW5zaWduZWQgc2hvcnQpMSk7Ci0rICBjb25zdCB1MTZ4OCBDMCA9IFVucGFjazE2 KGMwKTsKLSsgIGNvbnN0IHUxNng4IEMxID0gVW5wYWNrMTYoYzEpOwotKyAgY29uc3QgdTE2eDgg QjAgPSBVbnBhY2sxNihjMik7Ci0rICBjb25zdCB1MTZ4OCBBMCA9IHZlY19zcih2ZWNfYWRkKEMx LCBDMCksIG9uZSk7ICAvLyBhdmUKLSsgIGNvbnN0IGkxNng4IEExID0gdmVjX3N1YigoaTE2eDgp QTAsIChpMTZ4OClCMCk7Ci0rICBjb25zdCBpMTZ4OCBCZ3RBID0gKGkxNng4KXZlY19jbXBndChC MCwgQTApOyAgLy8gMCBvciAtMQotKyAgY29uc3QgaTE2eDggQTIgPSB2ZWNfc3ViKEExLCBCZ3RB KTsKLSsgIGNvbnN0IGkxNng4IEEzID0gdmVjX3NyYShBMiwgb25lKTsKLSsgIGNvbnN0IGkxNng4 IEE0ID0gdmVjX2FkZCgoaTE2eDgpQTAsIEEzKTsKLSsgIHJldHVybiB2ZWNfZXh0cmFjdCgodTMy eDQpdmVjX3BhY2tzdShBNCwgQTQpLCAwKTsKLSt9Ci0rCi0rc3RhdGljIFdFQlBfSU5MSU5FIHVp bnQzMl90IFNlbGVjdF9WU1godWludDMyX3QgYSwgdWludDMyX3QgYiwgdWludDMyX3QgYykgewot KyAgY29uc3QgdTh4MTYgQSA9ICh1OHgxNilMYW5lMChhKTsKLSsgIGNvbnN0IHU4eDE2IEIgPSAo dTh4MTYpTGFuZTAoYik7Ci0rICBjb25zdCB1OHgxNiBDID0gKHU4eDE2KUxhbmUwKGMpOwotKyAg Y29uc3QgdTMyeDQgc2EgPSB2ZWNfc3VtNHModmVjX29yKHZlY19zdWJzKEEsIEMpLCB2ZWNfc3Vi cyhDLCBBKSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNp Z25lZCBpbnQpMCkpOwotKyAgY29uc3QgdTMyeDQgc2IgPSB2ZWNfc3VtNHModmVjX29yKHZlY19z dWJzKEIsIEMpLCB2ZWNfc3VicyhDLCBCKSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpMCkpOwotKyAgcmV0dXJuIHZlY19leHRyYWN0KCh1 MzJ4NCl2ZWNfY21wZ3Qoc2IsIHNhKSwgMCkgPyBiIDogYTsKLSt9Ci0rCi0rc3RhdGljIHVpbnQz Ml90IFByZWRpY3RvcjVfVlNYKGNvbnN0IHVpbnQzMl90KiBjb25zdCBsZWZ0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogY29uc3QgdG9wKSB7Ci0rICBy ZXR1cm4gQXZlcmFnZTNfVlNYKCpsZWZ0LCB0b3BbMF0sIHRvcFsxXSk7Ci0rfQotK3N0YXRpYyB1 aW50MzJfdCBQcmVkaWN0b3I2X1ZTWChjb25zdCB1aW50MzJfdCogY29uc3QgbGVmdCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGNvbnN0IHRvcCkgewot KyAgcmV0dXJuIEF2ZXJhZ2UyX1ZTWCgqbGVmdCwgdG9wWy0xXSk7Ci0rfQotK3N0YXRpYyB1aW50 MzJfdCBQcmVkaWN0b3I3X1ZTWChjb25zdCB1aW50MzJfdCogY29uc3QgbGVmdCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGNvbnN0IHRvcCkgewotKyAg cmV0dXJuIEF2ZXJhZ2UyX1ZTWCgqbGVmdCwgdG9wWzBdKTsKLSt9Ci0rc3RhdGljIHVpbnQzMl90 IFByZWRpY3RvcjEzX1ZTWChjb25zdCB1aW50MzJfdCogY29uc3QgbGVmdCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBjb25zdCB0b3ApIHsKLSsgIHJl dHVybiBDbGFtcGVkQWRkU3VidHJhY3RIYWxmX1ZTWCgqbGVmdCwgdG9wWzBdLCB0b3BbLTFdKTsK LSt9Ci0rCi0rc3RhdGljIHZvaWQgUHJlZGljdG9yQWRkMF9WU1goY29uc3QgdWludDMyX3QqIGlu LCBjb25zdCB1aW50MzJfdCogdXBwZXIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IG51bV9waXhlbHMsIHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIG91dCkgewotKyAgY29uc3Qg dTh4MTYgYmxhY2sgPSAodTh4MTYpdmVjX3NwbGF0cygodWludDMyX3QpQVJHQl9CTEFDSyk7Ci0r ICBpbnQgaTsKLSsgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgewot KyAgICBjb25zdCB1OHgxNiBzcmMgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJmluW2ld KTsKLSsgICAgdmVjX3hzdCgodTMyeDQpdmVjX2FkZChzcmMsIGJsYWNrKSwgMCwgJm91dFtpXSk7 Ci0rICB9Ci0rICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7Ci0rICAgIFZQOExQcmVkaWN0b3JzQWRk X0NbMF0oaW4gKyBpLCBOVUxMLCBudW1fcGl4ZWxzIC0gaSwgb3V0ICsgaSk7Ci0rICB9Ci0rICAo dm9pZCl1cHBlcjsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgUHJlZGljdG9yQWRkMV9WU1goY29uc3Qg dWludDMyX3QqIGluLCBjb25zdCB1aW50MzJfdCogdXBwZXIsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IG51bV9waXhlbHMsIHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIG91dCkg ewotKyAgdTMyeDQgcHJldiA9IHZlY19zcGxhdHMob3V0Wy0xXSk7Ci0rICBpbnQgaTsKLSsgIGZv ciAoaSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgewotKyAgICBjb25zdCB1OHgx NiBzcmMgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJmluW2ldKTsKLSsgICAgY29uc3Qg dTh4MTYgc3VtMCA9IHZlY19hZGQoc3JjLCBTTExJKHNyYywgNCkpOyAgICAvLyBhIHwgYStiIHwg YitjIHwgYytkCi0rICAgIGNvbnN0IHU4eDE2IHN1bTEgPSB2ZWNfYWRkKHN1bTAsIFNMTEkoc3Vt MCwgOCkpOyAgLy8gcnVubmluZyBzdW0KLSsgICAgY29uc3QgdTh4MTYgcmVzID0gdmVjX2FkZChz dW0xLCAodTh4MTYpcHJldik7Ci0rICAgIHZlY194c3QoKHUzMng0KXJlcywgMCwgJm91dFtpXSk7 Ci0rICAgIHByZXYgPSB2ZWNfc3BsYXQoKHUzMng0KXJlcywgMyk7ICAvLyByZXBsaWNhdGUgbGFz dCBwaXhlbAotKyAgfQotKyAgaWYgKGkgIT0gbnVtX3BpeGVscykgewotKyAgICBWUDhMUHJlZGlj dG9yc0FkZF9DWzFdKGluICsgaSwgdXBwZXIgKyBpLCBudW1fcGl4ZWxzIC0gaSwgb3V0ICsgaSk7 Ci0rICB9Ci0rfQotKwotKyNkZWZpbmUgR0VORVJBVEVfUFJFRElDVE9SXzFfVlNYKFgsIElOKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBzdGF0aWMgdm9pZCBQ cmVkaWN0b3JBZGQjI1gjI19WU1goY29uc3QgdWludDMyX3QqIGluLCBjb25zdCB1aW50MzJfdCog dXBwZXIsIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Bp eGVscywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIG91dCkgeyAgICAgICAgICAg ICBcCi0rICAgIGludCBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgZm9yIChpID0gMDsgaSArIDQgPD0g bnVtX3BpeGVsczsgaSArPSA0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgIGNvbnN0IHU4eDE2IHNyYyA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmaW5b aV0pOyAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgY29uc3QgdTh4MTYgb3RoZXIgPSAodTh4 MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJihJTikpOyAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICB2ZWNfeHN0KCh1MzJ4NCl2ZWNfYWRkKHNyYywgb3RoZXIpLCAwLCAmb3V0W2ldKTsgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmIChp ICE9IG51bV9waXhlbHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICBWUDhMUHJlZGljdG9yc0FkZF9DWyhYKV0oaW4gKyBpLCB1 cHBlciArIGksIG51bV9waXhlbHMgLSBpLCBvdXQgKyBpKTsgICAgXAotKyAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICB9Ci0rR0VORVJBVEVfUFJFRElDVE9SXzFfVlNYKDIsIHVwcGVyW2ldKSAg ICAgIC8vIFRvcC4KLStHRU5FUkFURV9QUkVESUNUT1JfMV9WU1goMywgdXBwZXJbaSArIDFdKSAg Ly8gVG9wLXJpZ2h0LgotK0dFTkVSQVRFX1BSRURJQ1RPUl8xX1ZTWCg0LCB1cHBlcltpIC0gMV0p ICAvLyBUb3AtbGVmdC4KLSsjdW5kZWYgR0VORVJBVEVfUFJFRElDVE9SXzFfVlNYCi0rCi0rLy8g UHJlZGljdG9ycyA1LCA2LCA3LCAxMyB1c2UgaW50ZWdlciBhdmVyYWdlcyBhbmQgY2Fubm90IGJl IGFjY3VtdWxhdGVkIGluCi0rLy8gcGFyYWxsZWwsIHNvIHVzZSB0aGUgZ2VuZXJpYyBvbmUtcGl4 ZWwtYXQtYS10aW1lIGJhdGNoLgotK0dFTkVSQVRFX1BSRURJQ1RPUl9BREQoUHJlZGljdG9yNV9W U1gsIFByZWRpY3RvckFkZDVfVlNYKQotK0dFTkVSQVRFX1BSRURJQ1RPUl9BREQoUHJlZGljdG9y Nl9WU1gsIFByZWRpY3RvckFkZDZfVlNYKQotK0dFTkVSQVRFX1BSRURJQ1RPUl9BREQoUHJlZGlj dG9yN19WU1gsIFByZWRpY3RvckFkZDdfVlNYKQotK0dFTkVSQVRFX1BSRURJQ1RPUl9BREQoUHJl ZGljdG9yMTNfVlNYLCBQcmVkaWN0b3JBZGQxM19WU1gpCi0rCi0rI2RlZmluZSBHRU5FUkFURV9Q UkVESUNUT1JfMl9WU1goWCwgSU4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIHN0YXRpYyB2b2lkIFByZWRpY3RvckFkZCMjWCMjX1ZTWChjb25zdCB1aW50MzJf dCogaW4sIGNvbnN0IHVpbnQzMl90KiB1cHBlciwgXAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIFdFQlBfUkVT VFJJQ1Qgb3V0KSB7ICAgICAgICAgICAgIFwKLSsgICAgaW50IGk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICBmb3IgKGkgPSAwOyBpICsgNCA8PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgY29uc3QgdTh4MTYgVG90aGVyID0gKHU4eDE2 KXZlY194bCgwLCAodWludDMyX3QqKSYoSU4pKTsgICAgICAgICAgICAgICAgIFwKLSsgICAgICBj b25zdCB1OHgxNiBUID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZ1cHBlcltpXSk7ICAg ICAgICAgICAgICAgICAgXAotKyAgICAgIGNvbnN0IHU4eDE2IHNyYyA9ICh1OHgxNil2ZWNfeGwo MCwgKHVpbnQzMl90KikmaW5baV0pOyAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgdmVjX3hz dCgodTMyeDQpdmVjX2FkZChBdmVyYWdlMl91OChULCBUb3RoZXIpLCBzcmMpLCAwLCAmb3V0W2ld KTsgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBpZiAoaSAhPSBudW1f cGl4ZWxzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgVlA4TFByZWRpY3RvcnNBZGRfQ1soWCldKGluICsgaSwgdXBwZXIgKyBp LCBudW1fcGl4ZWxzIC0gaSwgb3V0ICsgaSk7ICAgIFwKLSsgICAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgfQotK0dFTkVSQVRFX1BSRURJQ1RPUl8yX1ZTWCg4LCB1cHBlcltpIC0gMV0pICAvLyBB dmVyYWdlIFRMLCBULgotK0dFTkVSQVRFX1BSRURJQ1RPUl8yX1ZTWCg5LCB1cHBlcltpICsgMV0p ICAvLyBBdmVyYWdlIFQsIFRSLgotKyN1bmRlZiBHRU5FUkFURV9QUkVESUNUT1JfMl9WU1gKLSsK LSsvLyBQcmVkaWN0b3IxMDogYXZlcmFnZSBvZiAoYXZlcmFnZShMLCBUTCksIGF2ZXJhZ2UoVCwg VFIpKS4KLStzdGF0aWMgdm9pZCBQcmVkaWN0b3JBZGQxMF9WU1goY29uc3QgdWludDMyX3QqIGlu LCBjb25zdCB1aW50MzJfdCogdXBwZXIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBudW1fcGl4ZWxzLCB1aW50MzJfdCogV0VCUF9SRVNUUklDVCBvdXQpIHsKLSsgIHU4eDE2 IEwgPSAodTh4MTYpTGFuZTAob3V0Wy0xXSk7Ci0rICBpbnQgaSwgazsKLSsgIGZvciAoaSA9IDA7 IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgewotKyAgICB1OHgxNiBzcmMgPSAodTh4MTYp dmVjX3hsKDAsICh1aW50MzJfdCopJmluW2ldKTsKLSsgICAgdTh4MTYgVEwgPSAodTh4MTYpdmVj X3hsKDAsICh1aW50MzJfdCopJnVwcGVyW2kgLSAxXSk7Ci0rICAgIGNvbnN0IHU4eDE2IFQgPSAo dTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnVwcGVyW2ldKTsKLSsgICAgY29uc3QgdTh4MTYg VFIgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnVwcGVyW2kgKyAxXSk7Ci0rICAgIHU4 eDE2IGF2Z1RUUiA9IEF2ZXJhZ2UyX3U4KFQsIFRSKTsKLSsgICAgZm9yIChrID0gMDsgayA8IDQ7 ICsraykgewotKyAgICAgIGNvbnN0IHU4eDE2IGF2ZyA9IEF2ZXJhZ2UyX3U4KGF2Z1RUUiwgQXZl cmFnZTJfdTgoTCwgVEwpKTsKLSsgICAgICBMID0gdmVjX2FkZChhdmcsIHNyYyk7Ci0rICAgICAg b3V0W2kgKyBrXSA9IHZlY19leHRyYWN0KCh1MzJ4NClMLCAwKTsKLSsgICAgICBhdmdUVFIgPSBT UkxJKGF2Z1RUUiwgNCk7Ci0rICAgICAgVEwgPSBTUkxJKFRMLCA0KTsKLSsgICAgICBzcmMgPSBT UkxJKHNyYywgNCk7Ci0rICAgIH0KLSsgIH0KLSsgIGlmIChpICE9IG51bV9waXhlbHMpIHsKLSsg ICAgVlA4TFByZWRpY3RvcnNBZGRfQ1sxMF0oaW4gKyBpLCB1cHBlciArIGksIG51bV9waXhlbHMg LSBpLCBvdXQgKyBpKTsKLSsgIH0KLSt9Ci0rCi0rLy8gUHJlZGljdG9yMTE6IHNlbGVjdCBiZXR3 ZWVuIFQgYW5kIEwgYmFzZWQgb24gfFQtVEx8IHZzIHxMLVRMfC4KLStzdGF0aWMgdm9pZCBQcmVk aWN0b3JBZGQxMV9WU1goY29uc3QgdWludDMyX3QqIGluLCBjb25zdCB1aW50MzJfdCogdXBwZXIs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCB1aW50MzJf dCogV0VCUF9SRVNUUklDVCBvdXQpIHsKLSsgIGNvbnN0IHUzMng0IHozMiA9IHZlY19zcGxhdHMo KHVuc2lnbmVkIGludCkwKTsKLSsgIHU4eDE2IEwgPSAodTh4MTYpTGFuZTAob3V0Wy0xXSk7Ci0r ICBpbnQgaSwgazsKLSsgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkg ewotKyAgICB1OHgxNiBUID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZ1cHBlcltpXSk7 Ci0rICAgIHU4eDE2IFRMID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZ1cHBlcltpIC0g MV0pOwotKyAgICB1OHgxNiBzcmMgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJmluW2ld KTsKLSsgICAgdTh4MTYgcGEgPSAodTh4MTYpdmVjX3N1bTRzKHZlY19vcih2ZWNfc3VicyhULCBU TCksIHZlY19zdWJzKFRMLCBUKSksIHozMik7Ci0rICAgIGZvciAoayA9IDA7IGsgPCA0OyArK2sp IHsKLSsgICAgICBjb25zdCB1MzJ4NCBwYiA9IHZlY19zdW00cyh2ZWNfb3IodmVjX3N1YnMoTCwg VEwpLCB2ZWNfc3VicyhUTCwgTCkpLCB6MzIpOwotKyAgICAgIGNvbnN0IHUzMng0IG1hc2sgPSAo dTMyeDQpdmVjX2NtcGd0KHBiLCAodTMyeDQpcGEpOyAgLy8gcGIgPiBwYSA/IEwgOiBUCi0rICAg ICAgY29uc3QgdTh4MTYgcHJlZCA9IHZlY19zZWwoVCwgTCwgKHU4eDE2KW1hc2spOwotKyAgICAg IEwgPSB2ZWNfYWRkKHNyYywgcHJlZCk7Ci0rICAgICAgb3V0W2kgKyBrXSA9IHZlY19leHRyYWN0 KCh1MzJ4NClMLCAwKTsKLSsgICAgICBUID0gU1JMSShULCA0KTsKLSsgICAgICBUTCA9IFNSTEko VEwsIDQpOwotKyAgICAgIHNyYyA9IFNSTEkoc3JjLCA0KTsKLSsgICAgICBwYSA9IFNSTEkocGEs IDQpOwotKyAgICB9Ci0rICB9Ci0rICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7Ci0rICAgIFZQOExQ cmVkaWN0b3JzQWRkX0NbMTFdKGluICsgaSwgdXBwZXIgKyBpLCBudW1fcGl4ZWxzIC0gaSwgb3V0 ICsgaSk7Ci0rICB9Ci0rfQotKwotKy8vIFByZWRpY3RvcjEyOiBDbGFtcGVkQWRkU3VidHJhY3RG dWxsLiAnTCcgaXMga2VwdCB1bnBhY2tlZCB0byAxNiBiaXRzIGluIHRoZQotKy8vIGxvdyA0IGxh bmVzOyAnZGlmZicgKD0gVCAtIFRMKSBob2xkcyB0d28gcGl4ZWxzLCB0aGUgYWN0aXZlIG9uZSBp biBsYW5lcyAwLTMuCi0rI2RlZmluZSBET19QUkVEMTIoRElGRikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBjb25zdCBpMTZ4OCBhbGwgPSB2ZWNfYWRkKChp MTZ4OClMLCAoRElGRikpOyAgICAgICAgICBcCi0rICAgIGNvbnN0IHU4eDE2IHJlcyA9IHZlY19h ZGQoc3JjLCB2ZWNfcGFja3N1KGFsbCwgYWxsKSk7IFwKLSsgICAgb3V0W2kgKyBvdXRfaWR4Kytd ID0gdmVjX2V4dHJhY3QoKHUzMng0KXJlcywgMCk7ICAgICAgXAotKyAgICBMID0gKHUxNng4KXZl Y19tZXJnZWgocmVzLCBrWmVybyk7ICAgICAgICAgICAgICAgICAgICBcCi0rICB9IHdoaWxlICgw KQotKwotK3N0YXRpYyB2b2lkIFByZWRpY3RvckFkZDEyX1ZTWChjb25zdCB1aW50MzJfdCogaW4s IGNvbnN0IHVpbnQzMl90KiB1cHBlciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IG51bV9waXhlbHMsIHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIG91dCkgewotKyAgdTE2eDgg TCA9IFVucGFjazE2KG91dFstMV0pOwotKyAgaW50IGk7Ci0rICBmb3IgKGkgPSAwOyBpICsgNCA8 PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsKLSsgICAgaW50IG91dF9pZHggPSAwOwotKyAgICB1OHgx NiBzcmMgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJmluW2ldKTsKLSsgICAgY29uc3Qg dTh4MTYgVCA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmdXBwZXJbaV0pOwotKyAgICBj b25zdCB1OHgxNiBUTCA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmdXBwZXJbaSAtIDFd KTsKLSsgICAgLy8gMTYtYml0IGdyYWRpZW50IGJhc2lzIFQgLSBUTCBmb3IgdGhlIGZvdXIgcGl4 ZWxzIChsb3cgYW5kIGhpZ2ggaGFsdmVzKS4KLSsgICAgaTE2eDggZGlmZl9sbyA9Ci0rICAgICAg ICB2ZWNfc3ViKChpMTZ4OCl2ZWNfbWVyZ2VoKFQsIGtaZXJvKSwgKGkxNng4KXZlY19tZXJnZWgo VEwsIGtaZXJvKSk7Ci0rICAgIGkxNng4IGRpZmZfaGkgPQotKyAgICAgICAgdmVjX3N1YigoaTE2 eDgpdmVjX21lcmdlbChULCBrWmVybyksIChpMTZ4OCl2ZWNfbWVyZ2VsKFRMLCBrWmVybykpOwot KyAgICBET19QUkVEMTIoZGlmZl9sbyk7Ci0rICAgIGRpZmZfbG8gPSAoaTE2eDgpU1JMSSgodTh4 MTYpZGlmZl9sbywgOCk7Ci0rICAgIHNyYyA9IFNSTEkoc3JjLCA0KTsKLSsgICAgRE9fUFJFRDEy KGRpZmZfbG8pOwotKyAgICBzcmMgPSBTUkxJKHNyYywgNCk7Ci0rICAgIERPX1BSRUQxMihkaWZm X2hpKTsKLSsgICAgZGlmZl9oaSA9IChpMTZ4OClTUkxJKCh1OHgxNilkaWZmX2hpLCA4KTsKLSsg ICAgc3JjID0gU1JMSShzcmMsIDQpOwotKyAgICBET19QUkVEMTIoZGlmZl9oaSk7Ci0rICB9Ci0r ICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7Ci0rICAgIFZQOExQcmVkaWN0b3JzQWRkX0NbMTJdKGlu ICsgaSwgdXBwZXIgKyBpLCBudW1fcGl4ZWxzIC0gaSwgb3V0ICsgaSk7Ci0rICB9Ci0rfQotKyN1 bmRlZiBET19QUkVEMTIKLSsKLSsjdW5kZWYgU0xMSQotKyN1bmRlZiBTUkxJCi0rCi0rLy8tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSsKLStleHRlcm4gdm9pZCBWUDhMRHNwSW5pdFZTWCh2b2lkKTsK LSsKLStXRUJQX1RTQU5fSUdOT1JFX0ZVTkNUSU9OIHZvaWQgVlA4TERzcEluaXRWU1godm9pZCkg ewotKyAgVlA4TFByZWRpY3RvcnNBZGRbMF0gPSBQcmVkaWN0b3JBZGQwX1ZTWDsKLSsgIFZQOExQ cmVkaWN0b3JzQWRkWzFdID0gUHJlZGljdG9yQWRkMV9WU1g7Ci0rICBWUDhMUHJlZGljdG9yc0Fk ZFsyXSA9IFByZWRpY3RvckFkZDJfVlNYOwotKyAgVlA4TFByZWRpY3RvcnNBZGRbM10gPSBQcmVk aWN0b3JBZGQzX1ZTWDsKLSsgIFZQOExQcmVkaWN0b3JzQWRkWzRdID0gUHJlZGljdG9yQWRkNF9W U1g7Ci0rICBWUDhMUHJlZGljdG9yc0FkZFs1XSA9IFByZWRpY3RvckFkZDVfVlNYOwotKyAgVlA4 TFByZWRpY3RvcnNBZGRbNl0gPSBQcmVkaWN0b3JBZGQ2X1ZTWDsKLSsgIFZQOExQcmVkaWN0b3Jz QWRkWzddID0gUHJlZGljdG9yQWRkN19WU1g7Ci0rICBWUDhMUHJlZGljdG9yc0FkZFs4XSA9IFBy ZWRpY3RvckFkZDhfVlNYOwotKyAgVlA4TFByZWRpY3RvcnNBZGRbOV0gPSBQcmVkaWN0b3JBZGQ5 X1ZTWDsKLSsgIFZQOExQcmVkaWN0b3JzQWRkWzEwXSA9IFByZWRpY3RvckFkZDEwX1ZTWDsKLSsg IFZQOExQcmVkaWN0b3JzQWRkWzExXSA9IFByZWRpY3RvckFkZDExX1ZTWDsKLSsgIFZQOExQcmVk aWN0b3JzQWRkWzEyXSA9IFByZWRpY3RvckFkZDEyX1ZTWDsKLSsgIFZQOExQcmVkaWN0b3JzQWRk WzEzXSA9IFByZWRpY3RvckFkZDEzX1ZTWDsKLSsKLSsgIFZQOExBZGRHcmVlblRvQmx1ZUFuZFJl ZCA9IEFkZEdyZWVuVG9CbHVlQW5kUmVkX1ZTWDsKLSsgIFZQOExUcmFuc2Zvcm1Db2xvckludmVy c2UgPSBUcmFuc2Zvcm1Db2xvckludmVyc2VfVlNYOwotKyAgVlA4TENvbnZlcnRCR1JBVG9SR0JB ID0gQ29udmVydEJHUkFUb1JHQkFfVlNYOwotKyAgVlA4TENvbnZlcnRCR1JBVG9SR0IgPSBDb252 ZXJ0QkdSQVRvUkdCX1ZTWDsKLSsgIFZQOExDb252ZXJ0QkdSQVRvQkdSID0gQ29udmVydEJHUkFU b0JHUl9WU1g7Ci0rfQotKwotKyNlbHNlICAvLyAhV0VCUF9VU0VfVlNYCi0rCi0rV0VCUF9EU1Bf SU5JVF9TVFVCKFZQOExEc3BJbml0VlNYKQotKwotKyNlbmRpZiAgLy8gV0VCUF9VU0VfVlNYCi1k aWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL21vei5idWlsZCBiL21lZGlhL2xpYndl YnAvc3JjL2RzcC9tb3ouYnVpbGQKLWluZGV4IDhkNmY4NDI3YzkwMC4uZjNlOWQxMjczMTEwIDEw MDY0NAotLS0tIGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL21vei5idWlsZAotKysrIGIvbWVkaWEv bGlid2VicC9zcmMvZHNwL21vei5idWlsZAotQEAgLTExOCw2ICsxMTgsMjAgQEAgZWxpZiBDT05G SUdbJ1RBUkdFVF9DUFUnXS5zdGFydHN3aXRoKCdtaXBzJyk6Ci0gICAgICAgICAneXV2X21pcHMz Mi5jJywKLSAgICAgICAgICd5dXZfbWlwc19kc3BfcjIuYycsCi0gICAgIF0KLStlbGlmIENPTkZJ R1snVEFSR0VUX0NQVSddID09ICdwcGM2NCc6Ci0rICAgIFNPVVJDRVMgKz0gWwotKyAgICAgICAg J2FscGhhX3Byb2Nlc3NpbmdfdnN4LmMnLAotKyAgICAgICAgJ2RlY192c3guYycsCi0rICAgICAg ICAnZmlsdGVyc192c3guYycsCi0rICAgICAgICAnbG9zc2xlc3NfdnN4LmMnLAotKyAgICAgICAg J3Jlc2NhbGVyX3ZzeC5jJywKLSsgICAgICAgICd1cHNhbXBsaW5nX3ZzeC5jJywKLSsgICAgICAg ICd5dXZfdnN4LmMnLAotKyAgICBdCi0rICAgIERFRklORVNbJ1dFQlBfSEFWRV9WU1gnXSA9IDE7 Ci0rICAgIGZvciBmIGluIFNPVVJDRVM6Ci0rICAgICAgaWYgZi5lbmRzd2l0aCgndnN4LmMnKToK LSsgICAgICAgIFNPVVJDRVNbZl0uZmxhZ3MgKz0gWyctbXZzeCddCi0gCi0gaWYgQ09ORklHWydD Q19UWVBFJ10gaW4gKCdjbGFuZycsICdjbGFuZy1jbCcpOgotICAgICBDRkxBR1MgKz0gWyctV25v LXVucmVhY2hhYmxlLWNvZGUnXQotZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9y ZXNjYWxlci5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3Jlc2NhbGVyLmMKLWluZGV4IGVhZmNj ZDQ0MmYyNS4uMmMwYzhjNDdhN2EzIDEwMDY0NAotLS0tIGEvbWVkaWEvbGlid2VicC9zcmMvZHNw L3Jlc2NhbGVyLmMKLSsrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9yZXNjYWxlci5jCi1AQCAt MjA3LDYgKzIwNyw3IEBAIGV4dGVybiB2b2lkIFdlYlBSZXNjYWxlckRzcEluaXRNSVBTMzIodm9p ZCk7Ci0gZXh0ZXJuIHZvaWQgV2ViUFJlc2NhbGVyRHNwSW5pdE1JUFNkc3BSMih2b2lkKTsKLSBl eHRlcm4gdm9pZCBXZWJQUmVzY2FsZXJEc3BJbml0TVNBKHZvaWQpOwotIGV4dGVybiB2b2lkIFdl YlBSZXNjYWxlckRzcEluaXRORU9OKHZvaWQpOwotK2V4dGVybiB2b2lkIFdlYlBSZXNjYWxlckRz cEluaXRWU1godm9pZCk7Ci0gCi0gV0VCUF9EU1BfSU5JVF9GVU5DKFdlYlBSZXNjYWxlckRzcElu aXQpIHsKLSAjaWYgIWRlZmluZWQoV0VCUF9SRURVQ0VfU0laRSkKLUBAIC0yMzgsNiArMjM5LDEx IEBAIFdFQlBfRFNQX0lOSVRfRlVOQyhXZWJQUmVzY2FsZXJEc3BJbml0KSB7Ci0gICAgIGlmIChW UDhHZXRDUFVJbmZvKGtNU0EpKSB7Ci0gICAgICAgV2ViUFJlc2NhbGVyRHNwSW5pdE1TQSgpOwot ICAgICB9Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQoV0VCUF9IQVZFX1ZTWCkKLSsgICAgaWYgKFZQ OEdldENQVUluZm8oa1ZTWCkpIHsKLSsgICAgICBXZWJQUmVzY2FsZXJEc3BJbml0VlNYKCk7Ci0r ICAgIH0KLSAjZW5kaWYKLSAgIH0KLSAKLWRpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9k c3AvcmVzY2FsZXJfdnN4LmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvcmVzY2FsZXJfdnN4LmMK LW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLjAwMmYyMzJkNjQ3YQot LS0tIC9kZXYvbnVsbAotKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3Jlc2NhbGVyX3ZzeC5j Ci1AQCAtMCwwICsxLDIwMSBAQAotKy8vIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuIEFsbCBS aWdodHMgUmVzZXJ2ZWQuCi0rLy8KLSsvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0rLy8gdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl IENPUFlJTkcgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0rLy8gdHJlZS4gQW4gYWRk aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot Ky8vIGluIHRoZSBmaWxlIFBBVEVOVFMuIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz IG1heQotKy8vIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl IHNvdXJjZSB0cmVlLgotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8KLSsvLyBWU1ggKFBv d2VyUEMpIHZlcnNpb24gb2YgcmVzY2FsaW5nIGZ1bmN0aW9ucy4KLSsKLSsjaW5jbHVkZSAic3Jj L2RzcC9kc3AuaCIKLSsKLSsjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gpICYmICFkZWZpbmVkKFdF QlBfUkVEVUNFX1NJWkUpCi0rCi0rI2luY2x1ZGUgPGFsdGl2ZWMuaD4KLSsjaW5jbHVkZSA8YXNz ZXJ0Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKwotKyNpbmNsdWRlICJzcmMvZHNwL2NwdS5o IgotKyNpbmNsdWRlICJzcmMvdXRpbHMvcmVzY2FsZXJfdXRpbHMuaCIKLSsjaW5jbHVkZSAic3Jj L3dlYnAvdHlwZXMuaCIKLSsKLSt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdTh4MTY7 Ci0rdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgc2hvcnQgaTE2eDg7Ci0rdHlwZWRlZiBfX3ZlY3Rv ciB1bnNpZ25lZCBpbnQgdTMyeDQ7Ci0rdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgaW50IGkzMng0 OwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIHU2NHgyOwotKwotKyNkZWZp bmUgUk9VTkRFUiAoV0VCUF9SRVNDQUxFUl9PTkUgPj4gMSkKLSsjZGVmaW5lIE1VTFRfRklYX0Mo eCwgeSkgKCgodWludDY0X3QpKHgpICogKHkpICsgUk9VTkRFUikgPj4gV0VCUF9SRVNDQUxFUl9S RklYKQotKyNkZWZpbmUgTVVMVF9GSVhfRkxPT1JfQyh4LCB5KSAoKCh1aW50NjRfdCkoeCkgKiAo eSkpID4+IFdFQlBfUkVTQ0FMRVJfUkZJWCkKLSsKLSsjaWYgKFdFQlBfUkVTQ0FMRVJfUkZJWCAh PSAzMikKLSsjZXJyb3IgIk1VTFRfRklYL1dFQlBfUkVTQ0FMRVJfUkZJWCBuZWVkIHNvbWUgbW9y ZSB3b3JrIgotKyNlbmRpZgotKwotKy8vIFJldHVybnMgKHggKiBzY2FsZSArIFJPVU5ERVIpID4+ IDMyIGZvciBlYWNoIG9mIHRoZSBmb3VyIDMyLWJpdCBsYW5lcy4KLStzdGF0aWMgV0VCUF9JTkxJ TkUgdTMyeDQgTXVsdEZpeF9WU1godTMyeDQgeCwgdWludDMyX3Qgc2NhbGUpIHsKLSsgIGNvbnN0 IHU2NHgyIHJvdW5kZXIgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBsb25nIGxvbmcpUk9VTkRFUik7 Ci0rICBjb25zdCB1NjR4MiBzaGlmdCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGxvbmcgbG9uZylX RUJQX1JFU0NBTEVSX1JGSVgpOwotKyAgY29uc3QgdTMyeDQgcyA9IHZlY19zcGxhdHMoc2NhbGUp OwotKyAgLy8gdmVjX211bGUvdmVjX211bG8gcHJvZHVjZSB0aGUgMzJ4MzItPjY0IHByb2R1Y3Rz IG9mIHRoZSBldmVuICgwLCAyKSBhbmQKLSsgIC8vIG9kZCAoMSwgMykgbGFuZXMgcmVzcGVjdGl2 ZWx5LgotKyAgdTY0eDIgZSA9IHZlY19hZGQodmVjX211bGUoeCwgcyksIHJvdW5kZXIpOwotKyAg dTY0eDIgbyA9IHZlY19hZGQodmVjX211bG8oeCwgcyksIHJvdW5kZXIpOwotKyAgZSA9IHZlY19z cihlLCBzaGlmdCk7Ci0rICBvID0gdmVjX3NyKG8sIHNoaWZ0KTsKLSsgIHJldHVybiB2ZWNfbWVy Z2VlKCh1MzJ4NCllLCAodTMyeDQpbyk7Ci0rfQotKwotKy8vIFJldHVybnMgKHggKiBzY2FsZSkg Pj4gMzIgZm9yIGVhY2ggbGFuZSAobm8gcm91bmRpbmcpLgotK3N0YXRpYyBXRUJQX0lOTElORSB1 MzJ4NCBNdWx0Rml4Rmxvb3JfVlNYKHUzMng0IHgsIHVpbnQzMl90IHNjYWxlKSB7Ci0rICBjb25z dCB1NjR4MiBzaGlmdCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGxvbmcgbG9uZylXRUJQX1JFU0NB TEVSX1JGSVgpOwotKyAgY29uc3QgdTMyeDQgcyA9IHZlY19zcGxhdHMoc2NhbGUpOwotKyAgdTY0 eDIgZSA9IHZlY19zcih2ZWNfbXVsZSh4LCBzKSwgc2hpZnQpOwotKyAgdTY0eDIgbyA9IHZlY19z cih2ZWNfbXVsbyh4LCBzKSwgc2hpZnQpOwotKyAgcmV0dXJuIHZlY19tZXJnZWUoKHUzMng0KWUs ICh1MzJ4NClvKTsKLSt9Ci0rCi0rLy8gUmV0dXJucyAoQSAqIGZyb3cgKyBCICogaXJvdyArIFJP VU5ERVIpID4+IDMyIGZvciBlYWNoIGxhbmUuCi0rc3RhdGljIFdFQlBfSU5MSU5FIHUzMng0IElu dGVycG9sYXRlX1ZTWChjb25zdCByZXNjYWxlcl90KiBXRUJQX1JFU1RSSUNUIGZyb3csCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNjYWxlcl90KiBX RUJQX1JFU1RSSUNUIGlyb3csCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBBLCB1aW50MzJfdCBCKSB7Ci0rICBjb25zdCB1NjR4MiByb3VuZGVyID0g dmVjX3NwbGF0cygodW5zaWduZWQgbG9uZyBsb25nKVJPVU5ERVIpOwotKyAgY29uc3QgdTY0eDIg c2hpZnQgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBsb25nIGxvbmcpV0VCUF9SRVNDQUxFUl9SRklY KTsKLSsgIGNvbnN0IHUzMng0IGYgPSB2ZWNfeGwoMCwgKHVpbnQzMl90Kilmcm93KTsKLSsgIGNv bnN0IHUzMng0IGlyID0gdmVjX3hsKDAsICh1aW50MzJfdCopaXJvdyk7Ci0rICBjb25zdCB1MzJ4 NCB2YSA9IHZlY19zcGxhdHMoQSk7Ci0rICBjb25zdCB1MzJ4NCB2YiA9IHZlY19zcGxhdHMoQik7 Ci0rICB1NjR4MiBlID0gdmVjX2FkZCh2ZWNfbXVsZShmLCB2YSksIHZlY19tdWxlKGlyLCB2Yikp OwotKyAgdTY0eDIgbyA9IHZlY19hZGQodmVjX211bG8oZiwgdmEpLCB2ZWNfbXVsbyhpciwgdmIp KTsKLSsgIGUgPSB2ZWNfc3IodmVjX2FkZChlLCByb3VuZGVyKSwgc2hpZnQpOwotKyAgbyA9IHZl Y19zcih2ZWNfYWRkKG8sIHJvdW5kZXIpLCBzaGlmdCk7Ci0rICByZXR1cm4gdmVjX21lcmdlZSgo dTMyeDQpZSwgKHUzMng0KW8pOwotK30KLSsKLSsvLyBTYXR1cmF0ZWQgcGFjayBvZiB0d28gMzIt Yml0IGxhbmUgdmVjdG9ycyAoOCB2YWx1ZXMpIGludG8gOCBieXRlcyBhdCBkc3QuCi0rc3RhdGlj IFdFQlBfSU5MSU5FIHZvaWQgU3RvcmU4X1ZTWCh1MzJ4NCBsbywgdTMyeDQgaGksIHVpbnQ4X3Qq IGRzdCkgewotKyAgY29uc3QgaTE2eDggczE2ID0gdmVjX3BhY2tzKChpMzJ4NClsbywgKGkzMng0 KWhpKTsKLSsgIGNvbnN0IHU4eDE2IHM4ID0gdmVjX3BhY2tzdShzMTYsIHMxNik7Ci0rICBtZW1j cHkoZHN0LCAmczgsIDgpOwotK30KLSsKLStzdGF0aWMgdm9pZCBSZXNjYWxlckV4cG9ydFJvd0V4 cGFuZF9WU1goV2ViUFJlc2NhbGVyKiBjb25zdCB3cmspIHsKLSsgIGludCB4X291dDsKLSsgIHVp bnQ4X3QqIGNvbnN0IGRzdCA9IHdyay0+ZHN0OwotKyAgcmVzY2FsZXJfdCogY29uc3QgaXJvdyA9 IHdyay0+aXJvdzsKLSsgIGNvbnN0IGludCB4X291dF9tYXggPSB3cmstPmRzdF93aWR0aCAqIHdy ay0+bnVtX2NoYW5uZWxzOwotKyAgY29uc3QgaW50IG1heF9zcGFuID0geF9vdXRfbWF4ICYgfjc7 Ci0rICBjb25zdCByZXNjYWxlcl90KiBjb25zdCBmcm93ID0gd3JrLT5mcm93OwotKyAgY29uc3Qg dWludDMyX3QgZnlfc2NhbGUgPSB3cmstPmZ5X3NjYWxlOwotKyAgYXNzZXJ0KCFXZWJQUmVzY2Fs ZXJPdXRwdXREb25lKHdyaykpOwotKyAgYXNzZXJ0KHdyay0+eV9hY2N1bSA8PSAwKTsKLSsgIGFz c2VydCh3cmstPnlfZXhwYW5kKTsKLSsgIGFzc2VydCh3cmstPnlfc3ViICE9IDApOwotKyAgaWYg KHdyay0+eV9hY2N1bSA9PSAwKSB7Ci0rICAgIGZvciAoeF9vdXQgPSAwOyB4X291dCA8IG1heF9z cGFuOyB4X291dCArPSA4KSB7Ci0rICAgICAgY29uc3QgdTMyeDQgQTAgPSB2ZWNfeGwoMCwgKHVp bnQzMl90KikoZnJvdyArIHhfb3V0ICsgMCkpOwotKyAgICAgIGNvbnN0IHUzMng0IEExID0gdmVj X3hsKDAsICh1aW50MzJfdCopKGZyb3cgKyB4X291dCArIDQpKTsKLSsgICAgICBjb25zdCB1MzJ4 NCBCMCA9IE11bHRGaXhfVlNYKEEwLCBmeV9zY2FsZSk7Ci0rICAgICAgY29uc3QgdTMyeDQgQjEg PSBNdWx0Rml4X1ZTWChBMSwgZnlfc2NhbGUpOwotKyAgICAgIFN0b3JlOF9WU1goQjAsIEIxLCBk c3QgKyB4X291dCk7Ci0rICAgIH0KLSsgICAgZm9yICg7IHhfb3V0IDwgeF9vdXRfbWF4OyArK3hf b3V0KSB7Ci0rICAgICAgY29uc3QgdWludDMyX3QgSiA9IGZyb3dbeF9vdXRdOwotKyAgICAgIGNv bnN0IGludCB2ID0gKGludClNVUxUX0ZJWF9DKEosIGZ5X3NjYWxlKTsKLSsgICAgICBkc3RbeF9v dXRdID0gKHYgPiAyNTUpID8gMjU1dSA6ICh1aW50OF90KXY7Ci0rICAgIH0KLSsgIH0gZWxzZSB7 Ci0rICAgIGNvbnN0IHVpbnQzMl90IEIgPSBXRUJQX1JFU0NBTEVSX0ZSQUMoLXdyay0+eV9hY2N1 bSwgd3JrLT55X3N1Yik7Ci0rICAgIGNvbnN0IHVpbnQzMl90IEEgPSAodWludDMyX3QpKFdFQlBf UkVTQ0FMRVJfT05FIC0gQik7Ci0rICAgIGZvciAoeF9vdXQgPSAwOyB4X291dCA8IG1heF9zcGFu OyB4X291dCArPSA4KSB7Ci0rICAgICAgY29uc3QgdTMyeDQgQzAgPQotKyAgICAgICAgICBJbnRl cnBvbGF0ZV9WU1goZnJvdyArIHhfb3V0ICsgMCwgaXJvdyArIHhfb3V0ICsgMCwgQSwgQik7Ci0r ICAgICAgY29uc3QgdTMyeDQgQzEgPQotKyAgICAgICAgICBJbnRlcnBvbGF0ZV9WU1goZnJvdyAr IHhfb3V0ICsgNCwgaXJvdyArIHhfb3V0ICsgNCwgQSwgQik7Ci0rICAgICAgY29uc3QgdTMyeDQg RDAgPSBNdWx0Rml4X1ZTWChDMCwgZnlfc2NhbGUpOwotKyAgICAgIGNvbnN0IHUzMng0IEQxID0g TXVsdEZpeF9WU1goQzEsIGZ5X3NjYWxlKTsKLSsgICAgICBTdG9yZThfVlNYKEQwLCBEMSwgZHN0 ICsgeF9vdXQpOwotKyAgICB9Ci0rICAgIGZvciAoOyB4X291dCA8IHhfb3V0X21heDsgKyt4X291 dCkgewotKyAgICAgIGNvbnN0IHVpbnQ2NF90IEkgPSAodWludDY0X3QpQSAqIGZyb3dbeF9vdXRd ICsgKHVpbnQ2NF90KUIgKiBpcm93W3hfb3V0XTsKLSsgICAgICBjb25zdCB1aW50MzJfdCBKID0g KHVpbnQzMl90KSgoSSArIFJPVU5ERVIpID4+IFdFQlBfUkVTQ0FMRVJfUkZJWCk7Ci0rICAgICAg Y29uc3QgaW50IHYgPSAoaW50KU1VTFRfRklYX0MoSiwgZnlfc2NhbGUpOwotKyAgICAgIGRzdFt4 X291dF0gPSAodiA+IDI1NSkgPyAyNTV1IDogKHVpbnQ4X3QpdjsKLSsgICAgfQotKyAgfQotK30K LSsKLStzdGF0aWMgdm9pZCBSZXNjYWxlckV4cG9ydFJvd1Nocmlua19WU1goV2ViUFJlc2NhbGVy KiBjb25zdCB3cmspIHsKLSsgIGludCB4X291dDsKLSsgIHVpbnQ4X3QqIGNvbnN0IGRzdCA9IHdy ay0+ZHN0OwotKyAgcmVzY2FsZXJfdCogY29uc3QgaXJvdyA9IHdyay0+aXJvdzsKLSsgIGNvbnN0 IGludCB4X291dF9tYXggPSB3cmstPmRzdF93aWR0aCAqIHdyay0+bnVtX2NoYW5uZWxzOwotKyAg Y29uc3QgaW50IG1heF9zcGFuID0geF9vdXRfbWF4ICYgfjc7Ci0rICBjb25zdCByZXNjYWxlcl90 KiBjb25zdCBmcm93ID0gd3JrLT5mcm93OwotKyAgY29uc3QgdWludDMyX3QgeXNjYWxlID0gd3Jr LT5meV9zY2FsZSAqICgtd3JrLT55X2FjY3VtKTsKLSsgIGNvbnN0IHVpbnQzMl90IGZ4eV9zY2Fs ZSA9IHdyay0+Znh5X3NjYWxlOwotKyAgYXNzZXJ0KCFXZWJQUmVzY2FsZXJPdXRwdXREb25lKHdy aykpOwotKyAgYXNzZXJ0KHdyay0+eV9hY2N1bSA8PSAwKTsKLSsgIGFzc2VydCghd3JrLT55X2V4 cGFuZCk7Ci0rICBpZiAoeXNjYWxlKSB7Ci0rICAgIGZvciAoeF9vdXQgPSAwOyB4X291dCA8IG1h eF9zcGFuOyB4X291dCArPSA4KSB7Ci0rICAgICAgY29uc3QgdTMyeDQgaW4wID0gdmVjX3hsKDAs ICh1aW50MzJfdCopKGZyb3cgKyB4X291dCArIDApKTsKLSsgICAgICBjb25zdCB1MzJ4NCBpbjEg PSB2ZWNfeGwoMCwgKHVpbnQzMl90KikoZnJvdyArIHhfb3V0ICsgNCkpOwotKyAgICAgIGNvbnN0 IHUzMng0IGluMiA9IHZlY194bCgwLCAodWludDMyX3QqKShpcm93ICsgeF9vdXQgKyAwKSk7Ci0r ICAgICAgY29uc3QgdTMyeDQgaW4zID0gdmVjX3hsKDAsICh1aW50MzJfdCopKGlyb3cgKyB4X291 dCArIDQpKTsKLSsgICAgICBjb25zdCB1MzJ4NCBBMCA9IE11bHRGaXhGbG9vcl9WU1goaW4wLCB5 c2NhbGUpOwotKyAgICAgIGNvbnN0IHUzMng0IEExID0gTXVsdEZpeEZsb29yX1ZTWChpbjEsIHlz Y2FsZSk7Ci0rICAgICAgY29uc3QgdTMyeDQgQjAgPSB2ZWNfc3ViKGluMiwgQTApOwotKyAgICAg IGNvbnN0IHUzMng0IEIxID0gdmVjX3N1YihpbjMsIEExKTsKLSsgICAgICBjb25zdCB1MzJ4NCBD MCA9IE11bHRGaXhfVlNYKEIwLCBmeHlfc2NhbGUpOwotKyAgICAgIGNvbnN0IHUzMng0IEMxID0g TXVsdEZpeF9WU1goQjEsIGZ4eV9zY2FsZSk7Ci0rICAgICAgU3RvcmU4X1ZTWChDMCwgQzEsIGRz dCArIHhfb3V0KTsKLSsgICAgICB2ZWNfeHN0KEEwLCAwLCAodWludDMyX3QqKShpcm93ICsgeF9v dXQgKyAwKSk7Ci0rICAgICAgdmVjX3hzdChBMSwgMCwgKHVpbnQzMl90KikoaXJvdyArIHhfb3V0 ICsgNCkpOwotKyAgICB9Ci0rICAgIGZvciAoOyB4X291dCA8IHhfb3V0X21heDsgKyt4X291dCkg ewotKyAgICAgIGNvbnN0IHVpbnQzMl90IGZyYWMgPSAodWludDMyX3QpTVVMVF9GSVhfRkxPT1Jf Qyhmcm93W3hfb3V0XSwgeXNjYWxlKTsKLSsgICAgICBjb25zdCBpbnQgdiA9IChpbnQpTVVMVF9G SVhfQyhpcm93W3hfb3V0XSAtIGZyYWMsIGZ4eV9zY2FsZSk7Ci0rICAgICAgZHN0W3hfb3V0XSA9 ICh2ID4gMjU1KSA/IDI1NXUgOiAodWludDhfdCl2OwotKyAgICAgIGlyb3dbeF9vdXRdID0gZnJh YzsgIC8vIG5ldyBmcmFjdGlvbmFsIHN0YXJ0Ci0rICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAgIGNv bnN0IHUzMng0IHplcm8gPSB2ZWNfc3BsYXRzKCh1aW50MzJfdCkwKTsKLSsgICAgZm9yICh4X291 dCA9IDA7IHhfb3V0IDwgbWF4X3NwYW47IHhfb3V0ICs9IDgpIHsKLSsgICAgICBjb25zdCB1MzJ4 NCBpbjAgPSB2ZWNfeGwoMCwgKHVpbnQzMl90KikoaXJvdyArIHhfb3V0ICsgMCkpOwotKyAgICAg IGNvbnN0IHUzMng0IGluMSA9IHZlY194bCgwLCAodWludDMyX3QqKShpcm93ICsgeF9vdXQgKyA0 KSk7Ci0rICAgICAgY29uc3QgdTMyeDQgQTAgPSBNdWx0Rml4X1ZTWChpbjAsIGZ4eV9zY2FsZSk7 Ci0rICAgICAgY29uc3QgdTMyeDQgQTEgPSBNdWx0Rml4X1ZTWChpbjEsIGZ4eV9zY2FsZSk7Ci0r ICAgICAgU3RvcmU4X1ZTWChBMCwgQTEsIGRzdCArIHhfb3V0KTsKLSsgICAgICB2ZWNfeHN0KHpl cm8sIDAsICh1aW50MzJfdCopKGlyb3cgKyB4X291dCArIDApKTsKLSsgICAgICB2ZWNfeHN0KHpl cm8sIDAsICh1aW50MzJfdCopKGlyb3cgKyB4X291dCArIDQpKTsKLSsgICAgfQotKyAgICBmb3Ig KDsgeF9vdXQgPCB4X291dF9tYXg7ICsreF9vdXQpIHsKLSsgICAgICBjb25zdCBpbnQgdiA9IChp bnQpTVVMVF9GSVhfQyhpcm93W3hfb3V0XSwgZnh5X3NjYWxlKTsKLSsgICAgICBkc3RbeF9vdXRd ID0gKHYgPiAyNTUpID8gMjU1dSA6ICh1aW50OF90KXY7Ci0rICAgICAgaXJvd1t4X291dF0gPSAw OwotKyAgICB9Ci0rICB9Ci0rfQotKwotKyN1bmRlZiBNVUxUX0ZJWF9GTE9PUl9DCi0rI3VuZGVm IE1VTFRfRklYX0MKLSsjdW5kZWYgUk9VTkRFUgotKwotKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0rCi0rZXh0ZXJuIHZvaWQgV2ViUFJlc2NhbGVyRHNwSW5pdFZTWCh2b2lkKTsKLSsKLStXRUJQ X1RTQU5fSUdOT1JFX0ZVTkNUSU9OIHZvaWQgV2ViUFJlc2NhbGVyRHNwSW5pdFZTWCh2b2lkKSB7 Ci0rICBXZWJQUmVzY2FsZXJFeHBvcnRSb3dFeHBhbmQgPSBSZXNjYWxlckV4cG9ydFJvd0V4cGFu ZF9WU1g7Ci0rICBXZWJQUmVzY2FsZXJFeHBvcnRSb3dTaHJpbmsgPSBSZXNjYWxlckV4cG9ydFJv d1Nocmlua19WU1g7Ci0rfQotKwotKyNlbHNlICAvLyAhV0VCUF9VU0VfVlNYCi0rCi0rV0VCUF9E U1BfSU5JVF9TVFVCKFdlYlBSZXNjYWxlckRzcEluaXRWU1gpCi0rCi0rI2VuZGlmICAvLyBXRUJQ X1VTRV9WU1gKLWRpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZy5j IGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3Vwc2FtcGxpbmcuYwotaW5kZXggYzU3ZjY2YzM1NTNm Li5mYWVjZGYyNzczOTMgMTAwNjQ0Ci0tLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1w bGluZy5jCi0rKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZy5jCi1AQCAtMjM1 LDYgKzIzNSw3IEBAIGV4dGVybiBWUDhDUFVJbmZvIFZQOEdldENQVUluZm87Ci0gZXh0ZXJuIHZv aWQgV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJzTUlQU2RzcFIyKHZvaWQpOwotIGV4dGVybiB2b2lk IFdlYlBJbml0WVVWNDQ0Q29udmVydGVyc1NTRTIodm9pZCk7Ci0gZXh0ZXJuIHZvaWQgV2ViUElu aXRZVVY0NDRDb252ZXJ0ZXJzU1NFNDEodm9pZCk7Ci0rZXh0ZXJuIHZvaWQgV2ViUEluaXRZVVY0 NDRDb252ZXJ0ZXJzVlNYKHZvaWQpOwotIAotIFdFQlBfRFNQX0lOSVRfRlVOQyhXZWJQSW5pdFlV VjQ0NENvbnZlcnRlcnMpIHsKLSAgIFdlYlBZVVY0NDRDb252ZXJ0ZXJzW01PREVfUkdCQV0gICAg ICA9IFdlYlBZdXY0NDRUb1JnYmFfQzsKLUBAIC0yNjQsNiArMjY1LDExIEBAIFdFQlBfRFNQX0lO SVRfRlVOQyhXZWJQSW5pdFlVVjQ0NENvbnZlcnRlcnMpIHsKLSAgICAgaWYgKFZQOEdldENQVUlu Zm8oa01JUFNkc3BSMikpIHsKLSAgICAgICBXZWJQSW5pdFlVVjQ0NENvbnZlcnRlcnNNSVBTZHNw UjIoKTsKLSAgICAgfQotKyNlbmRpZgotKyNpZiBkZWZpbmVkKFdFQlBfSEFWRV9WU1gpCi0rICAg IGlmIChWUDhHZXRDUFVJbmZvKGtWU1gpKSB7Ci0rICAgICAgV2ViUEluaXRZVVY0NDRDb252ZXJ0 ZXJzVlNYKCk7Ci0rICAgIH0KLSAjZW5kaWYKLSAgIH0KLSB9Ci1AQCAtMjc2LDYgKzI4Miw3IEBA IGV4dGVybiB2b2lkIFdlYlBJbml0VXBzYW1wbGVyc1NTRTQxKHZvaWQpOwotIGV4dGVybiB2b2lk IFdlYlBJbml0VXBzYW1wbGVyc05FT04odm9pZCk7Ci0gZXh0ZXJuIHZvaWQgV2ViUEluaXRVcHNh bXBsZXJzTUlQU2RzcFIyKHZvaWQpOwotIGV4dGVybiB2b2lkIFdlYlBJbml0VXBzYW1wbGVyc01T QSh2b2lkKTsKLStleHRlcm4gdm9pZCBXZWJQSW5pdFVwc2FtcGxlcnNWU1godm9pZCk7Ci0gCi0g V0VCUF9EU1BfSU5JVF9GVU5DKFdlYlBJbml0VXBzYW1wbGVycykgewotICNpZmRlZiBGQU5DWV9V UFNBTVBMSU5HCi1AQCAtMzE0LDYgKzMyMSwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUElu aXRVcHNhbXBsZXJzKSB7Ci0gICAgIGlmIChWUDhHZXRDUFVJbmZvKGtNU0EpKSB7Ci0gICAgICAg V2ViUEluaXRVcHNhbXBsZXJzTVNBKCk7Ci0gICAgIH0KLSsjZW5kaWYKLSsjaWYgZGVmaW5lZChX RUJQX0hBVkVfVlNYKQotKyAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrVlNYKSkgewotKyAgICAgIFdl YlBJbml0VXBzYW1wbGVyc1ZTWCgpOwotKyAgICB9Ci0gI2VuZGlmCi0gICB9Ci0gCi1kaWZmIC0t Z2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL3Vwc2FtcGxpbmdfdnN4LmMgYi9tZWRpYS9saWJ3 ZWJwL3NyYy9kc3AvdXBzYW1wbGluZ192c3guYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4 IDAwMDAwMDAwMDAwMC4uYTcxOTE5NzJmYzZlCi0tLS0gL2Rldi9udWxsCi0rKysgYi9tZWRpYS9s aWJ3ZWJwL3NyYy9kc3AvdXBzYW1wbGluZ192c3guYwotQEAgLTAsMCArMSwxNTEgQEAKLSsvLyBD b3B5cmlnaHQgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKy8vCi0rLy8g VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z ZQotKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3Qg b2YgdGhlIHNvdXJjZQotKy8vIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSsvLyBpbiB0aGUgZmlsZSBQQVRFTlRTLiBB bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSsvLyBiZSBmb3VuZCBpbiB0aGUg QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSsvLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotKy8vCi0rLy8gVlNYIChQb3dlclBDKSB2ZXJzaW9uIG9mIFlVViB0byBS R0IgdXBzYW1wbGluZyBmdW5jdGlvbnMuCi0rCi0rI2luY2x1ZGUgInNyYy9kc3AvZHNwLmgiCi0r Ci0rI2lmIGRlZmluZWQoV0VCUF9VU0VfVlNYKQotKwotKyNpbmNsdWRlIDxhbHRpdmVjLmg+Ci0r I2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsKLSsjaW5jbHVkZSAi c3JjL2RzcC9jcHUuaCIKLSsjaW5jbHVkZSAic3JjL2RzcC95dXYuaCIKLSsjaW5jbHVkZSAic3Jj L3dlYnAvZGVjb2RlLmgiCi0rI2luY2x1ZGUgInNyYy93ZWJwL3R5cGVzLmgiCi0rCi0rdHlwZWRl ZiBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHU4eDE2OwotK3R5cGVkZWYgX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQgdTE2eDg7Ci0rCi0rLy8gVXBzYW1wbGUgMTYgY2hyb21hIHBhaXJzIGZyb20gcm93 cyByMS9yMiAoMTcgcmVhZGFibGUgYnl0ZXMgZWFjaCkgaW50byAzMgotKy8vICJ0b3AiIGJ5dGVz IGF0IG91dFswLi4zMV0gYW5kIDMyICJib3R0b20iIGJ5dGVzIGF0IG91dFs2NC4uOTVdLCBtYXRj aGluZyB0aGUKLSsvLyBmYW5jeS11cHNhbXBsZXIgZGlhZ29uYWwgd2VpZ2h0cyAoYSArIDNiICsg M2MgKyBkKSAvIDggZXRjLgotKyNkZWZpbmUgR0VUX00oaWosIGluKSBcCi0rICB2ZWNfc3ViKHZl Y19hdmcoaywgKGluKSksIFwKLSsgICAgICAgICAgdmVjX2FuZCh2ZWNfb3IodmVjX2FuZCgoaWop LCBzdCksIHZlY194b3IoaywgKGluKSkpLCBvbmUpKQotKwotK3N0YXRpYyB2b2lkIFVwc2FtcGxl MzJQaXhlbHMoY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCByMSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgcjIsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIG91dCkgewotKyAg Y29uc3QgdTh4MTYgb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikxKTsKLSsgIGNvbnN0 IHU4eDE2IGEgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXIxKTsKLSsgIGNvbnN0 IHU4eDE2IGIgPSB2ZWNfeGwoMSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXIxKTsKLSsgIGNvbnN0 IHU4eDE2IGMgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXIyKTsKLSsgIGNvbnN0 IHU4eDE2IGQgPSB2ZWNfeGwoMSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXIyKTsKLSsgIGNvbnN0 IHU4eDE2IHMgPSB2ZWNfYXZnKGEsIGQpOwotKyAgY29uc3QgdTh4MTYgdCA9IHZlY19hdmcoYiwg Yyk7Ci0rICBjb25zdCB1OHgxNiBzdCA9IHZlY194b3IocywgdCk7Ci0rICBjb25zdCB1OHgxNiB0 MyA9Ci0rICAgICAgdmVjX2FuZCh2ZWNfb3IodmVjX29yKHZlY194b3IoYSwgZCksIHZlY194b3Io YiwgYykpLCBzdCksIG9uZSk7Ci0rICBjb25zdCB1OHgxNiBrID0gdmVjX3N1Yih2ZWNfYXZnKHMs IHQpLCB0Myk7Ci0rICBjb25zdCB1OHgxNiBkaWFnMSA9IEdFVF9NKHZlY194b3IoYiwgYyksIHQp OwotKyAgY29uc3QgdTh4MTYgZGlhZzIgPSBHRVRfTSh2ZWNfeG9yKGEsIGQpLCBzKTsKLSsgIGNv bnN0IHU4eDE2IHRhID0gdmVjX2F2ZyhhLCBkaWFnMSksIHRiID0gdmVjX2F2ZyhiLCBkaWFnMik7 Ci0rICBjb25zdCB1OHgxNiB0YyA9IHZlY19hdmcoYywgZGlhZzIpLCB0ZCA9IHZlY19hdmcoZCwg ZGlhZzEpOwotKyAgdmVjX3hzdCh2ZWNfbWVyZ2VoKHRhLCB0YiksIDAsIG91dCk7Ci0rICB2ZWNf eHN0KHZlY19tZXJnZWwodGEsIHRiKSwgMCwgb3V0ICsgMTYpOwotKyAgdmVjX3hzdCh2ZWNfbWVy Z2VoKHRjLCB0ZCksIDAsIG91dCArIDY0KTsKLSsgIHZlY194c3QodmVjX21lcmdlbCh0YywgdGQp LCAwLCBvdXQgKyA4MCk7Ci0rfQotKwotKyNkZWZpbmUgVVBTQU1QTEVfRlVOQyhGVU5DX05BTUUs IEZVTkMsIEZVTkMzMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rc3RhdGlj IHZvaWQgRlVOQ19OQU1FKGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdG9wX3ksICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCog V0VCUF9SRVNUUklDVCBib3R0b21feSwgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHRvcF91LCAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBf UkVTVFJJQ1QgdG9wX3YsICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBjdXJfdSwgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RS SUNUIGN1cl92LCAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAg IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdG9wX2RzdCwgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBib3R0b21f ZHN0LCBpbnQgbGVuKSB7ICAgICAgICAgICAgXAotKyAgaW50IHV2X3BvcywgcG9zOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IHVpbnQ4X3QgdXZfYnVmWzE0ICogMzIgKyAxNV0gPSB7MH07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB1aW50OF90KiBjb25zdCByX3UgPSAodWludDhfdCop KCgodWludHB0cl90KSh1dl9idWYgKyAxNSkpICYgfih1aW50cHRyX3QpMTUpO1wKLSsgIHVpbnQ4 X3QqIGNvbnN0IHJfdiA9IHJfdSArIDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBhc3NlcnQodG9wX3kgIT0gTlVMTCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgY29uc3QgaW50IHVfZGlhZyA9ICgodG9wX3VbMF0gKyBjdXJfdVswXSkg Pj4gMSkgKyAxOyAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGNvbnN0IGludCB2X2RpYWcg PSAoKHRvcF92WzBdICsgY3VyX3ZbMF0pID4+IDEpICsgMTsgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICBGVU5DKHRvcF95WzBdLCAodG9wX3VbMF0gKyB1X2RpYWcpID4+IDEsICh0b3Bfdlsw XSArIHZfZGlhZykgPj4gMSwgICAgICAgIFwKLSsgICAgICAgICB0b3BfZHN0KTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg aWYgKGJvdHRvbV95ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgRlVOQyhib3R0b21feVswXSwgKGN1cl91WzBdICsg dV9kaWFnKSA+PiAxLCAoY3VyX3ZbMF0gKyB2X2RpYWcpID4+IDEsICAgXAotKyAgICAgICAgICAg Ym90dG9tX2RzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICBmb3IgKHBvcyA9IDEsIHV2X3BvcyA9IDA7IHBvcyArIDMyICsgMSA8PSBsZW47IHBv cyArPSAzMiwgdXZfcG9zICs9IDE2KSB7ICAgXAotKyAgICBVcHNhbXBsZTMyUGl4ZWxzKHRvcF91 ICsgdXZfcG9zLCBjdXJfdSArIHV2X3Bvcywgcl91KTsgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgVXBzYW1wbGUzMlBpeGVscyh0b3BfdiArIHV2X3BvcywgY3VyX3YgKyB1dl9wb3MsIHJfdik7 ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEZVTkMzMih0b3BfeSArIHBvcywgcl91LCByX3Ys IHRvcF9kc3QgKyBwb3MgKiA0KTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBpZiAo Ym90dG9tX3kgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICBGVU5DMzIoYm90dG9tX3kgKyBwb3MsIHJfdSArIDY0LCBy X3YgKyA2NCwgYm90dG9tX2RzdCArIHBvcyAqIDQpOyAgICAgICBcCi0rICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGlmIChsZW4gPiAxKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIGNvbnN0IGludCBsZWZ0X292ZXIgPSAoKGxlbiArIDEpID4+IDEpIC0gKHBvcyA+PiAx KTsgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1aW50OF90KiBjb25zdCB0bXBfdG9wX2Rz dCA9IHJfdSArIDQgKiAzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg dWludDhfdCogY29uc3QgdG1wX2JvdHRvbV9kc3QgPSB0bXBfdG9wX2RzdCArIDQgKiAzMjsgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgIHVpbnQ4X3QqIGNvbnN0IHRtcF90b3AgPSB0bXBfYm90 dG9tX2RzdCArIDQgKiAzMjsgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB1aW50OF90 KiBjb25zdCB0bXBfYm90dG9tID0gKGJvdHRvbV95ID09IE5VTEwpID8gTlVMTCA6IHRtcF90b3Ag KyAzMjsgICAgIFwKLSsgICAgdWludDhfdCByMVsxN10sIHIyWzE3XTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGFzc2VydChsZWZ0X292 ZXIgPiAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICBtZW1jcHkocjEsIHRvcF91ICsgdXZfcG9zLCBsZWZ0X292ZXIpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgbWVtY3B5KHIyLCBjdXJfdSArIHV2 X3BvcywgbGVmdF9vdmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIG1lbXNldChyMSArIGxlZnRfb3ZlciwgcjFbbGVmdF9vdmVyIC0gMV0sIDE3IC0gbGVmdF9v dmVyKTsgICAgICAgICAgICAgICAgXAotKyAgICBtZW1zZXQocjIgKyBsZWZ0X292ZXIsIHIyW2xl ZnRfb3ZlciAtIDFdLCAxNyAtIGxlZnRfb3Zlcik7ICAgICAgICAgICAgICAgIFwKLSsgICAgVXBz YW1wbGUzMlBpeGVscyhyMSwgcjIsIHJfdSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIG1lbWNweShyMSwgdG9wX3YgKyB1dl9wb3MsIGxlZnRfb3Zl cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBtZW1jcHkocjIs IGN1cl92ICsgdXZfcG9zLCBsZWZ0X292ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgbWVtc2V0KHIxICsgbGVmdF9vdmVyLCByMVtsZWZ0X292ZXIgLSAxXSwg MTcgLSBsZWZ0X292ZXIpOyAgICAgICAgICAgICAgICBcCi0rICAgIG1lbXNldChyMiArIGxlZnRf b3ZlciwgcjJbbGVmdF9vdmVyIC0gMV0sIDE3IC0gbGVmdF9vdmVyKTsgICAgICAgICAgICAgICAg XAotKyAgICBVcHNhbXBsZTMyUGl4ZWxzKHIxLCByMiwgcl92KTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgbWVtY3B5KHRtcF90b3AsIHRvcF95ICsg cG9zLCBsZW4gLSBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IGlmIChib3R0b21feSAhPSBOVUxMKSBtZW1jcHkodG1wX2JvdHRvbSwgYm90dG9tX3kgKyBwb3Ms IGxlbiAtIHBvcyk7ICAgICAgXAotKyAgICBGVU5DMzIodG1wX3RvcCwgcl91LCByX3YsIHRtcF90 b3BfZHN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgaWYgKGJv dHRvbV95ICE9IE5VTEwpIEZVTkMzMih0bXBfYm90dG9tLCByX3UgKyA2NCwgcl92ICsgNjQsICAg ICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfYm90dG9t X2RzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgbWVtY3B5KHRvcF9kc3Qg KyBwb3MgKiA0LCB0bXBfdG9wX2RzdCwgKGxlbiAtIHBvcykgKiA0KTsgICAgICAgICAgICAgICAg ICBcCi0rICAgIGlmIChib3R0b21feSAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIG1lbWNweShib3R0b21fZHN0ICsg cG9zICogNCwgdG1wX2JvdHRvbV9kc3QsIChsZW4gLSBwb3MpICogNCk7ICAgICAgICAgIFwKLSsg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30KLSsKLStV UFNBTVBMRV9GVU5DKFVwc2FtcGxlUmdiYUxpbmVQYWlyX1ZTWCwgVlA4WXV2VG9SZ2JhLCBWUDhZ dXZUb1JnYmEzMl9WU1gpCi0rVVBTQU1QTEVfRlVOQyhVcHNhbXBsZUJncmFMaW5lUGFpcl9WU1gs IFZQOFl1dlRvQmdyYSwgVlA4WXV2VG9CZ3JhMzJfVlNYKQotK1VQU0FNUExFX0ZVTkMoVXBzYW1w bGVBcmdiTGluZVBhaXJfVlNYLCBWUDhZdXZUb0FyZ2IsIFZQOFl1dlRvQXJnYjMyX1ZTWCkKLSsK LStleHRlcm4gV2ViUFVwc2FtcGxlTGluZVBhaXJGdW5jIFdlYlBVcHNhbXBsZXJzWy8qIE1PREVf TEFTVCAqL107Ci0rCi0rZXh0ZXJuIHZvaWQgV2ViUEluaXRVcHNhbXBsZXJzVlNYKHZvaWQpOwot KwotK1dFQlBfVFNBTl9JR05PUkVfRlVOQ1RJT04gdm9pZCBXZWJQSW5pdFVwc2FtcGxlcnNWU1go dm9pZCkgewotKyAgV2ViUFVwc2FtcGxlcnNbTU9ERV9SR0JBXSA9IFVwc2FtcGxlUmdiYUxpbmVQ YWlyX1ZTWDsKLSsgIFdlYlBVcHNhbXBsZXJzW01PREVfQkdSQV0gPSBVcHNhbXBsZUJncmFMaW5l UGFpcl9WU1g7Ci0rICBXZWJQVXBzYW1wbGVyc1tNT0RFX3JnYkFdID0gVXBzYW1wbGVSZ2JhTGlu ZVBhaXJfVlNYOwotKyAgV2ViUFVwc2FtcGxlcnNbTU9ERV9iZ3JBXSA9IFVwc2FtcGxlQmdyYUxp bmVQYWlyX1ZTWDsKLSsjaWYgIWRlZmluZWQoV0VCUF9SRURVQ0VfQ1NQKQotKyAgV2ViUFVwc2Ft cGxlcnNbTU9ERV9BUkdCXSA9IFVwc2FtcGxlQXJnYkxpbmVQYWlyX1ZTWDsKLSsgIFdlYlBVcHNh bXBsZXJzW01PREVfQXJnYl0gPSBVcHNhbXBsZUFyZ2JMaW5lUGFpcl9WU1g7Ci0rI2VuZGlmCi0r fQotKwotK2V4dGVybiB2b2lkIFdlYlBJbml0WVVWNDQ0Q29udmVydGVyc1ZTWCh2b2lkKTsKLSsK LSsvLyBZVVY0NDQgcG9pbnQgY29udmVydGVycyBzdGF5IG9uIHRoZSBDIHBhdGggZm9yIG5vdy4K LStXRUJQX1RTQU5fSUdOT1JFX0ZVTkNUSU9OIHZvaWQgV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJz VlNYKHZvaWQpIHt9Ci0rCi0rI2Vsc2UgIC8vICFXRUJQX1VTRV9WU1gKLSsKLStXRUJQX0RTUF9J TklUX1NUVUIoV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJzVlNYKQotKwotK1dFQlBfRFNQX0lOSVRf U1RVQihXZWJQSW5pdFVwc2FtcGxlcnNWU1gpCi0rCi0rI2VuZGlmICAvLyBXRUJQX1VTRV9WU1gK LWRpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2LmMgYi9tZWRpYS9saWJ3ZWJw L3NyYy9kc3AveXV2LmMKLWluZGV4IDYyZjFlY2MxNTY3ZC4uOWE5NWM1ZGUxZTIzIDEwMDY0NAot LS0tIGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1di5jCi0rKysgYi9tZWRpYS9saWJ3ZWJwL3Ny Yy9kc3AveXV2LmMKLUBAIC04MSw2ICs4MSw3IEBAIGV4dGVybiB2b2lkIFdlYlBJbml0U2FtcGxl cnNTU0UyKHZvaWQpOwotIGV4dGVybiB2b2lkIFdlYlBJbml0U2FtcGxlcnNTU0U0MSh2b2lkKTsK LSBleHRlcm4gdm9pZCBXZWJQSW5pdFNhbXBsZXJzTUlQUzMyKHZvaWQpOwotIGV4dGVybiB2b2lk IFdlYlBJbml0U2FtcGxlcnNNSVBTZHNwUjIodm9pZCk7Ci0rZXh0ZXJuIHZvaWQgV2ViUEluaXRT YW1wbGVyc1ZTWCh2b2lkKTsKLSAKLSBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUEluaXRTYW1wbGVy cykgewotICAgV2ViUFNhbXBsZXJzW01PREVfUkdCXSAgICAgICA9IFl1dlRvUmdiUm93OwotQEAg LTExNyw2ICsxMTgsMTEgQEAgV0VCUF9EU1BfSU5JVF9GVU5DKFdlYlBJbml0U2FtcGxlcnMpIHsK LSAgICAgICBXZWJQSW5pdFNhbXBsZXJzTUlQU2RzcFIyKCk7Ci0gICAgIH0KLSAjZW5kaWYgIC8v IFdFQlBfVVNFX01JUFNfRFNQX1IyCi0rI2lmIGRlZmluZWQoV0VCUF9IQVZFX1ZTWCkKLSsgICAg aWYgKFZQOEdldENQVUluZm8oa1ZTWCkpIHsKLSsgICAgICBXZWJQSW5pdFNhbXBsZXJzVlNYKCk7 Ci0rICAgIH0KLSsjZW5kaWYKLSAgIH0KLSB9Ci0gCi1kaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2Vi cC9zcmMvZHNwL3l1di5oIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1di5oCi1pbmRleCA2ZjIx OGNmN2UwN2YuLjk3OTg5MWQzMjMyZCAxMDA2NDQKLS0tLSBhL21lZGlhL2xpYndlYnAvc3JjL2Rz cC95dXYuaAotKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1di5oCi1AQCAtMTgyLDYgKzE4 MiwyNyBAQCB2b2lkIFZQOFl1dlRvUmdiNTY1MzJfU1NFMihjb25zdCB1aW50OF90KiBXRUJQX1JF U1RSSUNUIHksCi0gCi0gI2VuZGlmICAgIC8vIFdFQlBfVVNFX1NTRTIKLSAKLSsvLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0rLy8gVlNYIGV4dHJhIGZ1bmN0aW9ucyAobW9zdGx5IGZvciB1cHNhbXBs aW5nX3ZzeC5jKQotKwotKyNpZiBkZWZpbmVkKFdFQlBfVVNFX1ZTWCkKLSsKLSsvLyBQcm9jZXNz IDMyIHBpeGVscyBhbmQgc3RvcmUgdGhlIDMyYi1wZXItcGl4ZWwgcmVzdWx0IGluICpkc3QuCi0r dm9pZCBWUDhZdXZUb1JnYmEzMl9WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB5LAot KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwK LSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpOwot K3ZvaWQgVlA4WXV2VG9CZ3JhMzJfVlNYKGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgeSwK LSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB2 LAotKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KTsK LSt2b2lkIFZQOFl1dlRvQXJnYjMyX1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB1 LAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1Qg diwKLSsgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCk7 Ci0rCi0rI2VuZGlmICAgIC8vIFdFQlBfVVNFX1ZTWAotKwotIC8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLSAvLyBTU0U0MSBleHRyYSBmdW5jdGlvbnMgKG1vc3RseSBmb3IgdXBzYW1wbGluZ19zc2U0 MS5jKQotIAotZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC95dXZfdnN4LmMgYi9t ZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2X3ZzeC5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5k ZXggMDAwMDAwMDAwMDAwLi4xZmRjNWM4MGJhMTYKLS0tLSAvZGV2L251bGwKLSsrKyBiL21lZGlh L2xpYndlYnAvc3JjL2RzcC95dXZfdnN4LmMKLUBAIC0wLDAgKzEsMjA2IEBACi0rLy8gQ29weXJp Z2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSsvLwotKy8vIFVzZSBv ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSsv LyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSByb290IG9mIHRo ZSBzb3VyY2UKLSsvLyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0rLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNv bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0rLy8gYmUgZm91bmQgaW4gdGhlIEFVVEhP UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0rLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSsvLwotKy8vIFZTWCAoUG93ZXJQQykgdmVyc2lvbiBvZiBZVVYtPlJHQiBjb252 ZXJzaW9uIGZ1bmN0aW9ucy4KLSsKLSsjaW5jbHVkZSAic3JjL2RzcC9kc3AuaCIKLSsKLSsjaWYg ZGVmaW5lZChXRUJQX1VTRV9WU1gpCi0rCi0rI2luY2x1ZGUgPGFsdGl2ZWMuaD4KLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgInNyYy9kc3AveXV2LmgiCi0rCi0rdHlwZWRlZiBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyICB1OHgxNjsKLSt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVk IHNob3J0IHUxNng4OwotK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkICAgc2hvcnQgaTE2eDg7Ci0r dHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgICB1MzJ4NDsKLSsKLSsvLyBQT1dFUjggaGFz IG5vICJtdWx0aXBseS1oaWdoIHVuc2lnbmVkIGhhbGZ3b3JkIiwgc28gZW11bGF0ZSBfbW1fbXVs aGlfZXB1MTYKLSsvLyB2aWEgZXZlbi9vZGQgMTZ4MTYtPjMyIHByb2R1Y3RzLCA+PjE2LCB0aGVu IGludGVybGVhdmUgYmFjay4KLStzdGF0aWMgV0VCUF9JTkxJTkUgdTE2eDggTXVsSGkxNih1MTZ4 OCBhLCB1MTZ4OCBiKSB7Ci0rICBjb25zdCB1MzJ4NCBzaCA9IHZlY19zcGxhdHMoKHVuc2lnbmVk IGludCkxNik7Ci0rICBjb25zdCB1MzJ4NCBlID0gdmVjX3NyKHZlY19tdWxlKGEsIGIpLCBzaCk7 Ci0rICBjb25zdCB1MzJ4NCBvID0gdmVjX3NyKHZlY19tdWxvKGEsIGIpLCBzaCk7Ci0rICByZXR1 cm4gdmVjX3BhY2sodmVjX21lcmdlaChlLCBvKSwgdmVjX21lcmdlbChlLCBvKSk7Ci0rfQotKwot Ky8vIDE0YiBmaXhlZC1wb2ludCBJVFUtUiBCVC42MDEgWVVWLT5SR0IsIG1hdGNoaW5nIHRoZSBT U0UyL3NjYWxhciBwYXRoLgotKy8vIElucHV0cyBhcmUgc2FtcGxlcyBwcmUtc2hpZnRlZCBpbnRv IHRoZSBoaWdoIGJ5dGUgKDw8IDgpLgotK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIENvbnZlcnRZ VVY0NDRUb1JHQih1MTZ4OCBZMCwgdTE2eDggVTAsIHUxNng4IFYwLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMTZ4OCogY29uc3QgUiwgaTE2eDgqIGNvbnN0 IEcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNng4KiBj b25zdCBCKSB7Ci0rICBjb25zdCB1MTZ4OCBrMTkwNzcgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBz aG9ydCkxOTA3Nyk7Ci0rICBjb25zdCB1MTZ4OCBrMjYxNDkgPSB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBzaG9ydCkyNjE0OSk7Ci0rICBjb25zdCB1MTZ4OCBrMTQyMzQgPSB2ZWNfc3BsYXRzKCh1bnNp Z25lZCBzaG9ydCkxNDIzNCk7Ci0rICBjb25zdCB1MTZ4OCBrMzMwNTAgPSB2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBzaG9ydCkzMzA1MCk7Ci0rICBjb25zdCB1MTZ4OCBrMTc2ODUgPSB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBzaG9ydCkxNzY4NSk7Ci0rICBjb25zdCB1MTZ4OCBrNjQxOSAgPSB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBzaG9ydCk2NDE5KTsKLSsgIGNvbnN0IHUxNng4IGsxMzMyMCA9IHZlY19z cGxhdHMoKHVuc2lnbmVkIHNob3J0KTEzMzIwKTsKLSsgIGNvbnN0IHUxNng4IGs4NzA4ICA9IHZl Y19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTg3MDgpOwotKyAgY29uc3QgdTE2eDggc2l4ICAgID0g dmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpNik7Ci0rCi0rICBjb25zdCB1MTZ4OCBZMSA9IE11 bEhpMTYoWTAsIGsxOTA3Nyk7Ci0rICBjb25zdCB1MTZ4OCBSMiA9IHZlY19hZGQodmVjX3N1YihZ MSwgazE0MjM0KSwgTXVsSGkxNihWMCwgazI2MTQ5KSk7Ci0rICBjb25zdCB1MTZ4OCBHNCA9IHZl Y19zdWIodmVjX2FkZChZMSwgazg3MDgpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZl Y19hZGQoTXVsSGkxNihVMCwgazY0MTkpLCBNdWxIaTE2KFYwLCBrMTMzMjApKSk7Ci0rICAvLyAz MzA1MCBuZWVkcyB1bnNpZ25lZCBzYXR1cmF0aW5nIGFyaXRobWV0aWM7IEIgY2FuIGV4Y2VlZCAz Mjc2Ny4KLSsgIGNvbnN0IHUxNng4IEIyID0gdmVjX3N1YnModmVjX2FkZHMoTXVsSGkxNihVMCwg azMzMDUwKSwgWTEpLCBrMTc2ODUpOwotKwotKyAgKlIgPSB2ZWNfc3JhKChpMTZ4OClSMiwgc2l4 KTsKLSsgICpHID0gdmVjX3NyYSgoaTE2eDgpRzQsIHNpeCk7Ci0rICAqQiA9IHZlY19zcihCMiwg c2l4KTsKLSt9Ci0rCi0rLy8gTG9hZCA4IGJ5dGVzIGludG8gdGhlIGhpZ2ggYnl0ZSBvZiA4IHUx NiBsYW5lcyAoaS5lLiBzYW1wbGUgPDwgOCkuCi0rLy8gVXNlIGFuIDgtYnl0ZSBjb3B5IChub3Qg YSAxNi1ieXRlIHZlY3RvciBsb2FkKSB0byBhdm9pZCByZWFkaW5nIHBhc3QgdGhlCi0rLy8gZW5k IG9mIHRoZSBzb3VyY2Ugcm93LCBtYXRjaGluZyB0aGUgU1NFMiBfbW1fbG9hZGxfZXBpNjQgYmVo YXZpb3IuCi0rc3RhdGljIFdFQlBfSU5MSU5FIHUxNng4IExvYWRIaTE2KGNvbnN0IHVpbnQ4X3Qq IFdFQlBfUkVTVFJJQ1Qgc3JjKSB7Ci0rICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygo dW5zaWduZWQgY2hhcikwKTsKLSsgIHVuc2lnbmVkIGNoYXIgdG1wWzE2XSA9IHswfTsKLSsgIG1l bWNweSh0bXAsIHNyYywgOCk7Ci0rICByZXR1cm4gKHUxNng4KXZlY19tZXJnZWgoemVybywgdmVj X3hsKDAsIHRtcCkpOwotK30KLSsKLSsvLyBMb2FkIDQgVS9WIGJ5dGVzLCBzaGlmdCBpbnRvIHRo ZSBoaWdoIGJ5dGUsIGFuZCByZXBsaWNhdGUgZWFjaCBzYW1wbGUuCi0rc3RhdGljIFdFQlBfSU5M SU5FIHUxNng4IExvYWRVVkhpOChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHNyYykgewot KyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7Ci0rICB1 bnNpZ25lZCBjaGFyIHRtcFsxNl0gPSB7MH07Ci0rICBtZW1jcHkodG1wLCBzcmMsIDQpOwotKyAg Y29uc3QgdTE2eDggdCA9ICh1MTZ4OCl2ZWNfbWVyZ2VoKHplcm8sIHZlY194bCgwLCB0bXApKTsK LSsgIHJldHVybiB2ZWNfbWVyZ2VoKHQsIHQpOwotK30KLSsKLStzdGF0aWMgV0VCUF9JTkxJTkUg dm9pZCBZVVY0MjBUb1JHQihjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklD VCB1LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq IFdFQlBfUkVTVFJJQ1QgdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp MTZ4OCogY29uc3QgUiwgaTE2eDgqIGNvbnN0IEcsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdTE2eDgqIGNvbnN0IEIpIHsKLSsgIENvbnZlcnRZVVY0NDRUb1JHQihMb2Fk SGkxNih5KSwgTG9hZFVWSGk4KHUpLCBMb2FkVVZIaTgodiksIFIsIEcsIEIpOwotK30KLSsKLSsv LyBQYWNrIGZvdXIgOC1sYW5lIGNoYW5uZWxzIGludG8gMzIgaW50ZXJsZWF2ZWQgYnl0ZXMgKGMw IGMxIGMyIGMzIHBlciBwaXhlbCkuCi0rc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgUGFja0FuZFN0 b3JlNChpMTZ4OCBjMCwgaTE2eDggYzEsIGkxNng4IGMyLCBpMTZ4OCBjMywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KSB7 Ci0rICBjb25zdCB1OHgxNiBjMDIgPSB2ZWNfcGFja3N1KGMwLCBjMik7Ci0rICBjb25zdCB1OHgx NiBjMTMgPSB2ZWNfcGFja3N1KGMxLCBjMyk7Ci0rICBjb25zdCB1OHgxNiBsbzggPSB2ZWNfbWVy Z2VoKGMwMiwgYzEzKTsKLSsgIGNvbnN0IHU4eDE2IGhpOCA9IHZlY19tZXJnZWwoYzAyLCBjMTMp OwotKyAgdmVjX3hzdCgodTh4MTYpdmVjX21lcmdlaCgodTE2eDgpbG84LCAodTE2eDgpaGk4KSwg MCwgZHN0KTsKLSsgIHZlY194c3QoKHU4eDE2KXZlY19tZXJnZWwoKHUxNng4KWxvOCwgKHUxNng4 KWhpOCksIDAsIGRzdCArIDE2KTsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IGkxNng4IGtBbHBoYSA9 IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0rCi0rc3RhdGljIHZv aWQgWXV2VG9SZ2JhUm93X1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RS SUNUIHYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RS SUNUIGRzdCwgaW50IGxlbikgewotKyAgaW50IG47Ci0rICBmb3IgKG4gPSAwOyBuICsgOCA8PSBs ZW47IG4gKz0gOCwgZHN0ICs9IDMyKSB7Ci0rICAgIGkxNng4IFIsIEc7IHUxNng4IEI7Ci0rICAg IFlVVjQyMFRvUkdCKHksIHUsIHYsICZSLCAmRywgJkIpOwotKyAgICBQYWNrQW5kU3RvcmU0KFIs IEcsIChpMTZ4OClCLCBrQWxwaGEsIGRzdCk7Ci0rICAgIHkgKz0gODsgdSArPSA0OyB2ICs9IDQ7 Ci0rICB9Ci0rICBmb3IgKDsgbiA8IGxlbjsgKytuKSB7Ci0rICAgIFZQOFl1dlRvUmdiYSh5WzBd LCB1WzBdLCB2WzBdLCBkc3QpOwotKyAgICBkc3QgKz0gNDsgeSArPSAxOyB1ICs9IChuICYgMSk7 IHYgKz0gKG4gJiAxKTsKLSsgIH0KLSt9Ci0rCi0rc3RhdGljIHZvaWQgWXV2VG9CZ3JhUm93X1ZT WChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCwgaW50IGxlbikg ewotKyAgaW50IG47Ci0rICBmb3IgKG4gPSAwOyBuICsgOCA8PSBsZW47IG4gKz0gOCwgZHN0ICs9 IDMyKSB7Ci0rICAgIGkxNng4IFIsIEc7IHUxNng4IEI7Ci0rICAgIFlVVjQyMFRvUkdCKHksIHUs IHYsICZSLCAmRywgJkIpOwotKyAgICBQYWNrQW5kU3RvcmU0KChpMTZ4OClCLCBHLCBSLCBrQWxw aGEsIGRzdCk7Ci0rICAgIHkgKz0gODsgdSArPSA0OyB2ICs9IDQ7Ci0rICB9Ci0rICBmb3IgKDsg biA8IGxlbjsgKytuKSB7Ci0rICAgIFZQOFl1dlRvQmdyYSh5WzBdLCB1WzBdLCB2WzBdLCBkc3Qp OwotKyAgICBkc3QgKz0gNDsgeSArPSAxOyB1ICs9IChuICYgMSk7IHYgKz0gKG4gJiAxKTsKLSsg IH0KLSt9Ci0rCi0rc3RhdGljIHZvaWQgWXV2VG9BcmdiUm93X1ZTWChjb25zdCB1aW50OF90KiBX RUJQX1JFU1RSSUNUIHksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50 OF90KiBXRUJQX1JFU1RSSUNUIHUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCwgaW50IGxlbikgewotKyAgaW50IG47Ci0rICBm b3IgKG4gPSAwOyBuICsgOCA8PSBsZW47IG4gKz0gOCwgZHN0ICs9IDMyKSB7Ci0rICAgIGkxNng4 IFIsIEc7IHUxNng4IEI7Ci0rICAgIFlVVjQyMFRvUkdCKHksIHUsIHYsICZSLCAmRywgJkIpOwot KyAgICBQYWNrQW5kU3RvcmU0KGtBbHBoYSwgUiwgRywgKGkxNng4KUIsIGRzdCk7Ci0rICAgIHkg Kz0gODsgdSArPSA0OyB2ICs9IDQ7Ci0rICB9Ci0rICBmb3IgKDsgbiA8IGxlbjsgKytuKSB7Ci0r ICAgIFZQOFl1dlRvQXJnYih5WzBdLCB1WzBdLCB2WzBdLCBkc3QpOwotKyAgICBkc3QgKz0gNDsg eSArPSAxOyB1ICs9IChuICYgMSk7IHYgKz0gKG4gJiAxKTsKLSsgIH0KLSt9Ci0rCi0rLy8gQ29u dmVydCAzMiBZVVY0NDQgcGl4ZWxzIGFuZCBzdG9yZSB0aGUgMzJiLXBlci1waXhlbCByZXN1bHQu IFVzZWQgYnkgdGhlCi0rLy8gZmFuY3kgdXBzYW1wbGVyIGluIHVwc2FtcGxpbmdfdnN4LmMuCi0r dm9pZCBWUDhZdXZUb1JnYmEzMl9WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB5LAot KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwK LSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpIHsK LSsgIGludCBuOwotKyAgZm9yIChuID0gMDsgbiA8IDMyOyBuICs9IDgsIGRzdCArPSAzMikgewot KyAgICBpMTZ4OCBSLCBHOyB1MTZ4OCBCOwotKyAgICBDb252ZXJ0WVVWNDQ0VG9SR0IoTG9hZEhp MTYoeSArIG4pLCBMb2FkSGkxNih1ICsgbiksIExvYWRIaTE2KHYgKyBuKSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICZSLCAmRywgJkIpOwotKyAgICBQYWNrQW5kU3RvcmU0KFIsIEcsIChpMTZ4 OClCLCBrQWxwaGEsIGRzdCk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgVlA4WXV2VG9CZ3JhMzJfVlNY KGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgeSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB2LAotKyAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KSB7Ci0rICBpbnQgbjsKLSsgIGZvciAobiA9 IDA7IG4gPCAzMjsgbiArPSA4LCBkc3QgKz0gMzIpIHsKLSsgICAgaTE2eDggUiwgRzsgdTE2eDgg QjsKLSsgICAgQ29udmVydFlVVjQ0NFRvUkdCKExvYWRIaTE2KHkgKyBuKSwgTG9hZEhpMTYodSAr IG4pLCBMb2FkSGkxNih2ICsgbiksCi0rICAgICAgICAgICAgICAgICAgICAgICAmUiwgJkcsICZC KTsKLSsgICAgUGFja0FuZFN0b3JlNCgoaTE2eDgpQiwgRywgUiwga0FscGhhLCBkc3QpOwotKyAg fQotK30KLSsKLSt2b2lkIFZQOFl1dlRvQXJnYjMyX1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JF U1RSSUNUIHksCi0rICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9S RVNUUklDVCB1LAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBf UkVTVFJJQ1QgdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RS SUNUIGRzdCkgewotKyAgaW50IG47Ci0rICBmb3IgKG4gPSAwOyBuIDwgMzI7IG4gKz0gOCwgZHN0 ICs9IDMyKSB7Ci0rICAgIGkxNng4IFIsIEc7IHUxNng4IEI7Ci0rICAgIENvbnZlcnRZVVY0NDRU b1JHQihMb2FkSGkxNih5ICsgbiksIExvYWRIaTE2KHUgKyBuKSwgTG9hZEhpMTYodiArIG4pLAot KyAgICAgICAgICAgICAgICAgICAgICAgJlIsICZHLCAmQik7Ci0rICAgIFBhY2tBbmRTdG9yZTQo a0FscGhhLCBSLCBHLCAoaTE2eDgpQiwgZHN0KTsKLSsgIH0KLSt9Ci0rCi0rZXh0ZXJuIHZvaWQg V2ViUEluaXRTYW1wbGVyc1ZTWCh2b2lkKTsKLSsKLStXRUJQX1RTQU5fSUdOT1JFX0ZVTkNUSU9O IHZvaWQgV2ViUEluaXRTYW1wbGVyc1ZTWCh2b2lkKSB7Ci0rICBXZWJQU2FtcGxlcnNbTU9ERV9S R0JBXSA9IFl1dlRvUmdiYVJvd19WU1g7Ci0rICBXZWJQU2FtcGxlcnNbTU9ERV9CR1JBXSA9IFl1 dlRvQmdyYVJvd19WU1g7Ci0rICBXZWJQU2FtcGxlcnNbTU9ERV9BUkdCXSA9IFl1dlRvQXJnYlJv d19WU1g7Ci0rfQotKwotKyNlbHNlICAvLyAhV0VCUF9VU0VfVlNYCi0rCi0rV0VCUF9EU1BfSU5J VF9TVFVCKFdlYlBJbml0U2FtcGxlcnNWU1gpCi0rCi0rI2VuZGlmICAvLyBXRUJQX1VTRV9WU1gK LWRpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9tb3ovY3B1LmNwcCBiL21lZGlhL2xpYndl YnAvc3JjL21vei9jcHUuY3BwCi1pbmRleCBjNjYzMzE3MGM5MjMuLjgyOTg2ZDJmNjMxZSAxMDA2 NDQKLS0tLSBhL21lZGlhL2xpYndlYnAvc3JjL21vei9jcHUuY3BwCi0rKysgYi9tZWRpYS9saWJ3 ZWJwL3NyYy9tb3ovY3B1LmNwcAotQEAgLTM1LDYgKzM1LDEwIEBAIHN0YXRpYyBpbnQgTW96Q1BV SW5mbyhDUFVGZWF0dXJlIGZlYXR1cmUpCi0gICAgIGNhc2Uga01JUFNkc3BSMjoKLSAgICAgY2Fz ZSBrTVNBOgotICAgICAgIHJldHVybiAxOwotKyNlbmRpZgotKyNpZiBkZWZpbmVkKFdFQlBfVVNF X1ZTWCkKLSsgICAgY2FzZSBrVlNYOgotKyAgICAgIHJldHVybiAxOwotICNlbmRpZgotICAgICBk ZWZhdWx0OgotICAgICAgIHJldHVybiAwOwotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAw MDMtQWRkLVBQQzY0TEUtSklULWJhY2tlbmQucGF0Y2ggYi8wMDAzLUFkZC1QUEM2NExFLUpJVC1i YWNrZW5kLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTA4YjMzLi4wMDAw MDAwCi0tLSBhLzAwMDMtQWRkLVBQQzY0TEUtSklULWJhY2tlbmQucGF0Y2gKKysrIC9kZXYvbnVs bApAQCAtMSwzODIwNSArMCwwIEBACi1Gcm9tIGM3OTkyNmU0MTc2NGM2YWE2YWU1OTY4MTJiMjNi YzM1YjQ3MDAyOGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiA9P1VURi04P3E/VHJ1 bmc9MjBMPUMzPUFBPz0gPDhAdGxlLmlkLmF1PgotRGF0ZTogRnJpLCAxMiBKdW4gMjAyNiAxNjow MjoyOCArMTAwMAotU3ViamVjdDogW1BBVENIIDMvM10gQWRkIFBQQzY0TEUgSklUIGJhY2tlbmQK LU1JTUUtVmVyc2lvbjogMS4wCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRG LTgKLUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKLQotQmFzZWQgb24gdGhlIHdvcmsg ZG9uZSBieSBDYW1lcm9uIEthaXNlciBhbmQgSnVzdGluIEhpYmJpdHMKLWh0dHBzOi8vZ2l0aHVi LmNvbS9jaG1lZWVkYWxmL2dlY2tvLWRldgotCi1Dby1hdXRob3JlZC1ieTogQ2FtZXJvbiBLYWlz ZXIgPGNsYXNzaWxsYUBmbG9vZGdhcC5jb20+Ci1Dby1hdXRob3JlZC1ieTogSnVzdGluIEhpYmJp dHMgPGNobWVlZWRhbGZAZ21haWwuY29tPgotQXNzaXN0ZWQtYnk6IExhbmNlIEFsYmVydHNvbiA8 bGFuY2VAb3N1b3NsLm9yZz4KLUFzc2lzdGVkLWJ5OiBUaHVzaGFuIEZlcm5hbmRvIDx0aHVzaGFu QHRodXNoYW5mZXJuYW5kby5jb20+Ci1Bc3Npc3RlZC1ieTogVGltb3RoeSBQZWFyc29uIDx0cGVh cnNvbkBzb2xpZHNpbGljb24uY29tPgotQXNzaXN0ZWQtYnk6IERhbiBIb3LDoWsgPGRhbkBkYW5u eS5jej4KLUFzc2lzdGVkLWJ5OiBIaeG6v3UgTMOqIDxtb2RvbG9neUBnbWFpbC5jb20+Ci1Bc3Np c3RlZC1ieTogQ2xhdWRlIEZhYmxlIDUgPG5vcmVwbHlAYW50aHJvcGljLmNvbT4KLS0tLQotIGNv bmZpZy9jaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZS5weSAgICAgICAgICB8ICAgIDIgKwotIGpz L21vei5jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzQgKy0KLSBq cy9zcmMvYnVpbHRpbi9UZXN0aW5nRnVuY3Rpb25zLmNwcCAgICAgICAgICAgfCAgIDE4ICsKLSBq cy9zcmMvaXJyZWdleHAvUmVnRXhwQVBJLmNwcCAgICAgICAgICAgICAgICAgfCAgICA1ICstCi0g Li4uL2lycmVnZXhwL1JlZ0V4cE5hdGl2ZU1hY3JvQXNzZW1ibGVyLmNwcCAgIHwgICAyOCArCi0g Li4uL3Rlc3RzL2Jhc2VsaW5lL3BwYzY0LWJyYW5jaDgtMTYtbmFycm93LmpzIHwgIDEwMyArCi0g anMvc3JjL2ppdC10ZXN0L3Rlc3RzL2djL2djcGFyYW0uanMgICAgICAgICAgIHwgICAgMyArLQot IC4uLi90ZXN0cy9pb24vbW9kLWNvbnN0YW50LXBvdzItbWludXMtb25lLmpzICB8ICAgNzggKwot IC4uLi90ZXN0cy9pb24vbW9kLXBvdzItbmVnYXRpdmUtZGl2aWRlbmQuanMgICB8ICAgNzEgKwot IC4uLi90ZXN0cy9tYXRoLW1pbi1tYXgtY29ybmVyLWNhc2VzLmpzICAgICAgICB8ICAgNTAgKwot IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2F0b21pY2l0eS5qcyAgICAgICB8ICAgIDggKy0K LSAuLi4vaml0LXRlc3QvdGVzdHMvd2FzbS9leGNlc3NpdmUtaW5saW5pbmcuanMgfCAgIDE5ICst Ci0gLi4uL2ppdC10ZXN0L3Rlc3RzL3dhc20vbWVtb3J5LW9vYi1tZXNzYWdlLmpzIHwgICAxMCAr LQotIC4uLi90ZXN0cy93YXNtL3BwYzY0LWFyZ29uMi10aWVyaW5nLmpzICAgICAgICB8ICAxMjQg KwotIC4uLi90ZXN0cy93YXNtL3BwYzY0LWNvbXBhcmUtc2VsZWN0LWJlbmNoLmpzICB8ICAgNzAg KwotIC4uLi9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWV4dG11bC1hbGlhcy5qcyB8ICAxMDcg KwotIC4uLi90ZXN0cy93YXNtL3BwYzY0LXNpbWQtdnItY2xvYmJlci5qcyAgICAgICB8ICAxNzkg KwotIGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3Byb2ZpbGluZy5qcyAgICAgICB8ICAgIDcg KwotIC4uLi93YXNtL3JlZ3Jlc3MtcHBjNjQtZXh0cmFjdC1sYW5lLWN0ei5qcyAgICB8ICAgNDkg KwotIC4uLi93YXNtL3JlZ3Jlc3MtcHBjNjQtc2VsZWN0LWNvbmRpdGlvbi5qcyAgICB8ICAgMzAg KwotIC4uLi93YXNtL3JlZ3Jlc3MtcHBjNjQtdHJhcC1leGl0LXNpbWQtc2F2ZS5qcyB8ICAgNjQg KwotIC4uLi9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJyYW5jaC5qcyAgICAgICB8ICAgIDcg KwotIC4uLi9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJyYW5jaC53YXNtICAgICB8ICBCaW4g MCAtPiAxMTQ4IGJ5dGVzCi0ganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vc2ltZC9idWcxOTQ2 NjE4LmpzIHwgICAgNyArLQotIC4uLi9qaXQtdGVzdC90ZXN0cy93YXNtL3NpbWQvaW9uLWFuYWx5 c2lzLmpzICB8ICAgIDcgKy0KLSBqcy9zcmMvaml0L0Fzc2VtYmxlci5oICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L0Jhc2VsaW5lSUMuY3BwICAgICAgICAgICAg ICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L0NhY2hlSVJDb21waWxlci5jcHAgICAgICAg ICAgICAgICAgfCAgIDE2ICsKLSBqcy9zcmMvaml0L0NvZGVHZW5lcmF0b3IuY3BwICAgICAgICAg ICAgICAgICAgfCAgICA2ICsKLSBqcy9zcmMvaml0L0NvZGVHZW5lcmF0b3IuaCAgICAgICAgICAg ICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L0VmZmVjdGl2ZUFkZHJlc3NBbmFseXNpcy5j cHAgICAgICAgfCAgICAyICstCi0ganMvc3JjL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAg ICAgICAgICAgIHwgICAxMCArLQotIGpzL3NyYy9qaXQvRmx1c2hJQ2FjaGUuY3BwICAgICAgICAg ICAgICAgICAgICB8ICAgIDMgKy0KLSBqcy9zcmMvaml0L0ZsdXNoSUNhY2hlLmggICAgICAgICAg ICAgICAgICAgICAgfCAgIDExICstCi0ganMvc3JjL2ppdC9HZW5lcmF0ZUFCSUZ1bmN0aW9uVHlw ZS5weSAgICAgICAgIHwgIDEwMCArCi0ganMvc3JjL2ppdC9KaXRDb250ZXh0LmNwcCAgICAgICAg ICAgICAgICAgICAgIHwgICAgNCArCi0ganMvc3JjL2ppdC9KaXRGcmFtZXMuY3BwICAgICAgICAg ICAgICAgICAgICAgIHwgICAxMCArCi0ganMvc3JjL2ppdC9KaXRGcmFtZXMuaCAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAxMiArLQotIGpzL3NyYy9qaXQvTElSLmNwcCAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgIDQgKy0KLSBqcy9zcmMvaml0L0xJUi5oICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDEwICstCi0ganMvc3JjL2ppdC9MSVJPcHMueWFtbCAgICAgICAg ICAgICAgICAgICAgICAgIHwgICA4MiArLQotIGpzL3NyYy9qaXQvTGFiZWwuaCAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KLSBqcy9zcmMvaml0L0xvd2VyaW5nLmNwcCAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAyICstCi0ganMvc3JjL2ppdC9Mb3dlcmluZy5oICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCi0ganMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci1p bmwuaCAgICAgICAgICAgICAgIHwgICAgMiArCi0ganMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci5j cHAgICAgICAgICAgICAgICAgIHwgICAyNSArLQotIGpzL3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXIu aCAgICAgICAgICAgICAgICAgICB8ICA2NDcgKy0KLSBqcy9zcmMvaml0L01vdmVFbWl0dGVyLmgg ICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKLSBqcy9zcmMvaml0L01vdmVSZXNvbHZlci5j cHAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsKLSBqcy9zcmMvaml0L1JlZ2lzdGVyQWxsb2Nh dG9yLmggICAgICAgICAgICAgICAgfCAgICA3ICstCi0ganMvc3JjL2ppdC9SZWdpc3RlcnMuaCAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCi0ganMvc3JjL2ppdC9TYWZlcG9pbnRzLmNw cCAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCi0ganMvc3JjL2ppdC9TaGFyZWRJQ0hlbHBl cnMtaW5sLmggICAgICAgICAgICAgIHwgICAgMiArCi0ganMvc3JjL2ppdC9TaGFyZWRJQ0hlbHBl cnMuaCAgICAgICAgICAgICAgICAgIHwgICAgMiArCi0ganMvc3JjL2ppdC9TaGFyZWRJQ1JlZ2lz dGVycy5oICAgICAgICAgICAgICAgIHwgICAgMiArCi0ganMvc3JjL2ppdC9TaW11bGF0b3IuaCAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCi0ganMvc3JjL2ppdC9tb3ouYnVpbGQgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArCi0ganMvc3JjL2ppdC9wcGM2NC9BcmNoaXRl Y3R1cmUtcHBjNjQuY3BwICAgICAgIHwgIDIyMSArCi0ganMvc3JjL2ppdC9wcGM2NC9BcmNoaXRl Y3R1cmUtcHBjNjQuaCAgICAgICAgIHwgIDU4MSArKwotIGpzL3NyYy9qaXQvcHBjNjQvQXNzZW1i bGVyLXBwYzY0LmNwcCAgICAgICAgICB8IDMwMjggKysrKysrKwotIGpzL3NyYy9qaXQvcHBjNjQv QXNzZW1ibGVyLXBwYzY0LmggICAgICAgICAgICB8IDIxMTQgKysrKysKLSBqcy9zcmMvaml0L3Bw YzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuY3BwICAgICAgfCAzNjQ3ICsrKysrKysrCi0ganMvc3Jj L2ppdC9wcGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmggICAgICAgIHwgIDEwMSArCi0ganMvc3Jj L2ppdC9wcGM2NC9MSVItcHBjNjQuaCAgICAgICAgICAgICAgICAgIHwgIDEzNSArCi0ganMvc3Jj L2ppdC9wcGM2NC9Mb3dlcmluZy1wcGM2NC5jcHAgICAgICAgICAgIHwgMTMyNCArKysKLSBqcy9z cmMvaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0LmggICAgICAgICAgICAgfCAgMTA1ICsKLSBqcy9z cmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LWlubC5oICAgfCA2MTQyICsrKysrKysr KysrKysrCi0ganMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5jcHAgICAgIHwg MzQ2NyArKysrKysrKwotIGpzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQuaCAg ICAgICB8IDIwMzEgKysrKysKLSBqcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmNw cCAgICAgICAgfCAgMzU3ICsKLSBqcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0Lmgg ICAgICAgICAgfCAgIDY0ICsKLSBqcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2 NC1pbmwuaCAgfCAgIDgzICsKLSBqcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2 NC5oICAgICAgfCAgIDk3ICsKLSBqcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDUmVnaXN0ZXJzLXBw YzY0LmggICAgfCAgIDQ2ICsKLSBqcy9zcmMvaml0L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5jcHAg ICAgICAgICAgfCA3Mjk2ICsrKysrKysrKysrKysrKysrCi0ganMvc3JjL2ppdC9wcGM2NC9TaW11 bGF0b3ItcHBjNjQuaCAgICAgICAgICAgIHwgIDU1NiArKwotIGpzL3NyYy9qaXQvcHBjNjQvVHJh bXBvbGluZS1wcGM2NC5jcHAgICAgICAgICB8ICA2NDggKysKLSBqcy9zcmMvaml0L3NoYXJlZC9B c3NlbWJsZXItc2hhcmVkLmggICAgICAgICAgfCAgICA1ICstCi0gLi4uL0F0b21pY09wZXJhdGlv bnMtZmVlbGluZy1sdWNreS1nY2MuaCAgICAgIHwgICAgMyArLQotIGpzL3NyYy9qaXQvc2hhcmVk L0NvZGVHZW5lcmF0b3Itc2hhcmVkLmNwcCAgICB8ICAgIDYgKy0KLSBqcy9zcmMvaml0L3NoYXJl ZC9Mb3dlcmluZy1zaGFyZWQtaW5sLmggICAgICAgfCAgICAyICstCi0ganMvc3JjL2pzLWNvbmZp Zy5tb3pidWlsZCAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCi0ganMvc3JjL2pzYXBpLXRl c3RzL3Rlc3RKaXRBQkljYWxscy5jcHAgICAgICAgIHwgICAgMyArCi0ganMvc3JjL2pzYXBpLXRl c3RzL3Rlc3RXYXNtUmV0dXJuQ2FsbHMuY3BwICAgIHwgICAxMCArLQotIGpzL3NyYy9qc2FwaS10 ZXN0cy90ZXN0c0ppdC5jcHAgICAgICAgICAgICAgICB8ICAgMjAgKwotIGpzL3NyYy9zaGVsbC9q cy5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKwotIGpzL3NyYy9zaGVsbC9q c3NoZWxsLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KLSBqcy9zcmMvdGVzdHMv c2hlbGwvb3MuanMgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICstCi0ganMvc3JjL3V0aWwv UG9pc29uLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCi0ganMvc3JjL3dhc20v V2FzbUFueVJlZi5oICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQotIGpzL3NyYy93YXNt L1dhc21CQ0RlZnMuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKwotIGpzL3NyYy93YXNt L1dhc21CQ01lbW9yeS5jcHAgICAgICAgICAgICAgICAgICB8ICAgNDcgKy0KLSBqcy9zcmMvd2Fz bS9XYXNtQkNSZWdEZWZzLmggICAgICAgICAgICAgICAgICAgfCAgIDEyICstCi0ganMvc3JjL3dh c20vV2FzbUJhc2VsaW5lQ29tcGlsZS5jcHAgICAgICAgICAgIHwgIDE0OCArLQotIGpzL3NyYy93 YXNtL1dhc21Db2RlZ2VuQ29uc3RhbnRzLmggICAgICAgICAgICB8ICAgIDMgKy0KLSBqcy9zcmMv d2FzbS9XYXNtQ29kZWdlblR5cGVzLmNwcCAgICAgICAgICAgICAgfCAgIDExICstCi0ganMvc3Jj L3dhc20vV2FzbUNvbXBpbGUuY3BwICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQotIGpzL3Ny Yy93YXNtL1dhc21GcmFtZUl0ZXIuY3BwICAgICAgICAgICAgICAgICB8ICAxMTggKwotIGpzL3Ny Yy93YXNtL1dhc21HQy5jcHAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKwotIGpzL3Ny Yy93YXNtL1dhc21HZW5lcmF0b3IuY3BwICAgICAgICAgICAgICAgICB8ICAgMTggKy0KLSBqcy9z cmMvd2FzbS9XYXNtSW9uQ29tcGlsZS5jcHAgICAgICAgICAgICAgICAgfCAgICAyICstCi0ganMv c3JjL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQotIGpz L3NyYy93YXNtL1dhc21TaWduYWxIYW5kbGVycy5jcHAgICAgICAgICAgICB8ICAgMjAgKy0KLSBq cy9zcmMvd2FzbS9XYXNtU3RhY2tzLmNwcCAgICAgICAgICAgICAgICAgICAgfCAgIDMxICstCi0g anMvc3JjL3dhc20vV2FzbVN0dWJzLmNwcCAgICAgICAgICAgICAgICAgICAgIHwgICA0MyArLQot IGpzL3NyYy93YXNtL1dhc21TdW1tYXJpemVJbnNuLmNwcCAgICAgICAgICAgICB8ICAxNjMgKwot IGpzL3NyYy93YXNtL1dhc21WYWx1ZS5jcHAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0K LSBtZmJ0L0Fzc2VydGlvbnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsK LSAxMDggZmlsZXMgY2hhbmdlZCwgMzQ0NDIgaW5zZXJ0aW9ucygrKSwgNDM4IGRlbGV0aW9ucygt KQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvYmFzZWxpbmUvcHBj NjQtYnJhbmNoOC0xNi1uYXJyb3cuanMKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC10 ZXN0L3Rlc3RzL2lvbi9tb2QtY29uc3RhbnQtcG93Mi1taW51cy1vbmUuanMKLSBjcmVhdGUgbW9k ZSAxMDA2NDQganMvc3JjL2ppdC10ZXN0L3Rlc3RzL2lvbi9tb2QtcG93Mi1uZWdhdGl2ZS1kaXZp ZGVuZC5qcwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvbWF0aC1t aW4tbWF4LWNvcm5lci1jYXNlcy5qcwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRl c3QvdGVzdHMvd2FzbS9wcGM2NC1hcmdvbjItdGllcmluZy5qcwotIGNyZWF0ZSBtb2RlIDEwMDY0 NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1jb21wYXJlLXNlbGVjdC1iZW5jaC5q cwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1l eHRtdWwtYWxpYXMuanMKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC10ZXN0L3Rlc3Rz L3dhc20vcHBjNjQtc2ltZC12ci1jbG9iYmVyLmpzCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3Ny Yy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MtcHBjNjQtZXh0cmFjdC1sYW5lLWN0ei5qcwot IGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBw YzY0LXNlbGVjdC1jb25kaXRpb24uanMKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC10 ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC10cmFwLWV4aXQtc2ltZC1zYXZlLmpzCi0gY3Jl YXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MvYnVnLXBw YzY0LXNpbWQtcmVkdWNlLWFuZC1icmFuY2guanMKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3Jj L2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJy YW5jaC53YXNtCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvQXJjaGl0ZWN0 dXJlLXBwYzY0LmNwcAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L0FyY2hp dGVjdHVyZS1wcGM2NC5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvQXNz ZW1ibGVyLXBwYzY0LmNwcAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L0Fz c2VtYmxlci1wcGM2NC5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvQ29k ZUdlbmVyYXRvci1wcGM2NC5jcHAKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2 NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9w cGM2NC9MSVItcHBjNjQuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L0xv d2VyaW5nLXBwYzY0LmNwcAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L0xv d2VyaW5nLXBwYzY0LmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9NYWNy b0Fzc2VtYmxlci1wcGM2NC1pbmwuaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3Bw YzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMv aml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmgKLSBjcmVhdGUgbW9kZSAxMDA2NDQganMv c3JjL2ppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5jcHAKLSBjcmVhdGUgbW9kZSAxMDA2NDQg anMvc3JjL2ppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5oCi0gY3JlYXRlIG1vZGUgMTAwNjQ0 IGpzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LWlubC5oCi0gY3JlYXRlIG1v ZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LmgKLSBjcmVh dGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ1JlZ2lzdGVycy1wcGM2NC5o Ci0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0LmNw cAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5o Ci0gY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvVHJhbXBvbGluZS1wcGM2NC5j cHAKLQotZGlmZiAtLWdpdCBhL2NvbmZpZy9jaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZS5weSBi L2NvbmZpZy9jaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZS5weQotaW5kZXggYWExYTU0MTA0ZTI2 Li5iYTczZGUzODgwOTkgMTAwNjQ0Ci0tLS0gYS9jb25maWcvY2hlY2tfbWFjcm9hc3NlbWJsZXJf c3R5bGUucHkKLSsrKyBiL2NvbmZpZy9jaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZS5weQotQEAg LTMzLDYgKzMzLDcgQEAgYWxsX2FyY2hpdGVjdHVyZV9uYW1lcyA9IHNldChbCi0gICAgICJhcm02 NCIsCi0gICAgICJsb29uZzY0IiwKLSAgICAgInJpc2N2NjQiLAotKyAgICAicHBjNjQiLAotICAg ICAid2FzbTMyIiwKLSBdKQotIGFsbF9zaGFyZWRfYXJjaGl0ZWN0dXJlX25hbWVzID0gc2V0KFsK LUBAIC00MSw2ICs0Miw3IEBAIGFsbF9zaGFyZWRfYXJjaGl0ZWN0dXJlX25hbWVzID0gc2V0KFsK LSAgICAgImFybTY0IiwKLSAgICAgImxvb25nNjQiLAotICAgICAicmlzY3Y2NCIsCi0rICAgICJw cGM2NCIsCi0gICAgICJ3YXNtMzIiLAotIF0pCi0gCi1kaWZmIC0tZ2l0IGEvanMvbW96LmNvbmZp Z3VyZSBiL2pzL21vei5jb25maWd1cmUKLWluZGV4IDI2Y2M4NTYyMjY1NC4uNTMxMGRkMDg1MDZm IDEwMDY0NAotLS0tIGEvanMvbW96LmNvbmZpZ3VyZQotKysrIGIvanMvbW96LmNvbmZpZ3VyZQot QEAgLTI2NCw2ICsyNjQsNyBAQCBkZWYgaml0X2RlZmF1bHQodGFyZ2V0LCBlbmFibGVfcG9ydGFi bGVfYmFzZWxpbmVfaW50ZXJwKToKLSAgICAgICAgICJhYXJjaDY0IiwKLSAgICAgICAgICJtaXBz NjQiLAotICAgICAgICAgImxvb25nYXJjaDY0IiwKLSsgICAgICAgICJwcGM2NCIsCi0gICAgICAg ICAicmlzY3Y2NCIsCi0gICAgICk6Ci0gICAgICAgICByZXR1cm4gVHJ1ZQotQEAgLTI4NSw3ICsy ODYsNyBAQCBkZWYgcmVwb3J0X2RlcHJlY2F0ZWQodmFsdWUpOgotICMgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIG9wdGlvbigKLSAgICAg Ii0tZW5hYmxlLXNpbXVsYXRvciIsCi0tICAgIGNob2ljZXM9KCJhcm0iLCAiYXJtNjQiLCAibWlw czY0IiwgImxvb25nNjQiLCAicmlzY3Y2NCIpLAotKyAgICBjaG9pY2VzPSgiYXJtIiwgImFybTY0 IiwgIm1pcHM2NCIsICJsb29uZzY0IiwgInJpc2N2NjQiLCAicHBjNjQiKSwKLSAgICAgbmFyZ3M9 MSwKLSAgICAgaGVscD0iRW5hYmxlIGEgSklUIGNvZGUgc2ltdWxhdG9yIGZvciB0aGUgc3BlY2lm aWVkIGFyY2hpdGVjdHVyZSIsCi0gKQotQEAgLTMwMiw3ICszMDMsNyBAQCBkZWYgc2ltdWxhdG9y KGppdF9lbmFibGVkLCBzaW11bGF0b3JfZW5hYmxlZCwgdGFyZ2V0KToKLSAgICAgICAgIGlmIHRh cmdldC5jcHUgIT0gIng4NiI6Ci0gICAgICAgICAgICAgZGllKCJUaGUgJXMgc2ltdWxhdG9yIG9u bHkgd29ya3Mgb24geDg2LiIgJSBzaW1fY3B1KQotIAotLSAgICBpZiBzaW1fY3B1IGluICgiYXJt NjQiLCAibWlwczY0IiwgImxvb25nNjQiLCAicmlzY3Y2NCIpOgotKyAgICBpZiBzaW1fY3B1IGlu ICgiYXJtNjQiLCAibWlwczY0IiwgImxvb25nNjQiLCAicmlzY3Y2NCIsICJwcGM2NCIpOgotICAg ICAgICAgaWYgdGFyZ2V0LmNwdSAhPSAieDg2XzY0IiBhbmQgdGFyZ2V0LmNwdSAhPSAiYWFyY2g2 NCI6Ci0gICAgICAgICAgICAgZGllKCJUaGUgJXMgc2ltdWxhdG9yIG9ubHkgd29ya3Mgb24geDg2 LTY0IG9yIGFybTY0LiIgJSBzaW1fY3B1KQotIAotQEAgLTMxNSwxMiArMzE2LDE0IEBAIHNldF9j b25maWcoIkpTX1NJTVVMQVRPUl9BUk02NCIsIHNpbXVsYXRvci5hcm02NCkKLSBzZXRfY29uZmln KCJKU19TSU1VTEFUT1JfTUlQUzY0Iiwgc2ltdWxhdG9yLm1pcHM2NCkKLSBzZXRfY29uZmlnKCJK U19TSU1VTEFUT1JfTE9PTkc2NCIsIHNpbXVsYXRvci5sb29uZzY0KQotIHNldF9jb25maWcoIkpT X1NJTVVMQVRPUl9SSVNDVjY0Iiwgc2ltdWxhdG9yLnJpc2N2NjQpCi0rc2V0X2NvbmZpZygiSlNf U0lNVUxBVE9SX1BQQzY0Iiwgc2ltdWxhdG9yLnBwYzY0KQotIHNldF9kZWZpbmUoIkpTX1NJTVVM QVRPUiIsIGRlcGVuZHNfaWYoc2ltdWxhdG9yKShsYW1iZGEgeDogVHJ1ZSkpCi0gc2V0X2RlZmlu ZSgiSlNfU0lNVUxBVE9SX0FSTSIsIHNpbXVsYXRvci5hcm0pCi0gc2V0X2RlZmluZSgiSlNfU0lN VUxBVE9SX0FSTTY0Iiwgc2ltdWxhdG9yLmFybTY0KQotIHNldF9kZWZpbmUoIkpTX1NJTVVMQVRP Ul9NSVBTNjQiLCBzaW11bGF0b3IubWlwczY0KQotIHNldF9kZWZpbmUoIkpTX1NJTVVMQVRPUl9M T09ORzY0Iiwgc2ltdWxhdG9yLmxvb25nNjQpCi0gc2V0X2RlZmluZSgiSlNfU0lNVUxBVE9SX1JJ U0NWNjQiLCBzaW11bGF0b3IucmlzY3Y2NCkKLStzZXRfZGVmaW5lKCJKU19TSU1VTEFUT1JfUFBD NjQiLCBzaW11bGF0b3IucHBjNjQpCi0gCi0gCi0gQGRlcGVuZHMoIi0tZW5hYmxlLWppdCIsIHNp bXVsYXRvciwgdGFyZ2V0KQotQEAgLTMzNyw2ICszNDAsOCBAQCBkZWYgaml0X2NvZGVnZW4oaml0 X2VuYWJsZWQsIHNpbXVsYXRvciwgdGFyZ2V0KToKLSAgICAgICAgIHJldHVybiBuYW1lc3BhY2Uo eDY0PVRydWUpCi0gICAgIGVsaWYgdGFyZ2V0LmNwdSA9PSAibG9vbmdhcmNoNjQiOgotICAgICAg ICAgcmV0dXJuIG5hbWVzcGFjZShsb29uZzY0PVRydWUpCi0rICAgIGVsaWYgdGFyZ2V0LmNwdSA9 PSAicHBjNjQiOgotKyAgICAgICAgcmV0dXJuIG5hbWVzcGFjZShwcGM2ND1UcnVlKQotICAgICBl bGlmIHRhcmdldC5jcHUgPT0gInJpc2N2NjQiOgotICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZShy aXNjdjY0PVRydWUpCi0gCi1AQCAtMzQ4LDYgKzM1Myw3IEBAIHNldF9jb25maWcoIkpTX0NPREVH RU5fQVJNIiwgaml0X2NvZGVnZW4uYXJtKQotIHNldF9jb25maWcoIkpTX0NPREVHRU5fQVJNNjQi LCBqaXRfY29kZWdlbi5hcm02NCkKLSBzZXRfY29uZmlnKCJKU19DT0RFR0VOX01JUFM2NCIsIGpp dF9jb2RlZ2VuLm1pcHM2NCkKLSBzZXRfY29uZmlnKCJKU19DT0RFR0VOX0xPT05HNjQiLCBqaXRf Y29kZWdlbi5sb29uZzY0KQotK3NldF9jb25maWcoIkpTX0NPREVHRU5fUFBDNjQiLCBqaXRfY29k ZWdlbi5wcGM2NCkKLSBzZXRfY29uZmlnKCJKU19DT0RFR0VOX1JJU0NWNjQiLCBqaXRfY29kZWdl bi5yaXNjdjY0KQotIHNldF9jb25maWcoIkpTX0NPREVHRU5fWDg2Iiwgaml0X2NvZGVnZW4ueDg2 KQotIHNldF9jb25maWcoIkpTX0NPREVHRU5fWDY0Iiwgaml0X2NvZGVnZW4ueDY0KQotQEAgLTM1 OCw2ICszNjQsNyBAQCBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX0FSTSIsIGppdF9jb2RlZ2VuLmFy bSkKLSBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX0FSTTY0Iiwgaml0X2NvZGVnZW4uYXJtNjQpCi0g c2V0X2RlZmluZSgiSlNfQ09ERUdFTl9NSVBTNjQiLCBqaXRfY29kZWdlbi5taXBzNjQpCi0gc2V0 X2RlZmluZSgiSlNfQ09ERUdFTl9MT09ORzY0Iiwgaml0X2NvZGVnZW4ubG9vbmc2NCkKLStzZXRf ZGVmaW5lKCJKU19DT0RFR0VOX1BQQzY0Iiwgaml0X2NvZGVnZW4ucHBjNjQpCi0gc2V0X2RlZmlu ZSgiSlNfQ09ERUdFTl9SSVNDVjY0Iiwgaml0X2NvZGVnZW4ucmlzY3Y2NCkKLSBzZXRfZGVmaW5l KCJKU19DT0RFR0VOX1g4NiIsIGppdF9jb2RlZ2VuLng4NikKLSBzZXRfZGVmaW5lKCJKU19DT0RF R0VOX1g2NCIsIGppdF9jb2RlZ2VuLng2NCkKLUBAIC03MjgsNyArNzM1LDcgQEAgZGVmIGRlZmF1 bHRfd2FzbV9qc3BpKAotICAgICAgICAgcmV0dXJuCi0gCi0gICAgIGlmIHNpbXVsYXRvcjoKLS0g ICAgICAgIHJldHVybiBzaW11bGF0b3JbMF0gaW4gKCJhcm02NCIsICJhcm0iLCAibG9vbmc2NCIs ICJtaXBzNjQiLCAicmlzY3Y2NCIpCi0rICAgICAgICByZXR1cm4gc2ltdWxhdG9yWzBdIGluICgi YXJtNjQiLCAiYXJtIiwgImxvb25nNjQiLCAibWlwczY0IiwgInBwYzY0IiwgInJpc2N2NjQiKQot IAotICAgICBpZiB0YXJnZXQuY3B1IGluICgKLSAgICAgICAgICJ4ODZfNjQiLAotQEAgLTczNyw2 ICs3NDQsNyBAQCBkZWYgZGVmYXVsdF93YXNtX2pzcGkoCi0gICAgICAgICAiYXJtIiwKLSAgICAg ICAgICJsb29uZ2FyY2g2NCIsCi0gICAgICAgICAibWlwczY0IiwKLSsgICAgICAgICJwcGM2NCIs Ci0gICAgICAgICAicmlzY3Y2NCIsCi0gICAgICk6Ci0gICAgICAgICByZXR1cm4gVHJ1ZQotQEAg LTc2OCwxMCArNzc2LDExIEBAIGRlZiB3YXNtX2pzcGkodmFsdWUsIGppdF9lbmFibGVkLCBzaW11 bGF0b3IsIG5vX2V4cGVyaW1lbnRhbCwgdGFyZ2V0KToKLSAgICAgICAgICJhcm0iLAotICAgICAg ICAgImxvb25nNjQiLAotICAgICAgICAgIm1pcHM2NCIsCi0rICAgICAgICAicHBjNjQiLAotICAg ICAgICAgInJpc2N2NjQiLAotICAgICApOgotICAgICAgICAgZGllKAotLSAgICAgICAgICAgICIt LWVuYWJsZS13YXNtLWpzcGkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGFybTY0L2FybS9sb29uZzY0 L21pcHM2NC9yaXNjdjY0IHNpbXVsYXRvcnMiCi0rICAgICAgICAgICAgIi0tZW5hYmxlLXdhc20t anNwaSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgYXJtNjQvYXJtL2xvb25nNjQvbWlwczY0L3BwYzY0 L3Jpc2N2NjQgc2ltdWxhdG9ycyIKLSAgICAgICAgICkKLSAKLSAgICAgaWYgdGFyZ2V0LmNwdSBp biAoCi1AQCAtNzgxLDEyICs3OTAsMTMgQEAgZGVmIHdhc21fanNwaSh2YWx1ZSwgaml0X2VuYWJs ZWQsIHNpbXVsYXRvciwgbm9fZXhwZXJpbWVudGFsLCB0YXJnZXQpOgotICAgICAgICAgImFybSIs Ci0gICAgICAgICAibG9vbmdhcmNoNjQiLAotICAgICAgICAgIm1pcHM2NCIsCi0rICAgICAgICAi cHBjNjQiLAotICAgICAgICAgInJpc2N2NjQiLAotICAgICApOgotICAgICAgICAgcmV0dXJuIFRy dWUKLSAKLSAgICAgZGllKAotLSAgICAgICAgIi0tZW5hYmxlLXdhc20tanNwaSBvbmx5IHBvc3Np YmxlIHdoZW4gdGFyZ2V0aW5nIHRoZSB4ODZfNjQveDg2L2FybTY0L2FybS9sb29uZ2FyY2g2NC9t aXBzNjQvcmlzY3Y2NCBqaXRzIgotKyAgICAgICAgIi0tZW5hYmxlLXdhc20tanNwaSBvbmx5IHBv c3NpYmxlIHdoZW4gdGFyZ2V0aW5nIHRoZSB4ODZfNjQveDg2L2FybTY0L2FybS9sb29uZ2FyY2g2 NC9taXBzNjQvcHBjNjQvcmlzY3Y2NCBqaXRzIgotICAgICApCi0gCi0gCi1AQCAtODIxLDEwICs4 MzEsMTAgQEAgZGVmIGRlZmF1bHRfd2FzbV9zaW1kKGppdF9lbmFibGVkLCBzaW11bGF0b3IsIHRh cmdldCk6Ci0gICAgIGlmIG5vdCBqaXRfZW5hYmxlZDoKLSAgICAgICAgIHJldHVybgotIAotLSAg ICBpZiBzaW11bGF0b3IgYW5kIChzaW11bGF0b3JbMF0gIT0gImFybTY0Iik6Ci0rICAgIGlmIHNp bXVsYXRvciBhbmQgc2ltdWxhdG9yWzBdIG5vdCBpbiAoImFybTY0IiwgInBwYzY0Iik6Ci0gICAg ICAgICByZXR1cm4KLSAKLS0gICAgaWYgdGFyZ2V0LmNwdSBpbiAoIng4Nl82NCIsICJ4ODYiLCAi YWFyY2g2NCIpOgotKyAgICBpZiB0YXJnZXQuY3B1IGluICgieDg2XzY0IiwgIng4NiIsICJhYXJj aDY0IiwgInBwYzY0Iik6Ci0gICAgICAgICByZXR1cm4gVHJ1ZQotIAotIAotQEAgLTg0OSwxMyAr ODU5LDE1IEBAIGRlZiB3YXNtX3NpbWQodmFsdWUsIGppdF9lbmFibGVkLCBzaW11bGF0b3IsIHRh cmdldCwgbm9fZXhwZXJpbWVudGFsKToKLSAgICAgaWYgbm90IGppdF9lbmFibGVkOgotICAgICAg ICAgZGllKCItLWVuYWJsZS13YXNtLXNpbWQgcmVxdWlyZXMgLS1lbmFibGUtaml0IikKLSAKLS0g ICAgaWYgc2ltdWxhdG9yIGFuZCAoc2ltdWxhdG9yWzBdICE9ICJhcm02NCIpOgotLSAgICAgICAg ZGllKCItLWVuYWJsZS13YXNtLXNpbWQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc2ltdWxhdG9ycywg ZXhjZXB0IGFybTY0IikKLSsgICAgaWYgc2ltdWxhdG9yIGFuZCBzaW11bGF0b3JbMF0gbm90IGlu ICgiYXJtNjQiLCAicHBjNjQiKToKLSsgICAgICAgIGRpZSgKLSsgICAgICAgICAgICAiLS1lbmFi bGUtd2FzbS1zaW1kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNpbXVsYXRvcnMsIGV4Y2VwdCBhcm02 NCBhbmQgcHBjNjQiCi0rICAgICAgICApCi0gCi0tICAgIGlmIHRhcmdldC5jcHUgaW4gKCJ4ODZf NjQiLCAieDg2IiwgImFhcmNoNjQiKToKLSsgICAgaWYgdGFyZ2V0LmNwdSBpbiAoIng4Nl82NCIs ICJ4ODYiLCAiYWFyY2g2NCIsICJwcGM2NCIpOgotICAgICAgICAgcmV0dXJuIFRydWUKLSAKLS0g ICAgZGllKCItLWVuYWJsZS13YXNtLXNpbWQgb25seSBwb3NzaWJsZSB3aGVuIHRhcmdldGluZyB0 aGUgeDg2XzY0L3g4Ni9hcm02NCBqaXRzIikKLSsgICAgZGllKCItLWVuYWJsZS13YXNtLXNpbWQg b25seSBwb3NzaWJsZSB3aGVuIHRhcmdldGluZyB0aGUgeDg2XzY0L3g4Ni9hcm02NC9wcGM2NCBq aXRzIikKLSAKLSAKLSBzZXRfY29uZmlnKCJFTkFCTEVfV0FTTV9TSU1EIiwgd2FzbV9zaW1kKQot ZGlmZiAtLWdpdCBhL2pzL3NyYy9idWlsdGluL1Rlc3RpbmdGdW5jdGlvbnMuY3BwIGIvanMvc3Jj L2J1aWx0aW4vVGVzdGluZ0Z1bmN0aW9ucy5jcHAKLWluZGV4IGJlOGIzZDBlMTZiNi4uMjI5MWQ1 OGRjMGExIDEwMDY0NAotLS0tIGEvanMvc3JjL2J1aWx0aW4vVGVzdGluZ0Z1bmN0aW9ucy5jcHAK LSsrKyBiL2pzL3NyYy9idWlsdGluL1Rlc3RpbmdGdW5jdGlvbnMuY3BwCi1AQCAtNDQ3LDYgKzQ0 NywxNSBAQCBzdGF0aWMgYm9vbCBHZXRCdWlsZENvbmZpZ3VyYXRpb24oSlNDb250ZXh0KiBjeCwg dW5zaWduZWQgYXJnYywgVmFsdWUqIHZwKSB7Ci0gICAgIHJldHVybiBmYWxzZTsKLSAgIH0KLSAK LSsjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAotKyAgdmFsdWUgPSBCb29sZWFuVmFsdWUodHJ1ZSk7 Ci0rI2Vsc2UKLSsgIHZhbHVlID0gQm9vbGVhblZhbHVlKGZhbHNlKTsKLSsjZW5kaWYKLSsgIGlm ICghSlNfU2V0UHJvcGVydHkoY3gsIGluZm8sICJwcGM2NCIsIHZhbHVlKSkgewotKyAgICByZXR1 cm4gZmFsc2U7Ci0rICB9Ci0rCi0gI2lmZGVmIEpTX0NPREVHRU5fTE9PTkc2NAotICAgdmFsdWUg PSBCb29sZWFuVmFsdWUodHJ1ZSk7Ci0gI2Vsc2UKLUBAIC00ODMsNiArNDkyLDE1IEBAIHN0YXRp YyBib29sIEdldEJ1aWxkQ29uZmlndXJhdGlvbihKU0NvbnRleHQqIGN4LCB1bnNpZ25lZCBhcmdj LCBWYWx1ZSogdnApIHsKLSAgICAgcmV0dXJuIGZhbHNlOwotICAgfQotIAotKyNpZmRlZiBKU19T SU1VTEFUT1JfUFBDNjQKLSsgIHZhbHVlID0gQm9vbGVhblZhbHVlKHRydWUpOwotKyNlbHNlCi0r ICB2YWx1ZSA9IEJvb2xlYW5WYWx1ZShmYWxzZSk7Ci0rI2VuZGlmCi0rICBpZiAoIUpTX1NldFBy b3BlcnR5KGN4LCBpbmZvLCAicHBjNjQtc2ltdWxhdG9yIiwgdmFsdWUpKSB7Ci0rICAgIHJldHVy biBmYWxzZTsKLSsgIH0KLSsKLSAjaWZkZWYgTU9aX0FTQU4KLSAgIHZhbHVlID0gQm9vbGVhblZh bHVlKHRydWUpOwotICNlbHNlCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2lycmVnZXhwL1JlZ0V4cEFQ SS5jcHAgYi9qcy9zcmMvaXJyZWdleHAvUmVnRXhwQVBJLmNwcAotaW5kZXggMzEwY2Q4NWM2YTIw Li4zNzc1MDk1NzRmMjggMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaXJyZWdleHAvUmVnRXhwQVBJLmNw cAotKysrIGIvanMvc3JjL2lycmVnZXhwL1JlZ0V4cEFQSS5jcHAKLUBAIC00OTUsNyArNDk1LDEw IEBAIGNsYXNzIFJlZ0V4cERlcHRoQ2hlY2sgZmluYWwgOiBwdWJsaWMgdjg6OmludGVybmFsOjpy ZWdleHA6OlZpc2l0b3IgewotIAotICAgLy8gVGhpcyBzaXplIGlzIHBpY2tlZCB0byBiZSBjb21m b3J0YWJseSBsYXJnZXIgdGhhbiBhbnkKLSAgIC8vIFJlZ0V4cCo6OlRvTm9kZSBzdGFjayBmcmFt ZS4KLS0jaWYgIWRlZmluZWQoREVCVUcpICYmICFkZWZpbmVkKE1PWl9DT0RFX0NPVkVSQUdFKQot KyNpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi0rICAvLyBQUEM2NCBFTEZ2MiBoYXMgbGFyZ2Vy IG1pbmltdW0gc3RhY2sgZnJhbWVzLgotKyAgc3RhdGljIGNvbnN0IHNpemVfdCBGUkFNRV9QQURE SU5HID0gMjU2ICogNDsKLSsjZWxpZiAhZGVmaW5lZChERUJVRykgJiYgIWRlZmluZWQoTU9aX0NP REVfQ09WRVJBR0UpCi0gICBzdGF0aWMgY29uc3Qgc2l6ZV90IEZSQU1FX1BBRERJTkcgPSAyNTY7 Ci0gI2Vsc2UKLSAgIC8vIFVzZSBhIHNsaWdodGx5IGxhcmdlciBwYWRkaW5nIGZvciBkZWJ1ZyBh bmQgY29kZSBjb3ZlcmFnZSBidWlsZHMuCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2lycmVnZXhwL1Jl Z0V4cE5hdGl2ZU1hY3JvQXNzZW1ibGVyLmNwcCBiL2pzL3NyYy9pcnJlZ2V4cC9SZWdFeHBOYXRp dmVNYWNyb0Fzc2VtYmxlci5jcHAKLWluZGV4IGFlMzUxMjI2Nzk3Yi4uYTM5NmFlYjNjNzMxIDEw MDY0NAotLS0tIGEvanMvc3JjL2lycmVnZXhwL1JlZ0V4cE5hdGl2ZU1hY3JvQXNzZW1ibGVyLmNw cAotKysrIGIvanMvc3JjL2lycmVnZXhwL1JlZ0V4cE5hdGl2ZU1hY3JvQXNzZW1ibGVyLmNwcAot QEAgLTk5MCw4ICs5OTAsMjEgQEAgdm9pZCBTTVJlZ0V4cE1hY3JvQXNzZW1ibGVyOjpDaGVja0Jh Y2t0cmFja1N0YWNrTGltaXQoKSB7Ci0gICAgICAgQWJzb2x1dGVBZGRyZXNzKGlzb2xhdGUoKS0+ cmVnZXhwX3N0YWNrKCktPmxpbWl0X2FkZHJlc3NfYWRkcmVzcygpKSwKLSAgICAgICBiYWNrdHJh Y2tfc3RhY2tfcG9pbnRlcl8sICZub19zdGFja19vdmVyZmxvdyk7Ci0gCi0rI2lmZGVmIEpTX0NP REVHRU5fUFBDNjQKLSsgIC8vIExSIG9uIFBvd2VyUEMgaXNuJ3QgYSBHUFIsIHNvIHdlIGhhdmUg dG8gZXhwbGljaXRseSBzYXZlIGl0IGJlZm9yZQotKyAgLy8gY2FsbGluZyBvciB0aGUgcmVnZXhw J3MgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBjbG9iYmVyZWQuCi0rICBtYXNtXy54c19tZmxyKHRl bXAxXyk7Ci0rICBtYXNtXy5hc19zdGR1KHRlbXAxXywgbWFzbV8uZ2V0U3RhY2tQb2ludGVyKCks IC04KTsKLSsjZW5kaWYKLSsKLSAgIG1hc21fLmNhbGwoJnN0YWNrX292ZXJmbG93X2xhYmVsXyk7 Ci0gCi0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgIG1hc21fLmFzX2xkKHRlbXAxXywgbWFz bV8uZ2V0U3RhY2tQb2ludGVyKCksIDApOwotKyAgbWFzbV8ueHNfbXRscih0ZW1wMV8pOwotKyAg bWFzbV8uYXNfYWRkaShtYXNtXy5nZXRTdGFja1BvaW50ZXIoKSwgbWFzbV8uZ2V0U3RhY2tQb2lu dGVyKCksIDgpOwotKyNlbmRpZgotKwotICAgLy8gRXhpdCB3aXRoIGFuIGV4Y2VwdGlvbiBpZiB0 aGUgY2FsbCBmYWlsZWQKLSAgIG1hc21fLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIHRl bXAwXywgdGVtcDBfLAotICAgICAgICAgICAgICAgICAgICAgICZleGl0X3dpdGhfZXhjZXB0aW9u X2xhYmVsXyk7Ci1AQCAtMTA4MCw2ICsxMDkzLDEzIEBAIHZvaWQgU01SZWdFeHBNYWNyb0Fzc2Vt Ymxlcjo6Y3JlYXRlU3RhY2tGcmFtZSgpIHsKLSAgIG1hc21fLmluaXRQc2V1ZG9TdGFja1B0cigp OwotICNlbmRpZgotIAotKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAvLyBQUEM2NCdzIGxp bmsgcmVnaXN0ZXIgaXMgYW4gU1BSLCBub3QgYSBHUFIsIHNvIGl0IGNhbm5vdCBiZSBpbmNsdWRl ZCBpbgotKyAgLy8gU2F2ZWROb25Wb2xhdGlsZVJlZ2lzdGVycy4gU2F2ZSBpdCBleHBsaWNpdGx5 IGJlZm9yZSB0aGUgZnJhbWUgcG9pbnRlcgotKyAgLy8gc28gdGhhdCBhYmlyZXQoKSdzIGJsciBj YW4gcmV0dXJuIHRvIHRoZSBjYWxsZXIgYWZ0ZXIgd2UgcmVzdG9yZSBpdC4KLSsgIG1hc21fLnB1 c2hSZXR1cm5BZGRyZXNzKCk7Ci0rI2VuZGlmCi0rCi0gICBtYXNtXy5QdXNoKGpzOjpqaXQ6OkZy YW1lUG9pbnRlcik7Ci0gICBtYXNtXy5tb3ZlU3RhY2tQdHJUbyhqczo6aml0OjpGcmFtZVBvaW50 ZXIpOwotIAotQEAgLTEzMDgsNiArMTMyOCw5IEBAIHZvaWQgU01SZWdFeHBNYWNyb0Fzc2VtYmxl cjo6ZXhpdEhhbmRsZXIoKSB7Ci0gICAvLyBQZXJmb3JtIGEgcGxhaW4gUmV0KCksIGFzIGFiaXJl dCgpIHdpbGwgbW92ZSBTUCA8LSBQU1AgYW5kIHRoYXQgaXMgd3JvbmcuCi0gICBtYXNtXy5SZXQo dml4bDo6bHIpOwotICNlbHNlCi0rIyAgaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAotKyAgbWFzbV8u cG9wUmV0dXJuQWRkcmVzcygpOwotKyMgIGVuZGlmCi0gICBtYXNtXy5hYmlyZXQoKTsKLSAjZW5k aWYKLSAKLUBAIC0xMzUxLDYgKzEzNzQsMTEgQEAgdm9pZCBTTVJlZ0V4cE1hY3JvQXNzZW1ibGVy OjpzdGFja092ZXJmbG93SGFuZGxlcigpIHsKLSAKLSAgIC8vIEFkanVzdCBmb3IgdGhlIHJldHVy biBhZGRyZXNzIG9uIHRoZSBzdGFjay4KLSAgIHNpemVfdCBmcmFtZU9mZnNldCA9IHNpemVvZih2 b2lkKik7Ci0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgIC8vIENoZWNrQmFja3RyYWNrU3Rh Y2tMaW1pdCBwdXNoZXMgTFIgYmVmb3JlIGNhbGxpbmcgdXMsIHNvIHRoZXJlJ3MgYQotKyAgLy8g c2Vjb25kIHJldHVybiBhZGRyZXNzIG9uIHRoZSBzdGFjay4KLSsgIGZyYW1lT2Zmc2V0ICs9IHNp emVvZih2b2lkKik7Ci0rI2VuZGlmCi0gCi0gICB2b2xhdGlsZVJlZ3MudGFrZVVuY2hlY2tlZCh0 ZW1wMF8pOwotICAgdm9sYXRpbGVSZWdzLnRha2VVbmNoZWNrZWQodGVtcDFfKTsKLWRpZmYgLS1n aXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvYmFzZWxpbmUvcHBjNjQtYnJhbmNoOC0xNi1uYXJy b3cuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvYmFzZWxpbmUvcHBjNjQtYnJhbmNoOC0xNi1u YXJyb3cuanMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLmZjMTA3 NGE5ZWY4YgotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL2Jhc2Vs aW5lL3BwYzY0LWJyYW5jaDgtMTYtbmFycm93LmpzCi1AQCAtMCwwICsxLDEwMyBAQAotKy8vIFJl Z3Jlc3Npb24gdGVzdCBmb3IgUFBDNjQgYnJhbmNoOC9icmFuY2gxNiB3aWR0aC1uYXJyb3dpbmcg dW5kZXIgRXF1YWwgLwotKy8vIE5vdEVxdWFsIC8gdW5zaWduZWQgY29tcGFyaXNvbnMuIFR3byBw cmlvciBidWdzOgotKy8vCi0rLy8gICAxLiBTaWduLWV4dGVuZGluZyB0aGUgbG9hZCB3aGlsZSBt b3ZlMzIoSW1tMzIpIHplcm8tZXh0ZW5kZWQgdGhlIGltbQotKy8vICAgICAgY2F1c2VkIHNwdXJp b3VzIG1pc21hdGNoIHdoZW4gdGhlIGxvYWRlZCBieXRlL2hhbGZ3b3JkIGhhZCBpdHMgaGlnaAot Ky8vICAgICAgYml0IHNldCAoZS5nLiAiw4DDgcOCIi5zdGFydHNXaXRoKCLDgMOBw4IiKSByZXR1 cm5lZCBmYWxzZSBiZWNhdXNlIGJ5dGUgMHhDMAotKy8vICAgICAgc2lnbi1leHRlbmRlZCB0byAw eEZGLi4uQzAgYnV0IHRoZSBpbW0gMHhDMCB6ZXJvLWV4dGVuZGVkIHRvIDB4MDBDMCwKLSsvLyAg ICAgIHNvIGNtcHcgb24gdGhlIGxvdyAzMiBiaXRzIHNhdyBhIG5lZ2F0aXZlIHZzIHBvc2l0aXZl IHZhbHVlKS4KLSsvLwotKy8vICAgMi4gQWx3YXlzIHplcm8tZXh0ZW5kaW5nIHRoZSBsb2FkIGJy b2tlIGBieXRlID09IEltbTMyKC0xKWAgYmVjYXVzZSAtMQotKy8vICAgICAgc2lnbi1leHRlbmRz IGluIHRoZSBpbW0gcGF0aDogdGhlIGxvYWRlZCAweDAwMDAwMEZGIGRpZG4ndCBtYXRjaCB0aGUK LSsvLyAgICAgIG1hdGVyaWFsaXplZCAweEZGRkZGRkZGLgotKy8vCi0rLy8gRml4OiBjYXN0IHRo ZSBpbW1lZGlhdGUgdG8gdWludDgvdWludDE2IChlcXVhbGl0eSArIHVuc2lnbmVkKSBvciBpbnQ4 L2ludDE2Ci0rLy8gKHNpZ25lZCByZWxhdGlvbmFsKSBzbyBib3RoIHNpZGVzIGhhdmUgbWF0Y2hp bmcgYml0IHBhdHRlcm5zIHJlZ2FyZGxlc3Mgb2YKLSsvLyBob3cgbW92ZTMyKEltbTMyKSBjaG9z ZSB0byBtYXRlcmlhbGl6ZSBpdC4gTWF0Y2ggQVJNNjQvTG9vbmdBcmNoNjQvUklTQy1WLgotKy8v Ci0rLy8gV2UgZXhlcmNpc2UgYm90aCBieXRlIGFuZCBoYWxmd29yZCBicmFuY2ggcGF0aHMgdmlh IFR5cGVkQXJyYXkgbG9hZHMgYW5kCi0rLy8gU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoIHdp dGggYSBjb25zdGFudCBzZWFyY2ggc3RyaW5nICh0aGUgb3JpZ2luYWwKLSsvLyBmYWlsaW5nIHNp dGUgbG93ZXJlZCB0byBicmFuY2gxNihOb3RFcXVhbCwgYWRkciwgSW1tMzIoMHhDMUMwKSkpLgot KwotKy8vIC0tLSBEaXJlY3QgYnl0ZS9oYWxmd29yZCBlcXVhbGl0eSB0aHJvdWdoIFR5cGVkQXJy YXkgLS0tCi0rewotKyAgbGV0IHU4ID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDB4N0YsIDB4ODAs IDB4QzAsIDB4QzEsIDB4RkUsIDB4RkZdKTsKLSsgIGxldCBpOCA9IG5ldyBJbnQ4QXJyYXkodTgu YnVmZmVyKTsKLSsgIGxldCB1MTYgPSBuZXcgVWludDE2QXJyYXkoWzB4MDAwMCwgMHg3RkZGLCAw eDgwMDAsIDB4QzFDMCwgMHhGRkZFLCAweEZGRkZdKTsKLSsgIGxldCBpMTYgPSBuZXcgSW50MTZB cnJheSh1MTYuYnVmZmVyKTsKLSsKLSsgIC8vIEZvcmNlIGJhc2VsaW5lICsgSW9uIHRvIHNwZWNp YWxpemUgdGhlIGNvbXBhcmlzb25zLgotKyAgZnVuY3Rpb24gZXFVOChhcnIsIGlkeCwgdmFsKSB7 Ci0rICAgIHJldHVybiBhcnJbaWR4XSA9PT0gdmFsOwotKyAgfQotKyAgZnVuY3Rpb24gZXFJOChh cnIsIGlkeCwgdmFsKSB7Ci0rICAgIHJldHVybiBhcnJbaWR4XSA9PT0gdmFsOwotKyAgfQotKyAg ZnVuY3Rpb24gZXFVMTYoYXJyLCBpZHgsIHZhbCkgewotKyAgICByZXR1cm4gYXJyW2lkeF0gPT09 IHZhbDsKLSsgIH0KLSsgIGZ1bmN0aW9uIGVxSTE2KGFyciwgaWR4LCB2YWwpIHsKLSsgICAgcmV0 dXJuIGFycltpZHhdID09PSB2YWw7Ci0rICB9Ci0rCi0rICBmb3IgKGxldCBpID0gMDsgaSA8IDIw MDsgaSsrKSB7Ci0rICAgIC8vIEhpZ2gtYml0LXNldCBieXRlczogYml0IHBhdHRlcm4gZXF1YWxp dHkgbXVzdCBob2xkIGJvdGggc2lnbmVkIGFuZAotKyAgICAvLyB1bnNpZ25lZCBpbnRlcnByZXRh dGlvbnMgb2YgdGhlIGltbWVkaWF0ZS4KLSsgICAgYXNzZXJ0RXEoZXFVOCh1OCwgNCwgMHhDMCks IHRydWUpOyAgIC8vIHVuc2lnbmVkIGNvbXBhcmUgMHhDMCA9PSAweEMwCi0rICAgIGFzc2VydEVx KGVxVTgodTgsIDQsIDB4QzEpLCBmYWxzZSk7Ci0rICAgIGFzc2VydEVxKGVxVTgodTgsIDcsIDB4 RkYpLCB0cnVlKTsKLSsgICAgYXNzZXJ0RXEoZXFVOCh1OCwgNywgLTEgJiAweEZGKSwgdHJ1ZSk7 ICAgLy8gMHhGRiB3cml0dGVuIGFzIC0xJjB4RkYKLSsKLSsgICAgLy8gU2lnbmVkIEludDggdmll dzogMHhGRiBpcyAtMSwgMHhDMCBpcyAtNjQuCi0rICAgIGFzc2VydEVxKGVxSTgoaTgsIDQsIC02 NCksIHRydWUpOwotKyAgICBhc3NlcnRFcShlcUk4KGk4LCA3LCAtMSksIHRydWUpOwotKyAgICBh c3NlcnRFcShlcUk4KGk4LCA0LCAtNjMpLCBmYWxzZSk7Ci0rCi0rICAgIC8vIEhhbGZ3b3JkIHZh cmlhbnRzOiB0aGUgb3JpZ2luYWwgc3RhcnRzd2l0aCBmYWlsdXJlIHBhdHRlcm4gd2FzCi0rICAg IC8vIChMYXRpbi0xIGNoYXIgMHhDMUMwKSDigJQgYSAxNi1iaXQgdmFsdWUgd2l0aCBiaXQgMTUg c2V0LgotKyAgICBhc3NlcnRFcShlcVUxNih1MTYsIDMsIDB4QzFDMCksIHRydWUpOwotKyAgICBh c3NlcnRFcShlcVUxNih1MTYsIDMsIDB4QzFDMSksIGZhbHNlKTsKLSsgICAgYXNzZXJ0RXEoZXFV MTYodTE2LCA1LCAweEZGRkYpLCB0cnVlKTsKLSsgICAgYXNzZXJ0RXEoZXFVMTYodTE2LCA1LCAt MSAmIDB4RkZGRiksIHRydWUpOwotKwotKyAgICBhc3NlcnRFcShlcUkxNihpMTYsIDMsIC0xNTkz NiksIHRydWUpOyAgLy8gMHhDMUMwIGFzIGkxNiA9IC0xNTkzNgotKyAgICBhc3NlcnRFcShlcUkx NihpMTYsIDUsIC0xKSwgdHJ1ZSk7Ci0rICAgIGFzc2VydEVxKGVxSTE2KGkxNiwgNSwgLTIpLCBm YWxzZSk7Ci0rICB9Ci0rfQotKwotKy8vIC0tLSBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgg d2l0aCBhIExhdGluLTEgY29uc3RhbnQgc2VhcmNoIC0tLQotKy8vIFRoaXMgd2FzIHRoZSBvcmln aW5hbCBmYWlsaW5nIHNpdGUg4oCUIElvbiBsb3dlcnMgYSBjb25zdGFudCBzZWFyY2ggc3RyaW5n Ci0rLy8gb2YgbGVuZ3RoIDEuLjMyIGludG8gYSBzZXF1ZW5jZSBvZiBieXRlLXdpc2UgY29tcGFy aXNvbnMuCi0rewotKyAgbGV0IHMgPSAiw4DDgcOCIjsgIC8vIExhdGluLTEgbGVuZ3RoIDMsIGJ5 dGVzIDB4QzAgMHhDMSAweEMyIChhbGwgaGlnaC1iaXQgc2V0KQotKyAgZnVuY3Rpb24gY2hlY2so KSB7Ci0rICAgIHJldHVybiBzLnN0YXJ0c1dpdGgoIsOAw4HDgiIpOwotKyAgfQotKyAgZm9yIChs ZXQgaSA9IDA7IGkgPCAyMDA7IGkrKykgewotKyAgICBhc3NlcnRFcShjaGVjaygpLCB0cnVlKTsK LSsgIH0KLSsKLSsgIC8vIE1pc21hdGNoIG9uIGEgc2luZ2xlIGhpZ2gtYml0IGJ5dGUgbXVzdCBy ZXBvcnQgbm90LWVxdWFsLgotKyAgbGV0IHMyID0gIsOAw4HDgyI7ICAvLyBsYXN0IGJ5dGUgMHhD MyBpbnN0ZWFkIG9mIDB4QzIKLSsgIGZ1bmN0aW9uIGNoZWNrMigpIHsKLSsgICAgcmV0dXJuIHMy LnN0YXJ0c1dpdGgoIsOAw4HDgiIpOwotKyAgfQotKyAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDA7 IGkrKykgewotKyAgICBhc3NlcnRFcShjaGVjazIoKSwgZmFsc2UpOwotKyAgfQotK30KLSsKLSsv LyAtLS0gU2lnbmVkIHJlbGF0aW9uYWwgY29tcGFyaXNvbnMgc3RpbGwgd29yayAod2Uga2VwdCB0 aGUgc2lnbi1leHRlbmQgcGF0aCkgLS0tCi0rewotKyAgbGV0IGk4ID0gbmV3IEludDhBcnJheShb MHg3RiwgLTEsIC0xMjgsIDEsIDBdKTsKLSsgIGZ1bmN0aW9uIGx0WmVybyhpZHgpIHsKLSsgICAg cmV0dXJuIGk4W2lkeF0gPCAwOwotKyAgfQotKyAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDA7IGkr KykgewotKyAgICBhc3NlcnRFcShsdFplcm8oMCksIGZhbHNlKTsgIC8vIDB4N0YgPSArMTI3Ci0r ICAgIGFzc2VydEVxKGx0WmVybygxKSwgdHJ1ZSk7ICAgLy8gLTEKLSsgICAgYXNzZXJ0RXEobHRa ZXJvKDIpLCB0cnVlKTsgICAvLyAtMTI4Ci0rICAgIGFzc2VydEVxKGx0WmVybygzKSwgZmFsc2Up OyAgLy8gMQotKyAgfQotK30KLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvZ2Mv Z2NwYXJhbS5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9nYy9nY3BhcmFtLmpzCi1pbmRleCA1 MWQ1ODY2MjE5M2YuLjQ4ZTVhOTdjMTM1ZiAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQtdGVzdC90 ZXN0cy9nYy9nY3BhcmFtLmpzCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvZ2MvZ2NwYXJh bS5qcwotQEAgLTMwLDcgKzMwLDggQEAgdGVzdEdldFBhcmFtKCJjaHVua0J5dGVzIik7Ci0gdGVz dEdldFBhcmFtKCJoZWxwZXJUaHJlYWRDb3VudCIpOwotIAotIHRlc3RDaGFuZ2VQYXJhbSgibWF4 Qnl0ZXMiKTsKLS10ZXN0Q2hhbmdlUGFyYW0oIm1pbk51cnNlcnlCeXRlcyIsIDE2ICogMTAyNCk7 Ci0rdmFyIHBhZ2VTaXplID0gZ2NwYXJhbSgic3lzdGVtUGFnZVNpemVLQiIpICogMTAyNDsKLSt0 ZXN0Q2hhbmdlUGFyYW0oIm1pbk51cnNlcnlCeXRlcyIsIHBhZ2VTaXplKTsKLSB0ZXN0Q2hhbmdl UGFyYW0oIm1heE51cnNlcnlCeXRlcyIsIDEwMjQgKiAxMDI0KTsKLSB0ZXN0Q2hhbmdlUGFyYW0o ImluY3JlbWVudGFsR0NFbmFibGVkIik7Ci0gdGVzdENoYW5nZVBhcmFtKCJwZXJab25lR0NFbmFi bGVkIik7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL2lvbi9tb2QtY29uc3Rh bnQtcG93Mi1taW51cy1vbmUuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvaW9uL21vZC1jb25z dGFudC1wb3cyLW1pbnVzLW9uZS5qcwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAw MDAwMDAwMC4uOTAyOGY1NTg3YzY1Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0LXRl c3QvdGVzdHMvaW9uL21vZC1jb25zdGFudC1wb3cyLW1pbnVzLW9uZS5qcwotQEAgLTAsMCArMSw3 OCBAQAotKy8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBQUEM2NCBJb24gbWlzY29tcGlsZSBvZiBp bnRlZ2VyIG1vZHVsbyBieSBhCi0rLy8gY29uc3RhbnQgb2YgdGhlIGZvcm0gMl5uIC0gMSAoZS5n LiA2NTUzNSkuCi0rLy8KLSsvLyBsb3dlck1vZEkgcm91dGVzIGB4ICUgKDJebiAtIDEpYCB0byBM TW9kTWFza0ksIHdob3NlIGNvZGVnZW4KLSsvLyAobWFfbW9kX21hc2spIG1hdGVyaWFsaXplZCB0 aGUgbWFzayAyXm4gLSAxIHdpdGggeHNfbGkoKS4geHNfbGkgdGFrZXMgYQotKy8vIHNpZ25lZCBp bnQxNl90LCBzbyBhIG1hc2sgb2YgMHhGRkZGIHdhcyB0cnVuY2F0ZWQgdG8gLTEsIGNvcnJ1cHRp bmcgdGhlCi0rLy8gZGlnaXQtc3VtbWluZyByZWR1Y3Rpb24uIFRoZSBidWcgb25seSBhZmZlY3Rl ZCBtYXNrcyB0aGF0IGRvIG5vdCBmaXQgaW4gYQotKy8vIHNpZ25lZCAxNi1iaXQgaW1tZWRpYXRl LCBpLmUuIGRpdmlzb3JzID49IDY1NTM1IChuID49IDE2KTsgc21hbGxlcgotKy8vIDJebiAtIDEg ZGl2aXNvcnMgc3VjaCBhcyAyNTUgd2VyZSB1bmFmZmVjdGVkLgotKy8vCi0rLy8gVGhlIHJlZmVy ZW5jZSB1c2VzIGEgbm9uLWNvbnN0YW50IGRpdmlzb3IsIHdoaWNoIGxvd2VycyB0byB0aGUKLSsv LyBoYXJkd2FyZS1kaXZpZGUgbW9kdWxvIHBhdGggKExNb2RJKSBhbmQgaXMgdGhlcmVmb3JlIGlu ZGVwZW5kZW50IG9mIHRoZQotKy8vIExNb2RNYXNrSSBjb2RlZ2VuIHVuZGVyIHRlc3QuCi0rCi0r ZnVuY3Rpb24gcmVmbW9kKHgsIGQpIHsKLSsgIC8vIGQgaXMgbm90IGEgY29uc3RhbnQgaGVyZSAt PiBkaXZpZGUtYmFzZWQgbW9kdWxvLCBub3QgTE1vZE1hc2tJLgotKyAgcmV0dXJuICh4ICUgZCkg fCAwOwotK30KLSsKLSsvLyBPbmUgZnVuY3Rpb24gcGVyIGNvbnN0YW50IGRpdmlzb3Igc28gdGhl IGRpdmlzb3IgaXMgYSBsaXRlcmFsIGFuZCB0aGUKLSsvLyBMTW9kTWFza0kgcGF0aCBpcyBzZWxl Y3RlZC4KLStmdW5jdGlvbiBtb2QyNTUoeCkgeyByZXR1cm4gKHggJSAyNTUpIHwgMDsgfQotK2Z1 bmN0aW9uIG1vZDMyNzY3KHgpIHsgcmV0dXJuICh4ICUgMzI3NjcpIHwgMDsgfQotK2Z1bmN0aW9u IG1vZDY1NTM1KHgpIHsgcmV0dXJuICh4ICUgNjU1MzUpIHwgMDsgfQotK2Z1bmN0aW9uIG1vZDEz MTA3MSh4KSB7IHJldHVybiAoeCAlIDEzMTA3MSkgfCAwOyB9Ci0rZnVuY3Rpb24gbW9kMTA0ODU3 NSh4KSB7IHJldHVybiAoeCAlIDEwNDg1NzUpIHwgMDsgfQotKwotK2NvbnN0IGNhc2VzID0gWwot KyAgW21vZDI1NSwgMjU1XSwKLSsgIFttb2QzMjc2NywgMzI3NjddLAotKyAgW21vZDY1NTM1LCA2 NTUzNV0sCi0rICBbbW9kMTMxMDcxLCAxMzEwNzFdLAotKyAgW21vZDEwNDg1NzUsIDEwNDg1NzVd LAotK107Ci0rCi0rLy8gSW5wdXRzIHNwYW5uaW5nIHNtYWxsIHZhbHVlcywgdmFsdWVzIHdpdGgg Yml0cyBhYm92ZSB0aGUgbWFzayB3aWR0aAotKy8vIChzbyB0aGUgbXVsdGktZGlnaXQgcmVkdWN0 aW9uIGlzIGV4ZXJjaXNlZCksIGFuZCBuZWdhdGl2ZXMuCi0rY29uc3QgaW5wdXRzID0gW107Ci0r Zm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0rICBpbnB1dHMucHVzaChNYXRoLmltdWwo aSwgMjY1NDQzNTc2MSkgfCAwKTsKLSsgIGlucHV0cy5wdXNoKChpICogNjU1MzUgKyBpKSB8IDAp OwotKyAgaW5wdXRzLnB1c2goKGkgKiAxMzEwNzEgLSA3KSB8IDApOwotKyAgaW5wdXRzLnB1c2go LU1hdGguaW11bChpLCA0MDUwMykgfCAwKTsKLSt9Ci0raW5wdXRzLnB1c2goMCwgMSwgLTEsIDY1 NTM0LCA2NTUzNSwgNjU1MzYsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKTsKLSsKLSsvLyBXYXJt IHVwIHRocm91Z2ggdGhlIHRpZXJzLCB0aGVuIGFzc2VydCBlYWNoIGNvbnN0YW50LWRpdmlzb3Ig cmVzdWx0Ci0rLy8gbWF0Y2hlcyB0aGUgZGl2aWRlLWJhc2VkIHJlZmVyZW5jZS4KLStmb3IgKGxl dCBpdGVyID0gMDsgaXRlciA8IDIwMDA7IGl0ZXIrKykgewotKyAgZm9yIChjb25zdCBbZm4sIGRd IG9mIGNhc2VzKSB7Ci0rICAgIGZvciAoY29uc3QgeCBvZiBpbnB1dHMpIHsKLSsgICAgICBhc3Nl cnRFcShmbih4KSwgcmVmbW9kKHgsIGQpKTsKLSsgICAgfQotKyAgfQotK30KLSsKLSsvLyBSZWdp c3Rlci1wcmVzc3VyZSB2YXJpYW50OiBtaXJyb3JzIHRoZSBzaGFwZSB0aGF0IGV4cG9zZWQgdGhl IGJ1ZyAobWFueQotKy8vIGxpdmUgbG9jYWxzIGZvcmNpbmcgdGhlIG1hc2sgbWF0ZXJpYWxpemF0 aW9uIHRvIGludGVyYWN0IHdpdGggc3BpbGxzKS4KLStmdW5jdGlvbiBwcmVzc3VyZShidWYsIGkp IHsKLSsgIGxldCB2MCA9IGksIHYxID0gaSArIDEsIHYyID0gaSArIDIsIHYzID0gaSArIDMsIHY0 ID0gaSArIDQsIHY1ID0gaSArIDU7Ci0rICBsZXQgdjYgPSBpICsgNiwgdjcgPSBpICsgNywgdjgg PSBpICsgOCwgdjkgPSBpICsgOSwgdjEwID0gaSArIDEwLCB2MTEgPSBpICsgMTE7Ci0rICBsZXQg djEyID0gaSArIDEyLCB2MTMgPSBpICsgMTMsIHYxNCA9IGkgKyAxNCwgdjE1ID0gaSArIDE1Owot KyAgY29uc3QgciA9IChidWZbaSAmIDYzXSAlIDY1NTM1KSB8IDA7Ci0rICAvLyBLZWVwIGV2ZXJ5 IGxvY2FsIGxpdmUgdG8gdGhlIHJldHVybiB3aXRob3V0IGFsdGVyaW5nIHIuCi0rICBjb25zdCBs aXZlID0gKHYwIF4gdjEgXiB2MiBeIHYzIF4gdjQgXiB2NSBeIHY2IF4gdjcgXgotKyAgICAgICAg ICAgICAgICB2OCBeIHY5IF4gdjEwIF4gdjExIF4gdjEyIF4gdjEzIF4gdjE0IF4gdjE1KSAmIDA7 Ci0rICByZXR1cm4gciArIGxpdmU7Ci0rfQotKwotK2NvbnN0IGJ1ZiA9IG5ldyBJbnQzMkFycmF5 KDY0KTsKLStmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykgewotKyAgYnVmW2ld ID0gTWF0aC5pbXVsKGksIDI2NTQ0MzU3NjEpIHwgMDsKLSt9Ci0rZm9yIChsZXQgaXRlciA9IDA7 IGl0ZXIgPCA1MDAwOyBpdGVyKyspIHsKLSsgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykg ewotKyAgICBhc3NlcnRFcShwcmVzc3VyZShidWYsIGkpLCByZWZtb2QoYnVmW2kgJiA2M10sIDY1 NTM1KSk7Ci0rICB9Ci0rfQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9pb24v bW9kLXBvdzItbmVnYXRpdmUtZGl2aWRlbmQuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvaW9u L21vZC1wb3cyLW5lZ2F0aXZlLWRpdmlkZW5kLmpzCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5k ZXggMDAwMDAwMDAwMDAwLi45OTA1Y2M0YThmMzYKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3Ny Yy9qaXQtdGVzdC90ZXN0cy9pb24vbW9kLXBvdzItbmVnYXRpdmUtZGl2aWRlbmQuanMKLUBAIC0w LDAgKzEsNzEgQEAKLSsvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIGEgUFBDNjQgSW9uIG1pc2NvbXBp bGUgb2YgaW50ZWdlciBtb2R1bG8gYnkgYSBjb25zdGFudAotKy8vIHBvd2VyIG9mIHR3byAoZS5n LiA2NTUzNikgd2l0aCBhIG5lZ2F0aXZlIGRpdmlkZW5kLgotKy8vCi0rLy8gbG93ZXJNb2RJIHJv dXRlcyBgeCAlIDJebmAgdG8gTE1vZFBvd1R3b0ksIHdob3NlIGNvZGVnZW4gdGVzdGVkIHRoZSBz aWduIG9mCi0rLy8gdGhlIGRpdmlkZW5kIHdpdGggYnJhbmNoUHRyIChhIDY0LWJpdCBjb21wYXJl KS4gV2hlbiB0aGUgaW50MzIgZGl2aWRlbmQgd2FzCi0rLy8gaGVsZCB6ZXJvLWV4dGVuZGVkIGlu IGl0cyByZWdpc3RlciwgdGhlIDY0LWJpdCB0ZXN0IG1pc2NsYXNzaWZpZWQgYSBuZWdhdGl2ZQot Ky8vIHZhbHVlIGFzIG5vbi1uZWdhdGl2ZSBhbmQgdG9vayB0aGUgdW5tYXNrZWQgcG9zaXRpdmUg cGF0aCwgcmV0dXJuaW5nCi0rLy8gYHggJiAoMl5uIC0gMSlgIGluc3RlYWQgb2YgdGhlIGNvcnJl Y3QgKG5lZ2F0aXZlKSBgeCAlIDJebmAuIEZpeGVkIGJ5IHVzaW5nIGEKLSsvLyAzMi1iaXQgc2ln biB0ZXN0IChicmFuY2gzMikuCi0rLy8KLSsvLyBUaGUgcmVmZXJlbmNlIHVzZXMgYSBub24tY29u c3RhbnQgZGl2aXNvciwgd2hpY2ggbG93ZXJzIHRvIHRoZSBkaXZpZGUtYmFzZWQKLSsvLyBtb2R1 bG8gcGF0aCAoTE1vZEkpLCBpbmRlcGVuZGVudCBvZiBMTW9kUG93VHdvSS4KLSsKLStmdW5jdGlv biByZWZtb2QoeCwgZCkgewotKyAgcmV0dXJuICh4ICUgZCkgfCAwOwotK30KLSsKLStmdW5jdGlv biBtb2QyNTYoeCkgeyByZXR1cm4gKHggJSAyNTYpIHwgMDsgfQotK2Z1bmN0aW9uIG1vZDEwMjQo eCkgeyByZXR1cm4gKHggJSAxMDI0KSB8IDA7IH0KLStmdW5jdGlvbiBtb2Q0MDk2KHgpIHsgcmV0 dXJuICh4ICUgNDA5NikgfCAwOyB9Ci0rZnVuY3Rpb24gbW9kNjU1MzYoeCkgeyByZXR1cm4gKHgg JSA2NTUzNikgfCAwOyB9Ci0rZnVuY3Rpb24gbW9kMTA0ODU3Nih4KSB7IHJldHVybiAoeCAlIDEw NDg1NzYpIHwgMDsgfQotK2Z1bmN0aW9uIG1vZDEwNzM3NDE4MjQoeCkgeyByZXR1cm4gKHggJSAx MDczNzQxODI0KSB8IDA7IH0KLSsKLStjb25zdCBjYXNlcyA9IFsKLSsgIFttb2QyNTYsIDI1Nl0s Ci0rICBbbW9kMTAyNCwgMTAyNF0sCi0rICBbbW9kNDA5NiwgNDA5Nl0sCi0rICBbbW9kNjU1MzYs IDY1NTM2XSwKLSsgIFttb2QxMDQ4NTc2LCAxMDQ4NTc2XSwKLSsgIFttb2QxMDczNzQxODI0LCAx MDczNzQxODI0XSwKLStdOwotKwotKy8vIEhlYXZ5IG9uIG5lZ2F0aXZlIGRpdmlkZW5kcyAodGhl IGJyb2tlbiBwYXRoKSwgcGx1cyBib3VuZGFyeSB2YWx1ZXMuCi0rY29uc3QgaW5wdXRzID0gW107 Ci0rZm9yIChsZXQgaSA9IDE7IGkgPD0gNjQ7IGkrKykgewotKyAgaW5wdXRzLnB1c2goLU1hdGgu aW11bChpLCAyNjU0NDM1NzYxKSB8IDApOwotKyAgaW5wdXRzLnB1c2goLShpICogMTY4KSk7Ci0r ICBpbnB1dHMucHVzaCgtKGkgKiA3MDAwMSkpOwotKyAgaW5wdXRzLnB1c2goTWF0aC5pbXVsKGks IDQwNTAzKSB8IDApOwotK30KLStpbnB1dHMucHVzaCgwLCAtMSwgMSwgLTE2OCwgLTY1NTM1LCAt NjU1MzYsIC02NTUzNywgMTY4LAotKyAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAw LCAtMHg3ZmZmZmZmZik7Ci0rCi0rZm9yIChsZXQgaXRlciA9IDA7IGl0ZXIgPCAzMDAwOyBpdGVy KyspIHsKLSsgIGZvciAoY29uc3QgW2ZuLCBkXSBvZiBjYXNlcykgewotKyAgICBmb3IgKGNvbnN0 IHggb2YgaW5wdXRzKSB7Ci0rICAgICAgYXNzZXJ0RXEoZm4oeCksIHJlZm1vZCh4LCBkKSk7Ci0r ICAgIH0KLSsgIH0KLSt9Ci0rCi0rLy8gUmVnaXN0ZXItcHJlc3N1cmUgdmFyaWFudDogYSBuZWdh dGl2ZSBkaXZpZGVuZCBwcm9kdWNlZCBhdCBydW50aW1lCi0rLy8gKGZsb2F0LT5pbnQpIHdpdGgg bWFueSBsaXZlIGxvY2FscywgbWlycm9yaW5nIHRoZSBzaGFwZSB0aGF0IGV4cG9zZWQgdGhlIGJ1 Zy4KLStmdW5jdGlvbiBwcmVzc3VyZShzZWVkKSB7Ci0rICBsZXQgdjAgPSBzZWVkLCB2MSA9IHNl ZWQgKyAxLCB2MiA9IHNlZWQgKyAyLCB2MyA9IHNlZWQgKyAzLCB2NCA9IHNlZWQgKyA0OwotKyAg bGV0IHY1ID0gc2VlZCArIDUsIHY2ID0gc2VlZCArIDYsIHY3ID0gc2VlZCArIDcsIHY4ID0gc2Vl ZCArIDgsIHY5ID0gc2VlZCArIDk7Ci0rICBsZXQgdjEwID0gc2VlZCArIDEwLCB2MTEgPSBzZWVk ICsgMTEsIHYxMiA9IHNlZWQgKyAxMiwgdjEzID0gc2VlZCArIDEzOwotKyAgbGV0IGQwID0gc2Vl ZCAqIDAuNSwgZDEgPSBzZWVkICogMS41LCBkMiA9IC1zZWVkICogMi41OwotKyAgY29uc3QgbmVn ID0gKE1hdGguZnJvdW5kKC0oTWF0aC5hYnMoc2VlZCkgKyAwLjcpKSB8IDApOwotKyAgY29uc3Qg ciA9IChuZWcgJSA2NTUzNikgfCAwOwotKyAgY29uc3QgbGl2ZSA9ICh2MCBeIHYxIF4gdjIgXiB2 MyBeIHY0IF4gdjUgXiB2NiBeIHY3IF4gdjggXiB2OSBeCi0rICAgICAgICAgICAgICAgIHYxMCBe IHYxMSBeIHYxMiBeIHYxMyBeIChkMCB8IDApIF4gKGQxIHwgMCkgXiAoZDIgfCAwKSkgJiAwOwot KyAgcmV0dXJuIHIgKyBsaXZlOwotK30KLStmb3IgKGxldCBpdGVyID0gMDsgaXRlciA8IDUwMDA7 IGl0ZXIrKykgewotKyAgZm9yIChsZXQgcyA9IDE7IHMgPD0gMjAwOyBzKyspIHsKLSsgICAgY29u c3QgZXhwZWN0ID0gKChNYXRoLmZyb3VuZCgtKHMgKyAwLjcpKSB8IDApICUgNjU1MzYpIHwgMDsK LSsgICAgYXNzZXJ0RXEocHJlc3N1cmUocyksIGV4cGVjdCk7Ci0rICB9Ci0rfQotZGlmZiAtLWdp dCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9tYXRoLW1pbi1tYXgtY29ybmVyLWNhc2VzLmpzIGIv anMvc3JjL2ppdC10ZXN0L3Rlc3RzL21hdGgtbWluLW1heC1jb3JuZXItY2FzZXMuanMKLW5ldyBm aWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLjdhYzJjNTljYWVmZgotLS0tIC9k ZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL21hdGgtbWluLW1heC1jb3JuZXIt Y2FzZXMuanMKLUBAIC0wLDAgKzEsNTAgQEAKLSsvLyBNYXRoLm1pbiAvIE1hdGgubWF4IGNvcm5l ciBjYXNlcy4gRXhlcmNpc2VzIHRoZSBQT1dFUjkgeHNtaW5qZHAgLwotKy8vIHhzbWF4amRwIEot Zm9ybSBmYXN0IHBhdGggb24gUFBDNjQgKGFuZCB0aGUgZmNtcHUvYnJhbmNoIGZhbGxiYWNrIG9u Ci0rLy8gUE9XRVI4IGZvcmNlZCk7IG90aGVyIGJhY2tlbmRzIGFscmVhZHkgY292ZXIgdGhpcyB2 aWEgc2hhcmVkIGZwIHRlc3RzCi0rLy8gYnV0IHRoZSB0cnV0aCB0YWJsZSBpcyBzbWFsbCBhbmQg d29ydGggcGlubmluZyBleHBsaWNpdGx5LgotKy8vCi0rLy8gSlMgc2VtYW50aWNzIChFQ01BLTI2 Mik6Ci0rLy8gICAtIE1hdGgubWF4KC0wLCArMCkgPT09ICswOyBNYXRoLm1pbigtMCwgKzApID09 PSAtMAotKy8vICAgLSBNYXRoLm1heCgtMCwgLTApID09PSAtMDsgTWF0aC5taW4oKzAsICswKSA9 PT0gKzAKLSsvLyAgIC0gQW55IE5hTiBvcGVyYW5kIOKGkiBOYU4KLSsvLyAgIC0gwrFJbmYgYW5k IG9yZGluYXJ5IG51bWVyaWNzIGJ5IHZhbHVlCi0rCi0rZnVuY3Rpb24gb2JqZWN0SXNQb3NpdGl2 ZVplcm8odikgewotKyAgcmV0dXJuIHYgPT09IDAgJiYgT2JqZWN0LmlzKHYsIDApOwotK30KLStm dW5jdGlvbiBvYmplY3RJc05lZ2F0aXZlWmVybyh2KSB7Ci0rICByZXR1cm4gdiA9PT0gMCAmJiBP YmplY3QuaXModiwgLTApOwotK30KLSsKLSsvLyBEaXJlY3QgY2FsbHMg4oCUIHRoZXNlIGdldCBp bmxpbmVkIGJ5IElvbiBhcyBNTWluTWF4IGludHJpbnNpY3MsIHdoaWNoCi0rLy8gZW1pdCB0aGUg cmVsZXZhbnQgbWluL21heCBoZWxwZXIuCi0rZnVuY3Rpb24gY2hlY2soKSB7Ci0rICAvLyBNYXgg Y29ybmVyIGNhc2VzLgotKyAgYXNzZXJ0RXEob2JqZWN0SXNQb3NpdGl2ZVplcm8oTWF0aC5tYXgo LTAsICswKSksIHRydWUpOwotKyAgYXNzZXJ0RXEob2JqZWN0SXNQb3NpdGl2ZVplcm8oTWF0aC5t YXgoKzAsIC0wKSksIHRydWUpOwotKyAgYXNzZXJ0RXEob2JqZWN0SXNOZWdhdGl2ZVplcm8oTWF0 aC5tYXgoLTAsIC0wKSksIHRydWUpOwotKyAgYXNzZXJ0RXEob2JqZWN0SXNQb3NpdGl2ZVplcm8o TWF0aC5tYXgoKzAsICswKSksIHRydWUpOwotKyAgYXNzZXJ0RXEoTnVtYmVyLmlzTmFOKE1hdGgu bWF4KE5hTiwgNSkpLCB0cnVlKTsKLSsgIGFzc2VydEVxKE51bWJlci5pc05hTihNYXRoLm1heCg1 LCBOYU4pKSwgdHJ1ZSk7Ci0rICBhc3NlcnRFcShOdW1iZXIuaXNOYU4oTWF0aC5tYXgoTmFOLCBO YU4pKSwgdHJ1ZSk7Ci0rICBhc3NlcnRFcShNYXRoLm1heCgtSW5maW5pdHksIDUpLCA1KTsKLSsg IGFzc2VydEVxKE1hdGgubWF4KEluZmluaXR5LCA1KSwgSW5maW5pdHkpOwotKyAgYXNzZXJ0RXEo TWF0aC5tYXgoMSwgMiksIDIpOwotKyAgYXNzZXJ0RXEoTWF0aC5tYXgoLTEsIC0yKSwgLTEpOwot KyAgYXNzZXJ0RXEoTWF0aC5tYXgoMS41LCAyLjUpLCAyLjUpOwotKwotKyAgLy8gTWluIGNvcm5l ciBjYXNlcy4KLSsgIGFzc2VydEVxKG9iamVjdElzTmVnYXRpdmVaZXJvKE1hdGgubWluKC0wLCAr MCkpLCB0cnVlKTsKLSsgIGFzc2VydEVxKG9iamVjdElzTmVnYXRpdmVaZXJvKE1hdGgubWluKCsw LCAtMCkpLCB0cnVlKTsKLSsgIGFzc2VydEVxKG9iamVjdElzTmVnYXRpdmVaZXJvKE1hdGgubWlu KC0wLCAtMCkpLCB0cnVlKTsKLSsgIGFzc2VydEVxKG9iamVjdElzUG9zaXRpdmVaZXJvKE1hdGgu bWluKCswLCArMCkpLCB0cnVlKTsKLSsgIGFzc2VydEVxKE51bWJlci5pc05hTihNYXRoLm1pbihO YU4sIDUpKSwgdHJ1ZSk7Ci0rICBhc3NlcnRFcShOdW1iZXIuaXNOYU4oTWF0aC5taW4oNSwgTmFO KSksIHRydWUpOwotKyAgYXNzZXJ0RXEoTWF0aC5taW4oLUluZmluaXR5LCA1KSwgLUluZmluaXR5 KTsKLSsgIGFzc2VydEVxKE1hdGgubWluKEluZmluaXR5LCA1KSwgNSk7Ci0rICBhc3NlcnRFcShN YXRoLm1pbigxLCAyKSwgMSk7Ci0rfQotKwotKy8vIFJ1biBjb2xkIChCYXNlbGluZSkgYW5kIGhv dCAoSW9uKS4KLStjaGVjaygpOwotK2ZvciAobGV0IGkgPSAwOyBpIDwgNTAwMDA7IGkrKykgY2hl Y2soKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9hdG9taWNpdHku anMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9hdG9taWNpdHkuanMKLWluZGV4IDM0MzI3 ZWM5NTc0MS4uYWMxNTE2MDgzMzI1IDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC10ZXN0L3Rlc3Rz L3dhc20vYXRvbWljaXR5LmpzCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9hdG9t aWNpdHkuanMKLUBAIC04LDcgKzgsMTEgQEAKLSBjb25zdCBERUJVRyA9IDA7Ci0gCi0gLy8gVGhl IGxvbmdlciB3ZSBydW4sIHRoZSBiZXR0ZXIsIHJlYWxseSwgYnV0IHdlIGRvbid0IHdhbnQgdG8g dGltZSBvdXQuCi0tY29uc3QgSVRFUkFUSU9OUyA9IDEwMDAwMDsKLSsvLyBSZWFsIFBQQzY0IGhh cmR3YXJlIHJldHJpZXMgbHdhcngvc3R3Y3guIHJlc2VydmF0aW9uIGxvb3BzIHVuZGVyCi0rLy8g Y29udGVudGlvbiwgd2hpY2ggbWFrZXMgdGhlIGRlZmF1bHQgY291bnQgZXhjZWVkIGppdC10ZXN0 J3MgMTUwIHMKLSsvLyBidWRnZXQgb24gUE9XRVI4IGFuZCAobGVzcyBzbykgUE9XRVI5L1BPV0VS MTAuIFF1YXJ0ZXIgdGhlIGNvdW50Ci0rLy8gdGhlcmUgdG8ga2VlcCBjb3ZlcmFnZSB3aGlsZSBm aXR0aW5nIHRoZSBkZWZhdWx0IGJ1ZGdldC4KLStjb25zdCBJVEVSQVRJT05TID0gZ2V0QnVpbGRD b25maWd1cmF0aW9uKCJwcGM2NCIpID8gMjUwMDAgOiAxMDAwMDA7Ci0gCi0gLy8gSWYgeW91IGNo YW5nZSBOVU1XT1JLRVJTIHlvdSBtdXN0IGFsc28gY2hhbmdlIHRoZSB0YWJsZXMgZm9yIElOSVQs IFZBTCwgYW5kCi0gLy8gUkVTVUxUIGZvciBhbGwgdGhlIG9wZXJhdGlvbnMsIGJlbG93LCBieSBh ZGRpbmcgb3IgcmVtb3ZpbmcgYml0cy4KLUBAIC0zOSw3ICs0Myw3IEBAIGlmIChnZXRDb3JlQ291 bnQoKSA8IE5VTUFHRU5UUykgewotIAotIGlmIChnZXRCdWlsZENvbmZpZ3VyYXRpb24oImFybS1z aW11bGF0b3IiKSB8fCBnZXRCdWlsZENvbmZpZ3VyYXRpb24oImFybTY0LXNpbXVsYXRvciIpIHx8 Ci0gICAgIGdldEJ1aWxkQ29uZmlndXJhdGlvbigibWlwczY0LXNpbXVsYXRvciIpIHx8IGdldEJ1 aWxkQ29uZmlndXJhdGlvbigicmlzY3Y2NC1zaW11bGF0b3IiKSB8fAotLSAgICBnZXRCdWlsZENv bmZpZ3VyYXRpb24oImxvb25nNjQtc2ltdWxhdG9yIikpCi0rICAgIGdldEJ1aWxkQ29uZmlndXJh dGlvbigibG9vbmc2NC1zaW11bGF0b3IiKSB8fCBnZXRCdWlsZENvbmZpZ3VyYXRpb24oInBwYzY0 LXNpbXVsYXRvciIpKQotIHsKLSAgICAgaWYgKERFQlVHID4gMCkKLSAgICAgICAgIHByaW50KCJB dG9taWNpdHkgdGVzdCBkaXNhYmxlZCBvbiBzaW11bGF0b3IiKTsKLWRpZmYgLS1naXQgYS9qcy9z cmMvaml0LXRlc3QvdGVzdHMvd2FzbS9leGNlc3NpdmUtaW5saW5pbmcuanMgYi9qcy9zcmMvaml0 LXRlc3QvdGVzdHMvd2FzbS9leGNlc3NpdmUtaW5saW5pbmcuanMKLWluZGV4IDkxZWM3MTBlNGU0 Ni4uYTdkM2IzMjExNTE1IDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20v ZXhjZXNzaXZlLWlubGluaW5nLmpzCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9l eGNlc3NpdmUtaW5saW5pbmcuanMKLUBAIC03NCwyMyArNzQsMjYgQEAgYXNzZXJ0RXEodGllcjJj b2RlQnl0ZXNVc2VkID4gMjAwMCwgdHJ1ZSk7Ci0gCi0gLy8gQnV0IG5vdCBhbiBleGNlc3NpdmUg YW1vdW50LiAgVGhpcyBpcyB0aGUgYXNzZXJ0aW9uIHRoYXQgY2hlY2tzIHRoYXQKLSAvLyB0aGUg aW5saW5pbmctYnVkZ2V0IGN1dG9mZiBtZWNoYW5pc20gaXMgd29ya2luZy4KLS1hc3NlcnRFcSh0 aWVyMmNvZGVCeXRlc1VzZWQgPCAxNTAwMCwgdHJ1ZSk7Ci0rLy8gUFBDNjQgZ2VuZXJhdGVzIGxh cmdlciBjb2RlIGR1ZSB0byBmaXhlZC13aWR0aCA0LWJ5dGUgaW5zdHJ1Y3Rpb25zLAotKy8vIG11 bHRpLWluc3RydWN0aW9uIGJyYW5jaCBzdGFuemFzLCBhbmQgbG9uZ2VyIGNvbnN0YW50LWxvYWRp bmcgc2VxdWVuY2VzLgotK2xldCB0aWVyMmxpbWl0ID0gZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJw cGM2NCIpID8gMjUwMDAgOiAxNTAwMDsKLSthc3NlcnRFcSh0aWVyMmNvZGVCeXRlc1VzZWQgPCB0 aWVyMmxpbWl0LCB0cnVlKTsKLSAKLSAvLyBUaGUgdGhyZXNob2xkcyBhYm92ZSBhcmUgYmFzZWQg b24gdGhlIGZvbGxvd2luZyBtZWFzdXJlbWVudHMuCi0gLy8KLSAvLyB0aWVyMWNvZGVCeXRlc1Vz ZWQgKGJhc2VsaW5lIHNpemUpCi0gLy8KLS0vLyAgICAgeDY0ICAgICAgeDMyICAgIGFybTY0ICAg IGFybTMyCi0rLy8gICAgIHg2NCAgICAgIHgzMiAgICBhcm02NCAgICBhcm0zMiAgICBwcGM2NAot IC8vCi0tLy8gICAgMTM3OCAgICAgMTAxMCAgICAgMTQwOCAgICAgMTAwOCAgICAtLWVuYWJsZS1k ZWJ1ZyBidWlsZAotLS8vICAgIDEyMTggICAgICA4NjYgICAgIDEyNDggICAgICA4NTYgICAgLS1k aXNhYmxlLWRlYnVnIGJ1aWxkCi0rLy8gICAgMTM3OCAgICAgMTAxMCAgICAgMTQwOCAgICAgMTAw OCAgICAgMjczNiAgICAtLWVuYWJsZS1kZWJ1ZyBidWlsZAotKy8vICAgIDEyMTggICAgICA4NjYg ICAgIDEyNDggICAgICA4NTYgICAgICAgICAgICAtLWRpc2FibGUtZGVidWcgYnVpbGQKLSAvLwot IC8vIHRpZXIyY29kZUJ5dGVzVXNlZCAob3B0aW1pemVkIHNpemUpLCB3aXRoIGlubGluZS1zaXpl IGJ1ZGdldGluZyBlbmFibGVkCi0gLy8KLS0vLyAgICAgeDY0ICAgICAgeDMyICAgIGFybTY0ICAg IGFybTMyCi0rLy8gICAgIHg2NCAgICAgIHgzMiAgICBhcm02NCAgICBhcm0zMiAgICBwcGM2NAot IC8vCi0tLy8gICAgNTE4NiAgICAgNjk5NCAgICAgNzEzNiAgICAgNTQ3MiAgICAtLWVuYWJsZS1k ZWJ1ZyBidWlsZAotLS8vICAgIDM2OTggICAgIDM3MzAgICAgIDU0NzIgICAgIDM4ODggICAgLS1k aXNhYmxlLWRlYnVnIGJ1aWxkCi0rLy8gICAgNTE4NiAgICAgNjk5NCAgICAgNzEzNiAgICAgNTQ3 MiAgICAxNzQwOCAgICAtLWVuYWJsZS1kZWJ1ZyBidWlsZAotKy8vICAgIDM2OTggICAgIDM3MzAg ICAgIDU0NzIgICAgIDM4ODggICAgICAgICAgICAtLWRpc2FibGUtZGVidWcgYnVpbGQKLSAvLwot IC8vIHRpZXIyY29kZUJ5dGVzVXNlZCAob3B0aW1pemVkIHNpemUpLCB3aXRoIGlubGluZS1zaXpl IGJ1ZGdldGluZyBkaXNhYmxlZAotIC8vCi1AQCAtMTA4LDcgKzExMSw3IEBAIGFzc2VydEVxKHRp ZXIyY29kZUJ5dGVzVXNlZCA8IDE1MDAwLCB0cnVlKTsKLSAvLyAoMikgdGhlIG9wdGltaXplZCBz aXplIHdpbGwgYmUgYXQgbGVhc3QgMjAwMCBieXRlcwotIC8vCi0gLy8gKDMpIGlmIHRoZSBpbmxp bmUtYnVkZ2V0IG1lY2hhbmlzbSBpcyB3b3JraW5nIGFzIGludGVuZGVkLCB0aGUgb3B0aW1pemVk Ci0tLy8gICAgIHNpemUgd2lsbCBiZSBsZXNzIHRoYW4gMTUwMDAgYnl0ZXMKLSsvLyAgICAgc2l6 ZSB3aWxsIGJlIGxlc3MgdGhhbiAxNTAwMCBieXRlcyAoMjUwMDAgb24gUFBDNjQpCi0gLy8KLSAv LwotIC8vIE5vdGUgKGZvciBmdXR1cmUgdGVzdGluZyk6IGlubGluZS1zaXplIGJ1ZGdldGluZyB3 YXMgZGlzYWJsZWQgYnkgY2hhbmdpbmcKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVz dHMvd2FzbS9tZW1vcnktb29iLW1lc3NhZ2UuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2Fz bS9tZW1vcnktb29iLW1lc3NhZ2UuanMKLWluZGV4IDc1MjQ4YzZlNmE1Ni4uYzA4ZTQ5YmNjNmU0 IDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vbWVtb3J5LW9vYi1tZXNz YWdlLmpzCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9tZW1vcnktb29iLW1lc3Nh Z2UuanMKLUBAIC04LDggKzgsMTYgQEAgY29uc3QgaGFzT2Zmc2V0TWVzc2FnZSA9IHdhc21IdWdl TWVtb3J5RW5hYmxlZCgpOwotIAotIGZ1bmN0aW9uIG9vYlBhdHRlcm4obWVtSWR4LCBieXRlT2Zm c2V0KSB7Ci0gICAgIGlmIChoYXNPZmZzZXRNZXNzYWdlKSB7Ci0rICAgICAgICAvLyBUaGUgcmVw b3J0ZWQgYWRkcmVzcyBpcyB3aGF0ZXZlciB0aGUga2VybmVsIHJldHVybmVkIGluCi0rICAgICAg ICAvLyBzaWdpbmZvLnNpX2FkZHIgZm9yIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi4gTW9zdCBi YWNrZW5kcyBlbWl0Ci0rICAgICAgICAvLyB0aGUgd2FzbSBhY2Nlc3MgZGlyZWN0bHkgc28gc2lf YWRkciBlcXVhbHMgYnl0ZU9mZnNldC4gUFBDNjQgZW1pdHMKLSsgICAgICAgIC8vIGEgMS1ieXRl IHByb2JpbmcgbG9hZCBhdCBieXRlT2Zmc2V0ICsgKHNpemUgLSAxKSBiZWZvcmUgZWFjaAotKyAg ICAgICAgLy8gbXVsdGktYnl0ZSBhY2Nlc3MgKHRvIGVuZm9yY2Ugd2FzbS1zcGVjIGF0b21pY2l0 eSBvbiBQT1dFUiBJU0EpLAotKyAgICAgICAgLy8gc28gc2lfYWRkciB0aGVyZSBjYW4gYmUgdXAg dG8gMTUgYnl0ZXMgcGFzdCBieXRlT2Zmc2V0LgotKyAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IFtd OwotKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSBvZmZzZXRzLnB1c2goYCR7 Ynl0ZU9mZnNldCArIGl9YCk7Ci0gICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgKLS0gICAgICAg ICAgICBgb3V0IG9mIGJvdW5kczogbWVtb3J5ICR7bWVtSWR4fSBhY2Nlc3MgYXQgbWVtb3J5IGFk ZHJlc3MgJHtieXRlT2Zmc2V0fWAKLSsgICAgICAgICAgICBgb3V0IG9mIGJvdW5kczogbWVtb3J5 ICR7bWVtSWR4fSBhY2Nlc3MgYXQgbWVtb3J5IGFkZHJlc3MgKD86JHtvZmZzZXRzLmpvaW4oJ3wn KX0pYAotICAgICAgICAgKTsKLSAgICAgfQotICAgICByZXR1cm4gL2luZGV4IG91dCBvZiBib3Vu ZHMvOwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWFyZ29u Mi10aWVyaW5nLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtYXJnb24yLXRp ZXJpbmcuanMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLjA0ZGFk OTI0MDUzOQotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20v cHBjNjQtYXJnb24yLXRpZXJpbmcuanMKLUBAIC0wLDAgKzEsMTI0IEBACi0rLy8gVGVzdCBmb3Ig d2FzbSB0aWVyaW5nIGNvcnJlY3RuZXNzIHdpdGggYXJnb24yLXN0eWxlIFNJTUQgY29tcHV0YXRp b24uCi0rLy8gVGhlIGFyZ29uMiBmQmxhTWthIGZ1bmN0aW9uIHVzZXMgaTY0eDIuZXh0bXVsX2xv d19pMzJ4NF91LCBpNjR4Mi5zaGwsCi0rLy8gaTY0eDIuYWRkLCB2MTI4LnhvciwgdjEyOC5vciwg aTY0eDIuc2hyX3UsIGFuZCBpOHgxNi5zaHVmZmxlLgotKy8vIEEgdGllcmluZyBidWcgY2FuIGNh dXNlIGhhc2ggYW5kIHZlcmlmeSB0byBwcm9kdWNlIGRpZmZlcmVudCByZXN1bHRzCi0rLy8gd2hl biB0aWVyLXVwIGhhcHBlbnMgYmV0d2VlbiB0aGVtLgotKy8vCi0rLy8gVGhpcyB0ZXN0IHJ1bnMg dGhlIGNvbXB1dGF0aW9uIHVuZGVyIGJvdGggYmFzZWxpbmUgYW5kIG9wdGltaXppbmcKLSsvLyBj b21waWxlcnMgYW5kIHZlcmlmaWVzIHRoZXkgcHJvZHVjZSBpZGVudGljYWwgcmVzdWx0cy4KLSsK LSt2YXIgbW9kID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh3YXNtVGV4dFRvQmluYXJ5KGAKLSsg IChtb2R1bGUKLSsgICAgKG1lbW9yeSAoZXhwb3J0ICJtZW0iKSAxMCkKLSsgICAgOzsgQXJnb24y IGZCbGFNa2E6IGEgKyBiICsgMiAqIHRydW5jMzIoYSkgKiB0cnVuYzMyKGIpCi0rICAgIDs7IHRo ZW4gcm90YXRpb25zIGJ5IDMyLCAyNCwgMTYsIDYzCi0rICAgIChmdW5jICRHX3JvdW5kIChwYXJh bSBpMzIpCi0rICAgICAgKGxvY2FsIHYxMjggdjEyOCB2MTI4IHYxMjggdjEyOCB2MTI4IHYxMjgg djEyOCB2MTI4KQotKyAgICAgIChsb2NhbC5zZXQgMSAodjEyOC5sb2FkIChpMzIuYWRkIChsb2Nh bC5nZXQgMCkgKGkzMi5jb25zdCAwKSkpKQotKyAgICAgIChsb2NhbC5zZXQgMiAodjEyOC5sb2Fk IChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCAxNikpKSkKLSsgICAgICAobG9jYWwu c2V0IDMgKHYxMjgubG9hZCAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgMzIpKSkp Ci0rICAgICAgKGxvY2FsLnNldCA0ICh2MTI4LmxvYWQgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAo aTMyLmNvbnN0IDQ4KSkpKQotKyAgICAgIChsb2NhbC5zZXQgNSAodjEyOC5sb2FkIChpMzIuYWRk IChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCA2NCkpKSkKLSsgICAgICAobG9jYWwuc2V0IDYgKHYx MjgubG9hZCAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgODApKSkpCi0rICAgICAg KGxvY2FsLnNldCA3ICh2MTI4LmxvYWQgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0 IDk2KSkpKQotKyAgICAgIChsb2NhbC5zZXQgOCAodjEyOC5sb2FkIChpMzIuYWRkIChsb2NhbC5n ZXQgMCkgKGkzMi5jb25zdCAxMTIpKSkpCi0rCi0rICAgICAgOzsgZkJsYU1rYSh2MCwgdjIpICsg cm90cjMyCi0rICAgICAgKGxvY2FsLnNldCAxIChpNjR4Mi5hZGQgKGk2NHgyLmFkZCAobG9jYWwu Z2V0IDEpIChsb2NhbC5nZXQgMykpCi0rICAgICAgICAoaTY0eDIuc2hsIChpNjR4Mi5leHRtdWxf bG93X2kzMng0X3UKLSsgICAgICAgICAgKGk4eDE2LnNodWZmbGUgMCAxIDIgMyA4IDkgMTAgMTEg MCAxIDIgMyA4IDkgMTAgMTEgKGxvY2FsLmdldCAxKSAobG9jYWwuZ2V0IDEpKQotKyAgICAgICAg ICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAobG9j YWwuZ2V0IDMpIChsb2NhbC5nZXQgMykpKQotKyAgICAgICAgICAoaTMyLmNvbnN0IDEpKSkpCi0r ICAgICAgKGxvY2FsLnNldCA5ICh2MTI4LnhvciAobG9jYWwuZ2V0IDcpIChsb2NhbC5nZXQgMSkp KQotKyAgICAgIChsb2NhbC5zZXQgNyAodjEyOC5vciAoaTY0eDIuc2hsIChsb2NhbC5nZXQgOSkg KGkzMi5jb25zdCAzMikpIChpNjR4Mi5zaHJfdSAobG9jYWwuZ2V0IDkpIChpMzIuY29uc3QgMzIp KSkpCi0rCi0rICAgICAgOzsgZkJsYU1rYSh2NCwgdjYpICsgcm90cjI0Ci0rICAgICAgKGxvY2Fs LnNldCA1IChpNjR4Mi5hZGQgKGk2NHgyLmFkZCAobG9jYWwuZ2V0IDUpIChsb2NhbC5nZXQgNykp Ci0rICAgICAgICAoaTY0eDIuc2hsIChpNjR4Mi5leHRtdWxfbG93X2kzMng0X3UKLSsgICAgICAg ICAgKGk4eDE2LnNodWZmbGUgMCAxIDIgMyA4IDkgMTAgMTEgMCAxIDIgMyA4IDkgMTAgMTEgKGxv Y2FsLmdldCA1KSAobG9jYWwuZ2V0IDUpKQotKyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEg MiAzIDggOSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0IDcpIChsb2NhbC5nZXQg NykpKQotKyAgICAgICAgICAoaTMyLmNvbnN0IDEpKSkpCi0rICAgICAgKGxvY2FsLnNldCA5ICh2 MTI4LnhvciAobG9jYWwuZ2V0IDMpIChsb2NhbC5nZXQgNSkpKQotKyAgICAgIChsb2NhbC5zZXQg MyAodjEyOC5vciAoaTY0eDIuc2hsIChsb2NhbC5nZXQgOSkgKGkzMi5jb25zdCA0MCkpIChpNjR4 Mi5zaHJfdSAobG9jYWwuZ2V0IDkpIChpMzIuY29uc3QgMjQpKSkpCi0rCi0rICAgICAgOzsgZkJs YU1rYSh2MCwgdjIpICsgcm90cjE2Ci0rICAgICAgKGxvY2FsLnNldCAxIChpNjR4Mi5hZGQgKGk2 NHgyLmFkZCAobG9jYWwuZ2V0IDEpIChsb2NhbC5nZXQgMykpCi0rICAgICAgICAoaTY0eDIuc2hs IChpNjR4Mi5leHRtdWxfbG93X2kzMng0X3UKLSsgICAgICAgICAgKGk4eDE2LnNodWZmbGUgMCAx IDIgMyA4IDkgMTAgMTEgMCAxIDIgMyA4IDkgMTAgMTEgKGxvY2FsLmdldCAxKSAobG9jYWwuZ2V0 IDEpKQotKyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEgMiAz IDggOSAxMCAxMSAobG9jYWwuZ2V0IDMpIChsb2NhbC5nZXQgMykpKQotKyAgICAgICAgICAoaTMy LmNvbnN0IDEpKSkpCi0rICAgICAgKGxvY2FsLnNldCA5ICh2MTI4LnhvciAobG9jYWwuZ2V0IDcp IChsb2NhbC5nZXQgMSkpKQotKyAgICAgIChsb2NhbC5zZXQgNyAodjEyOC5vciAoaTY0eDIuc2hs IChsb2NhbC5nZXQgOSkgKGkzMi5jb25zdCA0OCkpIChpNjR4Mi5zaHJfdSAobG9jYWwuZ2V0IDkp IChpMzIuY29uc3QgMTYpKSkpCi0rCi0rICAgICAgOzsgZkJsYU1rYSh2NCwgdjYpICsgcm90cjYz Ci0rICAgICAgKGxvY2FsLnNldCA1IChpNjR4Mi5hZGQgKGk2NHgyLmFkZCAobG9jYWwuZ2V0IDUp IChsb2NhbC5nZXQgNykpCi0rICAgICAgICAoaTY0eDIuc2hsIChpNjR4Mi5leHRtdWxfbG93X2kz Mng0X3UKLSsgICAgICAgICAgKGk4eDE2LnNodWZmbGUgMCAxIDIgMyA4IDkgMTAgMTEgMCAxIDIg MyA4IDkgMTAgMTEgKGxvY2FsLmdldCA1KSAobG9jYWwuZ2V0IDUpKQotKyAgICAgICAgICAoaTh4 MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0 IDcpIChsb2NhbC5nZXQgNykpKQotKyAgICAgICAgICAoaTMyLmNvbnN0IDEpKSkpCi0rICAgICAg KGxvY2FsLnNldCA5ICh2MTI4LnhvciAobG9jYWwuZ2V0IDMpIChsb2NhbC5nZXQgNSkpKQotKyAg ICAgIChsb2NhbC5zZXQgMyAodjEyOC5vciAoaTY0eDIuc2hsIChsb2NhbC5nZXQgOSkgKGkzMi5j b25zdCAxKSkgKGk2NHgyLnNocl91IChsb2NhbC5nZXQgOSkgKGkzMi5jb25zdCA2MykpKSkKLSsK LSsgICAgICAodjEyOC5zdG9yZSAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgMCkp IChsb2NhbC5nZXQgMSkpCi0rICAgICAgKHYxMjguc3RvcmUgKGkzMi5hZGQgKGxvY2FsLmdldCAw KSAoaTMyLmNvbnN0IDE2KSkgKGxvY2FsLmdldCAyKSkKLSsgICAgICAodjEyOC5zdG9yZSAoaTMy LmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgMzIpKSAobG9jYWwuZ2V0IDMpKQotKyAgICAg ICh2MTI4LnN0b3JlIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCA0OCkpIChsb2Nh bC5nZXQgNCkpCi0rICAgICAgKHYxMjguc3RvcmUgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMy LmNvbnN0IDY0KSkgKGxvY2FsLmdldCA1KSkKLSsgICAgICAodjEyOC5zdG9yZSAoaTMyLmFkZCAo bG9jYWwuZ2V0IDApIChpMzIuY29uc3QgODApKSAobG9jYWwuZ2V0IDYpKQotKyAgICAgICh2MTI4 LnN0b3JlIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCA5NikpIChsb2NhbC5nZXQg NykpCi0rICAgICAgKHYxMjguc3RvcmUgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0 IDExMikpIChsb2NhbC5nZXQgOCkpKQotKwotKyAgICAoZnVuYyAoZXhwb3J0ICJoYXNoIikgKHBh cmFtIGkzMikgKHJlc3VsdCBpNjQpCi0rICAgICAgKGxvY2FsIGkzMikKLSsgICAgICA7OyBJbml0 IHdpdGggQmxha2UyYiBJVgotKyAgICAgICh2MTI4LnN0b3JlIChpMzIuY29uc3QgMCkgKHYxMjgu Y29uc3QgaTY0eDIgMHg2YTA5ZTY2N2YzYmNjOTA4IDB4YmI2N2FlODU4NGNhYTczYikpCi0rICAg ICAgKHYxMjguc3RvcmUgKGkzMi5jb25zdCAxNikgKHYxMjguY29uc3QgaTY0eDIgMHgzYzZlZjM3 MmZlOTRmODJiIDB4YTU0ZmY1M2E1ZjFkMzZmMSkpCi0rICAgICAgKHYxMjguc3RvcmUgKGkzMi5j b25zdCAzMikgKHYxMjguY29uc3QgaTY0eDIgMHg1MTBlNTI3ZmFkZTY4MmQxIDB4OWIwNTY4OGMy YjNlNmMxZikpCi0rICAgICAgKHYxMjguc3RvcmUgKGkzMi5jb25zdCA0OCkgKHYxMjguY29uc3Qg aTY0eDIgMHgxZjgzZDlhYmZiNDFiZDZiIDB4NWJlMGNkMTkxMzdlMjE3OSkpCi0rICAgICAgKHYx Mjguc3RvcmUgKGkzMi5jb25zdCA2NCkgKHYxMjguY29uc3QgaTY0eDIgMHgwMTIzNDU2Nzg5YWJj ZGVmIDB4ZmVkY2JhOTg3NjU0MzIxMCkpCi0rICAgICAgKHYxMjguc3RvcmUgKGkzMi5jb25zdCA4 MCkgKHYxMjguY29uc3QgaTY0eDIgMHhkZWFkYmVlZmNhZmViYWJlIDB4MTEyMjMzNDQ1NTY2Nzc4 OCkpCi0rICAgICAgKHYxMjguc3RvcmUgKGkzMi5jb25zdCA5NikgKHYxMjguY29uc3QgaTY0eDIg MHhhYWJiY2NkZDExMjIzMzQ0IDB4NTU2Njc3ODg5OWFhYmJjYykpCi0rICAgICAgKHYxMjguc3Rv cmUgKGkzMi5jb25zdCAxMTIpICh2MTI4LmNvbnN0IGk2NHgyIDB4ZGRlZWZmMDAxMTIyMzM0NCAw eDU1NjY3Nzg4OTlhYWJiY2MpKQotKyAgICAgIChsb2NhbC5zZXQgMSAoaTMyLmNvbnN0IDApKQot KyAgICAgIChibG9jayAobG9vcAotKyAgICAgICAgKGNhbGwgJEdfcm91bmQgKGkzMi5jb25zdCAw KSkKLSsgICAgICAgIChsb2NhbC5zZXQgMSAoaTMyLmFkZCAobG9jYWwuZ2V0IDEpIChpMzIuY29u c3QgMSkpKQotKyAgICAgICAgKGJyX2lmIDEgKGkzMi5nZV91IChsb2NhbC5nZXQgMSkgKGxvY2Fs LmdldCAwKSkpCi0rICAgICAgICAoYnIgMCkpKQotKyAgICAgIChpNjQueG9yIChpNjQubG9hZCAo aTMyLmNvbnN0IDApKQotKyAgICAgICAgKGk2NC54b3IgKGk2NC5sb2FkIChpMzIuY29uc3QgOCkp Ci0rICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDE2KSkKLSsgICAgICAg ICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCAyNCkpCi0rICAgICAgICAgICAgICAo aTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCAzMikpCi0rICAgICAgICAgICAgICAgIChpNjQu eG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDQwKSkKLSsgICAgICAgICAgICAgICAgICAoaTY0Lnhv ciAoaTY0LmxvYWQgKGkzMi5jb25zdCA0OCkpCi0rICAgICAgICAgICAgICAgICAgICAoaTY0Lnhv ciAoaTY0LmxvYWQgKGkzMi5jb25zdCA1NikpCi0rICAgICAgICAgICAgICAgICAgICAgIChpNjQu eG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDY0KSkKLSsgICAgICAgICAgICAgICAgICAgICAgICAo aTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCA3MikpCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCA4MCkpCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDg4KSkKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCA5Nikp Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkz Mi5jb25zdCAxMDQpKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaTY0Lnhv ciAoaTY0LmxvYWQgKGkzMi5jb25zdCAxMTIpKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpNjQubG9hZCAoaTMyLmNvbnN0IDEyMCkpKSkpKSkpKSkpKSkpKSkpKQotKyAg KQotK2ApKTsKLSsKLSt2YXIgaW5zdCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2QpOwot KwotKy8vIEdldCBhIHJlZmVyZW5jZSByZXN1bHQgZnJvbSB0aGUgZmlyc3QgY2FsbC4KLSt2YXIg cmVmZXJlbmNlID0gaW5zdC5leHBvcnRzLmhhc2goMTAwKTsKLSsKLSsvLyBSdW4gbWFueSB0aW1l cyB0byB0cmlnZ2VyIHRpZXItdXAsIHRoZW4gdmVyaWZ5IHJlc3VsdCBzdGF5cyB0aGUgc2FtZS4K LSt2YXIgcGFzcyA9IHRydWU7Ci0rZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSsg ICAgdmFyIHIgPSBpbnN0LmV4cG9ydHMuaGFzaCgxMDApOwotKyAgICBpZiAociAhPT0gcmVmZXJl bmNlKSB7Ci0rICAgICAgICBwYXNzID0gZmFsc2U7Ci0rICAgICAgICB0aHJvdyBuZXcgRXJyb3Io IlRpZXJpbmcgbWlzbWF0Y2ggYXQgaXRlcmF0aW9uICIgKyBpICsKLSsgICAgICAgICAgICAiOiBn b3QgMHgiICsgQmlnSW50LmFzVWludE4oNjQsIHIpLnRvU3RyaW5nKDE2KSArCi0rICAgICAgICAg ICAgIiwgZXhwZWN0ZWQgMHgiICsgQmlnSW50LmFzVWludE4oNjQsIHJlZmVyZW5jZSkudG9TdHJp bmcoMTYpKTsKLSsgICAgfQotK30KLSsKLSthc3NlcnRFcShwYXNzLCB0cnVlKTsKLWRpZmYgLS1n aXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1jb21wYXJlLXNlbGVjdC1iZW5j aC5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWNvbXBhcmUtc2VsZWN0LWJl bmNoLmpzCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi5jMTFjZTcx M2Y1MTQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3Bw YzY0LWNvbXBhcmUtc2VsZWN0LWJlbmNoLmpzCi1AQCAtMCwwICsxLDcwIEBACi0rLy8gfGppdC10 ZXN0fCBza2lwLWlmOiB0cnVlCi0rLy8KLSsvLyBCZW5jaG1hcmsgb25seSwgbm90IGEgY29ycmVj dG5lc3MgdGVzdC4gSW52b2tlIG1hbnVhbGx5IGFzIHNob3duIGJlbG93LgotKy8vCi0rLy8gTWlj cm9iZW5jaG1hcmsgZm9yIHdhc20gY29tcGFyZStzZWxlY3QgZnVzaW9uIG9uIFBQQzY0LgotKy8v Ci0rLy8gUnVuIHdpdGg6Ci0rLy8gICAkSlMgLS13YXNtLWNvbXBpbGVyPW9wdGltaXppbmcgXAot Ky8vICAgICAgIGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWNvbXBhcmUtc2VsZWN0 LWJlbmNoLmpzCi0rLy8KLSsvLyBQcmludHMgdGltaW5ncyBmb3IgZm91ciB2YXJpYW50cyAoaTMy LCBpNjQsIGYzMiwgZjY0KSB0aGF0IGV4ZXJjaXNlIGEKLSsvLyB0aWdodCBsb29wIG9mIE4gc2Vs ZWN0LW9uLWNvbXBhcmUgb3BlcmF0aW9ucy4gVXNlZCB0byBkZWNpZGUgd2hldGhlcgotKy8vIHNw ZWNpYWxpemluZyBsb3dlcldhc21Db21wYXJlQW5kU2VsZWN0IGJleW9uZCBJbnQzMiBpcyB3b3J0 aCB0aGUgY29kZS4KLSsvLwotKy8vIFRoZSBrZXJuZWwgaXMgYSAxMC1zdGFnZSBzZWxlY3QgY2hh aW4gc28gdGhlIHBlci1vcCBvdmVyaGVhZCBkb21pbmF0ZXMKLSsvLyB0aGUgbG9vcCBmcmFtZS4g RWFjaCBpdGVyYXRpb24gdG91Y2hlcyAxMCBjb21wYXJlK3NlbGVjdCBvcHMgcGx1cwotKy8vIH50 cml2aWFsIGFkZHJlc3MgbWF0aC4KLSsKLStjb25zdCBOX0lURVJTID0gMV8wMDBfMDAwOwotKwot K2Z1bmN0aW9uIGJ1aWxkTW9kdWxlKGtpbmQpIHsKLSsgIGNvbnN0IHR5cGVzID0ge2kzMjogWydp MzInLCAnaTMyJywgJ2kzMi5sdF9zJ10sCi0rICAgICAgICAgICAgICAgICB1MzI6IFsnaTMyJywg J2kzMicsICdpMzIubHRfdSddLAotKyAgICAgICAgICAgICAgICAgaTY0OiBbJ2k2NCcsICdpNjQn LCAnaTY0Lmx0X3MnXSwKLSsgICAgICAgICAgICAgICAgIGYzMjogWydmMzInLCAnaTMyJywgJ2Yz Mi5sdCddLAotKyAgICAgICAgICAgICAgICAgZjY0OiBbJ2Y2NCcsICdpMzInLCAnZjY0Lmx0J119 W2tpbmRdOwotKyAgY29uc3QgW3R5LCBpdGVyVHksIGNtcE9wXSA9IHR5cGVzOwotKyAgLy8gTG9h ZCBhLCBiOyBjb21wdXRlIGNoYWluIG9mIChiIDwgYSA/IGIgOiBhKSAxMCB0aW1lcyBwZXIgaXRl ci4KLSsgIGNvbnN0IHN0YWdlID0gYAotKyAgICAobG9jYWwuc2V0ICRhCi0rICAgICAgKHNlbGVj dCAocmVzdWx0ICR7dHl9KQotKyAgICAgICAgKGxvY2FsLmdldCAkYikgKGxvY2FsLmdldCAkYSkK LSsgICAgICAgICgke2NtcE9wfSAobG9jYWwuZ2V0ICRiKSAobG9jYWwuZ2V0ICRhKSkpKWA7Ci0r ICBjb25zdCBib2R5ID0gQXJyYXkoMTApLmZpbGwoc3RhZ2UpLmpvaW4oJ1xuJyk7Ci0rICBjb25z dCB0ZXh0ID0gYAotKyAgICAobW9kdWxlCi0rICAgICAgKGZ1bmMgKGV4cG9ydCAicnVuIikgKHBh cmFtICRuIGkzMikgKHJlc3VsdCAke3R5fSkKLSsgICAgICAgIChsb2NhbCAkaSBpMzIpIChsb2Nh bCAkYSAke3R5fSkgKGxvY2FsICRiICR7dHl9KQotKyAgICAgICAgKGxvY2FsLnNldCAkYSAoJHt0 eX0uY29uc3QgJHtraW5kID09PSAnZjMyJyB8fCBraW5kID09PSAnZjY0JyA/ICczLjE0JyA6ICcx MjM0NSd9KSkKLSsgICAgICAgIChsb2NhbC5zZXQgJGIgKCR7dHl9LmNvbnN0ICR7a2luZCA9PT0g J2YzMicgfHwga2luZCA9PT0gJ2Y2NCcgPyAnMi43MScgOiAnNjc4OTAnfSkpCi0rICAgICAgICAo bG9vcCAkTAotKyAgICAgICAgICAke2JvZHl9Ci0rICAgICAgICAgIChsb2NhbC5zZXQgJGkgKGkz Mi5hZGQgKGxvY2FsLmdldCAkaSkgKGkzMi5jb25zdCAxKSkpCi0rICAgICAgICAgIChicl9pZiAk TCAoaTMyLmx0X3MgKGxvY2FsLmdldCAkaSkgKGxvY2FsLmdldCAkbikpKSkKLSsgICAgICAgIChs b2NhbC5nZXQgJGEpKSlgOwotKyAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUod2FzbVRl eHRUb0JpbmFyeSh0ZXh0KSk7Ci0rfQotKwotK2Z1bmN0aW9uIGJlbmNoKGtpbmQpIHsKLSsgIGNv bnN0IGluc3QgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UoYnVpbGRNb2R1bGUoa2luZCkpOwot KyAgLy8gV2FybXVwIOKAlCBlbnN1cmUgSW9uIGNvbXBpbGVzLgotKyAgZm9yIChsZXQgaSA9IDA7 IGkgPCAzOyBpKyspIGluc3QuZXhwb3J0cy5ydW4oTl9JVEVSUyk7Ci0rICBjb25zdCB0MCA9IGRh dGVOb3coKTsKLSsgIGNvbnN0IHJlcyA9IGluc3QuZXhwb3J0cy5ydW4oTl9JVEVSUyk7Ci0rICBj b25zdCB0MSA9IGRhdGVOb3coKTsKLSsgIHJldHVybiB7bXM6IHQxIC0gdDAsIHJlc3VsdDogcmVz fTsKLSt9Ci0rCi0rY29uc3Qga2luZHMgPSBbJ2kzMicsICd1MzInLCAnaTY0JywgJ2YzMicsICdm NjQnXTsKLStjb25zdCBydW5zID0gNTsKLStwcmludChgXG53YXNtIGNvbXBhcmUrc2VsZWN0IG1p Y3JvYmVuY2ggKCR7Tl9JVEVSUy50b0xvY2FsZVN0cmluZygpfSBpdGVycywgMTAgb3BzL2l0ZXIp OmApOwotK3ByaW50KGAgIEVhY2ggdGltaW5nIGlzIHRoZSBiZXN0IG9mICR7cnVuc30gcnVucy5c bmApOwotK2ZvciAoY29uc3Qga2luZCBvZiBraW5kcykgewotKyAgY29uc3Qgc2FtcGxlcyA9IFtd OwotKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBydW5zOyBpKyspIHNhbXBsZXMucHVzaChiZW5jaChr aW5kKS5tcyk7Ci0rICBzYW1wbGVzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTsKLSsgIGNvbnN0IGJl c3QgPSBzYW1wbGVzWzBdOwotKyAgY29uc3QgbWVkaWFuID0gc2FtcGxlc1socnVucyAvIDIpIHwg MF07Ci0rICBwcmludChgICAke2tpbmQucGFkRW5kKDQpfSBiZXN0PSR7YmVzdC50b0ZpeGVkKDEp fW1zICBtZWRpYW49JHttZWRpYW4udG9GaXhlZCgxKX1tcyAgKHNhbXBsZXM6ICR7c2FtcGxlcy5t YXAocyA9PiBzLnRvRml4ZWQoMCkpLmpvaW4oJywnKX0pYCk7Ci0rfQotZGlmZiAtLWdpdCBhL2pz L3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWV4dG11bC1hbGlhcy5qcyBiL2pzL3NyYy9q aXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWV4dG11bC1hbGlhcy5qcwotbmV3IGZpbGUgbW9kZSAx MDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uMmFhOTUwNzc1MWI2Ci0tLS0gL2Rldi9udWxsCi0r KysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1leHRtdWwtYWxpYXMuanMKLUBA IC0wLDAgKzEsMTA3IEBACi0rLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBQUEM2NCBpNjR4Mi5leHRt dWxfe2xvdyxoaWdofV9pMzJ4NF97cyx1fSB3aGVuIHRoZQotKy8vIElvbiByZWdpc3RlciBhbGxv Y2F0b3IgcGlja3MgZGVzdCA9PSByaHMuCi0rLy8KLSsvLyBPbiBQUEM2NCBMRSwgdGhlIG9sZCBp bXBsZW1lbnRhdGlvbiBleHRyYWN0ZWQgbGFuZXMgdmlhIG10dnNyZC9tZnZzcmQgYW5kCi0rLy8g d3JvdGUgdGhlIGxvdy1sYW5lIHByb2R1Y3QgdG8gZGVzdCBiZWZvcmUgcmVhZGluZyByaHMgZm9y IHRoZSBoaWdoIGxhbmUuCi0rLy8gYG10dnNyZCBYVCwgUkFgIGxlYXZlcyBEVzEgb2YgWFQgdW5k ZWZpbmVkIChQT1dFUjkgemVyb3MgaXQpLCBzbyB3aGVuCi0rLy8gZGVzdCBhbGlhc2VkIHJocyB0 aGUgaGlnaC1sYW5lIGV4dHJhY3QgZnJvbSByaHMgcmVhZCBnYXJiYWdlLCBwcm9kdWNpbmcKLSsv LyB6ZXJvIGluIHRoZSBoaWdoIGk2NCBsYW5lLiBPbiBQT1dFUjggdGhlIEV4dHJhY3RMYW5lVG9H UFIgZmFsbGJhY2sKLSsvLyBhZGRpdGlvbmFsbHkgY2xvYmJlcmVkIFNjcmF0Y2hTaW1kMTI4UmVn IGJldHdlZW4gdGhlIHR3byBleHRyYWN0cy4KLSsvLwotKy8vIFRoZSBsb29wIGJlbG93LCBkaXNj b3ZlcmVkIHZpYSB3YXNtLXJlZHVjZSBmcm9tIGFyZ29uMi53YXNtLCByZWxpYWJseQotKy8vIHJl cHJvZHVjZWQgdGhlIG1pc2NvbXBpbGU6IHRoZSByZXN1bHQncyBoaWdoIGk2NCBsYW5lIHdlbnQg dG8gMCBvbgotKy8vIFBPV0VSOSBJb24gLyBnYXJiYWdlIG9uIFBPV0VSOCBJb24sIHdoaWxlIGJh c2VsaW5lIGtlcHQgdGhlIGNvcnJlY3QKLSsvLyB2YWx1ZSAobGFuZTEgPSA0OCo0OCA9IDIzMDQg aW4gdGhlIGZpbmFsIGl0ZXJhdGlvbikuCi0rCi0rdmFyIG1vZCA9IG5ldyBXZWJBc3NlbWJseS5N b2R1bGUod2FzbVRleHRUb0JpbmFyeShgCi0rICAobW9kdWxlCi0rICAgIChtZW1vcnkgKGV4cG9y dCAibWVtIikgMSkKLSsgICAgKGZ1bmMgKGV4cG9ydCAicnVuX3UiKSAocGFyYW0gJG91dCBpMzIp Ci0rICAgICAgKGxvY2FsICRpIGkzMikgKGxvY2FsICR2NCB2MTI4KSAobG9jYWwgJHY1IHYxMjgp IChsb2NhbCAkdjkgdjEyOCkKLSsgICAgICAobG9vcAotKyAgICAgICAgKGxvY2FsLnNldCAkdjkK LSsgICAgICAgICAgKGk2NHgyLmFkZAotKyAgICAgICAgICAgICh2MTI4LmNvbnN0IGkzMng0IDEg MCAwIDApCi0rICAgICAgICAgICAgKGk2NHgyLmV4dG11bF9sb3dfaTMyeDRfdSAobG9jYWwuZ2V0 ICR2NSkgKGxvY2FsLmdldCAkdjkpKSkpCi0rICAgICAgICAobG9jYWwuc2V0ICR2NCAobG9jYWwu Z2V0ICR2OSkpCi0rICAgICAgICAobG9jYWwuc2V0ICR2NSAobG9jYWwuZ2V0ICR2NCkpCi0rICAg ICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDApIChsb2NhbC5nZXQgJHY1KSkKLSsgICAgICAg IChsb2NhbC5zZXQgJGkgKGkzMi5hZGQgKGxvY2FsLmdldCAkaSkgKGkzMi5jb25zdCAxKSkpCi0r ICAgICAgICAoYnJfaWYgMCAoaTMyLm5lIChsb2NhbC5nZXQgJGkpIChpMzIuY29uc3QgOCkpKSkK LSsgICAgICAodjEyOC5zdG9yZSAobG9jYWwuZ2V0ICRvdXQpIChsb2NhbC5nZXQgJHY5KSkpCi0r Ci0rICAgIChmdW5jIChleHBvcnQgInJ1bl9zIikgKHBhcmFtICRvdXQgaTMyKQotKyAgICAgIChs b2NhbCAkaSBpMzIpIChsb2NhbCAkdiB2MTI4KQotKyAgICAgIChsb2NhbC5zZXQgJHYgKHYxMjgu Y29uc3QgaTMyeDQgMiAzIDUgNykpCi0rICAgICAgKGxvb3AKLSsgICAgICAgIDs7IEZvcmNlIGRl c3Q9PXJocyBhbGlhc2luZzogdiA9IGV4dG11bF9sb3dfaTMyeDRfcyhjb25zdCwgdikuCi0rICAg ICAgICAobG9jYWwuc2V0ICR2Ci0rICAgICAgICAgIChpNjR4Mi5leHRtdWxfbG93X2kzMng0X3MK LSsgICAgICAgICAgICAodjEyOC5jb25zdCBpMzJ4NCAyIDMgNSA3KQotKyAgICAgICAgICAgIChs b2NhbC5nZXQgJHYpKSkKLSsgICAgICAgIChsb2NhbC5zZXQgJGkgKGkzMi5hZGQgKGxvY2FsLmdl dCAkaSkgKGkzMi5jb25zdCAxKSkpCi0rICAgICAgICAoYnJfaWYgMCAoaTMyLm5lIChsb2NhbC5n ZXQgJGkpIChpMzIuY29uc3QgMikpKSkKLSsgICAgICAodjEyOC5zdG9yZSAobG9jYWwuZ2V0ICRv dXQpIChsb2NhbC5nZXQgJHYpKSkKLSsKLSsgICAgKGZ1bmMgKGV4cG9ydCAicnVuX2hpZ2hfdSIp IChwYXJhbSAkb3V0IGkzMikKLSsgICAgICAobG9jYWwgJGkgaTMyKSAobG9jYWwgJHYgdjEyOCkK LSsgICAgICAobG9jYWwuc2V0ICR2ICh2MTI4LmNvbnN0IGkzMng0IDAgMCAyIDMpKQotKyAgICAg IChsb29wCi0rICAgICAgICAobG9jYWwuc2V0ICR2Ci0rICAgICAgICAgIChpNjR4Mi5leHRtdWxf aGlnaF9pMzJ4NF91Ci0rICAgICAgICAgICAgKHYxMjguY29uc3QgaTMyeDQgMCAwIDIgMykKLSsg ICAgICAgICAgICAobG9jYWwuZ2V0ICR2KSkpCi0rICAgICAgICAobG9jYWwuc2V0ICRpIChpMzIu YWRkIChsb2NhbC5nZXQgJGkpIChpMzIuY29uc3QgMSkpKQotKyAgICAgICAgKGJyX2lmIDAgKGkz Mi5uZSAobG9jYWwuZ2V0ICRpKSAoaTMyLmNvbnN0IDIpKSkpCi0rICAgICAgKHYxMjguc3RvcmUg KGxvY2FsLmdldCAkb3V0KSAobG9jYWwuZ2V0ICR2KSkpCi0rCi0rICAgIChmdW5jIChleHBvcnQg InJ1bl9oaWdoX3MiKSAocGFyYW0gJG91dCBpMzIpCi0rICAgICAgKGxvY2FsICRpIGkzMikgKGxv Y2FsICR2IHYxMjgpCi0rICAgICAgKGxvY2FsLnNldCAkdiAodjEyOC5jb25zdCBpMzJ4NCAwIDAg MiAzKSkKLSsgICAgICAobG9vcAotKyAgICAgICAgKGxvY2FsLnNldCAkdgotKyAgICAgICAgICAo aTY0eDIuZXh0bXVsX2hpZ2hfaTMyeDRfcwotKyAgICAgICAgICAgICh2MTI4LmNvbnN0IGkzMng0 IDAgMCAyIDMpCi0rICAgICAgICAgICAgKGxvY2FsLmdldCAkdikpKQotKyAgICAgICAgKGxvY2Fs LnNldCAkaSAoaTMyLmFkZCAobG9jYWwuZ2V0ICRpKSAoaTMyLmNvbnN0IDEpKSkKLSsgICAgICAg IChicl9pZiAwIChpMzIubmUgKGxvY2FsLmdldCAkaSkgKGkzMi5jb25zdCAyKSkpKQotKyAgICAg ICh2MTI4LnN0b3JlIChsb2NhbC5nZXQgJG91dCkgKGxvY2FsLmdldCAkdikpKSkKLStgKSk7Ci0r Ci0rZnVuY3Rpb24gcnVuQW5kQ2hlY2soaW5zdCkgewotKyAgaW5zdC5leHBvcnRzLnJ1bl91KDAp OwotKyAgLy8gQWZ0ZXIgOCBpdGVyYXRpb25zLCB0aGUgdmFsdWUgaW4gbWVtb3J5IHNob3VsZCBo YXZlIGxhbmUxID09IDIzMDQgPSAweDkwMC4KLSsgIC8vIEJ5dGVzIDgtMTUgKGk2NCBsYW5lIDEs IGxpdHRsZS1lbmRpYW4pID0gMHgwMDAwMDAwMDAwMDAwOTAwLgotKyAgdmFyIGJ1ZiA9IG5ldyBV aW50OEFycmF5KGluc3QuZXhwb3J0cy5tZW0uYnVmZmVyLCAwLCAxNik7Ci0rICB2YXIgaGV4ID0g QXJyYXkuZnJvbShidWYpLm1hcChiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsJzAnKSku am9pbignJyk7Ci0rICAvLyBFeHBlY3QgYnl0ZXMgOC05ID0gIjAwIDA5IiBhbmQgYnl0ZXMgMTAt MTUgPSAiMDAgMDAgMDAgMDAgMDAgMDAiLgotKyAgYXNzZXJ0RXEoaGV4LnNsaWNlKDE2LCAzMiks ICIwMDA5MDAwMDAwMDAwMDAwIik7Ci0rCi0rICBpbnN0LmV4cG9ydHMucnVuX3MoMTYpOwotKyAg Ly8gQWZ0ZXIgMiBpdGVyYXRpb25zIG9mIHYgPSBleHRtdWxfbG93X3MoY29uc3QoMiwzLDUsNyks IHYpIHN0YXJ0aW5nIHY9KDIsMyw1LDcpOgotKyAgLy8gICBpdGVyIDE6IGk2NHgyIGxhbmUwID0g MioyID0gNCwgbGFuZTEgPSAzKjMgPSA5LgotKyAgLy8gICAgICAgICAgIHYgYmVjb21lcyBpMzJ4 NCBbNCwgMCwgOSwgMF0gKGVhY2ggaTY0IGxhbmUgb2NjdXBpZXMgdHdvIGkzMiBsYW5lcykuCi0r ICAvLyAgIGl0ZXIgMjogZXh0bXVsX2xvd19zIHJlYWRzIGkzMiBsYW5lcyAwLCAxIG9mIHYgPSAo NCwgMCkuCi0rICAvLyAgICAgICAgICAgaTY0IGxhbmUwID0gMio0ID0gODsgaTY0IGxhbmUxID0g MyowID0gMC4KLSsgIHZhciBidWYyID0gbmV3IFVpbnQ4QXJyYXkoaW5zdC5leHBvcnRzLm1lbS5i dWZmZXIsIDE2LCAxNik7Ci0rICB2YXIgaGV4MiA9IEFycmF5LmZyb20oYnVmMikubWFwKGIgPT4g Yi50b1N0cmluZygxNikucGFkU3RhcnQoMiwnMCcpKS5qb2luKCcnKTsKLSsgIGFzc2VydEVxKGhl eDIsICIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpOwotKwotKyAgaW5zdC5leHBv cnRzLnJ1bl9oaWdoX3UoMzIpOwotKyAgLy8gdiA9ICgwLCAwLCAyLCAzKS4gZXh0bXVsX2hpZ2gg cGlja3MgbGFuZXMgMiBhbmQgMy4KLSsgIC8vICAgaXRlciAxOiBsYW5lMl9wcm9kID0gMioyID0g NDsgbGFuZTNfcHJvZCA9IDMqMyA9IDkuIFJlc3VsdCBzdG9yZWQgYXQgYnl0ZXMgMC03IChsYW5l Ml9wcm9kKSBhbmQgOC0xNSAobGFuZTNfcHJvZCkuCi0rICAvLyAgIGl0ZXIgMjogdiBub3cgaGFz IGk2NHgyIGxhbmUwID0gNCwgbGFuZTEgPSA5LCBpLmUuIGkzMng0IGxhbmVzIFs0LCAwLCA5LCAw XS4KLSsgIC8vICAgICAgICAgICBleHRtdWxfaGlnaF91KGNvbnN0KDAsMCwyLDMpLCB2KSByZWFk cyBsYW5lcyAyLCAzIG9mIGJvdGg6Ci0rICAvLyAgICAgICAgICAgY29uc3QgbGFuZTIgPSAyLCBs YW5lMyA9IDM7IHYgbGFuZTIgPSA5LCBsYW5lMyA9IDAuCi0rICAvLyAgICAgICAgICAgcmVzdWx0 OiBsYW5lMl9wcm9kID0gMio5ID0gMTggYXQgYnl0ZXMgMC03OyBsYW5lM19wcm9kID0gMyowID0g MCBhdCBieXRlcyA4LTE1LgotKyAgdmFyIGJ1ZjMgPSBuZXcgVWludDhBcnJheShpbnN0LmV4cG9y dHMubWVtLmJ1ZmZlciwgMzIsIDE2KTsKLSsgIHZhciBoZXgzID0gQXJyYXkuZnJvbShidWYzKS5t YXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCcwJykpLmpvaW4oJycpOwotKyAgYXNz ZXJ0RXEoaGV4MywgIjEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIik7Ci0rCi0rICBp bnN0LmV4cG9ydHMucnVuX2hpZ2hfcyg0OCk7Ci0rICB2YXIgYnVmNCA9IG5ldyBVaW50OEFycmF5 KGluc3QuZXhwb3J0cy5tZW0uYnVmZmVyLCA0OCwgMTYpOwotKyAgdmFyIGhleDQgPSBBcnJheS5m cm9tKGJ1ZjQpLm1hcChiID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsJzAnKSkuam9pbign Jyk7Ci0rICBhc3NlcnRFcShoZXg0LCAiMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAi KTsKLSt9Ci0rCi0rcnVuQW5kQ2hlY2sobmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZCkpOwot ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LXNpbWQtdnItY2xv YmJlci5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LXNpbWQtdnItY2xvYmJl ci5qcwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uZDVmNzlhMTg0 MGE2Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2 NC1zaW1kLXZyLWNsb2JiZXIuanMKLUBAIC0wLDAgKzEsMTc5IEBACi0rLy8gfGppdC10ZXN0fCBz a2lwLWlmOiAhd2FzbVNpbWRFbmFibGVkKCkKLSsvLwotKy8vIFJlZ3Jlc3Npb24gdGVzdHMgZm9y IFBQQzY0IFNJTUQgaGVscGVycyB0aGF0IHVzZSBWUjEuLlZSNSBhcyB1bmRlY2xhcmVkCi0rLy8g c2NyYXRjaCBhbmQgc2lsZW50bHkgY29ycnVwdCBsaXZlIHdhc20gdjEyOCB2YWx1ZXMgdGhlIHJl Z2lzdGVyIGFsbG9jYXRvcgotKy8vIGhhcyBwbGFjZWQgaW4gdGhvc2UgVlJzLgotKy8vCi0rLy8g QmFja2dyb3VuZDogUFBDNjQgU2ltZDEyOCBsaXZlcyBpbiBWUjAuLlZSMzEuIFZSMCBpcyBub24t YWxsb2NhdGFibGUKLSsvLyAoPSBTY3JhdGNoU2ltZDEyOFJlZyk7IFZSMS4uVlIzMSBhcmUgYWxs b2NhdGFibGUuIFRoZSBoZWxwZXJzIGJlbG93Ci0rLy8gaGlzdG9yaWNhbGx5IHVzZWQgVlIxLi5W UjUgYXMgdW5kZWNsYXJlZCBzY3JhdGNoOgotKy8vCi0rLy8gICBuZWdJbnQ4eDE2LCBuZWdJbnQx Nng4ICAgICAgICAgICAgICAgICAgICA6IGNsb2JiZXIgVlIxIChhbGwgQ1BVcykKLSsvLyAgIG5l Z0ludDMyeDQsIG5lZ0ludDY0eDIgKFBPV0VSOCBmYWxsYmFjaykgIDogY2xvYmJlciBWUjEgKFBP V0VSOCBvbmx5KQotKy8vICAgZXh0QWRkUGFpcndpc2VJbnQ4eDE2ICAoc2lnbmVkL3Vuc2lnbmVk KSAgOiBjbG9iYmVyIFZSMSwgVlIyLCBWUjMKLSsvLyAgIGV4dEFkZFBhaXJ3aXNlSW50MTZ4OCAg KHNpZ25lZC91bnNpZ25lZCkgIDogY2xvYmJlciBWUjEsIFZSMiwgVlIzCi0rLy8gICB1bnNpZ25l ZFdpZGVuSGlnaEludDMyeDQgICAgICAgICAgICAgICAgICA6IGNsb2JiZXIgVlIxCi0rLy8KLSsv LyBFYWNoIHRlc3Q6Ci0rLy8gICAtIGxvYWRzIGBuTGl2ZWAgInByZXNlcnZlIiB2MTI4IHZhbHVl cyBmcm9tIG1lbW9yeSBhdCBvZmZzZXRzIDE2Li4xNisxNipuTGl2ZQotKy8vICAgLSBsb2FkcyBP TkUgYWRkaXRpb25hbCAiaW5wdXQiIHYxMjggPSByZXBlYXQoMHgxOCkgYXQgb2Zmc2V0IDEyOAot Ky8vICAgLSBhcHBsaWVzIHRoZSBzdXNwZWN0IGhlbHBlciB0byB0aGUgaW5wdXQKLSsvLyAgIC0g c3RvcmVzIHRoZSBuTGl2ZSBwcmVzZXJ2ZWQgdmFsdWVzIGJhY2sgdG8gbWVtb3J5IGF0IG9mZnNl dHMgMC4uMTYqbkxpdmUKLSsvLyAgIC0gc3RvcmVzIHRoZSBoZWxwZXIgcmVzdWx0IGF0IG9mZnNl dCAxNipuTGl2ZQotKy8vCi0rLy8gV2l0aG91dCB0aGUgZml4LCBvbmUgb2YgdGhlIHByZXNlcnZl ZCBsb2NhbHMgKHdoaWNoZXZlciB0aGUgYWxsb2NhdG9yCi0rLy8gcGxhY2VkIGluIHRoZSBjbG9i YmVyZWQgVlIpIHJlYWRzIGJhY2sgYXMgdGhlIHN0YWdlZCBpbnB1dCB2YWx1ZSAoMHgxOCkKLSsv LyBpbnN0ZWFkIG9mIGl0cyBvcmlnaW5hbC4gV2l0aCB0aGUgZml4ICh0aGUgaGVscGVyIHVzaW5n IFNjcmF0Y2hTaW1kMTI4U2NvcGUKLSsvLyBvciBwcm9wZXIgVlItbmFtZXNwYWNlIGVtaXQpLCBh bGwgcHJlc2VydmVkIGxvY2FscyByZXRhaW4gdGhlaXIgdmFsdWVzLgotKwotK2NvbnN0IFBSRVNF UlZFX1BBVFRFUk5TID0gWzB4QTEsIDB4QjIsIDB4QzMsIDB4RDQsIDB4RTUsIDB4RjYsIDB4MDcs IDB4MjldOwotK2NvbnN0IElOUFVUX0JZVEUgPSAweDE4OwotKwotK2Z1bmN0aW9uIGluaXQobWVt KSB7Ci0rICAvLyBTbG90cyBhdCBvZmZzZXQgMTYsIDMyLCAuLi4sIDE2KzE2KjcgaG9sZCB0aGUg cHJlc2VydmUgcGF0dGVybnMuCi0rICBmb3IgKGxldCBzbG90ID0gMDsgc2xvdCA8IFBSRVNFUlZF X1BBVFRFUk5TLmxlbmd0aDsgc2xvdCsrKSB7Ci0rICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7 IGkrKykgewotKyAgICAgIG1lbVsxNiArIHNsb3QgKiAxNiArIGldID0gUFJFU0VSVkVfUEFUVEVS TlNbc2xvdF07Ci0rICAgIH0KLSsgIH0KLSsgIC8vIFRoZSBoZWxwZXIgaW5wdXQgaXMgYXQgb2Zm c2V0IDEyOCAoPSAxNiArIDE2KjcgKyAxNiA9IDE0ND8gbm8sIDE2ICsgMTYqOCA9IDE0NCkuCi0r ICAvLyBVc2UgYSBmaXhlZCBvZmZzZXQgUEFTVCB0aGUgcHJlc2VydmUgYXJlYS4gV2l0aCBuTGl2 ZSBtYXggNywgcHJlc2VydmUgdXNlcwotKyAgLy8gMTYuLigxNisxNio3LTEpID0gMTYuLjEyNy4g SW5wdXQgZ29lcyBhdCAxNDQgdG8gbGVhdmUgYSAxNi1ieXRlIGdhcC4KLSsgIGNvbnN0IElOUFVU X09GRlNFVCA9IDE0NDsKLSsgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgbWVtW0lOUFVU X09GRlNFVCArIGldID0gSU5QVVRfQllURTsKLSt9Ci0rCi0rZnVuY3Rpb24gcmVwZWF0KGJ5dGUp IHsKLSsgIGNvbnN0IGEgPSBuZXcgQXJyYXkoMTYpOwotKyAgZm9yIChsZXQgaSA9IDA7IGkgPCAx NjsgaSsrKSBhW2ldID0gYnl0ZTsKLSsgIHJldHVybiBhOwotK30KLSsKLSsvLyBWZXJpZnkgbkxp dmUgcHJlc2VydmVkIHNsb3RzIG1hdGNoIFBSRVNFUlZFX1BBVFRFUk5TIGF0IG91dHB1dCBvZmZz ZXRzCi0rLy8gMC4uMTYqbkxpdmUsIGFuZCB0aGF0IHRoZSByZXN1bHQgc2xvdCBhdCAxNipuTGl2 ZSBtYXRjaGVzIGBleHBlY3RlZFJlc3VsdGAuCi0rZnVuY3Rpb24gY2hlY2sob3BOYW1lLCBtZW0s IG5MaXZlLCBleHBlY3RlZFJlc3VsdCkgewotKyAgZm9yIChsZXQgc2xvdCA9IDA7IHNsb3QgPCBu TGl2ZTsgc2xvdCsrKSB7Ci0rICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgewotKyAg ICAgIGNvbnN0IGdvdCA9IG1lbVtzbG90ICogMTYgKyBpXTsKLSsgICAgICBjb25zdCB3YW50ID0g UFJFU0VSVkVfUEFUVEVSTlNbc2xvdF07Ci0rICAgICAgYXNzZXJ0RXEoZ290LCB3YW50LAotKyAg ICAgICAgICAgICAgIGAke29wTmFtZX06IGxpdmUgc2xvdCAke3Nsb3R9IGJ5dGUgJHtpfTogZ290 IDB4JHtnb3QudG9TdHJpbmcoMTYpfSwgZXhwZWN0ZWQgMHgke3dhbnQudG9TdHJpbmcoMTYpfSAo YWxsb2NhdG9yLWNsb2JiZXJlZCBWUj8pYCk7Ci0rICAgIH0KLSsgIH0KLSsgIGZvciAobGV0IGkg PSAwOyBpIDwgMTY7IGkrKykgewotKyAgICBjb25zdCBnb3QgPSBtZW1bbkxpdmUgKiAxNiArIGld OwotKyAgICBjb25zdCB3YW50ID0gZXhwZWN0ZWRSZXN1bHRbaV07Ci0rICAgIGFzc2VydEVxKGdv dCwgd2FudCwKLSsgICAgICAgICAgICAgYCR7b3BOYW1lfTogcmVzdWx0IGJ5dGUgJHtpfTogZ290 IDB4JHtnb3QudG9TdHJpbmcoMTYpfSwgZXhwZWN0ZWQgMHgke3dhbnQudG9TdHJpbmcoMTYpfWAp OwotKyAgfQotK30KLSsKLSsvLyBCdWlsZCBhIHdhc20gbW9kdWxlIHRoYXQ6Ci0rLy8gIC0gbG9h ZHMgYG5MaXZlYCBwcmVzZXJ2ZSB2MTI4IGxvY2FscyBmcm9tIG1lbW9yeSBhdCBvZmZzZXRzIDE2 Li4xNipuTGl2ZQotKy8vICAtIGxvYWRzIE9ORSBpbnB1dCB2MTI4IGZyb20gb2Zmc2V0IDE0NAot Ky8vICAtIGFwcGxpZXMgYG9wYCB0byB0aGUgaW5wdXQKLSsvLyAgLSBzdG9yZXMgYWxsIGBuTGl2 ZSArIDFgIHYxMjggdmFsdWVzIGJhY2sgdG8gbWVtb3J5IGF0IG9mZnNldHMgMC4uMTYqbkxpdmUK LStmdW5jdGlvbiBidWlsZE1vZHVsZShvcCwgbkxpdmUpIHsKLSsgIGNvbnN0IGxvY2FsRGVjbHMg PSBbXTsKLSsgIGNvbnN0IGluaXRMb2FkcyA9IFtdOwotKyAgY29uc3QgZmluYWxTdG9yZXMgPSBb XTsKLSsgIGZvciAobGV0IGkgPSAwOyBpIDwgbkxpdmU7IGkrKykgewotKyAgICBsb2NhbERlY2xz LnB1c2goYChsb2NhbCAkdiR7aX0gdjEyOClgKTsKLSsgICAgaW5pdExvYWRzLnB1c2goYChsb2Nh bC5zZXQgJHYke2l9ICh2MTI4LmxvYWQgKGkzMi5jb25zdCAkezE2ICsgaSAqIDE2fSkpKWApOwot KyAgICBmaW5hbFN0b3Jlcy5wdXNoKGAodjEyOC5zdG9yZSAoaTMyLmNvbnN0ICR7aSAqIDE2fSkg KGxvY2FsLmdldCAkdiR7aX0pKWApOwotKyAgfQotKyAgLy8gVGhlIGhlbHBlciBpbnB1dCArIHJl c3VsdC4KLSsgIGxvY2FsRGVjbHMucHVzaChgKGxvY2FsICRpbnB1dCB2MTI4KWApOwotKyAgaW5p dExvYWRzLnB1c2goYChsb2NhbC5zZXQgJGlucHV0ICh2MTI4LmxvYWQgKGkzMi5jb25zdCAxNDQp KSlgKTsKLSsgIGZpbmFsU3RvcmVzLnB1c2goYCh2MTI4LnN0b3JlIChpMzIuY29uc3QgJHtuTGl2 ZSAqIDE2fSkgKGxvY2FsLmdldCAkaW5wdXQpKWApOwotKwotKyAgY29uc3QgdGV4dCA9IGAKLSsg ICAgKG1vZHVsZQotKyAgICAgIChtZW1vcnkgKGV4cG9ydCAibWVtIikgMSkKLSsgICAgICAoZnVu YyAoZXhwb3J0ICJydW4iKQotKyAgICAgICAgJHtsb2NhbERlY2xzLmpvaW4oJ1xuICAgICAgICAn KX0KLSsgICAgICAgICR7aW5pdExvYWRzLmpvaW4oJ1xuICAgICAgICAnKX0KLSsgICAgICAgIChs b2NhbC5zZXQgJGlucHV0ICgke29wfSAobG9jYWwuZ2V0ICRpbnB1dCkpKQotKyAgICAgICAgJHtm aW5hbFN0b3Jlcy5qb2luKCdcbiAgICAgICAgJyl9Ci0rICAgICAgKQotKyAgICApYDsKLSsgIHJl dHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKHdhc21UZXh0VG9CaW5hcnkodGV4dCkpOwotK30K LSsKLStmdW5jdGlvbiBydW5PbmUob3BOYW1lLCBvcCwgbkxpdmUsIGV4cGVjdGVkUmVzdWx0KSB7 Ci0rICBjb25zdCBtb2QgPSBidWlsZE1vZHVsZShvcCwgbkxpdmUpOwotKyAgY29uc3QgaW5zdCA9 IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2QpOwotKyAgY29uc3QgbWVtID0gbmV3IFVpbnQ4 QXJyYXkoaW5zdC5leHBvcnRzLm1lbS5idWZmZXIpOwotKyAgLy8gUnVuIG1hbnkgdGltZXMgc28g QmFzZWxpbmUgKyBJb24gYm90aCBzZWUgaXQuCi0rICBmb3IgKGxldCB3YXJtID0gMDsgd2FybSA8 IDUwOyB3YXJtKyspIHsKLSsgICAgaW5pdChtZW0pOwotKyAgICBpbnN0LmV4cG9ydHMucnVuKCk7 Ci0rICAgIGNoZWNrKG9wTmFtZSwgbWVtLCBuTGl2ZSwgZXhwZWN0ZWRSZXN1bHQpOwotKyAgfQot K30KLSsKLSsvLyAtLS0tIE5lZ2F0ZSBoZWxwZXJzIC0tLS0KLSsvLwotKy8vIElucHV0IGxhbmUg PSAweDE4ID0gMjQuIG5lZygyNCkgPSAtMjQuCi0rLy8gaTh4MTYubmVnIDogLTI0IG1vZCAyNTYg PSAyMzIgPSAweEU4IHBlciBieXRlLgotKy8vIGkxNng4Lm5lZyA6IGxhbmUgPSAweDE4MTggPSA2 MTY4LCBuZWcgPSAtNjE2OCBtb2QgNjU1MzYgPSAweEU3RTguCi0rLy8gICAgICAgICAgICAgTWVt b3J5IExFOiBwZXIgaTE2IGxhbmUgYnl0ZXMgMHhFOCAweEU3LgotKy8vIGkzMng0Lm5lZyA6IGxh bmUgPSAweDE4MTgxODE4ID0gNDA0MjMyMjE2LCBuZWcgPSAweEU3RTdFN0U4LgotKy8vICAgICAg ICAgICAgIE1lbW9yeSBMRTogcGVyIGkzMiBsYW5lIGJ5dGVzIDB4RTggMHhFNyAweEU3IDB4RTcu Ci0rLy8gaTY0eDIubmVnIDogbGFuZSA9IDB4MTgxODE4MTgxODE4MTgxOCwgbmVnID0gMHhFN0U3 RTdFN0U3RTdFN0U4LgotKy8vICAgICAgICAgICAgIE1lbW9yeSBMRTogcGVyIGk2NCBsYW5lIGJ5 dGVzIDB4RTggMHhFNyAweEU3IDB4RTcgMHhFNyAweEU3IDB4RTcgMHhFNy4KLSsKLStydW5PbmUo Imk4eDE2Lm5lZyIsICJpOHgxNi5uZWciLCA0LCByZXBlYXQoMHhFOCkpOwotK3J1bk9uZSgiaTE2 eDgubmVnIiwgImkxNng4Lm5lZyIsIDQsCi0rICAgICAgIFsweEU4LDB4RTcsIDB4RTgsMHhFNywg MHhFOCwweEU3LCAweEU4LDB4RTcsCi0rICAgICAgICAweEU4LDB4RTcsIDB4RTgsMHhFNywgMHhF OCwweEU3LCAweEU4LDB4RTddKTsKLStydW5PbmUoImkzMng0Lm5lZyIsICJpMzJ4NC5uZWciLCA0 LAotKyAgICAgICBbMHhFOCwweEU3LDB4RTcsMHhFNywgMHhFOCwweEU3LDB4RTcsMHhFNywKLSsg ICAgICAgIDB4RTgsMHhFNywweEU3LDB4RTcsIDB4RTgsMHhFNywweEU3LDB4RTddKTsKLStydW5P bmUoImk2NHgyLm5lZyIsICJpNjR4Mi5uZWciLCA0LAotKyAgICAgICBbMHhFOCwweEU3LDB4RTcs MHhFNywweEU3LDB4RTcsMHhFNywweEU3LAotKyAgICAgICAgMHhFOCwweEU3LDB4RTcsMHhFNyww eEU3LDB4RTcsMHhFNywweEU3XSk7Ci0rCi0rLy8gLS0tLSBleHRBZGRQYWlyd2lzZSBoZWxwZXJz IC0tLS0KLSsvLwotKy8vIGV4dGFkZF9wYWlyd2lzZSByZWFkcyBhZGphY2VudCBwYWlycyBhbmQg d2lkZW5zLXRoZW4tc3VtcyB0aGVtLgotKy8vIElucHV0ID0gcmVwZWF0KDB4MTgpID0gMjQuCi0r Ly8gaTE2eDguZXh0YWRkX3BhaXJ3aXNlX2k4eDE2X3MgOiAyNCArIDI0ID0gNDggPSAweDAwMzAg cGVyIGkxNiBsYW5lLgotKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9y eSBMRTogMHgzMCAweDAwIHBlciBsYW5lIMOXIDggbGFuZXMuCi0rLy8gaTE2eDguZXh0YWRkX3Bh aXJ3aXNlX2k4eDE2X3UgOiBzYW1lIHNpbmNlIGlucHV0IGlzIHBvc2l0aXZlLgotKy8vIGkzMng0 LmV4dGFkZF9wYWlyd2lzZV9pMTZ4OF9zIDogaTE2IGxhbmUgPSAweDE4MTggPSA2MTY4LCBzdW0g PSAxMjMzNiA9IDB4MDAwMDMwMzAuCi0rLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTWVtb3J5IExFOiAweDMwIDB4MzAgMHgwMCAweDAwIHBlciBsYW5lIMOXIDQgbGFuZXMuCi0r Ly8gaTMyeDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3UgOiBzYW1lIHNpbmNlIGlucHV0IGlzIHBv c2l0aXZlLgotKwotK3J1bk9uZSgiaTE2eDguZXh0YWRkX3BhaXJ3aXNlX2k4eDE2X3MiLAotKyAg ICAgICAiaTE2eDguZXh0YWRkX3BhaXJ3aXNlX2k4eDE2X3MiLCA0LAotKyAgICAgICBbMHgzMCww eDAwLCAweDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCwweDAwLAotKyAgICAgICAgMHgzMCwweDAw LCAweDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCwweDAwXSk7Ci0rCi0rcnVuT25lKCJpMTZ4OC5l eHRhZGRfcGFpcndpc2VfaTh4MTZfdSIsCi0rICAgICAgICJpMTZ4OC5leHRhZGRfcGFpcndpc2Vf aTh4MTZfdSIsIDQsCi0rICAgICAgIFsweDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCwweDAwLCAw eDMwLDB4MDAsCi0rICAgICAgICAweDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCwweDAwLCAweDMw LDB4MDBdKTsKLSsKLStydW5PbmUoImkzMng0LmV4dGFkZF9wYWlyd2lzZV9pMTZ4OF9zIiwKLSsg ICAgICAgImkzMng0LmV4dGFkZF9wYWlyd2lzZV9pMTZ4OF9zIiwgNCwKLSsgICAgICAgWzB4MzAs MHgzMCwweDAwLDB4MDAsIDB4MzAsMHgzMCwweDAwLDB4MDAsCi0rICAgICAgICAweDMwLDB4MzAs MHgwMCwweDAwLCAweDMwLDB4MzAsMHgwMCwweDAwXSk7Ci0rCi0rcnVuT25lKCJpMzJ4NC5leHRh ZGRfcGFpcndpc2VfaTE2eDhfdSIsCi0rICAgICAgICJpMzJ4NC5leHRhZGRfcGFpcndpc2VfaTE2 eDhfdSIsIDQsCi0rICAgICAgIFsweDMwLDB4MzAsMHgwMCwweDAwLCAweDMwLDB4MzAsMHgwMCww eDAwLAotKyAgICAgICAgMHgzMCwweDMwLDB4MDAsMHgwMCwgMHgzMCwweDMwLDB4MDAsMHgwMF0p OwotKwotKy8vIC0tLS0gdW5zaWduZWRXaWRlbkhpZ2hJbnQzMng0IC0tLS0KLSsvLwotKy8vIGk2 NHgyLmV4dGVuZF9oaWdoX2kzMng0X3U6IHRha2UgdGhlIGhpZ2ggdHdvIGkzMiBsYW5lcyAobGFu ZXMgMiBhbmQgMykgb2YKLSsvLyB0aGUgaW5wdXQsIHplcm8tZXh0ZW5kIGVhY2ggdG8gaTY0LCBs YXkgdGhlbSBvdXQgYXMgaTY0eDIuCi0rLy8gSW5wdXQgbGFuZSA9IDB4MTgxODE4MTggKHBvc2l0 aXZlLCA9NDA0MjMyMjE2KS4KLSsvLyBSZXN1bHQ6IHR3byBpNjQgbGFuZXMsIGVhY2ggPSAweDAw MDAwMDAwMTgxODE4MTguCi0rLy8gTWVtb3J5IExFOiBwZXIgaTY0IGxhbmUgYnl0ZXMgMHgxOCAw eDE4IDB4MTggMHgxOCAweDAwIDB4MDAgMHgwMCAweDAwLgotKwotK3J1bk9uZSgiaTY0eDIuZXh0 ZW5kX2hpZ2hfaTMyeDRfdSIsCi0rICAgICAgICJpNjR4Mi5leHRlbmRfaGlnaF9pMzJ4NF91Iiwg NCwKLSsgICAgICAgWzB4MTgsMHgxOCwweDE4LDB4MTgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsg ICAgICAgIDB4MTgsMHgxOCwweDE4LDB4MTgsMHgwMCwweDAwLDB4MDAsMHgwMF0pOwotZGlmZiAt LWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3Byb2ZpbGluZy5qcyBiL2pzL3NyYy9q aXQtdGVzdC90ZXN0cy93YXNtL3Byb2ZpbGluZy5qcwotaW5kZXggZjQ4NzJiMDdjZGU4Li5jY2Q5 NjkwYTI2MmYgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcm9maWxp bmcuanMKLSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3Byb2ZpbGluZy5qcwotQEAg LTExNyw2ICsxMTcsMTMgQEAgZm9yIChsZXQgdHlwZSBvZiBbJ2YzMicsICdmNjQnXSkgewotICAg ICAgICAgaWYgKGdldEJ1aWxkQ29uZmlndXJhdGlvbigiYXJtNjQiKSkgewotICAgICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICAgfQotKyAgICAgICAgLy8gUFBDNjQgaW5saW5lcyBjZWlsL2Zs b29yL3RydW5jIGFzIGZyaXAvZnJpbS9mcml6IChzZWUKLSsgICAgICAgIC8vIEFzc2VtYmxlci1w cGM2NC5oIEhhc1JvdW5kSW5zdHJ1Y3Rpb24pLCBzbyBubyBidWlsdGluIHRodW5rCi0rICAgICAg ICAvLyBmcmFtZXMgZXhpc3QgdG8gcHJvZmlsZS4gYG5lYXJlc3RgIHN0aWxsIGdvZXMgdGhyb3Vn aCB0aGUKLSsgICAgICAgIC8vIHRodW5rIGJlY2F1c2UgUFBDNjQncyBmcmluIGlzIG5vdCBJRUVF IHJvdW5kLXRvLWV2ZW4uCi0rICAgICAgICBpZiAoZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJwcGM2 NCIpICYmIGZ1bmMgIT09ICduZWFyZXN0JykgewotKyAgICAgICAgICAgIGNvbnRpbnVlOwotKyAg ICAgICAgfQotICAgICAgICAgdGVzdChgKG1vZHVsZQotICAgICAgICAgICAgIChmdW5jIChleHBv cnQgIiIpIChwYXJhbSAke3R5cGV9KSAocmVzdWx0ICR7dHlwZX0pCi0gICAgICAgICAgICAgICAg IGxvY2FsLmdldCAwCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVn cmVzcy1wcGM2NC1leHRyYWN0LWxhbmUtY3R6LmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dh c20vcmVncmVzcy1wcGM2NC1leHRyYWN0LWxhbmUtY3R6LmpzCi1uZXcgZmlsZSBtb2RlIDEwMDY0 NAotaW5kZXggMDAwMDAwMDAwMDAwLi5lMmNmNWRlZjU0MWUKLS0tLSAvZGV2L251bGwKLSsrKyBi L2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MtcHBjNjQtZXh0cmFjdC1sYW5lLWN0 ei5qcwotQEAgLTAsMCArMSw0OSBAQAotKy8vIHxqaXQtdGVzdHwgLS13YXNtLWNvbXBpbGVyPW9w dGltaXppbmc7IHNraXAtaWY6ICF3YXNtU2ltZEVuYWJsZWQoKQotKy8vCi0rLy8gUmVncmVzc2lv biB0ZXN0IGZvciBhIFBQQzY0IGkzMng0LmV4dHJhY3RfbGFuZSBjYW5vbmljYWxpemF0aW9uIGJ1 Zy4KLSsvLwotKy8vIEV4dHJhY3RMYW5lVG9HUFIgbGVhdmVzIHRoZSBhZGphY2VudCBsYW5lIGlu IHRoZSBoaWdoIDMyIGJpdHMgb2YgdGhlIEdQUiBmb3IKLSsvLyB0aGUgdW5zaGlmdGVkIGxhbmVz ICgwIGFuZCAyKSwgc28gZXh0cmFjdExhbmVJbnQzMng0IG11c3Qgc2lnbi1leHRlbmQgaXRzIGkz MgotKy8vIHJlc3VsdCAoYXMgdGhlIGk4eDE2L2kxNng4IGV4dHJhY3RzIGRvKS4gV2l0aG91dCB0 aGF0LCBhIGNvbnN1bWVyIHRoYXQgcmVhZHMKLSsvLyB0aGUgZnVsbCA2NC1iaXQgcmVnaXN0ZXIg c2VlcyBnYXJiYWdlIGluIHRoZSBoaWdoIGhhbGYuIFRoZSBQT1dFUjggaTMyLmN0egotKy8vIGVt dWxhdGlvbiBpcyBzdWNoIGEgY29uc3VtZXI6IGl0cyA2NC1iaXQgbmVnL2FuZC4gemVyby1jaGVj ayBkaXNhZ3JlZXMgd2l0aAotKy8vIGl0cyAzMi1iaXQgY250bHp3LCBzbyBjdHogb2YgYSB6ZXJv IGxhbmUgc2l0dGluZyBuZXh0IHRvIGEgbm9uemVybyBuZWlnaGJvdXIKLSsvLyByZXR1cm5lZCAt MSBpbnN0ZWFkIG9mIDMyLgotKy8vCi0rLy8gVGhlIHZlY3RvciBjb21lcyBmcm9tIG1lbW9yeSAo cnVudGltZSwgbm90IGNvbnN0YW50LWZvbGRhYmxlKSBhbmQgaXMgcGFzc2VkCi0rLy8gdGhyb3Vn aCBhIFNJTUQgb3Agc28gdGhlIGV4dHJhY3QgaXMgYSBnZW51aW5lIHZlY3Rvci1yZWdpc3RlciBl eHRyYWN0LiBSdW4KLSsvLyB1bmRlciBNT1pfUFBDNjRfRk9SQ0VfUE9XRVI4PTEgdG8gZXhlcmNp c2UgdGhlIGVtdWxhdGVkIGN0eiBwYXRoOyBpbiBldmVyeQotKy8vIG90aGVyIG1vZGUgdGhpcyBp cyBzaW1wbHkgYSBjb3JyZWN0bmVzcyBjaGVjay4KLSsKLStjb25zdCBpbnMgPSB3YXNtRXZhbFRl eHQoYChtb2R1bGUKLSsgIChtZW1vcnkgKGV4cG9ydCAibWVtIikgMSkKLSsgIChmdW5jICR2IChy ZXN1bHQgdjEyOCkKLSsgICAgOzsgaWRlbnRpdHkgQU5EIGtlZXBzIHRoZSB2YWx1ZSBpbiBhIHZl Y3RvciByZWdpc3RlciBhbmQgZm9yY2VzIGEgcmVhbAotKyAgICA7OyBleHRyYWN0TGFuZUludDMy eDQgcmF0aGVyIHRoYW4gYW4gZXh0cmFjdC1vZi1sb2FkIGZvbGQuCi0rICAgICh2MTI4LmFuZCAo djEyOC5sb2FkIChpMzIuY29uc3QgMCkpICh2MTI4LmNvbnN0IGkzMng0IC0xIC0xIC0xIC0xKSkp Ci0rICAoZnVuYyAoZXhwb3J0ICJjdHowIikgKHJlc3VsdCBpMzIpIChpMzIuY3R6IChpMzJ4NC5l eHRyYWN0X2xhbmUgMCAoY2FsbCAkdikpKSkKLSsgIChmdW5jIChleHBvcnQgImN0ejEiKSAocmVz dWx0IGkzMikgKGkzMi5jdHogKGkzMng0LmV4dHJhY3RfbGFuZSAxIChjYWxsICR2KSkpKQotKyAg KGZ1bmMgKGV4cG9ydCAiY3R6MiIpIChyZXN1bHQgaTMyKSAoaTMyLmN0eiAoaTMyeDQuZXh0cmFj dF9sYW5lIDIgKGNhbGwgJHYpKSkpCi0rICAoZnVuYyAoZXhwb3J0ICJjdHozIikgKHJlc3VsdCBp MzIpIChpMzIuY3R6IChpMzJ4NC5leHRyYWN0X2xhbmUgMyAoY2FsbCAkdikpKSkKLSsgIChmdW5j IChleHBvcnQgInNleHQwIikgKHJlc3VsdCBpNjQpIChpNjQuZXh0ZW5kX2kzMl9zIChpMzJ4NC5l eHRyYWN0X2xhbmUgMCAoY2FsbCAkdikpKSkKLSsgIChmdW5jIChleHBvcnQgInNleHQyIikgKHJl c3VsdCBpNjQpIChpNjQuZXh0ZW5kX2kzMl9zIChpMzJ4NC5leHRyYWN0X2xhbmUgMiAoY2FsbCAk dikpKSkKLSspYCkuZXhwb3J0czsKLSsKLStjb25zdCBtZW0gPSBuZXcgSW50MzJBcnJheShpbnMu bWVtLmJ1ZmZlcik7Ci0rZnVuY3Rpb24gc2V0TGFuZXMoYSwgYiwgYywgZCkgeyBtZW1bMF0gPSBh OyBtZW1bMV0gPSBiOyBtZW1bMl0gPSBjOyBtZW1bM10gPSBkOyB9Ci0rCi0rLy8gRWFjaCBsYW5l ID0gMCBzdXJyb3VuZGVkIGJ5IG5vbnplcm8gbmVpZ2hib3VyczogY3R6IG11c3QgYmUgMzIsIG5l dmVyIC0xLgotK3NldExhbmVzKDAsIC0xLCAtMSwgLTEpOyBhc3NlcnRFcShpbnMuY3R6MCgpLCAz Mik7Ci0rc2V0TGFuZXMoLTEsIDAsIC0xLCAtMSk7IGFzc2VydEVxKGlucy5jdHoxKCksIDMyKTsK LStzZXRMYW5lcygtMSwgLTEsIDAsIC0xKTsgYXNzZXJ0RXEoaW5zLmN0ejIoKSwgMzIpOwotK3Nl dExhbmVzKC0xLCAtMSwgLTEsIDApOyBhc3NlcnRFcShpbnMuY3R6MygpLCAzMik7Ci0rCi0rLy8g Tm9uemVybyBsYW5lczogY3R6IG9mIHRoZSBsYW5lIHZhbHVlLCByZWdhcmRsZXNzIG9mIG5laWdo Ym91cnMuCi0rc2V0TGFuZXMoMHgxMCwgLTEsIDB4MTAwMDAwLCAtMSk7Ci0rYXNzZXJ0RXEoaW5z LmN0ejAoKSwgNCk7Ci0rYXNzZXJ0RXEoaW5zLmN0ejIoKSwgMjApOwotKwotKy8vIEEgbmVnYXRp dmUgbGFuZSBtdXN0IHNpZ24tZXh0ZW5kIGNvcnJlY3RseSAodGhlIGNhbm9uaWNhbGl6YXRpb24g aXMgZXh0c3cpLgotK3NldExhbmVzKC0yLCA3LCAtMywgNyk7Ci0rYXNzZXJ0RXEoaW5zLnNleHQw KCksIC0ybik7Ci0rYXNzZXJ0RXEoaW5zLnNleHQyKCksIC0zbik7Ci1kaWZmIC0tZ2l0IGEvanMv c3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC1zZWxlY3QtY29uZGl0aW9uLmpz IGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC1zZWxlY3QtY29uZGl0 aW9uLmpzCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi5jMzg5NzVk Y2U4NTkKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3Jl Z3Jlc3MtcHBjNjQtc2VsZWN0LWNvbmRpdGlvbi5qcwotQEAgLTAsMCArMSwzMCBAQAotKy8vIHxq aXQtdGVzdHwgLS13YXNtLWNvbXBpbGVyPW9wdGltaXppbmc7IHNraXAtaWY6ICF3YXNtU2ltZEVu YWJsZWQoKQotKy8vCi0rLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBhIFBQQzY0IHdhc20gSW9uIG1p c2NvbXBpbGUgb2YgYHNlbGVjdGAgd2l0aCBhIDMyLWJpdAotKy8vIGNvbmRpdGlvbi4gdmlzaXRX YXNtU2VsZWN0IHRlc3RlZCB0aGUgaTMyIGNvbmRpdGlvbiB3aXRoIGEgNjQtYml0IGNvbXBhcmUK LSsvLyAoY21wZGkgLyBicmFuY2hUZXN0UHRyKS4gV2hlbiB0aGUgY29uZGl0aW9uIHdhcyB6ZXJv IGluIGl0cyBsb3cgMzIgYml0cyBidXQKLSsvLyBoYWQgZ2FyYmFnZSBpbiB0aGUgaGlnaCAzMiBi aXRzIChhcyBjYW4gaGFwcGVuIHVuZGVyIHJlZ2lzdGVyIHByZXNzdXJlKSwgdGhlCi0rLy8gNjQt Yml0IHRlc3QgcmVhZCBpdCBhcyBub24temVybyBhbmQgc2VsZWN0IHJldHVybmVkIHRoZSB3cm9u ZyBvcGVyYW5kLgotKy8vCi0rLy8gSGVyZSB0aGUgY29uZGl0aW9uIGAkeDNgIGlzIDA7IGBzZWxl Y3QoJHg4LCAtOTUyODA5ODI4LCAkeDMpYCBtdXN0IHRoZXJlZm9yZQotKy8vIHJldHVybiAtOTUy ODA5ODI4LiBUaGUgc3Vycm91bmRpbmcgU0lNRCBzaHVmZmxlL2JpdHNlbGVjdC9zd2l6emxlIGNo YWluCi0rLy8gc3VwcGxpZXMgdGhlIHYxMjggcmVnaXN0ZXIgcHJlc3N1cmUgdGhhdCBleHBvc2Vk IHRoZSBidWcuCi0rCi0rY29uc3Qgd2F0ID0gYChtb2R1bGUgKGZ1bmMgKGV4cG9ydCAiZiIpIChy ZXN1bHQgaTY0KQotKyAgKGxvY2FsICR4MyBpMzIpKGxvY2FsICR4NyBpMzIpKGxvY2FsICR4OCBp MzIpCi0rICAobG9jYWwgJHcwIHYxMjgpKGxvY2FsICR3MSB2MTI4KShsb2NhbCAkdzIgdjEyOCko bG9jYWwgJHczIHYxMjgpCi0rICAobG9jYWwgJHc0IHYxMjgpKGxvY2FsICR3NSB2MTI4KShsb2Nh bCAkdzYgdjEyOCkobG9jYWwgJHc3IHYxMjgpCi0rICAobG9jYWwuc2V0ICR3MCAodjEyOC5jb25z dCBpMzJ4NCAxNzA4NDQzNDU0IDE1MzIyMTg2OTUgMjEwNzQyMzYxMCAtMTI2NTc3NTAwNSkpCi0r ICAobG9jYWwuc2V0ICR3MiAodjEyOC5jb25zdCBpMzJ4NCAtNzUyMzEyMzU1IC02MjU1MzA1NzIg LTg0NDY2NjUwMCA4MzIwMzY0MDgpKQotKyAgKGxvY2FsLnNldCAkdzcgKHYxMjguY29uc3QgaTMy eDQgMTE1MDAzNDk2IC05NzA0NDExMTcgLTQzMjI1OTM1IDE4NzQxMjgyMDQpKQotKyAgKGxvY2Fs LnNldCAkdzQgKGk4eDE2LnNodWZmbGUgMTUgMTggMTMgMiA2IDIyIDIwIDggMTkgMTAgMTIgOCAx MSA1IDYgMjggKGxvY2FsLmdldCAkdzcpIChsb2NhbC5nZXQgJHczKSkpCi0rICAobG9jYWwuc2V0 ICR3NiAodjEyOC5iaXRzZWxlY3QgKGxvY2FsLmdldCAkdzQpIChsb2NhbC5nZXQgJHcwKSAobG9j YWwuZ2V0ICR3NykpKQotKyAgKGxvY2FsLnNldCAkdzEgKHYxMjguY29uc3QgaTMyeDQgLTE2MzUw MjUyNjQgLTYyOTc4NDEzMiAxNTE3ODY5ODUyIDE2NTE3NzE4MjUpKQotKyAgKGxvY2FsLnNldCAk dzcgKHYxMjguYml0c2VsZWN0IChsb2NhbC5nZXQgJHc2KSAobG9jYWwuZ2V0ICR3MikgKGxvY2Fs LmdldCAkdzIpKSkKLSsgIChsb2NhbC5zZXQgJHc2IChpOHgxNi5zd2l6emxlIChsb2NhbC5nZXQg JHcxKSAobG9jYWwuZ2V0ICR3NykpKQotKyAgKGxvY2FsLnNldCAkeDMgKGkzMng0LmV4dHJhY3Rf bGFuZSAyIChsb2NhbC5nZXQgJHc2KSkpCi0rICAobG9jYWwuc2V0ICR4NyAoc2VsZWN0IChsb2Nh bC5nZXQgJHg4KSAoaTMyLmNvbnN0IC05NTI4MDk4MjgpIChsb2NhbC5nZXQgJHgzKSkpCi0rICAo aTY0LmV4dGVuZF9pMzJfcyAobG9jYWwuZ2V0ICR4NykpKSlgOwotKwotK2NvbnN0IGlucyA9IG5l dyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKHdhc21UZXh0VG9C aW5hcnkod2F0KSkpOwotK2Fzc2VydEVxKGlucy5leHBvcnRzLmYoKSwgLTk1MjgwOTgyOG4pOwot ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MtcHBjNjQtdHJh cC1leGl0LXNpbWQtc2F2ZS5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3Mt cHBjNjQtdHJhcC1leGl0LXNpbWQtc2F2ZS5qcwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4 IDAwMDAwMDAwMDAwMC4uNDg4N2Y4ZGYxMTljCi0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMv aml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBwYzY0LXRyYXAtZXhpdC1zaW1kLXNhdmUuanMK LUBAIC0wLDAgKzEsNjQgQEAKLSsvLyB8aml0LXRlc3R8IGV4aXRzdGF0dXM6IDA7IHNraXAtaWY6 ICF3YXNtU2ltZEVuYWJsZWQoKQotKy8vCi0rLy8gUmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgUFBD NjQgd2FzbSB0cmFwIGV4aXQgbG9zaW5nIGxpdmUgdjEyOCBzdGF0ZS4KLSsvLwotKy8vIE9uIFBQ QzY0LCBkb3VibGVzIGxpdmUgaW4gdGhlIEZQUnMgKFZTUjAtMzEpIHdoaWxlIHdhc20gdjEyOCB2 YWx1ZXMgbGl2ZSBpbgotKy8vIHRoZSBWUnMgKFZTUjMyLTYzKSAtLSBkaXNqb2ludCBwaHlzaWNh bCBwb29scy4gVGhlIHRyYXAgZXhpdCdzCi0rLy8gUmVnc1RvUHJlc2VydmUgdXNlZCBBbGxEb3Vi bGVNYXNrIG9ubHksIHNvIGEgdHJhcCBmaXJpbmcgd2hpbGUgYSB2MTI4IHdhcwotKy8vIGxpdmUg cmVzdW1lZCB3aXRoIHdoYXRldmVyIHRoZSBDKysgaW50ZXJydXB0IHBhdGgncyBsaWJjIGxlZnQg aW4gdGhlIFZScwotKy8vIChnbGliYydzIG1pc2FsaWduZWQgdmVjdG9yIG1lbWNweSBsZWF2ZXMg bHZzbCBhbGlnbm1lbnQtY29udHJvbCBieXRlCi0rLy8gcGF0dGVybnMgdGhlcmUpLiBJbnRlcnJ1 cHQgY2hlY2tzIGZpcmUgdmlhIHRyYXBzIGF0IGxvb3AgYmFjay1lZGdlcywgd2hlcmUKLSsvLyBh IGxvb3AtY2FycmllZCB2MTI4IGFjY3VtdWxhdG9yIGlzIGV4YWN0bHkgd2hhdCBpcyBsaXZlLgot Ky8vCi0rLy8gVGhlIGxvb3AgYmVsb3cga2VlcHMgYW4gaTMyeDQgYWNjdW11bGF0b3IgbGl2ZSBh Y3Jvc3MgZXZlcnkgYmFjay1lZGdlIHdoaWxlCi0rLy8gaW50ZXJydXB0cyBmaXJlIHJlcGVhdGVk bHk7IHRoZSBjYWxsYmFjayBkb2VzIGxhcmdlIG1pc2FsaWduZWQgY29waWVzIHRvCi0rLy8gcHVs bCBsaWJjJ3MgdmVjdG9yIG1lbWNweSB0aHJvdWdoIHRoZSBWUnMuIE9uIGFuIHVuZml4ZWQgYnVp bGQgKHJlYWwKLSsvLyBzaWxpY29uOyB0aGUgc2ltdWxhdG9yJ3MgVlJzIGFyZSBpbnN1bGF0ZWQg ZnJvbSBuYXRpdmUgbGliYykgdGhlCi0rLy8gYWNjdW11bGF0b3IgY29tZXMgYmFjayBob2xkaW5n IGdhcmJhZ2UgYW5kIHRoZSBmaW5hbCBsYW5lIHZhbHVlcyBhcmUgd3JvbmcuCi0rCi0rY29uc3Qg aW5zID0gd2FzbUV2YWxUZXh0KGAobW9kdWxlCi0rICAoZnVuYyAoZXhwb3J0ICJydW4iKSAocGFy YW0gJG4gaTMyKSAocmVzdWx0IGkzMikKLSsgICAgKGxvY2FsICRhY2MgdjEyOCkKLSsgICAgKGJs b2NrICRkb25lCi0rICAgICAgKGxvb3AgJHRvcAotKyAgICAgICAgKGJyX2lmICRkb25lIChpMzIu ZXF6IChsb2NhbC5nZXQgJG4pKSkKLSsgICAgICAgIChsb2NhbC5zZXQgJGFjYyAoaTMyeDQuYWRk IChsb2NhbC5nZXQgJGFjYykgKHYxMjguY29uc3QgaTMyeDQgMSAyIDMgNCkpKQotKyAgICAgICAg KGxvY2FsLnNldCAkbiAoaTMyLnN1YiAobG9jYWwuZ2V0ICRuKSAoaTMyLmNvbnN0IDEpKSkKLSsg ICAgICAgIChiciAkdG9wKSkpCi0rICAgIDs7IEZvbGQgdGhlIGZvdXIgbGFuZXMgc28gYW55IGxh bmUgY29ycnVwdGlvbiBzaG93cyB1cC4KLSsgICAgKGkzMi54b3IKLSsgICAgICAoaTMyLnhvciAo aTMyeDQuZXh0cmFjdF9sYW5lIDAgKGxvY2FsLmdldCAkYWNjKSkKLSsgICAgICAgICAgICAgICAo aTMyLnJvdGwgKGkzMng0LmV4dHJhY3RfbGFuZSAxIChsb2NhbC5nZXQgJGFjYykpIChpMzIuY29u c3QgOCkpKQotKyAgICAgIChpMzIueG9yIChpMzIucm90bCAoaTMyeDQuZXh0cmFjdF9sYW5lIDIg KGxvY2FsLmdldCAkYWNjKSkgKGkzMi5jb25zdCAxNikpCi0rICAgICAgICAgICAgICAgKGkzMi5y b3RsIChpMzJ4NC5leHRyYWN0X2xhbmUgMyAobG9jYWwuZ2V0ICRhY2MpKSAoaTMyLmNvbnN0IDI0 KSkpKSkKLSspYCkuZXhwb3J0czsKLSsKLSsvLyBNaXNhbGlnbmVkIGJpZyBjb3BpZXMgZHJpdmUg Z2xpYmMncyBsdnNsL3ZwZXJtIG1lbWNweSBwYXRoIG9uIFBQQy4KLStjb25zdCBiaWcgPSBuZXcg VWludDhBcnJheSgxIDw8IDIwKTsKLStjb25zdCBzcmMgPSBiaWcuc3ViYXJyYXkoMSwgKDEgPDwg MTkpICsgMSk7Ci0rY29uc3QgZHN0ID0gbmV3IFVpbnQ4QXJyYXkoMSA8PCAxOSk7Ci0rCi0rbGV0 IGZpcmVzID0gMDsKLStmdW5jdGlvbiBvbkludGVycnVwdCgpIHsKLSsgIGZpcmVzKys7Ci0rICBm b3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICBkc3Quc2V0KHNyYyk7Ci0rICB9Ci0r ICBpZiAoZmlyZXMgPCAyNSkgewotKyAgICB0aW1lb3V0KDAuMDIsIG9uSW50ZXJydXB0KTsKLSsg IH0KLSsgIHJldHVybiB0cnVlOwotK30KLSsKLStmdW5jdGlvbiBleHBlY3RlZChuKSB7Ci0rICBj b25zdCByID0gKHgsIGspID0+ICgoeCA8PCBrKSB8ICh4ID4+PiAoMzIgLSBrKSkpIHwgMDsKLSsg IGNvbnN0IGwgPSBbbiB8IDAsICgyICogbikgfCAwLCAoMyAqIG4pIHwgMCwgKDQgKiBuKSB8IDBd OwotKyAgcmV0dXJuICgobFswXSBeIHIobFsxXSwgOCkpIF4gKHIobFsyXSwgMTYpIF4gcihsWzNd LCAyNCkpKSB8IDA7Ci0rfQotKwotK2NvbnN0IE4gPSAxIDw8IDI2OwotK3RpbWVvdXQoMC4wMiwg b25JbnRlcnJ1cHQpOwotK2NvbnN0IGdvdCA9IGlucy5ydW4oTik7Ci0rLy8gQ2FuY2VsIGFueSBw ZW5kaW5nIHdhdGNoZG9nIGJlZm9yZSBmaW5pc2hpbmcuCi0rdGltZW91dCgtMSk7Ci0rYXNzZXJ0 RXEoZ290LCBleHBlY3RlZChOKSk7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3Rz L3dhc20vcmVncmVzcy9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJyYW5jaC5qcyBiL2pzL3Ny Yy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MvYnVnLXBwYzY0LXNpbWQtcmVkdWNlLWFuZC1i cmFuY2guanMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLmI3ZWMw ZDk1NDhiYgotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20v cmVncmVzcy9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJyYW5jaC5qcwotQEAgLTAsMCArMSw3 IEBACi0rLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBhIFBQQzY0LXNwZWNpZmljIHdhc20gSW9uIGNy YXNoIGluCi0rLy8gQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtUmVkdWNlQW5kQnJhbmNoU2ltZDEy OCDigJQgaXQgY2FsbGVkCi0rLy8gTEJsb2NrOjpsYWJlbCgpIGRpcmVjdGx5IG9uIHRoZSBicmFu Y2ggdGFyZ2V0cyB3aXRob3V0IGdvaW5nIHRocm91Z2gKLSsvLyBza2lwVHJpdmlhbEJsb2Nrcygp LCBzbyBhIHRyaXZpYWwgZ290by1vbmx5IHN1Y2Nlc3NvciB0cmlwcGVkCi0rLy8gTEJsb2NrOjps YWJlbCgpJ3MgIWlzVHJpdmlhbCgpIGFzc2VydGlvbi4gUmVkdWNlZCBmcm9tIGdyYW50a290LmNv bS9wb2x5Ci0rLy8gd2l0aCB3YXNtLXJlZHVjZS4gVHJpZ2dlcnMgdGhlIGJ1ZyB1bmRlciAtLXdh c20tY29tcGlsZXI9b3B0aW1pemluZy4KLStuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG9zLmZpbGUu cmVhZEZpbGUoc2NyaXB0ZGlyICsgIi9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJyYW5jaC53 YXNtIiwgImJpbmFyeSIpKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2Fz bS9zaW1kL2J1ZzE5NDY2MTguanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2J1 ZzE5NDY2MTguanMKLWluZGV4IGNjMDJkMGQ4ZGZkNy4uZmNmM2EyYTM1ZTgyIDEwMDY0NAotLS0t IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vc2ltZC9idWcxOTQ2NjE4LmpzCi0rKysgYi9q cy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2J1ZzE5NDY2MTguanMKLUBAIC00OCw3ICs0 OCwxMiBAQCBmb3IgKGxldCBvcCBvZiBbImYzMng0LnJlbGF4ZWRfbWluIiwgImYzMng0LnJlbGF4 ZWRfbWF4IiwKLSAgICAgLy8gYmFzZWxpbmUuCi0gICAgIGxldCByZXN1bHQxID0gaS5leHBvcnRz LnZhcmlhbnQxKCk7Ci0gICAgIGxldCByZXN1bHQyID0gaS5leHBvcnRzLnZhcmlhbnQyKCk7Ci0t ICAgIGlmIChnZXRCdWlsZENvbmZpZ3VyYXRpb24oImFybTY0IikpIHsKLSsgICAgaWYgKGdldEJ1 aWxkQ29uZmlndXJhdGlvbigicHBjNjQiKSkgewotKyAgICAgIC8vIFBQQzY0OiB4dm1pbnNwL3h2 bWF4c3AgYWx3YXlzIHJldHVybnMgdGhlIG5vbi1OYU4gb3BlcmFuZCwKLSsgICAgICAvLyByZWdh cmRsZXNzIG9mIG9wZXJhbmQgb3JkZXIuIEJvdGggdmFyaWFudHMgZ2l2ZSB6ZXJvIChub24tTmFO KS4KLSsgICAgICBhc3NlcnRFcShyZXN1bHQxLCAwKTsKLSsgICAgICBhc3NlcnRFcShyZXN1bHQy LCAwKTsKLSsgICAgfSBlbHNlIGlmIChnZXRCdWlsZENvbmZpZ3VyYXRpb24oImFybTY0IikpIHsK LSAgICAgICAvLyBUaGUgcmVsYXhlZF9taW4vbWF4IG9wZXJhdGlvbiBhcHBlYXJzIHRvIHByb3Bh Z2F0ZSBOYU5zIHN5bW1ldHJpY2FsbHkKLSAgICAgICAvLyBmcm9tIGVpdGhlciBhcmcKLSAgICAg ICBhc3NlcnRFcShyZXN1bHQxLCA2NTUzNSk7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0 L3Rlc3RzL3dhc20vc2ltZC9pb24tYW5hbHlzaXMuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMv d2FzbS9zaW1kL2lvbi1hbmFseXNpcy5qcwotaW5kZXggZDEyYWY2ZTZmYmM5Li4zMzVmODMxZmY2 YTkgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2lvbi1hbmFs eXNpcy5qcwotKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vc2ltZC9pb24tYW5hbHlz aXMuanMKLUBAIC0xMiw2ICsxMiw3IEBACi0gLy8gZ2VuZXJhdGVzIHRoZSBleHBlY3RlZCByZXN1 bHQuCi0gCi0gdmFyIGlzQXJtNjQgPSBnZXRCdWlsZENvbmZpZ3VyYXRpb24oImFybTY0Iik7Ci0r dmFyIGlzUFBDNjQgPSBnZXRCdWlsZENvbmZpZ3VyYXRpb24oInBwYzY0Iik7Ci0gCi0gLy8gMzIt Yml0IHBlcm11dGF0aW9uIHRoYXQgaXMgbm90IGEgcm90YXRpb24uCi0gbGV0IHBlcm0zMng0X3Bh dHRlcm4gPSBbNCwgNSwgNiwgNywgMTIsIDEzLCAxNCwgMTUsIDgsIDksIDEwLCAxMSwgMCwgMSwg MiwgM107Ci1AQCAtODQ2LDcgKzg0Nyw3IEBAIGZvciAoIGxldCBbdHkxMjgsc2l6ZV0gb2YgW1sn aTh4MTYnLDFdLCBbJ2kxNng4JywyXSwgWydpMzJ4NCcsNF1dICkgewotICAgICBsZXQgb3BzID0g eyBhbGxfdHJ1ZTogYWxsVHJ1ZSwgYW55X3RydWU6IGFueVRydWUsIGJpdG1hc2sgfTsKLSAKLSAg ICAgZm9yICggbGV0IG9wIG9mIFsnYW55X3RydWUnLCAnYWxsX3RydWUnLCAnYml0bWFzayddICkg ewotLSAgICAgICAgbGV0IGZvbGRlZCA9IG9wICE9ICdiaXRtYXNrJyB8fCAoc2l6ZSA9PSAyICYm ICFpc0FybTY0KTsKLSsgICAgICAgIGxldCBmb2xkZWQgPSBvcCAhPSAnYml0bWFzaycgfHwgKHNp emUgPT0gMiAmJiAhaXNBcm02NCAmJiAhaXNQUEM2NCk7Ci0gICAgICAgICBsZXQgb3BlcmF0aW9u ID0gb3AgPT0gJ2FueV90cnVlJyA/ICd2MTI4LmFueV90cnVlJyA6IGAke3R5MTI4fS4ke29wfWA7 Ci0gICAgICAgICBsZXQgcG9zaXRpdmUgPQotICAgICAgICAgICAgIHdhc21Db21waWxlKAotQEAg LTg5OCwxMiArODk5LDEyIEBAIGZvciAoIGxldCBbdHkxMjgsc2l6ZV0gb2YgW1snaTh4MTYnLDFd LCBbJ2kxNng4JywyXSwgWydpMzJ4NCcsNF1dICkgewotIAotIC8vIEJpdHNlbGVjdCB3aXRoIGNv bnN0YW50IG1hc2sgZm9sZGVkIGludG8gc2h1ZmZsZSBvcGVyYXRpb24KLSAKLS1pZiAoIWlzQXJt NjQpIHsKLStpZiAoIWlzQXJtNjQgJiYgIWlzUFBDNjQpIHsKLSAgIHdhc21Db21waWxlKGAKLSAg IChtb2R1bGUgKGZ1bmMgKHBhcmFtIHYxMjgpIChwYXJhbSB2MTI4KSAocmVzdWx0IHYxMjgpCi0g ICAgICh2MTI4LmJpdHNlbGVjdCAobG9jYWwuZ2V0IDApIChsb2NhbC5nZXQgMSkgKHYxMjguY29u c3QgaTh4MTYgMCAtMSAtMSAwIDAgMCAwIDAgLTEgLTEgLTEgLTEgLTEgLTEgMCAwKSkpKQotICAg YCk7Ci0tICAgICAgYXNzZXJ0RXEod2FzbVNpbWRBbmFseXNpcygpLCAic2h1ZmZsZSAtPiBibGVu ZCA4eDE2Iik7ICAKLSsgICAgICBhc3NlcnRFcSh3YXNtU2ltZEFuYWx5c2lzKCksICJzaHVmZmxl IC0+IGJsZW5kIDh4MTYiKTsKLSB9Ci0gCi0gLy8gTGlicmFyeQotZGlmZiAtLWdpdCBhL2pzL3Ny Yy9qaXQvQXNzZW1ibGVyLmggYi9qcy9zcmMvaml0L0Fzc2VtYmxlci5oCi1pbmRleCA5N2MyZTMz NzYyNWIuLmNiNzI0NDc3NjYwNSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvQXNzZW1ibGVyLmgK LSsrKyBiL2pzL3NyYy9qaXQvQXNzZW1ibGVyLmgKLUBAIC0xOSw2ICsxOSw4IEBACi0gIyAgaW5j bHVkZSAiaml0L2xvb25nNjQvQXNzZW1ibGVyLWxvb25nNjQuaCIKLSAjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkKLSAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9Bc3NlbWJsZXItcmlz Y3Y2NC5oIgotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsjICBpbmNsdWRlICJq aXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgiCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dB U00zMikKLSAjICBpbmNsdWRlICJqaXQvd2FzbTMyL0Fzc2VtYmxlci13YXNtMzIuaCIKLSAjZWxp ZiBkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L0Jhc2Vs aW5lSUMuY3BwIGIvanMvc3JjL2ppdC9CYXNlbGluZUlDLmNwcAotaW5kZXggYzM1NjUzOGEwMjRl Li41YWI2MzE4MzhmMGUgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L0Jhc2VsaW5lSUMuY3BwCi0r KysgYi9qcy9zcmMvaml0L0Jhc2VsaW5lSUMuY3BwCi1AQCAtMTIwLDYgKzEyMCw4IEBAIEFsbG9j YXRhYmxlR2VuZXJhbFJlZ2lzdGVyU2V0IEJhc2VsaW5lSUNBdmFpbGFibGVHZW5lcmFsUmVncyhz aXplX3QgbnVtSW5wdXRzKSB7Ci0gICBNT1pfQVNTRVJUKCFyZWdzLmhhcyhQc2V1ZG9TdGFja1Bv aW50ZXIpKTsKLSAgIE1PWl9BU1NFUlQoIXJlZ3MuaGFzKFJlYWxTdGFja1BvaW50ZXIpKTsKLSAg IE1PWl9BU1NFUlQoIXJlZ3MuaGFzKElDVGFpbENhbGxSZWcpKTsKLSsjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCi0rICByZWdzLnRha2UoSUNUYWlsQ2FsbFJlZyk7Ci0gI2VuZGlmCi0g ICByZWdzLnRha2UoSUNTdHViUmVnKTsKLSAKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L0NhY2hl SVJDb21waWxlci5jcHAgYi9qcy9zcmMvaml0L0NhY2hlSVJDb21waWxlci5jcHAKLWluZGV4IDRl Yjk1MmU0OTdlMy4uZWU0ODg4NDk1MTAzIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9DYWNoZUlS Q29tcGlsZXIuY3BwCi0rKysgYi9qcy9zcmMvaml0L0NhY2hlSVJDb21waWxlci5jcHAKLUBAIC0x MDMwMiw2ICsxMDMwMiwxNCBAQCBib29sIENhY2hlSVJDb21waWxlcjo6ZW1pdENvbmNhdFN0cmlu Z3NSZXN1bHQoU3RyaW5nT3BlcmFuZElkIGxoc0lkLAotICAgICBsaXZlUmVncy5hZGQoSUNUYWls Q2FsbFJlZyk7Ci0gI2VuZGlmCi0gICAgIGxpdmVSZWdzLnRha2VVbmNoZWNrZWQob3V0cHV0LnZh bHVlUmVnKCkpOwotKwotKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAgIC8vIE9uIFBQQzY0 LCBMUiBpcyBhbiBTUFIsIG5vdCBhIEdQUiwgc28gSUNUYWlsQ2FsbFJlZyBpcyBhIHJlZ3VsYXIK LSsgICAgLy8gR1BSIHRoYXQgZG9lcyBub3Qgc2hhZG93IExSLiBUaGUgaW5uZXIgYmN0cmwgd2ls bCBjbG9iYmVyIExSLCBzbwotKyAgICAvLyBzYXZlL3Jlc3RvcmUgaXQgZXhwbGljaXRseS4KLSsg ICAgbWFzbS54c19tZmxyKHIwKTsKLSsgICAgbWFzbS5wdXNoKHIwKTsKLSsjZW5kaWYKLSAgICAg bWFzbS5QdXNoUmVnc0luTWFzayhsaXZlUmVncyk7Ci0gCi0gICAgIC8vIFRoZSBzdHViIGV4cGVj dHMgbGhzIGluIENhbGxUZW1wUmVnMCBhbmQgcmhzIGluIENhbGxUZW1wUmVnMS4KLUBAIC0xMDMy MiwxMSArMTAzMzAsMTkgQEAgYm9vbCBDYWNoZUlSQ29tcGlsZXI6OmVtaXRDb25jYXRTdHJpbmdz UmVzdWx0KFN0cmluZ09wZXJhbmRJZCBsaHNJZCwKLSAgICAgbWFzbS5icmFuY2hUZXN0UHRyKEFz c2VtYmxlcjo6WmVybywgQ2FsbFRlbXBSZWc1LCBDYWxsVGVtcFJlZzUsICZ2bUNhbGwpOwotICAg ICBtYXNtLnRhZ1ZhbHVlKEpTVkFMX1RZUEVfU1RSSU5HLCBDYWxsVGVtcFJlZzUsIG91dHB1dC52 YWx1ZVJlZygpKTsKLSAgICAgbWFzbS5Qb3BSZWdzSW5NYXNrKGxpdmVSZWdzKTsKLSsjaWZkZWYg SlNfQ09ERUdFTl9QUEM2NAotKyAgICBtYXNtLnBvcChyMCk7Ci0rICAgIG1hc20ueHNfbXRscihy MCk7Ci0rI2VuZGlmCi0gICAgIG1hc20uanVtcCgmZG9uZSk7Ci0gCi0gICAgIG1hc20uYmluZCgm dm1DYWxsKTsKLSAgICAgbWFzbS5zZXRGcmFtZVB1c2hlZChmcmFtZVB1c2hlZCk7Ci0gICAgIG1h c20uUG9wUmVnc0luTWFzayhsaXZlUmVncyk7Ci0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsg ICAgbWFzbS5wb3AocjApOwotKyAgICBtYXNtLnhzX210bHIocjApOwotKyNlbmRpZgotICAgfQot IAotICAgewotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvQ29kZUdlbmVyYXRvci5jcHAgYi9qcy9z cmMvaml0L0NvZGVHZW5lcmF0b3IuY3BwCi1pbmRleCBhMWMwMTQwOWU5ZjcuLjJhMmM2MDA3YWVj MCAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvQ29kZUdlbmVyYXRvci5jcHAKLSsrKyBiL2pzL3Ny Yy9qaXQvQ29kZUdlbmVyYXRvci5jcHAKLUBAIC0yNTE5LDYgKzI1MTksMTIgQEAgc3RhdGljIGJv b2wgUHJlcGFyZUFuZEV4ZWN1dGVSZWdFeHAoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ2lzdGVy IHJlZ2V4cCwKLSAgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MoQWRkcmVzcyhGcmFtZVBv aW50ZXIsIGlvT2Zmc2V0KSwgdGVtcDIpOwotICAgbWFzbS5QdXNoUmVnc0luTWFzayh2b2xhdGls ZVJlZ3MpOwotICAgbWFzbS5zZXR1cFVuYWxpZ25lZEFCSUNhbGwodGVtcDMpOwotKyNpZiBkZWZp bmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICAvLyB0ZW1wMSBhbGlhc2VzIGFyZ3JlZ3Mgb24gdGhp cyBwbGF0Zm9ybSwgc28gd2UgbmVlZCB0byByZXVzZSB0ZW1wMwotKyAgLy8gb3Igd2UnbGwgc3Rv bXAgb24gdGhlIGNvZGUgcG9pbnRlciB3aGVuIHdlIHBhc3MgdGhlIGZpcnN0IEFCSSBhcmd1bWVu dC4KLSsgIG1hc20ubW92ZVB0cihjb2RlUG9pbnRlciwgdGVtcDMpOwotKyAgY29kZVBvaW50ZXIg PSB0ZW1wMzsKLSsjZW5kaWYKLSAgIG1hc20ucGFzc0FCSUFyZyh0ZW1wMik7Ci0gICBtYXNtLmNh bGxXaXRoQUJJKGNvZGVQb2ludGVyKTsKLSAgIG1hc20uc3RvcmVDYWxsSW50MzJSZXN1bHQodGVt cDEpOwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvQ29kZUdlbmVyYXRvci5oIGIvanMvc3JjL2pp dC9Db2RlR2VuZXJhdG9yLmgKLWluZGV4IDU4YzA0N2RlYTQxYi4uMzc4MWI5NTk1ZGZkIDEwMDY0 NAotLS0tIGEvanMvc3JjL2ppdC9Db2RlR2VuZXJhdG9yLmgKLSsrKyBiL2pzL3NyYy9qaXQvQ29k ZUdlbmVyYXRvci5oCi1AQCAtMjMsNiArMjMsOCBAQAotICMgIGluY2x1ZGUgImppdC9sb29uZzY0 L0NvZGVHZW5lcmF0b3ItbG9vbmc2NC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVND VjY0KQotICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L0NvZGVHZW5lcmF0b3ItcmlzY3Y2NC5oIgot KyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsjICBpbmNsdWRlICJqaXQvcHBjNjQv Q29kZUdlbmVyYXRvci1wcGM2NC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIp Ci0gIyAgaW5jbHVkZSAiaml0L3dhc20zMi9Db2RlR2VuZXJhdG9yLXdhc20zMi5oIgotICNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvRWZmZWN0 aXZlQWRkcmVzc0FuYWx5c2lzLmNwcCBiL2pzL3NyYy9qaXQvRWZmZWN0aXZlQWRkcmVzc0FuYWx5 c2lzLmNwcAotaW5kZXggZTFiZDFiZDA0NWVmLi44ODY5N2MwNjkwN2MgMTAwNjQ0Ci0tLS0gYS9q cy9zcmMvaml0L0VmZmVjdGl2ZUFkZHJlc3NBbmFseXNpcy5jcHAKLSsrKyBiL2pzL3NyYy9qaXQv RWZmZWN0aXZlQWRkcmVzc0FuYWx5c2lzLmNwcAotQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIGJv b2wgT2Zmc2V0SXNTbWFsbEVub3VnaChpbnQzMl90IGltbSkgewotICAgLy8gYG1vdm4gI2ltbWAu ICBhcm0zMiBpcyBzaW1pbGFyLgotICAgcmV0dXJuIGltbSA+PSAtMHhGRkZGICYmIGltbSA8PSAw eEZGRkY7Ci0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9MT09ORzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpCi0r ICAgIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKLSAgIHJldHVybiBpbW0gPj0gLTB4RkZGICYmIGltbSA8PSAweEZGRjsKLSAjZWxpZiBkZWZp bmVkKEpTX0NPREVHRU5fV0FTTTMyKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKLSAgIHJl dHVybiB0cnVlOwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j cHAgYi9qcy9zcmMvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCi1pbmRleCAzNDBhNjM5NjRi NTIuLmM5MzM2ZmU4ZWM0ZSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvRXhlY3V0YWJsZUFsbG9j YXRvci5jcHAKLSsrKyBiL2pzL3NyYy9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKLUBAIC0z MDYsMTMgKzMwNiwxOSBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBvaXNvbkNvZGUoSlNS dW50aW1lKiBydCwKLSAgICAgfQotICAgfQotIAotLSAgLy8gTWFrZSB0aGUgcG9vbHMgZXhlY3V0 YWJsZSBhZ2FpbiBhbmQgZHJvcCByZWZlcmVuY2VzLiBXZSBkb24ndCBmbHVzaCB0aGUKLS0gIC8v IElDYWNoZSBoZXJlIHRvIG5vdCBhZGQgZXh0cmEgb3ZlcmhlYWQuCi0rICAvLyBNYWtlIHRoZSBw b29scyBleGVjdXRhYmxlIGFnYWluIGFuZCBkcm9wIHJlZmVyZW5jZXMuIE9uIGFyY2hpdGVjdHVy ZXMgd2l0aAotKyAgLy8gaW5jb2hlcmVudCBJQ2FjaGUgKFBQQzY0KSwgd2UgbXVzdCBmbHVzaCB0 byBwcmV2ZW50IHN0YWxlIGluc3RydWN0aW9uCi0rICAvLyBleGVjdXRpb24gd2hlbiBjb2RlIHJl Z2lvbnMgYXJlIHJldXNlZCBhZnRlciBzd2VlcGluZy4KLSAgIGZvciAoc2l6ZV90IGkgPSAwOyBp IDwgcmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgRXhlY3V0YWJsZVBvb2wqIHBvb2wgPSBy YW5nZXNbaV0ucG9vbDsKLSAgICAgaWYgKHBvb2wtPmlzTWFya2VkKCkpIHsKLSsjaWZkZWYgSlNf Q09ERUdFTl9QUEM2NAotKyAgICAgIHJlcHJvdGVjdFBvb2wocnQsIHBvb2wsIFByb3RlY3Rpb25T ZXR0aW5nOjpFeGVjdXRhYmxlLAotKyAgICAgICAgICAgICAgICAgICAgTXVzdEZsdXNoSUNhY2hl OjpZZXMpOwotKyNlbHNlCi0gICAgICAgcmVwcm90ZWN0UG9vbChydCwgcG9vbCwgUHJvdGVjdGlv blNldHRpbmc6OkV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICBNdXN0Rmx1c2hJQ2Fj aGU6Ok5vKTsKLSsjZW5kaWYKLSAgICAgICBwb29sLT51bm1hcmsoKTsKLSAgICAgfQotICAgICBw b29sLT5yZWxlYXNlKCk7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9GbHVzaElDYWNoZS5jcHAg Yi9qcy9zcmMvaml0L0ZsdXNoSUNhY2hlLmNwcAotaW5kZXggZDNiMTY1N2E2YmUyLi45NTkwNjg3 Yzk4MDMgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L0ZsdXNoSUNhY2hlLmNwcAotKysrIGIvanMv c3JjL2ppdC9GbHVzaElDYWNoZS5jcHAKLUBAIC0xMyw3ICsxMyw4IEBACi0gIyAgaW5jbHVkZSAi aml0L2FybTY0L3ZpeGwvU2ltdWxhdG9yLXZpeGwuaCIKLSAjZW5kaWYKLSAKLS0jaWYgZGVmaW5l ZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQotKyNpZiBkZWZp bmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IFwKLSsg ICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotIAotICMgIGlmZGVmIF9fbGludXhfXwotICMg ICAgaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvRmx1 c2hJQ2FjaGUuaCBiL2pzL3NyYy9qaXQvRmx1c2hJQ2FjaGUuaAotaW5kZXggYWY3OWRhMzU2ZWU1 Li41ODM5NmY2MmFlMGQgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L0ZsdXNoSUNhY2hlLmgKLSsr KyBiL2pzL3NyYy9qaXQvRmx1c2hJQ2FjaGUuaAotQEAgLTIxLDcgKzIxLDcgQEAgaW5saW5lIHZv aWQgRmx1c2hJQ2FjaGUodm9pZCogY29kZSwgc2l6ZV90IHNpemUpIHsKLSB9Ci0gI2VsaWYgKGRl ZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkpIHx8ICBc Ci0gICAgIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAgICBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotIAot IC8vIEludmFsaWRhdGUgdGhlIGdpdmVuIGNvZGUgcmFuZ2UgZnJvbSB0aGUgaWNhY2hlLiBUaGlz IHdpbGwgYWxzbyBmbHVzaCB0aGUKLSAvLyBleGVjdXRpb24gY29udGV4dCBmb3IgdGhpcyBjb3Jl LiBJZiB0aGlzIGNvZGUgaXMgdG8gYmUgZXhlY3V0ZWQgb24gYW5vdGhlcgotQEAgLTM3LDcgKzM3 LDcgQEAgaW5saW5lIHZvaWQgRmx1c2hJQ2FjaGUodm9pZCogY29kZSwgc2l6ZV90IHNpemUpIHsg TU9aX0NSQVNIKCk7IH0KLSAjICBlcnJvciAiVW5rbm93biBhcmNoaXRlY3R1cmUhIgotICNlbmRp ZgotIAotLSNpZiAoZGVmaW5lZChKU19DT0RFR0VOX1g4NikgfHwgZGVmaW5lZChKU19DT0RFR0VO X1g2NCkpIHx8ICAgICAgXAotKyNpZiAoZGVmaW5lZChKU19DT0RFR0VOX1g4NikgfHwgZGVmaW5l ZChKU19DT0RFR0VOX1g2NCkpIHx8ICAgIFwKLSAgICAgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKLSAgICAgZGVmaW5lZChKU19D T0RFR0VOX1JJU0NWNjQpCi0gCi1AQCAtNTUsMTAgKzU1LDExIEBAIGlubGluZSB2b2lkIEZsdXNo RXhlY3V0aW9uQ29udGV4dCgpIHsgTU9aX0NSQVNIKCk7IH0KLSBpbmxpbmUgYm9vbCBDYW5GbHVz aEV4ZWN1dGlvbkNvbnRleHRGb3JBbGxUaHJlYWRzKCkgeyBNT1pfQ1JBU0goKTsgfQotIGlubGlu ZSB2b2lkIEZsdXNoRXhlY3V0aW9uQ29udGV4dEZvckFsbFRocmVhZHMoKSB7IE1PWl9DUkFTSCgp OyB9Ci0gCi0tI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RF R0VOX0FSTTY0KQotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9BUk02NCkgfHwgXAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gCi0t Ly8gQVJNIGFuZCBBUk02NCBtdXN0IGZsdXNoIHRoZSBpbnN0cnVjdGlvbiBwaXBlbGluZSBvZiB0 aGUgY3VycmVudCBjb3JlCi0tLy8gYmVmb3JlIGV4ZWN1dGluZyBuZXdseSBKSVQnZWQgY29kZS4g VGhpcyB3aWxsIHJlbW92ZSBhbnkgc3RhbGUgZGF0YSBmcm9tCi0rLy8gQVJNLCBBUk02NCwgYW5k IFBQQzY0IG11c3QgZmx1c2ggdGhlIGluc3RydWN0aW9uIHBpcGVsaW5lIG9mIHRoZSBjdXJyZW50 Ci0rLy8gY29yZSBiZWZvcmUgZXhlY3V0aW5nIG5ld2x5IEpJVCdlZCBjb2RlLiBUaGlzIHdpbGwg cmVtb3ZlIGFueSBzdGFsZSBkYXRhIGZyb20KLSAvLyB0aGUgcGlwZWxpbmUgdGhhdCBtYXkgaGF2 ZSByZWZlcmVuY2VkIGludmFsaWRhdGVkIGluc3RydWN0aW9ucy4KLSAvLwotIC8vIGBGbHVzaElD YWNoZWAgd2lsbCBwZXJmb3JtIHRoaXMgZm9yIHRoZSB0aHJlYWQgdGhhdCBjb21waWxlcyB0aGUg Y29kZSwgYnV0Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9HZW5lcmF0ZUFCSUZ1bmN0aW9uVHlw ZS5weSBiL2pzL3NyYy9qaXQvR2VuZXJhdGVBQklGdW5jdGlvblR5cGUucHkKLWluZGV4IDA0YmUx MGQxZGUyYS4uODE1NDI3ZWM2NzcxIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9HZW5lcmF0ZUFC SUZ1bmN0aW9uVHlwZS5weQotKysrIGIvanMvc3JjL2ppdC9HZW5lcmF0ZUFCSUZ1bmN0aW9uVHlw ZS5weQotQEAgLTUzOCw2ICs1MzgsMTAyIEBAIGRlZiByaXNjdjY0X3NpbXVsYXRvcl9kaXNwYXRj aChmdW5jX3R5cGVzKToKLSAgICAgcmV0dXJuIGNvbnRlbnRzCi0gCi0gCi0rIyBQUEM2NCBFTEZ2 MiBBQkk6IDggaW50IGFyZyByZWdzIChyMy1yMTApLCAxMyBGUCBhcmcgcmVncyAoZjEtZjEzKS4K LSsjIEVhY2ggZmxvYXRpbmctcG9pbnQgYXJndW1lbnQgY29uc3VtZXMgQk9USCBhIGZsb2F0LWFy ZyBzbG90IEFORCBhCi0rIyBnZW5lcmFsLXB1cnBvc2UtcmVnaXN0ZXIgc2hhZG93IHNsb3QgKGNh cHBlZCBhdCA4IEdQUiBzbG90cyksIG1hdGNoaW5nCi0rIyB3aGF0IEdDQyBhbmQgdGhlIEpJVCdz IEFCSUFyZ0dlbmVyYXRvciBkbyBmb3IgRUxGdjIgUFBDNjRMRS4gV2l0aG91dAotKyMgdGhlIHNo YWRvdywgaW50ZWdlciBhcmdzIGZvbGxvd2luZyBhIGZsb2F0IGdvIHRvIHRoZSB3cm9uZyByZWdp c3RlcgotKyMgYXQgdGhlIGNhbGwgYm91bmRhcnksIHByb2R1Y2luZyBhIHVzZS1hZnRlci1mcmVl IC8gd3JvbmctcG9pbnRlciBjcmFzaAotKyMgaW4gdGhlIEMgY2FsbGVlLiAoVmVyaWZpZWQgZW1w aXJpY2FsbHkgYnkgZGlzYXNzZW1ibGluZwotKyMgTnVtYmVyQmlnSW50Q29tcGFyZShkb3VibGUs IEJpZ0ludCopIG9uIHJlYWwgUFBDNjQ6IEJpZ0ludCogaXMgcmVhZAotKyMgZnJvbSByNCwgbm90 IHIzLikKLStkZWYgcHBjNjRfYXJncyhmdW5jX3R5cGUpOgotKyAgICBjb250ZW50cyA9ICIiCi0r ICAgIG51bUludEFyZ1JlZ3MgPSA4Ci0rICAgIG51bUZsb2F0QXJnUmVncyA9IDEzCi0rICAgIGlu dFJlZ0luZGV4ID0gMAotKyAgICBmbG9hdFJlZ0luZGV4ID0gMAotKyAgICBzdGFja09mZnNldCA9 IDAKLSsgICAgZm9yIGksIGFyZyBpbiBlbnVtZXJhdGUoZnVuY190eXBlWyJhcmdzIl0pOgotKyAg ICAgICAgaWYgaSAhPSAwOgotKyAgICAgICAgICAgIGNvbnRlbnRzICs9ICIsICIKLSsKLSsgICAg ICAgIGlmIGFyZyA9PSAiR2VuZXJhbCI6Ci0rICAgICAgICAgICAgaWYgaW50UmVnSW5kZXggPT0g bnVtSW50QXJnUmVnczoKLSsgICAgICAgICAgICAgICAgY29udGVudHMgKz0gZiJzcF9be3N0YWNr T2Zmc2V0fV0iCi0rICAgICAgICAgICAgICAgIHN0YWNrT2Zmc2V0ICs9IDEKLSsgICAgICAgICAg ICBlbHNlOgotKyAgICAgICAgICAgICAgICBjb250ZW50cyArPSBmImF7aW50UmVnSW5kZXh9XyIK LSsgICAgICAgICAgICAgICAgaW50UmVnSW5kZXggKz0gMQotKyAgICAgICAgZWxpZiBhcmcgPT0g IkludDMyIjoKLSsgICAgICAgICAgICBpZiBpbnRSZWdJbmRleCA9PSBudW1JbnRBcmdSZWdzOgot KyAgICAgICAgICAgICAgICBjb250ZW50cyArPSBmIkkzMihzcF9be3N0YWNrT2Zmc2V0fV0pIgot KyAgICAgICAgICAgICAgICBzdGFja09mZnNldCArPSAxCi0rICAgICAgICAgICAgZWxzZToKLSsg ICAgICAgICAgICAgICAgY29udGVudHMgKz0gZiJJMzIoYXtpbnRSZWdJbmRleH1fKSIKLSsgICAg ICAgICAgICAgICAgaW50UmVnSW5kZXggKz0gMQotKyAgICAgICAgZWxpZiBhcmcgPT0gIkludDY0 IjoKLSsgICAgICAgICAgICBpZiBpbnRSZWdJbmRleCA9PSBudW1JbnRBcmdSZWdzOgotKyAgICAg ICAgICAgICAgICBjb250ZW50cyArPSBmInNwX1t7c3RhY2tPZmZzZXR9XSIKLSsgICAgICAgICAg ICAgICAgc3RhY2tPZmZzZXQgKz0gMQotKyAgICAgICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAg ICAgIGNvbnRlbnRzICs9IGYiYXtpbnRSZWdJbmRleH1fIgotKyAgICAgICAgICAgICAgICBpbnRS ZWdJbmRleCArPSAxCi0rICAgICAgICBlbGlmIGFyZyA9PSAiRmxvYXQzMiI6Ci0rICAgICAgICAg ICAgaWYgZmxvYXRSZWdJbmRleCA9PSBudW1GbG9hdEFyZ1JlZ3M6Ci0rICAgICAgICAgICAgICAg IGNvbnRlbnRzICs9IGYiKm1vemlsbGE6OkJpdHdpc2VDYXN0PGZsb2F0Kj4oc3BfW3tzdGFja09m ZnNldH1dKSIKLSsgICAgICAgICAgICAgICAgc3RhY2tPZmZzZXQgKz0gMQotKyAgICAgICAgICAg IGVsc2U6Ci0rICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IGYiZntmbG9hdFJlZ0luZGV4fV9z IgotKyAgICAgICAgICAgICAgICBmbG9hdFJlZ0luZGV4ICs9IDEKLSsgICAgICAgICAgICAjIEVM RnYyOiBGUCBhcmcgYWxzbyBjb25zdW1lcyBhIEdQUiBzaGFkb3cgc2xvdC4KLSsgICAgICAgICAg ICBpZiBpbnRSZWdJbmRleCA8IG51bUludEFyZ1JlZ3M6Ci0rICAgICAgICAgICAgICAgIGludFJl Z0luZGV4ICs9IDEKLSsgICAgICAgIGVsaWYgYXJnID09ICJGbG9hdDY0IjoKLSsgICAgICAgICAg ICBpZiBmbG9hdFJlZ0luZGV4ID09IG51bUZsb2F0QXJnUmVnczoKLSsgICAgICAgICAgICAgICAg Y29udGVudHMgKz0gZiJtb3ppbGxhOjpCaXR3aXNlQ2FzdDxkb3VibGU+KHNwX1t7c3RhY2tPZmZz ZXR9XSkiCi0rICAgICAgICAgICAgICAgIHN0YWNrT2Zmc2V0ICs9IDEKLSsgICAgICAgICAgICBl bHNlOgotKyAgICAgICAgICAgICAgICBjb250ZW50cyArPSBmImZ7ZmxvYXRSZWdJbmRleH1fZCIK LSsgICAgICAgICAgICAgICAgZmxvYXRSZWdJbmRleCArPSAxCi0rICAgICAgICAgICAgIyBFTEZ2 MjogRlAgYXJnIGFsc28gY29uc3VtZXMgYSBHUFIgc2hhZG93IHNsb3QuCi0rICAgICAgICAgICAg aWYgaW50UmVnSW5kZXggPCBudW1JbnRBcmdSZWdzOgotKyAgICAgICAgICAgICAgICBpbnRSZWdJ bmRleCArPSAxCi0rICAgIGFzc2VydCBpbnRSZWdJbmRleCA8PSBudW1JbnRBcmdSZWdzCi0rICAg IGFzc2VydCBmbG9hdFJlZ0luZGV4IDw9IG51bUZsb2F0QXJnUmVncwotKyAgICByZXR1cm4gY29u dGVudHMKLSsKLSsKLStkZWYgcHBjNjRfc2ltdWxhdG9yX2Rpc3BhdGNoKGZ1bmNfdHlwZXMpOgot KyAgICBjb250ZW50cyA9ICIiCi0rICAgIGZvciBmdW5jX3R5cGUgaW4gZnVuY190eXBlczoKLSsg ICAgICAgIGFyZ3MgPSBwcGM2NF9hcmdzKGZ1bmNfdHlwZSkKLSsgICAgICAgIGNvbnRlbnRzICs9 IGYiY2FzZSBqczo6aml0OjpBcmdzX3tmdW5jX3R5cGVfbmFtZShmdW5jX3R5cGUpfToge3tcXFxu IgotKyAgICAgICAgY29udGVudHMgKz0gZiIgIGF1dG8gdGFyZ2V0ID0gcmVpbnRlcnByZXRfY2Fz dDxQcm90b3R5cGVfe2Z1bmNfdHlwZV9uYW1lKGZ1bmNfdHlwZSl9PihuYXRpdmVGbik7XFxcbiIK LSsgICAgICAgIHJldCA9IGZ1bmNfdHlwZVsicmV0Il0KLSsgICAgICAgIGlmIHJldCA9PSAiVm9p ZCI6Ci0rICAgICAgICAgICAgY29udGVudHMgKz0gZiIgIHRhcmdldCh7YXJnc30pO1xcXG4iCi0r ICAgICAgICBlbHNlOgotKyAgICAgICAgICAgIGNvbnRlbnRzICs9IGYiICBhdXRvIHJldCA9IHRh cmdldCh7YXJnc30pO1xcXG4iCi0rICAgICAgICBpZiByZXQgPT0gIlZvaWQiOgotKyAgICAgICAg ICAgIHBhc3MKLSsgICAgICAgIGVsaWYgcmV0ID09ICJHZW5lcmFsIjoKLSsgICAgICAgICAgICBj b250ZW50cyArPSAiICBzZXRDYWxsUmVzdWx0KHJldCk7XFxcbiIKLSsgICAgICAgIGVsaWYgcmV0 ID09ICJJbnQzMiI6Ci0rICAgICAgICAgICAgY29udGVudHMgKz0gIiAgc2V0Q2FsbFJlc3VsdChJ NjQocmV0KSk7XFxcbiIKLSsgICAgICAgIGVsaWYgcmV0ID09ICJJbnQ2NCI6Ci0rICAgICAgICAg ICAgY29udGVudHMgKz0gIiAgc2V0Q2FsbFJlc3VsdChyZXQpO1xcXG4iCi0rICAgICAgICBlbGlm IHJldCA9PSAiRmxvYXQzMiI6Ci0rICAgICAgICAgICAgY29udGVudHMgKz0gIiAgc2V0Q2FsbFJl c3VsdEZsb2F0KHJldCk7XFxcbiIKLSsgICAgICAgIGVsaWYgcmV0ID09ICJGbG9hdDY0IjoKLSsg ICAgICAgICAgICBjb250ZW50cyArPSAiICBzZXRDYWxsUmVzdWx0RG91YmxlKHJldCk7XFxcbiIK LSsgICAgICAgIGVsc2U6Ci0rICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmIlVua25vd24g cmV0IHR5cGU6IHtyZXR9IikKLSsgICAgICAgIGNvbnRlbnRzICs9ICIgIGJyZWFrO1xcXG4iCi0r ICAgICAgICBjb250ZW50cyArPSAifVxcXG4iCi0rICAgIHJldHVybiBjb250ZW50cwotKwotKwot IGRlZiBtYWluKGNfb3V0LCB5YW1sX3BhdGgpOgotICAgICBmdW5jX3R5cGVzID0gbG9hZF95YW1s KHlhbWxfcGF0aCkKLSAKLUBAIC01ODEsNCArNjc3LDggQEAgZGVmIG1haW4oY19vdXQsIHlhbWxf cGF0aCk6Ci0gICAgIGNvbnRlbnRzICs9IHJpc2N2NjRfc2ltdWxhdG9yX2Rpc3BhdGNoKGZ1bmNf dHlwZXMpCi0gICAgIGNvbnRlbnRzICs9ICJcbiIKLSAKLSsgICAgY29udGVudHMgKz0gIiNkZWZp bmUgQUJJX0ZVTkNUSU9OX1RZUEVfUFBDNjRfU0lNX0RJU1BBVENIIFxcXG4iCi0rICAgIGNvbnRl bnRzICs9IHBwYzY0X3NpbXVsYXRvcl9kaXNwYXRjaChmdW5jX3R5cGVzKQotKyAgICBjb250ZW50 cyArPSAiXG4iCi0rCi0gICAgIGdlbmVyYXRlX2hlYWRlcihjX291dCwgImppdF9BQklGdW5jdGlv blR5cGVHZW5lcmF0ZWRfaCIsIGNvbnRlbnRzKQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvSml0 Q29udGV4dC5jcHAgYi9qcy9zcmMvaml0L0ppdENvbnRleHQuY3BwCi1pbmRleCA3OWIyMmQ5ZjI0 OWYuLmQzOTlkZGQzNmZkNCAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvSml0Q29udGV4dC5jcHAK LSsrKyBiL2pzL3NyYy9qaXQvSml0Q29udGV4dC5jcHAKLUBAIC0xMjEsNiArMTIxLDEwIEBAIGJv b2wgaml0OjpJbml0aWFsaXplSml0KCkgewotICAgUlZGbGFnczo6SW5pdCgpOwotICNlbmRpZgot IAotKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICBQUEM2NEZsYWdzOjpJbml0KCk7Ci0rI2Vu ZGlmCi0rCi0gI2lmbmRlZiBKU19DT0RFR0VOX05PTkUKLSAgIE1PWl9BU1NFUlQoanM6OmppdDo6 Q1BVRmxhZ3NIYXZlQmVlbkNvbXB1dGVkKCkpOwotICNlbmRpZgotZGlmZiAtLWdpdCBhL2pzL3Ny Yy9qaXQvSml0RnJhbWVzLmNwcCBiL2pzL3NyYy9qaXQvSml0RnJhbWVzLmNwcAotaW5kZXggMzY1 M2FmM2EyMWY0Li5iYmQxMzc2ZGVjNjkgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L0ppdEZyYW1l cy5jcHAKLSsrKyBiL2pzL3NyYy9qaXQvSml0RnJhbWVzLmNwcAotQEAgLTE4MjQsNyArMTgyNCwx MiBAQCBWYWx1ZSBTbmFwc2hvdEl0ZXJhdG9yOjphbGxvY2F0aW9uVmFsdWUoY29uc3QgUlZhbHVl QWxsb2NhdGlvbiYgYWxsb2MsCi0gICAgICAgcmV0dXJuIERvdWJsZVZhbHVlKGZyb21SZWdpc3Rl cjxkb3VibGU+KGFsbG9jLmZwdVJlZygpKSk7Ci0gCi0gICAgIGNhc2UgUlZhbHVlQWxsb2NhdGlv bjo6RkxPQVQzMl9SRUc6Ci0rI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rICAgICAgcmV0dXJuIEZsb2F0MzJWYWx1ZSgKLSsgICAg ICAgICAgZmxvYXQoZnJvbVJlZ2lzdGVyPGRvdWJsZT4oYWxsb2MuZnB1UmVnKCkuYXNEb3VibGUo KSkpKTsKLSsjZWxzZQotICAgICAgIHJldHVybiBGbG9hdDMyVmFsdWUoZnJvbVJlZ2lzdGVyPGZs b2F0PihhbGxvYy5mcHVSZWcoKSkpOwotKyNlbmRpZgotIAotICAgICBjYXNlIFJWYWx1ZUFsbG9j YXRpb246OkZMT0FUMzJfU1RBQ0s6Ci0gICAgICAgcmV0dXJuIEZsb2F0MzJWYWx1ZShSZWFkRnJh bWVGbG9hdDMyU2xvdChmcF8sIGFsbG9jLnN0YWNrT2Zmc2V0KCkpKTsKLUBAIC0yNjI1LDcgKzI2 MzAsMTIgQEAgdWludHB0cl90IE1hY2hpbmVTdGF0ZTo6cmVhZChSZWdpc3RlciByZWcpIGNvbnN0 IHsKLSAKLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSBUIE1hY2hpbmVTdGF0ZTo6cmVhZChGbG9h dFJlZ2lzdGVyIHJlZykgY29uc3QgewotKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAgLy8gUFBDNjQvUklTQ1Y2NCBhbHdheXMg c3RvcmUgRmxvYXRSZWdpc3RlcnMgYXMgNjQtYml0IGRvdWJsZXMuCi0rICBNT1pfQVNTRVJUKHJl Zy5zaXplKCkgPj0gc2l6ZW9mKFQpKTsKLSsjZWxzZQotICAgTU9aX0FTU0VSVChyZWcuc2l6ZSgp ID09IHNpemVvZihUKSk7Ci0rI2VuZGlmCi0gCi0gI2lmICFkZWZpbmVkKEpTX0NPREVHRU5fTk9O RSkgJiYgIWRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCi0gICBpZiAoc3RhdGVfLmlzPEJhaWxv dXRTdGF0ZT4oKSkgewotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvSml0RnJhbWVzLmggYi9qcy9z cmMvaml0L0ppdEZyYW1lcy5oCi1pbmRleCBhYzcwMDVhNWZjZmMuLjQ5MDgzNGU2MmZlYyAxMDA2 NDQKLS0tLSBhL2pzL3NyYy9qaXQvSml0RnJhbWVzLmgKLSsrKyBiL2pzL3NyYy9qaXQvSml0RnJh bWVzLmgKLUBAIC0zMjIsNiArMzIyLDE2IEBAIGVudW0gY2xhc3MgRXhjZXB0aW9uUmVzdW1lS2lu ZCA6IGludDMyX3QgewotIAotIC8vIERhdGEgbmVlZGVkIHRvIHJlY292ZXIgZnJvbSBhbiBleGNl cHRpb24uCi0gc3RydWN0IFJlc3VtZUZyb21FeGNlcHRpb24gewotKyNpZiBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCi0rICAvLyBUaGlzIHN0cnVjdCBpcyBidWlsdCBvbiB0aGUgc3RhY2sgYXMg cGFydCBvZiBleGNlcHRpb24gcmV0dXJucy4gQmVjYXVzZQotKyAgLy8gaXQgZ29lcyByaWdodCBv biB0b3Agb2YgdGhlIHN0YWNrLCBhbiBBQkktY29tcGxpYW50IHJvdXRpbmUgY2FuIHdyZWNrCi0r ICAvLyBpdCwgc28gd2UgaW1wbGVtZW50IGEgbWluaW11bSBQb3dlciBJU0EgbGlua2FnZSBhcmVh IChmb3VyIGRvdWJsZXdvcmRzKS4KLSsgIHZvaWQqIF9wcGNfc3BfOwotKyAgdm9pZCogX3BwY19j cl87Ci0rICB2b2lkKiBfcHBjX2xyXzsKLSsgIHZvaWQqIF9wcGNfdG9jXzsKLSsjZW5kaWYKLSsK LSAgIHVpbnQ4X3QqIGZyYW1lUG9pbnRlcjsKLSAgIHVpbnQ4X3QqIHN0YWNrUG9pbnRlcjsKLSAg IHVpbnQ4X3QqIHRhcmdldDsKLUBAIC0zNzMsNyArMzgzLDcgQEAgc3RydWN0IFJlc3VtZUZyb21F eGNlcHRpb24gewotICAgfQotIH07Ci0gCi0tI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkK LSsjaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBD NjQpCi0gc3RhdGljX2Fzc2VydChzaXplb2YoUmVzdW1lRnJvbUV4Y2VwdGlvbikgJSAxNiA9PSAw LAotICAgICAgICAgICAgICAgIlJlc3VtZUZyb21FeGNlcHRpb24gc2hvdWxkIGJlIGFsaWduZWQi KTsKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L0xJUi5jcHAgYi9qcy9zcmMvaml0 L0xJUi5jcHAKLWluZGV4IDJmODlmYjQwNzM0OS4uYTlmNjM0YjdmY2MxIDEwMDY0NAotLS0tIGEv anMvc3JjL2ppdC9MSVIuY3BwCi0rKysgYi9qcy9zcmMvaml0L0xJUi5jcHAKLUBAIC03NzksOCAr Nzc5LDggQEAgYm9vbCBMTW92ZUdyb3VwOjphZGQoTEFsbG9jYXRpb24gZnJvbSwgTEFsbG9jYXRp b24gdG8sIExEZWZpbml0aW9uOjpUeXBlIHR5cGUpIHsKLSAgICAgLy8gQ29kZUdlbmVyYXRvclNo YXJlZDo6Q29kZUdlbmVyYXRvclNoYXJlZCBhbmQgaW4gZ2VuZXJhbCBldmVyeXdoZXJlCi0gICAg IC8vIFNpbWRNZW1vcnlBaWdubWVudCBpcyB1c2VkLiAgTGlrZWx5LCBhbGlnbm1lbnQgcmVxdWly ZW1lbnRzIHdpbGwgcmV0dXJuLgotICMgICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCBk ZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBcCi0tICAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9B Uk02NCkKLS0gICAgICAvLyBObyBuZWVkIGZvciBhbnkgY2hlY2sgb24geDg2L3g2NC9hcm02NC4K LSsgICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f UFBDNjQpCi0rICAgICAgLy8gTm8gbmVlZCBmb3IgYW55IGNoZWNrIG9uIHg4Ni94NjQvYXJtNjQv cHBjNjQuCi0gIyAgIGVsc2UKLSAjICAgICBlcnJvciAiTmVlZCB0byBjb25zaWRlciBTSU1EIGFs aWdubWVudCBvbiB0aGlzIHRhcmdldC4iCi0gICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIG1h eSBiZSBvZiB1c2UgaWYgd2UgbmVlZCBhbGlnbm1lbnQgY2hlY2tzIG9uCi1kaWZmIC0tZ2l0IGEv anMvc3JjL2ppdC9MSVIuaCBiL2pzL3NyYy9qaXQvTElSLmgKLWluZGV4IDNmNGVmZWRhNzk1NS4u MzM1NGNiOTZiMGNiIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9MSVIuaAotKysrIGIvanMvc3Jj L2ppdC9MSVIuaAotQEAgLTIwMCw3ICsyMDAsNyBAQCBjbGFzcyBMVXNlIDogcHVibGljIExBbGxv Y2F0aW9uIHsKLSAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBQT0xJQ1lfQklUUyA9IDM7Ci0gICBz dGF0aWMgY29uc3QgdWludDMyX3QgUE9MSUNZX1NISUZUID0gMDsKLSAgIHN0YXRpYyBjb25zdCB1 aW50MzJfdCBQT0xJQ1lfTUFTSyA9ICgxIDw8IFBPTElDWV9CSVRTKSAtIDE7Ci0tI2lmZGVmIEpT X0NPREVHRU5fQVJNNjQKLSsjaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCi0gICBzdGF0aWMgY29uc3QgdWludDMyX3QgUkVHX0JJVFMgPSA3 OwotICNlbHNlCi0gICBzdGF0aWMgY29uc3QgdWludDMyX3QgUkVHX0JJVFMgPSA2OwotQEAgLTYx OSwxMiArNjE5LDE4IEBAIGNsYXNzIExEZWZpbml0aW9uIHsKLSAgIFR5cGUgdHlwZSgpIGNvbnN0 IHsgcmV0dXJuIChUeXBlKSgoYml0c18gPj4gVFlQRV9TSElGVCkgJiBUWVBFX01BU0spOyB9Ci0g Ci0gICBzdGF0aWMgYm9vbCBpc0Zsb2F0UmVnQ29tcGF0aWJsZShUeXBlIHR5cGUsIEZsb2F0UmVn aXN0ZXIgcmVnKSB7Ci0rI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkgfHwgZGVmaW5lZChK U19DT0RFR0VOX1JJU0NWNjQpCi0rICAgIGlmICh0eXBlID09IEZMT0FUMzIgfHwgdHlwZSA9PSBE T1VCTEUpIHsKLSsgICAgICByZXR1cm4gcmVnLmlzU2luZ2xlKCkgfHwgcmVnLmlzRG91YmxlKCk7 Ci0rICAgIH0KLSsjZWxzZQotICAgICBpZiAodHlwZSA9PSBGTE9BVDMyKSB7Ci0gICAgICAgcmV0 dXJuIHJlZy5pc1NpbmdsZSgpOwotICAgICB9Ci0gICAgIGlmICh0eXBlID09IERPVUJMRSkgewot ICAgICAgIHJldHVybiByZWcuaXNEb3VibGUoKTsKLSAgICAgfQotKyNlbmRpZgotICAgICBNT1pf QVNTRVJUKHR5cGUgPT0gU0lNRDEyOCk7Ci0gICAgIHJldHVybiByZWcuaXNTaW1kMTI4KCk7Ci0g ICB9Ci1AQCAtMjI5Miw2ICsyMjk4LDggQEAgQW55UmVnaXN0ZXIgTEFsbG9jYXRpb246OnRvQW55 UmVnaXN0ZXIoKSBjb25zdCB7Ci0gIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvTElSLWxvb25nNjQu aCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAjICBpbmNsdWRlICJqaXQv cmlzY3Y2NC9MSVItcmlzY3Y2NC5oIgotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK LSsjICBpbmNsdWRlICJqaXQvcHBjNjQvTElSLXBwYzY0LmgiCi0gI2VsaWYgZGVmaW5lZChKU19D T0RFR0VOX01JUFM2NCkKLSAjICBpbmNsdWRlICJqaXQvbWlwcy1zaGFyZWQvTElSLW1pcHMtc2hh cmVkLmgiCi0gIyAgaW5jbHVkZSAiaml0L21pcHM2NC9MSVItbWlwczY0LmgiCi1kaWZmIC0tZ2l0 IGEvanMvc3JjL2ppdC9MSVJPcHMueWFtbCBiL2pzL3NyYy9qaXQvTElST3BzLnlhbWwKLWluZGV4 IDMxNWZmNWZkNTM0OC4uN2ZiZWE5ZTJlYmVjIDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9MSVJP cHMueWFtbAotKysrIGIvanMvc3JjL2ppdC9MSVJPcHMueWFtbAotQEAgLTIyMTAsNyArMjIxMCw3 IEBACi0gICAgIG9sZHZhbDogV29yZFNpemVkCi0gICAgIG5ld3ZhbDogV29yZFNpemVkCi0gICAj IE5lZWRzIGFkZGl0aW9uYWwgdGVtcHMgb24gTEwvU0MgcGxhdGZvcm1zIHRvIGV4dHJhY3QvaW5z ZXJ0IGJpdHMgb2Ygd29yZC4KLS0jaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQot KyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9P Tkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdF Tl9QUEM2NCkKLSAgIG51bV90ZW1wczogNAotICNlbHNlCi0gICBudW1fdGVtcHM6IDEKLUBAIC0y MjI0LDcgKzIyMjQsNyBAQAotICAgICBpbmRleDogV29yZFNpemVkCi0gICAgIHZhbHVlOiBXb3Jk U2l6ZWQKLSAgICMgTmVlZHMgYWRkaXRpb25hbCB0ZW1wcyBvbiBMTC9TQyBwbGF0Zm9ybXMgdG8g ZXh0cmFjdC9pbnNlcnQgYml0cyBvZiB3b3JkLgotLSNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpCi0rI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX1BQQzY0KQotICAgbnVtX3RlbXBzOiA0Ci0gI2Vsc2UKLSAgIG51bV90ZW1w czogMQotQEAgLTIyMzgsNyArMjIzOCw3IEBACi0gICAgIGluZGV4OiBXb3JkU2l6ZWQKLSAgICAg dmFsdWU6IFdvcmRTaXplZAotICAgIyBOZWVkcyBhZGRpdGlvbmFsIHRlbXBzIG9uIExML1NDIHBs YXRmb3JtcyB0byBleHRyYWN0L2luc2VydCBiaXRzIG9mIHdvcmQuCi0tI2lmIGRlZmluZWQoSlNf Q09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsjaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICBudW1fdGVtcHM6IDQKLSAjZWxzZQot ICAgbnVtX3RlbXBzOiAyCi1AQCAtMjI1NSw3ICsyMjU1LDcgQEAKLSAgICMgTmVlZHMgYWRkaXRp b25hbCB0ZW1wcyBvbiBMTC9TQyBwbGF0Zm9ybXMgdG8gZXh0cmFjdC9pbnNlcnQgYml0cyBvZiB3 b3JkLgotICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f QVJNNjQpCi0gICBudW1fdGVtcHM6IDEKLS0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJ U0NWNjQpCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19D T0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCi0gICBudW1fdGVtcHM6IDMKLSAjZW5kaWYKLSAgIG1pcl9vcDog QXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcAotQEAgLTMwNjYsNyArMzA2Niw3IEBACi0gICBv cGVyYW5kczoKLSAgICAgcHRyOiBXb3JkU2l6ZWQKLSAgICAgbWVtb3J5QmFzZTogV29yZFNpemVk Ci0tI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBT NjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f UklTQ1Y2NCkKLSsjaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RF R0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICBudW1fdGVt cHM6IDEKLSAjZW5kaWYKLSAgIG1pcl9vcDogdHJ1ZQotQEAgLTMwNzgsNyArMzA3OCw3IEBACi0g ICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAotICNpZmRlZiBKU19DT0RFR0VOX0FSTQotICAgbnVt X3RlbXBzOiAyCi0tI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChK U19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQ QzY0KQotICAgbnVtX3RlbXBzOiAxCi0gI2VuZGlmCi0gICBtaXJfb3A6IFdhc21Mb2FkCi1AQCAt MzA4OCw3ICszMDg4LDcgQEAKLSAgICAgcHRyOiBXb3JkU2l6ZWQKLSAgICAgdmFsdWU6IFdvcmRT aXplZAotICAgICBtZW1vcnlCYXNlOiBXb3JkU2l6ZWQKLS0jaWYgZGVmaW5lZChKU19DT0RFR0VO X0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyNpZiBkZWZpbmVkKEpT X0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmlu ZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIG51bV90ZW1wczogMQotICNlbmRpZgotICAgbWlyX29w OiB0cnVlCi1AQCAtMzA5OCw3ICszMDk4LDcgQEAKLSAgICAgcHRyOiBXb3JkU2l6ZWQKLSAgICAg dmFsdWU6IEludDY0Ci0gICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAotLSNpZiBkZWZpbmVkKEpT X0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rI2lmIGRl ZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAgbnVtX3RlbXBzOiAxCi0gI2VuZGlmCi0g ICBtaXJfb3A6IFdhc21TdG9yZQotQEAgLTMxMjgsNyArMzEyOCw3IEBACi0gICAgIG1lbW9yeUJh c2U6IFdvcmRTaXplZAotICNpZmRlZiBKU19DT0RFR0VOX1g4NgotICAgbnVtX3RlbXBzOiAxCi0t I2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xP T05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyNlbGlmIGRlZmluZWQoSlNf Q09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAgIyBU ZW1wIHRoYXQgbWF5IGJlIHVzZWQgb24gTEwvU0MgcGxhdGZvcm1zIGZvciBleHRyYWN0L2luc2Vy dCBiaXRzIG9mIHdvcmQuCi0gICBudW1fdGVtcHM6IDMKLSAjZW5kaWYKLUBAIC0zMTQyLDcgKzMx NDIsNyBAQAotICAgICBtZW1vcnlCYXNlOiBXb3JkU2l6ZWQKLSAjaWZkZWYgSlNfQ09ERUdFTl9Y ODYKLSAgIG51bV90ZW1wczogMQotLSNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2 NCkKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkKLSAgICMgVGVtcCB0aGF0IG1heSBiZSB1c2VkIG9uIExML1NDIHBsYXRm b3JtcyBmb3IgZXh0cmFjdC9pbnNlcnQgYml0cyBvZiB3b3JkLgotICAgbnVtX3RlbXBzOiAzCi0g I2VuZGlmCi1AQCAtMzE1NCw3ICszMTU0LDcgQEAKLSAgICAgcHRyOiBXb3JkU2l6ZWQKLSAgICAg dmFsdWU6IFdvcmRTaXplZAotICAgICBtZW1vcnlCYXNlOiBXb3JkU2l6ZWQKLS0jaWYgZGVmaW5l ZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJ U0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgICMgVGVtcCB0aGF0IG1heSBi ZSB1c2VkIG9uIExML1NDIHBsYXRmb3JtcyBmb3IgZXh0cmFjdC9pbnNlcnQgYml0cyBvZiB3b3Jk LgotICAgbnVtX3RlbXBzOiAzCi0gI2VsaWZkZWYgSlNfQ09ERUdFTl9YODYKLUBAIC0zMTcxLDcg KzMxNzEsNyBAQAotICAgICBwdHI6IFdvcmRTaXplZAotICAgICB2YWx1ZTogV29yZFNpemVkCi0g ICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAotLSNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJ U0NWNjQpCi0rI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChK U19DT0RFR0VOX1BQQzY0KQotICAgIyBUZW1wIHRoYXQgbWF5IGJlIHVzZWQgb24gTEwvU0MgcGxh dGZvcm1zIGZvciBleHRyYWN0L2luc2VydCBiaXRzIG9mIHdvcmQuCi0gICBudW1fdGVtcHM6IDMK LSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJN KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCi1AQCAtNDQyNCw2ICs0NDI0LDY0IEBACi0g ICBtaXJfb3A6IFdhc21BdG9taWNFeGNoYW5nZUhlYXAKLSAjZW5kaWYKLSAKLSsjaWZkZWYgSlNf Q09ERUdFTl9QUEM2NAotKy0gbmFtZTogRGl2T3JNb2RJNjQKLSsgIGdlbl9ib2lsZXJwbGF0ZTog ZmFsc2UKLSsKLSstIG5hbWU6IFVEaXZPck1vZAotKyAgZ2VuX2JvaWxlcnBsYXRlOiBmYWxzZQot KwotKy0gbmFtZTogVURpdk9yTW9kSTY0Ci0rICBnZW5fYm9pbGVycGxhdGU6IGZhbHNlCi0rCi0r LSBuYW1lOiBNb2RNYXNrSQotKyAgcmVzdWx0X3R5cGU6IFdvcmRTaXplZAotKyAgb3BlcmFuZHM6 Ci0rICAgIGlucHV0OiBXb3JkU2l6ZWQKLSsgIGFyZ3VtZW50czoKLSsgICAgc2hpZnQ6IGludDMy X3QKLSsgIG51bV90ZW1wczogMgotKyAgbWlyX29wOiBNb2QKLSsKLSstIG5hbWU6IFdhc21UcnVu Y2F0ZVRvSW50NjQKLSsgIHJlc3VsdF90eXBlOiBJbnQ2NAotKyAgb3BlcmFuZHM6Ci0rICAgIGlu cHV0OiBXb3JkU2l6ZWQKLSsgIG1pcl9vcDogdHJ1ZQotKwotKy0gbmFtZTogSW50NjRUb0Zsb2F0 aW5nUG9pbnQKLSsgIHJlc3VsdF90eXBlOiBXb3JkU2l6ZWQKLSsgIG9wZXJhbmRzOgotKyAgICBp bnB1dDogSW50NjQKLSsgIG1pcl9vcDogdHJ1ZQotKwotKy0gbmFtZTogV2FzbUNvbXBhcmVFeGNo YW5nZUk2NAotKyAgcmVzdWx0X3R5cGU6IEludDY0Ci0rICBvcGVyYW5kczoKLSsgICAgcHRyOiBX b3JkU2l6ZWQKLSsgICAgb2xkVmFsdWU6IEludDY0Ci0rICAgIG5ld1ZhbHVlOiBJbnQ2NAotKyAg ICBtZW1vcnlCYXNlOiBXb3JkU2l6ZWQKLSsgIG1pcl9vcDogV2FzbUNvbXBhcmVFeGNoYW5nZUhl YXAKLSsKLSstIG5hbWU6IFdhc21BdG9taWNCaW5vcEk2NAotKyAgcmVzdWx0X3R5cGU6IEludDY0 Ci0rICBvcGVyYW5kczoKLSsgICAgcHRyOiBXb3JkU2l6ZWQKLSsgICAgdmFsdWU6IEludDY0Ci0r ICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAotKyAgbnVtX3RlbXBzNjQ6IDEKLSsgIG1pcl9vcDog V2FzbUF0b21pY0Jpbm9wSGVhcAotKwotKy0gbmFtZTogV2FzbUF0b21pY0V4Y2hhbmdlSTY0Ci0r ICByZXN1bHRfdHlwZTogSW50NjQKLSsgIG9wZXJhbmRzOgotKyAgICBwdHI6IFdvcmRTaXplZAot KyAgICB2YWx1ZTogSW50NjQKLSsgICAgbWVtb3J5QmFzZTogV29yZFNpemVkCi0rICBtaXJfb3A6 IFdhc21BdG9taWNFeGNoYW5nZUhlYXAKLSsjZW5kaWYKLSsKLSAjaWZkZWYgSlNfQ09ERUdFTl9S SVNDVjY0Ci0gLSBuYW1lOiBVRGl2Ci0gICByZXN1bHRfdHlwZTogV29yZFNpemVkCi1kaWZmIC0t Z2l0IGEvanMvc3JjL2ppdC9MYWJlbC5oIGIvanMvc3JjL2ppdC9MYWJlbC5oCi1pbmRleCAwNjFi Zjk3OGQyNmYuLjJhNDlkZWQ5Yzk2NyAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvTGFiZWwuaAot KysrIGIvanMvc3JjL2ppdC9MYWJlbC5oCi1AQCAtMjMsNyArMjMsNyBAQCBzdHJ1Y3QgTGFiZWxC YXNlIHsKLSAgIHVpbnQzMl90IG9mZnNldF8gOiAzMTsKLSAKLSAjaWYgZGVmaW5lZChKU19DT0RF R0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKLS0gICAgZGVm aW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gIHB1YmxpYzoKLSAjZW5kaWYKLSAgIHN0 YXRpYyBjb25zdCB1aW50MzJfdCBJTlZBTElEX09GRlNFVCA9IDB4N2ZmZmZmZmY7ICAvLyBVSU5U MzFfTUFYLgotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvTG93ZXJpbmcuY3BwIGIvanMvc3JjL2pp dC9Mb3dlcmluZy5jcHAKLWluZGV4IDljMWM0YjBkZjQ5MS4uZTNmZTcxZWE5YzgzIDEwMDY0NAot LS0tIGEvanMvc3JjL2ppdC9Mb3dlcmluZy5jcHAKLSsrKyBiL2pzL3NyYy9qaXQvTG93ZXJpbmcu Y3BwCi1AQCAtMTE3NCw3ICsxMTc0LDcgQEAgdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0VGVzdChN VGVzdCogdGVzdCkgewotIAotICNpZiBkZWZpbmVkKEVOQUJMRV9XQVNNX1NJTUQpICYmICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoZGVmaW5lZChKU19DT0RFR0VOX1g4NikgfHwg ZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgXAotLSAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FS TTY0KSkKLSsgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KSkKLSAgIC8vIENoZWNrIGlmIHRoZSBvcGVyYW5kIGZvciB0aGlzIHRlc3QgaXMg YW4gYW55X3RydWUvYWxsX3RydWUgU0lNRCBvcGVyYXRpb24uCi0gICAvLyBJZiBpdCBpcywgd2Ug d2FudCB0byBlbWl0IGFuIExXYXNtUmVkdWNlQW5kQnJhbmNoU2ltZDEyOCBub2RlIHRvIGF2b2lk Ci0gICAvLyBnZW5lcmF0aW5nIGFuIGludGVybWVkaWF0ZSBib29sZWFuIHJlc3VsdC4KLWRpZmYg LS1naXQgYS9qcy9zcmMvaml0L0xvd2VyaW5nLmggYi9qcy9zcmMvaml0L0xvd2VyaW5nLmgKLWlu ZGV4IGI0ZjEzMzc1OGViNi4uZDk3M2E2ODk4OWI1IDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9M b3dlcmluZy5oCi0rKysgYi9qcy9zcmMvaml0L0xvd2VyaW5nLmgKLUBAIC0yMyw2ICsyMyw4IEBA Ci0gIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvTG93ZXJpbmctbG9vbmc2NC5oIgotICNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L0xvd2Vy aW5nLXJpc2N2NjQuaCIKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rIyAgaW5j bHVkZSAiaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0LmgiCi0gI2VsaWYgZGVmaW5lZChKU19DT0RF R0VOX1dBU00zMikKLSAjICBpbmNsdWRlICJqaXQvd2FzbTMyL0xvd2VyaW5nLXdhc20zMi5oIgot ICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQv TWFjcm9Bc3NlbWJsZXItaW5sLmggYi9qcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLWlubC5oCi1p bmRleCA0NzQ3YTIyZTE3MWIuLmQ3Mzg1ZGY4OTVkNSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQv TWFjcm9Bc3NlbWJsZXItaW5sLmgKLSsrKyBiL2pzL3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXItaW5s LmgKLUBAIC0zOSw2ICszOSw4IEBACi0gIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvTWFjcm9Bc3Nl bWJsZXItbG9vbmc2NC1pbmwuaCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkK LSAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9NYWNyb0Fzc2VtYmxlci1yaXNjdjY0LWlubC5oIgot KyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsjICBpbmNsdWRlICJqaXQvcHBjNjQv TWFjcm9Bc3NlbWJsZXItcHBjNjQtaW5sLmgiCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dB U00zMikKLSAjICBpbmNsdWRlICJqaXQvd2FzbTMyL01hY3JvQXNzZW1ibGVyLXdhc20zMi1pbmwu aCIKLSAjZWxpZiAhZGVmaW5lZChKU19DT0RFR0VOX05PTkUpCi1kaWZmIC0tZ2l0IGEvanMvc3Jj L2ppdC9NYWNyb0Fzc2VtYmxlci5jcHAgYi9qcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmNwcAot aW5kZXggZWI5NWQ2YzllMmM0Li41YjI4ZTgxMWM4OGQgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0 L01hY3JvQXNzZW1ibGVyLmNwcAotKysrIGIvanMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci5jcHAK LUBAIC02MTI4LDcgKzYxMjgsNyBAQCBzdGF0aWMgdm9pZCBNb3ZlRGF0YUJsb2NrKE1hY3JvQXNz ZW1ibGVyJiBtYXNtLCBSZWdpc3RlciBiYXNlLCBpbnQzMl90IGZyb20sCi0gICBzdGF0aWMgY29u c3RleHByIFJlZ2lzdGVyIHNjcmF0Y2ggPSBBQklOb25BcmdSZWcwOwotICAgbWFzbS5wdXNoKHNj cmF0Y2gpOwotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9MT09ORzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQot KyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQ QzY0KQotICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0gICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotICNlbGlmICFkZWZpbmVkKEpTX0NPREVHRU5f Tk9ORSkKLUBAIC02MzE1LDYgKzYzMTUsMTIgQEAgc3RhdGljIHZvaWQgQ29sbGFwc2VXYXNtRnJh bWVGYXN0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotIAotICNpZmRlZiBKU19VU0VfTElOS19SRUdJ U1RFUgotICAgLy8gUkEgaXMgYWxyZWFkeSBpbiBpdHMgcGxhY2UsIGp1c3QgbW92ZSBzdGFjay4K LSsjICBpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAvLyBQUEM2NCdzIExSIGlzIG5vdCBhIEdQ Uiwgc28gV2FzbVRhaWxDYWxsUkFTY3JhdGNoUmVnIGlzIGEgbm9ybWFsIEdQUgotKyAgLy8gKHIx NCkuIFdlIG11c3QgZXhwbGljaXRseSBtb3ZlIGl0IHRvIExSIHNvIHRoZSBjYWxsZWUncyBwcm9s b2d1ZQotKyAgLy8gKHB1c2hSZXR1cm5BZGRyZXNzKSBzYXZlcyB0aGUgY29ycmVjdCByZXR1cm4g YWRkcmVzcy4KLSsgIG1hc20ueHNfbXRscih0ZW1wRm9yUkEpOwotKyMgIGVuZGlmCi0gICBtYXNt LmFkZFRvU3RhY2tQdHIoSW1tMzIoZnJhbWVQdXNoZWRBdFN0YXJ0ICsgbmV3QXJnRGVzdCkpOwot ICNlbHNlCi0gICAvLyBQdXNoIFJBIHRvIG5ldyBmcmFtZTogc3RvcmUgUkEsIHJlc3RvcmUgdGVt cCwgYW5kIG1vdmUgc3RhY2suCi1AQCAtNjQ2Myw2ICs2NDY5LDEyIEBAIHN0YXRpYyB2b2lkIENv bGxhcHNlV2FzbUZyYW1lU2xvdyhNYWNyb0Fzc2VtYmxlciYgbWFzbSwKLSAjaWZkZWYgSlNfVVNF X0xJTktfUkVHSVNURVIKLSAgIG1hc20uZnJlZVN0YWNrKHJlc2VydmVkKTsKLSAgIC8vIFJBIGlz IGFscmVhZHkgaW4gaXRzIHBsYWNlLCBqdXN0IG1vdmUgc3RhY2suCi0rIyAgaWZkZWYgSlNfQ09E RUdFTl9QUEM2NAotKyAgLy8gUFBDNjQncyBMUiBpcyBub3QgYSBHUFIsIHNvIFdhc21UYWlsQ2Fs bFJBU2NyYXRjaFJlZyBpcyBhIG5vcm1hbCBHUFIKLSsgIC8vIChyMTQpLiBXZSBtdXN0IGV4cGxp Y2l0bHkgbW92ZSB0aGUgdHJhbXBvbGluZSBhZGRyZXNzIHRvIExSIHNvIHRoZQotKyAgLy8gY2Fs bGVlIHJldHVybnMgdG8gdGhlIHRyYW1wb2xpbmUuCi0rICBtYXNtLnhzX210bHIodGVtcEZvclJB KTsKLSsjICBlbmRpZgotICAgbWFzbS5hZGRUb1N0YWNrUHRyKEltbTMyKGZyYW1lUHVzaGVkQXRT dGFydCArIG5ld0FyZ0Rlc3QpKTsKLSAjZWxzZQotICAgLy8gUHVzaCBSQSB0byBuZXcgZnJhbWU6 IHN0b3JlIFJBLCByZXN0b3JlIHRlbXAsIGFuZCBtb3ZlIHN0YWNrLgotQEAgLTg1MjcsNyArODUz OSw3IEBAIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmRlYnVnQXNzZXJ0Q2Fub25pY2FsSW50MzIoUmVn aXN0ZXIgcikgewotICAgICBicmVha3BvaW50KCk7Ci0gICAgIGJpbmQoJm9rKTsKLSAjICAgIGVs aWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05H NjQpIHx8IFwKLS0gICAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAgICAgICAg ZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK LSAgICAgTGFiZWwgb2s7Ci0gICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlz KTsKLSAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLUBAIC0xMDU2Nyw2 ICsxMDU3OSwxNSBAQCB2b2lkIE1hY3JvQXNzZW1ibGVyOjpvcmRlcmVkSGFzaFRhYmxlTG9va3Vw KFJlZ2lzdGVyIHNldE9yTWFwT2JqLAotICAgdW5ib3hJbnQzMihBZGRyZXNzKHNldE9yTWFwT2Jq LCBUYWJsZU9iamVjdDo6b2Zmc2V0T2ZMaXZlQ291bnQoKSksIHRlbXAxKTsKLSAgIGJyYW5jaFRl c3QzMihBc3NlbWJsZXI6Olplcm8sIHRlbXAxLCB0ZW1wMSwgJm5vdEZvdW5kKTsKLSAKLSsjaWYg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyAgLy8gSWYgdGhpcyB3YXMgcHJlY2VkZWQgYnkg YSBNb3ZlR3JvdXAgaW5zdHJ1Y3Rpb24sIHRoZSBoYXNoIG1heSBoYXZlIGJlZW4KLSsgIC8vIGxv YWRlZCBhbGdlYnJhaWNhbGx5IHNpbmNlIGl0J3MgYW4gSW50MzIgKGFuZCB0aHVzIHNpZ24tZXh0 ZW5kZWQpOyB0aGUKLSsgIC8vIG9wZXJhdGlvbiBkb2Vzbid0IGtub3cgdG8ga2VlcCB0aGUgdXBw ZXIgYml0cyBjbGVhciwgZmFpbGluZyB0aGUgYXNzZXJ0LgotKyAgaWYgKGlzQmlnSW50ID09IElz QmlnSW50OjpObykgewotKyAgICBhc19ybGRpY2woaGFzaCwgaGFzaCwgMCwgMzIpOwotKyAgfQot KyNlbmRpZgotKwotICNpZmRlZiBERUJVRwotICAgUHVzaFJlZ3NJbk1hc2soTGl2ZVJlZ2lzdGVy U2V0KFJlZ2lzdGVyU2V0OjpWb2xhdGlsZSgpKSk7Ci0gCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2pp dC9NYWNyb0Fzc2VtYmxlci5oIGIvanMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci5oCi1pbmRleCA2 YzA4YmI1NTRjYTguLjc1NGU4NjQyYmI1NyAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvTWFjcm9B c3NlbWJsZXIuaAotKysrIGIvanMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci5oCi1AQCAtMjMsNiAr MjMsOCBAQAotICMgIGluY2x1ZGUgImppdC9sb29uZzY0L01hY3JvQXNzZW1ibGVyLWxvb25nNjQu aCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAjICBpbmNsdWRlICJqaXQv cmlzY3Y2NC9NYWNyb0Fzc2VtYmxlci1yaXNjdjY0LmgiCi0rI2VsaWYgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KQotKyMgIGluY2x1ZGUgImppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5o IgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCi0gIyAgaW5jbHVkZSAiaml0L3dh c20zMi9NYWNyb0Fzc2VtYmxlci13YXNtMzIuaCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f Tk9ORSkKLUBAIC05Myw4ICs5NSw5IEBACi0gLy8gICB9Ci0gLy8gICAvLy8vfX19IGNoZWNrX21h Y3JvYXNzZW1ibGVyX3N0eWxlCi0gCi0tI2RlZmluZSBBTExfQVJDSCBtaXBzNjQsIGFybSwgYXJt NjQsIHg4NiwgeDY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIKLS0jZGVmaW5lIEFMTF9TSEFS RURfQVJDSCBhcm0sIGFybTY0LCBsb29uZzY0LCBtaXBzNjQsIHJpc2N2NjQsIHg4Nl9zaGFyZWQs IHdhc20zMgotKyNkZWZpbmUgQUxMX0FSQ0ggbWlwczY0LCBhcm0sIGFybTY0LCB4ODYsIHg2NCwg bG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQsIHdhc20zMgotKyNkZWZpbmUgQUxMX1NIQVJFRF9BUkNI IFwKLSsgIGFybSwgYXJtNjQsIGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2NCwgcHBjNjQsIHg4Nl9z aGFyZWQsIHdhc20zMgotIAotIC8vICogSG93IHRoaXMgbWFjcm8gd29ya3M6Ci0gLy8KLUBAIC0x NDAsNiArMTQzLDcgQEAKLSAjZGVmaW5lIERFRklORURfT05fbWlwczY0Ci0gI2RlZmluZSBERUZJ TkVEX09OX2xvb25nNjQKLSAjZGVmaW5lIERFRklORURfT05fcmlzY3Y2NAotKyNkZWZpbmUgREVG SU5FRF9PTl9wcGM2NAotICNkZWZpbmUgREVGSU5FRF9PTl93YXNtMzIKLSAjZGVmaW5lIERFRklO RURfT05fbm9uZQotIAotQEAgLTE2OSw2ICsxNzMsOSBAQAotICNlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9SSVNDVjY0KQotICMgIHVuZGVmIERFRklORURfT05fcmlzY3Y2NAotICMgIGRlZmluZSBE RUZJTkVEX09OX3Jpc2N2NjQgZGVmaW5lCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0 KQotKyMgIHVuZGVmIERFRklORURfT05fcHBjNjQKLSsjICBkZWZpbmUgREVGSU5FRF9PTl9wcGM2 NCBkZWZpbmUKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKQotICMgIHVuZGVmIERF RklORURfT05fd2FzbTMyCi0gIyAgZGVmaW5lIERFRklORURfT05fd2FzbTMyIGRlZmluZQotQEAg LTU2Miw3ICs1NjksNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2Vt YmxlclNwZWNpZmljIHsKLSAgIHZvaWQgUG9wKGNvbnN0IFJlZ2lzdGVyNjQgcmVnKTsKLSAgIHZv aWQgUG9wRmxhZ3MoKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotICAgdm9pZCBQb3BTdGFja1B0 cigpCi0tICAgICAgREVGSU5FRF9PTihhcm0sIG1pcHM2NCwgeDg2X3NoYXJlZCwgbG9vbmc2NCwg cmlzY3Y2NCwgd2FzbTMyKTsKLSsgICAgICBERUZJTkVEX09OKGFybSwgbWlwczY0LCB4ODZfc2hh cmVkLCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCwgd2FzbTMyKTsKLSAKLSAgIC8vIE1vdmUgdGhl IHN0YWNrIHBvaW50ZXIgYmFzZWQgb24gdGhlIHJlcXVlc3RlZCBhbW91bnQuCi0gICB2b2lkIGFk anVzdFN0YWNrKGludCBhbW91bnQpOwotQEAgLTYyMCw5ICs2MjcsOSBAQCBjbGFzcyBNYWNyb0Fz c2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAKLSAgIC8vIFRoZXNl IGRvIG5vdCBhZGp1c3QgZnJhbWVQdXNoZWQoKS4KLSAgIHZvaWQgcHVzaFJldHVybkFkZHJlc3Mo KQotLSAgICAgIERFRklORURfT04obWlwczY0LCBhcm0sIGFybTY0LCBsb29uZzY0LCByaXNjdjY0 LCB3YXNtMzIpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBhcm0sIGFybTY0LCBsb29uZzY0 LCByaXNjdjY0LCBwcGM2NCwgd2FzbTMyKTsKLSAgIHZvaWQgcG9wUmV0dXJuQWRkcmVzcygpCi0t ICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdh c20zMik7Ci0rICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQsIHJp c2N2NjQsIHBwYzY0LCB3YXNtMzIpOwotIAotICAgLy8gVXNlZnVsIGZvciBkZWFsaW5nIHdpdGgg dHdvLXZhbHVlZCByZXR1cm5zLgotICAgdm9pZCBtb3ZlUmVnUGFpcihSZWdpc3RlciBzcmMwLCBS ZWdpc3RlciBzcmMxLCBSZWdpc3RlciBkc3QwLCBSZWdpc3RlciBkc3QxLAotQEAgLTY0MSw3ICs2 NDgsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNp ZmljIHsKLSAgIENvZGVPZmZzZXQgZmFySnVtcFdpdGhQYXRjaCgpIFBFUl9TSEFSRURfQVJDSDsK LSAgIHZvaWQgcGF0Y2hGYXJKdW1wKENvZGVPZmZzZXQgZmFySnVtcCwgdWludDMyX3QgdGFyZ2V0 T2Zmc2V0KSBQRVJfU0hBUkVEX0FSQ0g7Ci0gICBzdGF0aWMgdm9pZCBwYXRjaEZhckp1bXAodWlu dDhfdCogZmFySnVtcCwgdWludDhfdCogdGFyZ2V0KQotLSAgICAgIERFRklORURfT04oYXJtLCBh cm02NCwgeDg2X3NoYXJlZCwgbG9vbmc2NCwgbWlwczY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJ TkVEX09OKGFybSwgYXJtNjQsIHg4Nl9zaGFyZWQsIGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2NCwg cHBjNjQpOwotIAotICAgLy8gRW1pdCBhIG5vcCB0aGF0IGNhbiBiZSBwYXRjaGVkIHRvIGFuZCBm cm9tIGEgbm9wIGFuZCBhIGNhbGwgd2l0aCBpbnQzMgotICAgLy8gcmVsYXRpdmUgZGlzcGxhY2Vt ZW50LgotQEAgLTY2Nyw5ICs2NzQsOSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBN YWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIC8vIHRhcmdldCBiZWhhdmlvdXIgaXMgb25seSBw cm92aWRlZCBmb3IgYG5gIGluIHRoZSByYW5nZSAwIC4uIDJeMzEtMQotICAgLy8gaW5jbHVzaXZl LgotICAgQ29kZU9mZnNldCBtb3ZlMzJXaXRoUGF0Y2goUmVnaXN0ZXIgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybSwgYXJtNjQsIGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2 NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm0sIGFybTY0LCBsb29uZzY0LCBt aXBzNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAgIHZvaWQgcGF0Y2hNb3ZlMzIoQ29kZU9mZnNldCBv ZmZzZXQsIEltbTMyIG4pCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm0sIGFybTY0 LCBsb29uZzY0LCBtaXBzNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtLCBhcm02NCwgbG9vbmc2NCwgbWlwczY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gIHB1 YmxpYzoKLSAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotQEAgLTExNzQsMTMgKzExODEsMTMgQEAgY2xhc3MgTWFjcm9B c3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICBpbmxpbmUgdm9p ZCBtdWxQdHIoSW1tV29yZCByaHMsIFJlZ2lzdGVyIHNyY0Rlc3QpIFBFUl9BUkNIOwotIAotICAg aW5saW5lIHZvaWQgbXVsNjQoY29uc3QgUmVnaXN0ZXI2NCYgcmhzLCBjb25zdCBSZWdpc3RlcjY0 JiBzcmNEZXN0KQotLSAgICAgIERFRklORURfT04oeDY0LCBhcm02NCwgbWlwczY0LCBsb29uZzY0 LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKHg2NCwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2 NCwgcmlzY3Y2NCwgcHBjNjQpOwotICAgaW5saW5lIHZvaWQgbXVsNjQoY29uc3QgT3BlcmFuZCYg c3JjLCBjb25zdCBSZWdpc3RlcjY0JiBkZXN0KSBERUZJTkVEX09OKHg2NCk7Ci0gICBpbmxpbmUg dm9pZCBtdWw2NChjb25zdCBPcGVyYW5kJiBzcmMsIGNvbnN0IFJlZ2lzdGVyNjQmIGRlc3QsCi0g ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlciB0ZW1wKSBERUZJTkVEX09OKHg2NCk7 Ci0gICBpbmxpbmUgdm9pZCBtdWw2NChJbW02NCBpbW0sIGNvbnN0IFJlZ2lzdGVyNjQmIGRlc3Qp IFBFUl9BUkNIOwotICAgaW5saW5lIHZvaWQgbXVsNjQoSW1tNjQgaW1tLCBjb25zdCBSZWdpc3Rl cjY0JiBkZXN0LCBjb25zdCBSZWdpc3RlciB0ZW1wKQotLSAgICAgIERFRklORURfT04oeDg2LCB4 NjQsIGFybSwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 NiwgeDY0LCBhcm0sIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotICAgaW5saW5l IHZvaWQgbXVsNjQoY29uc3QgUmVnaXN0ZXI2NCYgc3JjLCBjb25zdCBSZWdpc3RlcjY0JiBkZXN0 LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXIgdGVtcCkgUEVSX0FSQ0g7Ci0g ICBpbmxpbmUgdm9pZCBtdWw2NChjb25zdCBSZWdpc3RlcjY0JiBzcmMxLCBjb25zdCBSZWdpc3Rl cjY0JiBzcmMyLAotQEAgLTEyMDIsMTEgKzEyMDksMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIg OiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAvLyBPbiBBUk0sIHRoZSBjaGlw IG11c3QgaGF2ZSBoYXJkd2FyZSBkaXZpc2lvbiBpbnN0cnVjdGlvbnMuCi0gICBpbmxpbmUgdm9p ZCBxdW90aWVudDMyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzVW5zaWduZWQpCi0tICAgICAgREVGSU5F RF9PTihtaXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMik7Ci0rICAg ICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20z MiwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcXVvdGllbnQ2NChSZWdpc3RlciBsaHMsIFJl Z2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBpc1Vuc2lnbmVkKQotLSAgICAgIERFRklORURfT04oYXJtNjQsIGxvb25nNjQsIG1pcHM2NCwg cmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwgbG9vbmc2NCwgbWlwczY0LCByaXNj djY0LCBwcGM2NCk7Ci0gCi0gICAvLyBBcyBhYm92ZSwgYnV0IGxocyBhbmQgZGVzdCBtdXN0IGJl IGVheCBhbmQgdGVtcEVkeCBtdXN0IGJlIGVkeC4KLSAgIGlubGluZSB2b2lkIHF1b3RpZW50MzIo UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCi1AQCAtMTIxOSwxMSAr MTIyNiwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNw ZWNpZmljIHsKLSAgIC8vIE9uIEFSTSwgdGhlIGNoaXAgbXVzdCBoYXZlIGhhcmR3YXJlIGRpdmlz aW9uIGluc3RydWN0aW9ucy4KLSAgIGlubGluZSB2b2lkIHJlbWFpbmRlcjMyKFJlZ2lzdGVyIGxo cywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgYm9vbCBpc1Vuc2lnbmVkKQotLSAgICAgIERFRklORURfT04obWlwczY0LCBhcm0sIGFybTY0 LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBh cm0sIGFybTY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIHJlbWFpbmRlcjY0KFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBk ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Vuc2lnbmVkKQotLSAgICAg IERFRklORURfT04oYXJtNjQsIGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVG SU5FRF9PTihhcm02NCwgbG9vbmc2NCwgbWlwczY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICAv LyBBcyBhYm92ZSwgYnV0IGxocyBhbmQgZGVzdCBtdXN0IGJlIGVheCBhbmQgdGVtcEVkeCBtdXN0 IGJlIGVkeC4KLSAgIGlubGluZSB2b2lkIHJlbWFpbmRlcjMyKFJlZ2lzdGVyIGxocywgUmVnaXN0 ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAotQEAgLTIwODAsNyArMjA4Nyw3IEBAIGNsYXNzIE1hY3Jv QXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgdGVtcGxhdGUg PHR5cGVuYW1lIFQ+Ci0gICB2b2lkIGJyYW5jaFZhbHVlSXNOdXJzZXJ5Q2VsbEltcGwoQ29uZGl0 aW9uIGNvbmQsIGNvbnN0IFQmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHRlbXAsIExhYmVsKiBsYWJlbCkKLS0gICAgICBERUZJTkVEX09OKGFy bTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihh cm02NCwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgotICAgaW5saW5lIHZvaWQgYnJhbmNoVGVzdFVuZGVmaW5lZEltcGwo Q29uZGl0aW9uIGNvbmQsIGNvbnN0IFQmIHQsIExhYmVsKiBsYWJlbCkKLUBAIC0yMjQ1LDcgKzIy NTIsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNp ZmljIHsKLSAgIC8vIGZyb20gYWxsIHRoZSBvdGhlciByZWdpc3RlcnMsIG9uIGFsbCBzdXBwb3J0 ZWQgdGFyZ2V0cy4KLSAgIGlubGluZSB2b2lkIHdhc21BZGRTdWJJMTI4SEk2NChSZWdpc3RlciBs aHNMbywgUmVnaXN0ZXIgbGhzSGksIFJlZ2lzdGVyIHJoc0xvLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJoc0hpLCBSZWdpc3RlciBvdXRwdXQsIGJvb2wgaXNB ZGQpCi0tICAgICAgREVGSU5FRF9PTih4NjQsIGFybTY0LCByaXNjdjY0LCBsb29uZzY0LCBtaXBz NjQpOwotKyAgICAgIERFRklORURfT04oeDY0LCBhcm02NCwgcmlzY3Y2NCwgbG9vbmc2NCwgbWlw czY0LCBwcGM2NCk7Ci0gCi0gICAvLyBQcm9kdWNlcyB0aGUgdG9wIDY0IGJpdHMgb2YgdGhlIDEy OC1iaXQgdmFsdWUgYFJBWCAqd2lkZW4gcmhzYC4gIFRoZSByZXN1bHQKLSAgIC8vIHdpbGwgYmUg aW4gUkFYLiAgUkRYIGlzIHRyYXNoZWQuICBgcmhzYCBtYXkgbm90IGJlIFJBWCBvciBSRFguICBD YWxsZXJzCi1AQCAtMjI1Niw3ICsyMjYzLDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJs aWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAvLyB3aGF0IHRoZSByZWdpc3RlcnMgbWF5 IGJlLgotICAgaW5saW5lIHZvaWQgd2FzbU11bEk2NFdpZGVISTY0KFJlZ2lzdGVyIGxocywgUmVn aXN0ZXIgcmhzLCBSZWdpc3RlciBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBpc1NpZ25lZCkKLS0gICAgICBERUZJTkVEX09OKGFybTY0LCByaXNjdjY0LCBs b29uZzY0LCBtaXBzNjQpOwotKyAgICAgIERFRklORURfT04oYXJtNjQsIHJpc2N2NjQsIGxvb25n NjQsIG1pcHM2NCwgcHBjNjQpOwotIAotICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAvLyBDYW5v bmljYWxpemF0aW9uIHByaW1pdGl2ZXMuCi1AQCAtMjM1NSw2OCArMjM2Miw2OCBAQCBjbGFzcyBN YWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIC8vIE1v dmVzCi0gCi0gICBpbmxpbmUgdm9pZCBtb3ZlU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIENv bnN0YW50cwotIAotICAgaW5saW5lIHZvaWQgbG9hZENvbnN0YW50U2ltZDEyOChjb25zdCBTaW1k Q29uc3RhbnQmIHYsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICAvLyBTcGxhdAotIAotICAgaW5saW5lIHZvaWQgc3BsYXRYMTYoUmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgc3BsYXRYMTYodWludDMyX3Qgc3JjTGFuZSwgRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLSAgICAgICBERUZJTkVEX09OKGFybTY0KTsKLSAKLSAg IGlubGluZSB2b2lkIHNwbGF0WDgoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0t ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgc3BsYXRYOCh1aW50 MzJfdCBzcmNMYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotICAg ICAgIERFRklORURfT04oYXJtNjQpOwotIAotICAgaW5saW5lIHZvaWQgc3BsYXRYNChSZWdpc3Rl ciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0g Ci0gICBpbmxpbmUgdm9pZCBzcGxhdFg0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgc3Bs YXRYMihSZWdpc3RlcjY0IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURf T04oeDg2LCB4NjQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4NiwgeDY0LCBhcm02NCwg cHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgc3BsYXRYMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIEV4 dHJhY3QgbGFuZSBhcyBzY2FsYXIuICBGbG9hdCBleHRyYWN0aW9uIGRvZXMgbm90IGNhbm9uaWNh bGl6ZSB0aGUgdmFsdWUuCi0gCi0gICBpbmxpbmUgdm9pZCBleHRyYWN0TGFuZUludDh4MTYodWlu dDMyX3QgbGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRF eHRyYWN0TGFuZUludDh4MTYodWludDMyX3QgbGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KQotLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGV4dHJhY3RMYW5lSW50 MTZ4OCh1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1 bnNpZ25lZEV4dHJhY3RMYW5lSW50MTZ4OCh1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNy YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRl c3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgZXh0cmFj dExhbmVJbnQzMng0KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIGV4dHJhY3RMYW5lSW50NjR4Mih1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNy YywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IGRlc3QpIERF RklORURfT04oeDg2LCB4NjQsIGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlcjY0IGRlc3QpIERFRklORURfT04oeDg2LCB4NjQsIGFybTY0LCBwcGM2NCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCBleHRyYWN0TGFuZUZsb2F0MzJ4NCh1aW50MzJfdCBsYW5lLCBG bG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK LSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxp bmUgdm9pZCBleHRyYWN0TGFuZUZsb2F0NjR4Mih1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVy IHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBSZXBsYWNlIGxhbmUg dmFsdWUKLSAKLUBAIC0yNDI1LDIxICsyNDMyLDIxIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDog cHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAotICAgaW5saW5lIHZvaWQgcmVwbGFj ZUxhbmVJbnQ4eDE2KHVuc2lnbmVkIGxhbmUsIFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVJbnQxNng4KHVuc2ln bmVkIGxhbmUsIEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVJbnQxNng4KHVuc2lnbmVkIGxh bmUsIFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5s aW5lIHZvaWQgcmVwbGFjZUxhbmVJbnQzMng0KHVuc2lnbmVkIGxhbmUsIEZsb2F0UmVnaXN0ZXIg bGhzLCBSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZv aWQgcmVwbGFjZUxhbmVJbnQzMng0KHVuc2lnbmVkIGxhbmUsIFJlZ2lzdGVyIHJocywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVJbnQ2 NHgyKHVuc2lnbmVkIGxhbmUsIEZsb2F0UmVnaXN0ZXIgbGhzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi1AQCAt MjQ0Nyw3ICsyNDU0LDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3Nl bWJsZXJTcGVjaWZpYyB7Ci0gCi0gICBpbmxpbmUgdm9pZCByZXBsYWNlTGFuZUludDY0eDIodW5z aWduZWQgbGFuZSwgUmVnaXN0ZXI2NCByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQotLSAgICAgIERFRklORURfT04oeDg2LCB4NjQs IGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4NiwgeDY0LCBhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVGbG9hdDMyeDQodW5zaWduZWQgbGFuZSwgRmxvYXRS ZWdpc3RlciBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQotQEAgLTI0NTUsNyArMjQ2Miw3IEBAIGNs YXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAot ICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVGbG9hdDMyeDQodW5zaWduZWQgbGFuZSwgRmxvYXRS ZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGxoc0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgcmVwbGFjZUxhbmVGbG9hdDY0eDIodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3RlciBs aHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJo cywgRmxvYXRSZWdpc3RlciBkZXN0KQotQEAgLTI0NjMsNyArMjQ3MCw3IEBAIGNsYXNzIE1hY3Jv QXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAotICAgaW5saW5l IHZvaWQgcmVwbGFjZUxhbmVGbG9hdDY0eDIodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3RlciBy aHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxo c0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gU2h1ZmZsZSAtIGJs ZW5kIGFuZCBwZXJtdXRlIHdpdGggaW1tZWRpYXRlIGluZGljZXMsIGFuZCBpdHMgbWFueQotICAg Ly8gc3BlY2lhbGl6YXRpb25zLiAgTGFuZSB2YWx1ZXMgb3RoZXIgdGhhbiB0aG9zZSBtZW50aW9u ZWQgYXJlIGlsbGVnYWwuCi1AQCAtMjQ3MSwxMSArMjQ3OCwxMSBAQCBjbGFzcyBNYWNyb0Fzc2Vt YmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIC8vIGxhbmUgdmFsdWVz IDAuLjMxCi0gICBpbmxpbmUgdm9pZCBzaHVmZmxlSW50OHgxNihjb25zdCB1aW50OF90IGxhbmVz WzE2XSwgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAg aW5saW5lIHZvaWQgc2h1ZmZsZUludDh4MTYoY29uc3QgdWludDhfdCBsYW5lc1sxNl0sIEZsb2F0 UmVnaXN0ZXIgbGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciByaHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0g Ci0gICAvLyBMYW5lIHZhbHVlcyBtdXN0IGJlIDAgKHNlbGVjdCBmcm9tIGxocykgb3IgRkYgKHNl bGVjdCBmcm9tIHJocykuCi0gICAvLyBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGZvciBsYW5l IHZhbHVlcyB0aGF0IGFyZSBuZWl0aGVyIDAgbm9yIEZGLgotQEAgLTI1MDIsMzkgKzI1MDksMzkg QEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7 Ci0gICAvLyBUaGUgaW1wbGVtZW50YXRpb24gd29ya3MgZWZmZWN0aXZlbHkgZm9yIEk4eDE2LCBJ MTZ4OCwgSTMyeDQsIGFuZCBJNjR4Mi4KLSAgIGlubGluZSB2b2lkIGxhbmVTZWxlY3RTaW1kMTI4 KEZsb2F0UmVnaXN0ZXIgbWFzaywgRmxvYXRSZWdpc3RlciBsaHMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQot LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGludGVybGVhdmVI aWdoSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGludGVybGVhdmVIaWdoSW50 MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGludGVybGVhdmVIaWdoSW50MzJ4NChG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGludGVybGVhdmVIaWdoSW50NjR4MihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSB2b2lkIGludGVybGVhdmVMb3dJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCBpbnRlcmxlYXZlTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgaW50ZXJsZWF2ZUxvd0ludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0 ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGlu dGVybGVhdmVMb3dJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkK LS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBQZXJtdXRlIC0gcGVybXV0ZSB3 aXRoIGltbWVkaWF0ZSBpbmRpY2VzLgotIAotQEAgLTI1NDQsNyArMjU1MSw3IEBAIGNsYXNzIE1h Y3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAotICAgLy8g bGFuZSB2YWx1ZXMgMC4uNwotICAgaW5saW5lIHZvaWQgcGVybXV0ZUludDE2eDgoY29uc3QgdWlu dDE2X3QgbGFuZXNbOF0sIEZsb2F0UmVnaXN0ZXIgc3JjLAotLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02 NCwgcHBjNjQpOwotIAotICAgLy8gbGFuZSB2YWx1ZXMgMC4uMyBbc2ljXS4KLSAgIGlubGluZSB2 b2lkIHBlcm11dGVIaWdoSW50MTZ4OChjb25zdCB1aW50MTZfdCBsYW5lc1s0XSwgRmxvYXRSZWdp c3RlciBzcmMsCi1AQCAtMjU2Miw4MCArMjU2OSw4MCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6 IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIC8vICAgbG93XzE2X2J5dGVzX29m KChsaHMgKysgcmhzKSA+PiBzaGlmdCo4KSwgc2hpZnQgbXVzdCBiZSA8IDE2Ci0gICBpbmxpbmUg dm9pZCBjb25jYXRBbmRSaWdodFNoaWZ0U2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QsIHVpbnQzMl90IHNoaWZ0KQotLSAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKLSAKLSAgIC8vIFJvdGF0ZSByaWdodCBieSBpbW1lZGlhdGUgY291bnQ6Ci0gICAvLyAg IGxvd18xNl9ieXRlc19vZigoc3JjICsrIHNyYykgPj4gc2hpZnQqOCksIHNoaWZ0IG11c3QgYmUg PCAxNgotICAgaW5saW5lIHZvaWQgcm90YXRlUmlnaHRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3Qgc2hpZnQpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IHNoaWZ0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0g Ci0gICAvLyBTaGlmdCBieXRlcyB3aXRoIGltbWVkaWF0ZSBjb3VudCwgc2hpZnRpbmcgaW4gemVy b2VzLiAgU2hpZnQgY291bnQgMC4uMTUuCi0gCi0gICBpbmxpbmUgdm9pZCBsZWZ0U2hpZnRTaW1k MTI4KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSB2b2lkIHJpZ2h0U2hpZnRTaW1kMTI4KEltbTMyIGNvdW50LCBGbG9h dFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBaZXJvIGV4 dGVuZCBpbnQgdmFsdWVzLgotIAotICAgaW5saW5lIHZvaWQgemVyb0V4dGVuZDh4MTZUbzE2eDgo RmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7Ci0gICBpbmxpbmUgdm9pZCB6ZXJvRXh0ZW5kOHgxNlRvMzJ4NChGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK LSAgIGlubGluZSB2b2lkIHplcm9FeHRlbmQ4eDE2VG82NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotICAgaW5saW5l IHZvaWQgemVyb0V4dGVuZDE2eDhUbzMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gICBpbmxpbmUgdm9pZCB6ZXJv RXh0ZW5kMTZ4OFRvNjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQot LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAgIGlubGluZSB2b2lkIHplcm9FeHRlbmQzMng0 VG82NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gUmV2ZXJzZSBieXRlcyBpbiBsYW5lcy4KLSAKLSAg IGlubGluZSB2b2lkIHJldmVyc2VJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lz dGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQg cmV2ZXJzZUludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCByZXZlcnNlSW50NjR4 MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKLSAKLSAgIC8vIFN3aXp6bGUgLSBwZXJtdXRlIHdpdGggdmFyaWFibGUgaW5k aWNlcy4gIGByaHNgIGhvbGRzIHRoZSBsYW5lcyBwYXJhbWV0ZXIuCi0gCi0gICBpbmxpbmUgdm9p ZCBzd2l6emxlSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0g Ci0gICBpbmxpbmUgdm9pZCBzd2l6emxlSW50OHgxNlJlbGF4ZWQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAv LyBJbnRlZ2VyIEFkZAotIAotICAgaW5saW5lIHZvaWQgYWRkSW50OHgxNihGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgYWRkSW50OHgxNihGbG9hdFJlZ2lz dGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlu bGluZSB2b2lkIGFkZEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhz LAotLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAg IGlubGluZSB2b2lkIGFkZEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25z dGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhZGRJbnQzMng0KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK LSsgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhZGRJbnQzMng0 KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQp OwotIAotICAgaW5saW5lIHZvaWQgYWRkSW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOwotIAotICAgaW5saW5lIHZvaWQgYWRkSW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgY29u c3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLUBAIC0yNjQzLDEzICsyNjUwLDEz IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMg ewotICAgLy8gSW50ZWdlciBTdWJ0cmFjdAotIAotICAgaW5saW5lIHZvaWQgc3ViSW50OHgxNihG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgc3ViSW50OHgx NihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVk KTsKLSAKLSAgIGlubGluZSB2b2lkIHN1YkludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHN1YkludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNv bnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci1AQCAtMjY1OCwyNCArMjY2NSwy NCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmlj IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgc3ViSW50MzJ4NChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgc3ViSW50NjR4MihGbG9hdFJl Z2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAg IGlubGluZSB2b2lkIHN1YkludDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAK LSAgIC8vIEludGVnZXIgTXVsdGlwbHkKLSAKLSAgIGlubGluZSB2b2lkIG11bEludDE2eDgoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG11bEludDE2eDgo RmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCBtdWxJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtdWxJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25z dCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotQEAgLTI2OTEsMTAwICsyNjk4LDEw MCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmlj IHsKLSAKLSAgIGlubGluZSB2b2lkIG11bEludDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QsIEZsb2F0UmVnaXN0ZXIgdGVtcDEsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0g ICAvLyBOb3RlIGZvciB0aGUgZXh0TXVsIG9wY29kZXMsIHRoZSBOeE0gZGVzaWduYXRpb24gaXMg Zm9yIHRoZSBpbnB1dCBsYW5lczsKLSAgIC8vIHRoZSBvdXRwdXQgbGFuZXMgYXJlIHR3aWNlIGFz IHdpZGUuCi0gICBpbmxpbmUgdm9pZCBleHRNdWxMb3dJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIGV4dE11bEhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25l ZEV4dE11bExvd0ludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25l ZEV4dE11bEhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGV4dE11 bExvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgZXh0TXVsSGlnaEludDE2eDgoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkRXh0TXVsTG93SW50MTZ4OChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkRXh0TXVsSGlnaEludDE2eDgoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOwotIAotICAgaW5saW5lIHZvaWQgZXh0TXVsTG93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK LSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxp bmUgdm9pZCBleHRNdWxIaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWdu ZWRFeHRNdWxMb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWdu ZWRFeHRNdWxIaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBxMTVN dWxyU2F0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gSW50ZWdlciBOZWdhdGUKLSAKLSAgIGlubGlu ZSB2b2lkIG5lZ0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkK LS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBuZWdJbnQxNng4 KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbmVnSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAg IGlubGluZSB2b2lkIG5lZ0ludDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBTYXR1cmF0aW5nIGlu dGVnZXIgYWRkCi0gCi0gICBpbmxpbmUgdm9pZCBhZGRTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhZGRTYXRJbnQ4eDE2KEZs b2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQp OwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRBZGRTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgdW5zaWduZWRBZGRTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBj b25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBp bmxpbmUgdm9pZCBhZGRTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhZGRTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBj b25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZv aWQgdW5zaWduZWRBZGRTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5z aWduZWRBZGRTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQm IHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci1AQCAtMjc5MiwyNyArMjc5OSwyNyBAQCBj bGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAg IC8vIFNhdHVyYXRpbmcgaW50ZWdlciBzdWJ0cmFjdAotIAotICAgaW5saW5lIHZvaWQgc3ViU2F0 SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgc3ViU2F0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50 JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkU3ViU2F0 SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkU3ViU2F0SW50OHgx NihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgc3ViU2F0SW50MTZ4OChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgc3ViU2F0SW50MTZ4 OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkU3ViU2F0SW50MTZ4OChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK LSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkU3ViU2F0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxo cywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotQEAg LTI4MjAsNDAgKzI4MjcsNDAgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9B c3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAvLyBMYW5lLXdpc2UgaW50ZWdlciBtaW5pbXVtCi0gCi0g ICBpbmxpbmUgdm9pZCBtaW5JbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0g Ci0gICBpbmxpbmUgdm9pZCBtaW5JbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1k Q29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRN aW5JbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRNaW5JbnQ4eDE2KEZs b2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtaW5JbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBG bG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtaW5JbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhz LCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZv aWQgdW5zaWduZWRNaW5JbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp Ci0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRN aW5JbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtaW5JbnQzMng0KEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtaW5JbnQzMng0KEZsb2F0 UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAot ICAgaW5saW5lIHZvaWQgdW5zaWduZWRNaW5JbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgdW5zaWduZWRNaW5JbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3Rh bnQmIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci1AQCAtMjg2MSw0MCArMjg2OCw0MCBAQCBj bGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAg IC8vIExhbmUtd2lzZSBpbnRlZ2VyIG1heGltdW0KLSAKLSAgIGlubGluZSB2b2lkIG1heEludDh4 MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG1heElu dDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1heEludDh4MTYoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1heEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0 IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2 b2lkIG1heEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIG1heEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYg cmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1heEludDE2eDgo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1heEludDE2eDgoRmxvYXRSZWdpc3Rl ciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAK LSAgIGlubGluZSB2b2lkIG1heEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0 ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK LSAKLSAgIGlubGluZSB2b2lkIG1heEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNp bWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25l ZE1heEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1heEludDMyeDQo RmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZf c2hhcmVkKTsKLUBAIC0yOTAzLDI1ICsyOTEwLDI1IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDog cHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAotICAgaW5saW5lIHZvaWQgdW5zaWdu ZWRBdmVyYWdlSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkK LS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZEF2 ZXJhZ2VJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIExhbmUtd2lzZSBpbnRlZ2VyIGFic29s dXRlIHZhbHVlCi0gCi0gICBpbmxpbmUgdm9pZCBhYnNJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAg aW5saW5lIHZvaWQgYWJzSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGFic0lu dDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhYnNJbnQ2NHgyKEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwot IAotICAgLy8gTGVmdCBzaGlmdCBieSBzY2FsYXIuIEltbWVkaWF0ZXMgYW5kIHZhcmlhYmxlIHNo aWZ0cyBtdXN0IGhhdmUgYmVlbgotICAgLy8gbWFza2VkOyBzaGlmdHMgb2YgemVybyB3aWxsIHdv cmsgYnV0IG1heSBvciBtYXkgbm90IGdlbmVyYXRlIGNvZGUuCi1AQCAtMjkzMCw0MSArMjkzNyw0 MSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmlj IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50OHgx NihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04o YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGxlZnRTaGlmdEludDh4MTYoSW1tMzIg Y291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAg aW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50MTZ4OChSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIg bGhzRGVzdCkKLSAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZv aWQgbGVmdFNoaWZ0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGxlZnRT aGlmdEludDE2eDgoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50MzJ4NChSZWdpc3RlciBy aHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLSAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQp OwotIAotICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywg UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAg IGlubGluZSB2b2lkIGxlZnRTaGlmdEludDMyeDQoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIg c3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp Ci0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0 SW50NjR4MihSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLSAgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50NjR4MihG bG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJt NjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGxlZnRTaGlmdEludDY0eDIoSW1tMzIgY291 bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8g UmlnaHQgc2hpZnQgYnkgc2NhbGFyLiBJbW1lZGlhdGVzIGFuZCB2YXJpYWJsZSBzaGlmdHMgbXVz dCBoYXZlIGJlZW4KLSAgIC8vIG1hc2tlZDsgc2hpZnRzIG9mIHplcm8gd2lsbCB3b3JrIGJ1dCBt YXkgb3IgbWF5IG5vdCBnZW5lcmF0ZSBjb2RlLgotQEAgLTI5NzMsODIgKzI5ODAsODIgQEAgY2xh c3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURf T04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50OHgxNihGbG9h dFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDh4MTYoSW1tMzIgY291 bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlu bGluZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDh4MTYoUmVnaXN0ZXIgcmhzLCBGbG9hdFJl Z2lzdGVyIGxoc0Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgdGVtcCkKLSAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAot ICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxo cywgUmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04o YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDh4 MTYoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDE2eDgoUmVnaXN0ZXIg cmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0gICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk KTsKLSAKLSAgIGlubGluZSB2b2lkIHJpZ2h0U2hpZnRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhz LCBSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0g Ci0gICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50MTZ4OChJbW0zMiBjb3VudCwgRmxvYXRSZWdp c3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5z aWduZWRSaWdodFNoaWZ0SW50MTZ4OChSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVz dCkKLSAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgdW5z aWduZWRSaWdodFNoaWZ0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAK LSAgIGlubGluZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDE2eDgoSW1tMzIgY291bnQsIEZs b2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAg aW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDMyeDQoUmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVy IGxoc0Rlc3QpCi0gICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2 b2lkIHJpZ2h0U2hpZnRJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBy aWdodFNoaWZ0SW50MzJ4NChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50 MzJ4NChSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLSAgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50 MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJt NjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVu c2lnbmVkUmlnaHRTaGlmdEludDMyeDQoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcmlnaHRT aGlmdEludDY0eDIoUmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04o eDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50NjR4MihJbW0zMiBj b3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAg aW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVy IHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIoUmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lz dGVyIGxoc0Rlc3QpCi0gICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGlu ZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lz dGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0LCBw cGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZFJpZ2h0U2hpZnRJbnQ2NHgyKEltbTMy IGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIC8vIFNpZ24gcmVwbGljYXRpb24gb3BlcmF0aW9uCi0gCi1AQCAtMzA2Nyw0NyAr MzA3NCw0NyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNw ZWNpZmljIHsKLSAgIC8vIEJpdHdpc2UgYW5kLCBvciwgeG9yLCBub3QKLSAKLSAgIGlubGluZSB2 b2lkIGJpdHdpc2VBbmRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxo c0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgYml0 d2lzZUFuZFNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGJpdHdpc2VBbmRTaW1kMTI4 KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZf c2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIGJpdHdpc2VPclNpbWQxMjgoRmxvYXRSZWdpc3Rl ciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCBiaXR3aXNlT3JTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBG bG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2 b2lkIGJpdHdpc2VPclNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFu dCYgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBiaXR3aXNlWG9y U2ltZDEyOChGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQotLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGJpdHdpc2VYb3JTaW1kMTI4 KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBiaXR3aXNlWG9yU2ltZDEyOChGbG9hdFJlZ2lzdGVy IGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCBiaXR3aXNlTm90U2ltZDEyOChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIEJpdHdp c2UgQU5EIHdpdGggY29tcGxpbWVudDogZGVzdCA9IGxocyAmIH5yaHMsIG5vdGUgb25seSBhcm02 NCBjYW4gZG8gaXQuCi0gICBpbmxpbmUgdm9pZCBiaXR3aXNlQW5kTm90U2ltZDEyOChGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIERFRklORURfT04oYXJtNjQpOwotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSBE RUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBCaXR3aXNlIEFORCB3aXRoIGNvbXBs ZW1lbnQ6IGRlc3QgPSB+bGhzICYgcmhzLCBub3RlIHRoaXMgaXMgbm90IHdoYXQgV2FzbQotICAg Ly8gd2FudHMgYnV0IHdoYXQgdGhlIHg4NiBoYXJkd2FyZSBvZmZlcnMuICBIZW5jZSB0aGUgbmFt ZS4KLSAKLSAgIGlubGluZSB2b2lkIGJpdHdpc2VOb3RBbmRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIg cmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwot IAotICAgaW5saW5lIHZvaWQgYml0d2lzZU5vdEFuZFNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBsaHNEZXN0KQotQEAgLTMxMjAsMzQgKzMxMjcsMzQgQEAgY2xhc3MgTWFj cm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04o eDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBiaXR3aXNlU2VsZWN0U2ltZDEyOChGbG9h dFJlZ2lzdGVyIG9uVHJ1ZSwgRmxvYXRSZWdpc3RlciBvbkZhbHNlLAotLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBtYXNrRGVzdCkgREVGSU5FRF9PTihh cm02NCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IG1hc2tEZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBQb3B1bGF0aW9u IGNvdW50Ci0gCi0gICBpbmxpbmUgdm9pZCBwb3BjbnRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHBvcGNudEludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICBE RUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBBbnkgbGFuZSB0cnVlLCBpZSwgYW55 IGJpdCBzZXQKLSAKLSAgIGlubGluZSB2b2lkIGFueVRydWVTaW1kMTI4KEZsb2F0UmVnaXN0ZXIg c3JjLCBSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8v IEFsbCBsYW5lcyB0cnVlCi0gCi0gICBpbmxpbmUgdm9pZCBhbGxUcnVlSW50OHgxNihGbG9hdFJl Z2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0g Ci0gICBpbmxpbmUgdm9pZCBhbGxUcnVlSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBh bGxUcnVlSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhbGxUcnVlSW50NjR4MihGbG9h dFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 Ci0gCi0gICAvLyBCaXRtYXNrLCBpZSBleHRyYWN0IGFuZCBjb21wcmVzcyBoaWdoIGJpdHMgb2Yg YWxsIGxhbmVzCi0gCi1AQCAtMzE1NSwzMSArMzE2MiwzMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxl ciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgYml0bWFza0ludDh4MTYoRmxvYXRSZWdpc3Rl ciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0g Ci0gICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgZGVzdCkKLSAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZv aWQgYml0bWFza0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04o YXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1w KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50 MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkKLSAgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgYml0bWFza0ludDMyeDQoRmxvYXRSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgUmVn aXN0ZXIgZGVzdCkKLSAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5l IHZvaWQgYml0bWFza0ludDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURf T04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0 ZW1wKSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBDb21wYXJpc29ucyAoaW50 ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQpCi0gCi0gICBpbmxpbmUgdm9pZCBjb21wYXJlSW50OHgx NihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLS0gICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBPbiB4ODZfc2hhcmVkLCBsaW1pdGVkIHRvICE9LCA9 PSwgPD0sID4KLSAgIGlubGluZSB2b2lkIGNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6Q29uZGl0 aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAotQEAgLTMxODksMTUgKzMxOTYsMTUgQEAgY2xh c3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAv LyBPbiBhcm02NCwgdXNlIGFueSBpbnRlZ2VyIGNvbXBhcmlzb24gY29uZGl0aW9uLgotICAgaW5s aW5lIHZvaWQgY29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRS ZWdpc3RlciBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAK LSAgIGlubGluZSB2b2lkIGNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQs IEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBsaHNEZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIGNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVn aXN0ZXIgbGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBy aHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICAvLyBPbiB4ODZfc2hhcmVkLCBsaW1pdGVkIHRvICE9LCA9PSwgPD0sID4KLSAgIGlubGluZSB2 b2lkIGNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0 ZXIgbGhzLAotQEAgLTMyMDcsNyArMzIxNCw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVi bGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgLy8gT24geDg2X3NoYXJlZCwgbGltaXRl ZCB0byAhPSwgPT0sIDw9LCA+Ci0gICBpbmxpbmUgdm9pZCBjb21wYXJlSW50MzJ4NChBc3NlbWJs ZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBjb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkNvbmRp dGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi1AQCAtMzIx Niw3ICszMjIzLDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJs ZXJTcGVjaWZpYyB7Ci0gICAvLyBPbiBhcm02NCwgdXNlIGFueSBpbnRlZ2VyIGNvbXBhcmlzb24g Y29uZGl0aW9uLgotICAgaW5saW5lIHZvaWQgY29tcGFyZUludDMyeDQoQXNzZW1ibGVyOjpDb25k aXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGNvbXBhcmVGb3JFcXVhbGl0eUludDY0 eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotQEAg LTMyMzAsMTUgKzMyMzcsMTUgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9B c3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAg IGlubGluZSB2b2lkIGNvbXBhcmVJbnQ2NHgyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZs b2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBsaHNEZXN0KSBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwot IAotICAgaW5saW5lIHZvaWQgY29tcGFyZUludDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29u ZCwgRmxvYXRSZWdpc3RlciBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oYXJt NjQpOwotKyAgICAgIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lk IGNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3Rl ciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhz RGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBPbiB4ODZfc2hhcmVk LCBsaW1pdGVkIHRvID09LCAhPSwgPCwgPD0KLSAgIGlubGluZSB2b2lkIGNvbXBhcmVGbG9hdDMy eDQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCi1AQCAtMzI0 OSwxMSArMzI1NiwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2Vt YmxlclNwZWNpZmljIHsKLSAgIC8vIE9uIGFybTY0LCB1c2UgYW55IGZsb2F0LXBvaW50IGNvbXBh cmlzb24gY29uZGl0aW9uLgotICAgaW5saW5lIHZvaWQgY29tcGFyZUZsb2F0MzJ4NChBc3NlbWJs ZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBjb21wYXJlRmxvYXQ2 NHgyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gT24geDg2X3NoYXJlZCwgbGltaXRlZCB0byA9 PSwgIT0sIDwsIDw9Ci0gICBpbmxpbmUgdm9pZCBjb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAotQEAgLTMyNjQsNyArMzI3MSw3IEBA IGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewot ICAgLy8gT24gYXJtNjQsIHVzZSBhbnkgZmxvYXQtcG9pbnQgY29tcGFyaXNvbiBjb25kaXRpb24u Ci0gICBpbmxpbmUgdm9pZCBjb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNv bmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKLSAKLSAgIC8vIExvYWQKLSAKLUBAIC0zMjczLDkyICszMjgwLDkyIEBAIGNsYXNz IE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAotICAg aW5saW5lIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkVW5hbGlnbmVkU2ltZDEyOChjb25zdCBBZGRy ZXNzJiBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWRVbmFsaWduZWRTaW1kMTI4KGNvbnN0IEJh c2VJbmRleCYgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwot IAotICAgLy8gU3RvcmUKLSAKLSAgIGlubGluZSBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmVVbmFs aWduZWRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgRmF1bHRpbmdDb2RlT2Zmc2V0IHN0b3Jl VW5hbGlnbmVkU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgZGVzdCkKLS0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBGbG9hdGluZyBwb2ludCBuZWdhdGlv bgotIAotICAgaW5saW5lIHZvaWQgbmVnRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgbmVnRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3Qp Ci0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gRmxvYXRpbmcgcG9pbnQgYWJz b2x1dGUgdmFsdWUKLSAKLSAgIGlubGluZSB2b2lkIGFic0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVy IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAK LSAgIGlubGluZSB2b2lkIGFic0Zsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdp c3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIE5hTi1wcm9w YWdhdGluZyBtaW5pbXVtCi0gCi0gICBpbmxpbmUgdm9pZCBtaW5GbG9hdDMyeDQoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wMSwKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQp OwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIERFRklO RURfT04oeDg2X3NoYXJlZCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbWluRmxvYXQzMng0 KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAgICAgREVGSU5F RF9PTihhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5s aW5lIHZvaWQgbWluRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbWluRmxv YXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIEZsb2F0UmVnaXN0ZXIgdGVtcDEs Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgREVGSU5F RF9PTih4ODZfc2hhcmVkKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIHRlbXAyKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2 b2lkIG1pbkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0 KQotLSAgICAgIERFRklORURfT04oYXJtNjQpOwotKyAgICAgIERFRklORURfT04oYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG1pbkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8v IE5hTi1wcm9wYWdhdGluZyBtYXhpbXVtCi0gCi0gICBpbmxpbmUgdm9pZCBtYXhGbG9hdDMyeDQo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wMSwKLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSBERUZJTkVEX09OKHg4 Nl9zaGFyZWQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVt cDIpIERFRklORURfT04oeDg2X3NoYXJlZCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbWF4 RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCi0tICAg ICAgREVGSU5FRF9PTihhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwot IAotICAgaW5saW5lIHZvaWQgbWF4RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgbWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIEZsb2F0UmVnaXN0 ZXIgdGVtcDEsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1w MikgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIHRlbXAyKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIHBwYzY0KTsKLSAKLSAg IGlubGluZSB2b2lkIG1heEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3Rl ciBsaHNEZXN0KQotLSAgICAgIERFRklORURfT04oYXJtNjQpOwotKyAgICAgIERFRklORURfT04o YXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG1heEZsb2F0NjR4MihGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0KTsKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsK LSAKLSAgIC8vIEZsb2F0aW5nIGFkZAotIAotICAgaW5saW5lIHZvaWQgYWRkRmxvYXQzMng0KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgYWRkRmxv YXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2 X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhZGRGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBhZGRGbG9hdDY0eDIoRmxvYXRS ZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLUBA IC0zMzY2LDEzICszMzczLDEzIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3Jv QXNzZW1ibGVyU3BlY2lmaWMgewotICAgLy8gRmxvYXRpbmcgc3VidHJhY3QKLSAKLSAgIGlubGlu ZSB2b2lkIHN1YkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAK LSAgIGlubGluZSB2b2lkIHN1YkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2lt ZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgc3ViRmxv YXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgc3ViRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJo cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oeDg2X3NoYXJlZCk7Ci1AQCAtMzM4MCwxMyArMzM4NywxMyBAQCBjbGFzcyBNYWNyb0Fz c2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIC8vIEZsb2F0aW5n IGRpdmlzaW9uCi0gCi0gICBpbmxpbmUgdm9pZCBkaXZGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBkaXZGbG9hdDMyeDQoRmxvYXRS ZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAK LSAgIGlubGluZSB2b2lkIGRpdkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGRpdkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywg Y29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotQEAgLTMzOTQsMTMgKzM0 MDEsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVj aWZpYyB7Ci0gICAvLyBGbG9hdGluZyBNdWx0aXBseQotIAotICAgaW5saW5lIHZvaWQgbXVsRmxv YXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgbXVsRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJo cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oeDg2X3NoYXJlZCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtdWxGbG9hdDY0eDIoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtdWxGbG9hdDY0 eDIoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkKTsKLUBAIC0zNDA4LDkxICszNDE1LDkxIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVi bGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgLy8gUGFpcndpc2UgYWRkCi0gCi0gICBp bmxpbmUgdm9pZCBleHRBZGRQYWlyd2lzZUludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUg dm9pZCB1bnNpZ25lZEV4dEFkZFBhaXJ3aXNlSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBleHRB ZGRQYWlyd2lzZUludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkK LS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZEV4 dEFkZFBhaXJ3aXNlSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBGbG9hdGluZyBzcXVhcmUgcm9vdAotIAotICAg aW5saW5lIHZvaWQgc3FydEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHNx cnRGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBJbnRlZ2VyIHRvIGZsb2F0aW5nIHBvaW50 IHdpdGggcm91bmRpbmcKLSAKLSAgIGlubGluZSB2b2lkIGNvbnZlcnRJbnQzMng0VG9GbG9hdDMy eDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZENvbnZlcnRJbnQzMng0VG9G bG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGNvbnZlcnRJbnQzMng0VG9GbG9hdDY0eDIo RmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZENvbnZlcnRJbnQzMng0VG9GbG9h dDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKLSAKLSAgIC8vIEZsb2F0aW5nIHBvaW50IHRvIGludGVnZXIgd2l0aCBzYXR1cmF0 aW9uCi0gCi0gICBpbmxpbmUgdm9pZCB0cnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChGbG9hdFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSB2b2lkIHVuc2lnbmVkVHJ1bmNTYXRGbG9hdDMyeDRUb0ludDMyeDQo RmxvYXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKQotLSAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZFRydW5jU2F0RmxvYXQzMng0VG9JbnQzMng0 KEZsb2F0UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTihhcm02 NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQg dHJ1bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgdGVtcCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUg dm9pZCB1bnNpZ25lZFRydW5jU2F0RmxvYXQ2NHgyVG9JbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3Jj LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 Ci0gCi0gICBpbmxpbmUgdm9pZCB0cnVuY0Zsb2F0MzJ4NFRvSW50MzJ4NFJlbGF4ZWQoRmxvYXRS ZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAg IGlubGluZSB2b2lkIHVuc2lnbmVkVHJ1bmNGbG9hdDMyeDRUb0ludDMyeDRSZWxheGVkKEZsb2F0 UmVnaXN0ZXIgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKLSAKLSAgIGlubGluZSB2b2lkIHRydW5jRmxvYXQ2NHgyVG9JbnQzMng0UmVsYXhlZChGbG9h dFJlZ2lzdGVyIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAot ICAgaW5saW5lIHZvaWQgdW5zaWduZWRUcnVuY0Zsb2F0NjR4MlRvSW50MzJ4NFJlbGF4ZWQoRmxv YXRSZWdpc3RlciBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOwotIAotICAgLy8gRmxvYXRpbmcgcG9pbnQgbmFycm93aW5nCi0gCi0gICBpbmxpbmUgdm9p ZCBjb252ZXJ0RmxvYXQ2NHgyVG9GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBGbG9hdGlu ZyBwb2ludCB3aWRlbmluZwotIAotICAgaW5saW5lIHZvaWQgY29udmVydEZsb2F0MzJ4NFRvRmxv YXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gSW50ZWdlciB0byBpbnRlZ2VyIG5hcnJvd2luZwot IAotQEAgLTM1MDAsNjUgKzM1MDcsNjUgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMg TWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2 b2lkIG5hcnJvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAK LSAgIGlubGluZSB2b2lkIHVuc2lnbmVkTmFycm93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywg Y29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAg aW5saW5lIHZvaWQgdW5zaWduZWROYXJyb3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgbmFycm93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50 JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg REVGSU5FRF9PTih4ODZfc2hhcmVkKTsKLSAKLSAgIGlubGluZSB2b2lkIG5hcnJvd0ludDMyeDQo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHVu c2lnbmVkTmFycm93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50 JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWdu ZWROYXJyb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0t ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgLy8gSW50ZWdlciB0byBpbnRlZ2VyIHdp ZGVuaW5nCi0gCi0gICBpbmxpbmUgdm9pZCB3aWRlbkxvd0ludDh4MTYoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0g ICBpbmxpbmUgdm9pZCB3aWRlbkhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZv aWQgdW5zaWduZWRXaWRlbkxvd0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1 bnNpZ25lZFdpZGVuSGlnaEludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB3aWRl bkxvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB3aWRlbkhpZ2hJbnQxNng4 KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgdW5zaWduZWRXaWRlbkxvd0ludDE2eDgoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNpZ25lZFdpZGVuSGlnaEludDE2eDgoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB3aWRlbkxvd0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBp bmxpbmUgdm9pZCB1bnNpZ25lZFdpZGVuTG93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwot KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGlu ZSB2b2lkIHdpZGVuSGlnaEludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB1bnNp Z25lZFdpZGVuSGlnaEludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVz dCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBDb21wYXJlLWJhc2VkIG1p bmltdW0vbWF4aW11bQotICAgLy8KLUBAIC0zNTcwLDQ3ICszNTc3LDQ3IEBAIGNsYXNzIE1hY3Jv QXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAotICAgaW5saW5l IHZvaWQgcHNldWRvTWluRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgcmhzT3JSaHNEZXN0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzT3JMaHNEZXN0 KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHBzZXVkb01p bkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHBzZXVkb01pbkZsb2F0NjR4MihG bG9hdFJlZ2lzdGVyIHJoc09yUmhzRGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGxoc09yTGhzRGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBwc2V1ZG9NaW5GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBp bmxpbmUgdm9pZCBwc2V1ZG9NYXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciByaHNPclJoc0Rlc3Qs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNPckxo c0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcHNl dWRvTWF4RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgcHNldWRvTWF4RmxvYXQ2 NHgyKEZsb2F0UmVnaXN0ZXIgcmhzT3JSaHNEZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzT3JMaHNEZXN0KQotLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHBzZXVkb01heEZsb2F0NjR4MihGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAK LSAgIC8vIFdpZGVuaW5nL3BhaXJ3aXNlIGludGVnZXIgZG90IHByb2R1Y3QKLSAKLSAgIGlubGlu ZSB2b2lkIHdpZGVuRG90SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIHdpZGVuRG90SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxo cywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwotIAotICAgaW5s aW5lIHZvaWQgZG90SW50OHgxNkludDd4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0 ZXIgcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGRvdElu dDh4MTZJbnQ3eDE2VGhlbkFkZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KQotQEAgLTM2MTgsODEgKzM2MjUsODEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJs aWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gCi0gICBpbmxpbmUgdm9pZCBkb3RJbnQ4eDE2 SW50N3gxNlRoZW5BZGQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwg RmxvYXRSZWdpc3RlciB0ZW1wKQotLSAgICAgIERFRklORURfT04oYXJtNjQpOwotKyAgICAgIERF RklORURfT04oYXJtNjQsIHBwYzY0KTsKLSAKLSAgIC8vIEZsb2F0aW5nIHBvaW50IHJvdW5kaW5n Ci0gCi0gICBpbmxpbmUgdm9pZCBjZWlsRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgY2VpbEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0 KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIGZsb29yRmxv YXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgZmxvb3JGbG9hdDY0eDIoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCB0cnVuY0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywg RmxvYXRSZWdpc3RlciBkZXN0KQotLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OwotKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlu bGluZSB2b2lkIHRydW5jRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbmVh cmVzdEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQotLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwotKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lkIG5lYXJlc3RGbG9hdDY0 eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0LCBwcGM2NCk7Ci0gCi0gICAvLyBGbG9hdGluZyBtdWx0aXBseS1hY2N1bXVsYXRlOiBzcmNE ZXN0IFsrLV09IHNyYzEgKiBzcmMyCi0gCi0gICBpbmxpbmUgdm9pZCBmbWFGbG9hdDMyeDQoRmxv YXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNyYzIsCi0tICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3Qp IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lk IGZubWFGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNyYzIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkKLS0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBmbWFGbG9hdDY0eDIoRmxv YXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNyYzIsCi0tICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3Qp IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKLSAKLSAgIGlubGluZSB2b2lk IGZubWFGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNyYzIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkKLS0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtaW5GbG9hdDMyeDRSZWxh eGVkKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpCi0tICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbWluRmxvYXQzMng0UmVsYXhlZChG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtYXhGbG9hdDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OwotIAotICAgaW5saW5lIHZvaWQgbWF4RmxvYXQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBp bmxpbmUgdm9pZCBtaW5GbG9hdDY0eDJSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIHNyY0Rlc3QpCi0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0r ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5l IHZvaWQgbWluRmxvYXQ2NHgyUmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKLS0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBtYXhG bG9hdDY0eDJSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3Qp Ci0tICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Ci0rICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwotIAotICAgaW5saW5lIHZvaWQgbWF4RmxvYXQ2 NHgyUmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7Ci0gCi0gICBpbmxpbmUgdm9pZCBxMTVNdWxySW50MTZ4OFJlbGF4 ZWQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKLS0gICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKLSsgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0LCBwcGM2NCk7Ci0gCi0gIHB1YmxpYzoKLSAgIC8vID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQEAgLTM3 MTcsMTAgKzM3MjQsMTAgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3Nl bWJsZXJTcGVjaWZpYyB7Ci0gCi0gICAvLyB0ZW1wIHJlcXVpcmVkIG9uIHg4NiBhbmQgeDY0OyBt dXN0IGJlIHVuZGVmaW5lZCBvbiBtaXBzNjQgYW5kIGxvb25nNjQuCi0gICB2b2lkIGNvbnZlcnRV SW50NjRUb0Zsb2F0MzIoUmVnaXN0ZXI2NCBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCwgUmVnaXN0 ZXIgdGVtcCkKLS0gICAgICBERUZJTkVEX09OKGFybTY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2 NjQsIHdhc20zMiwgeDY0LCB4ODYpOwotKyAgICAgIERFRklORURfT04oYXJtNjQsIG1pcHM2NCwg bG9vbmc2NCwgcHBjNjQsIHJpc2N2NjQsIHdhc20zMiwgeDY0LCB4ODYpOwotIAotICAgdm9pZCBj b252ZXJ0SW50NjRUb0Zsb2F0MzIoUmVnaXN0ZXI2NCBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkK LS0gICAgICBERUZJTkVEX09OKGFybTY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20z MiwgeDY0LCB4ODYpOwotKyAgICAgIERFRklORURfT04oYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwg cHBjNjQsIHJpc2N2NjQsIHdhc20zMiwgeDY0LCB4ODYpOwotIAotICAgYm9vbCBjb252ZXJ0VUlu dDY0VG9Eb3VibGVOZWVkc1RlbXAoKSBQRVJfQVJDSDsKLSAKLUBAIC0zODAxLDE2ICszODA4LDE2 IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMg ewotICAgLy8gU2NhbGFyOjpJbnQ2NC4KLSAgIHZvaWQgd2FzbUxvYWQoY29uc3Qgd2FzbTo6TWVt b3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlciBtZW1vcnlCYXNlLAotICAgICAgICAgICAg ICAgICBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0Y2gsIEFueVJlZ2lzdGVyIG91dHB1 dCkKLS0gICAgICBERUZJTkVEX09OKGFybSwgbG9vbmc2NCwgcmlzY3Y2NCwgbWlwczY0KTsKLSsg ICAgICBERUZJTkVEX09OKGFybSwgbG9vbmc2NCwgcmlzY3Y2NCwgbWlwczY0LCBwcGM2NCk7Ci0g ICB2b2lkIHdhc21Mb2FkSTY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2Vzcywg UmVnaXN0ZXIgbWVtb3J5QmFzZSwKLSAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcHRyLCBS ZWdpc3RlciBwdHJTY3JhdGNoLCBSZWdpc3RlcjY0IG91dHB1dCkKLS0gICAgICBERUZJTkVEX09O KGFybSwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKGFybSwg bWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gICB2b2lkIHdhc21TdG9yZShjb25z dCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIEFueVJlZ2lzdGVyIHZhbHVlLAotICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIgcHRyLCBSZWdpc3Rl ciBwdHJTY3JhdGNoKQotLSAgICAgIERFRklORURfT04oYXJtLCBsb29uZzY0LCByaXNjdjY0LCBt aXBzNjQpOwotKyAgICAgIERFRklORURfT04oYXJtLCBsb29uZzY0LCByaXNjdjY0LCBtaXBzNjQs IHBwYzY0KTsKLSAgIHZvaWQgd2FzbVN0b3JlSTY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rl c2MmIGFjY2VzcywgUmVnaXN0ZXI2NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIgcHRyU2NyYXRjaCkKLS0gICAg ICBERUZJTkVEX09OKGFybSwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJ TkVEX09OKGFybSwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICAvLyBU aGVzZSBhY2NlcHQgZ2VuZXJhbCBtZW1vcnlCYXNlICsgcHRyICsgb2Zmc2V0IChpbiBgYWNjZXNz YCk7IHRoZSBvZmZzZXQgaXMKLSAgIC8vIGFsd2F5cyBzbWFsbGVyIHRoYW4gdGhlIGd1YXJkIHJl Z2lvbi4gIFRoZXkgd2lsbCBpbnNlcnQgYW4gYWRkaXRpb25hbCBhZGQKLUBAIC0zODg5LDExICsz ODk2LDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3Bl Y2lmaWMgewotICAgdm9pZCB3YXNtVHJ1bmNhdGVEb3VibGVUb0ludDY0KEZsb2F0UmVnaXN0ZXIg aW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2wgaXNTYXR1cmF0aW5nLCBMYWJlbCogb29sRW50cnksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIG9vbFJlam9pbiwgRmxvYXRSZWdpc3RlciB0ZW1wRG91 YmxlKQotLSAgICAgIERFRklORURfT04oYXJtNjQsIHg4NiwgeDY0LCBtaXBzNjQsIGxvb25nNjQs IHJpc2N2NjQsIHdhc20zMik7Ci0rICAgICAgREVGSU5FRF9PTihhcm02NCwgeDg2LCB4NjQsIG1p cHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyLCBwcGM2NCk7Ci0gICB2b2lkIHdhc21UcnVu Y2F0ZURvdWJsZVRvVUludDY0KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2F0dXJhdGluZywg TGFiZWwqIG9vbEVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJl bCogb29sUmVqb2luLCBGbG9hdFJlZ2lzdGVyIHRlbXBEb3VibGUpCi0tICAgICAgREVGSU5FRF9P Tihhcm02NCwgeDg2LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyKTsKLSsg ICAgICBERUZJTkVEX09OKGFybTY0LCB4ODYsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0 LCB3YXNtMzIsIHBwYzY0KTsKLSAgIHZvaWQgb29sV2FzbVRydW5jYXRlQ2hlY2tGNjRUb0k2NChG bG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlcjY0IG91dHB1dCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUcnVuY0ZsYWdzIGZsYWdzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206OlRyYXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNj LAotQEAgLTM5MDIsMTEgKzM5MDksMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMg TWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICB2b2lkIHdhc21UcnVuY2F0ZUZsb2F0MzJUb0lu dDY0KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2F0dXJhdGluZywgTGFiZWwqIG9vbEVudHJ5 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb29sUmVqb2luLCBG bG9hdFJlZ2lzdGVyIHRlbXBEb3VibGUpCi0tICAgICAgREVGSU5FRF9PTihhcm02NCwgeDg2LCB4 NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyKTsKLSsgICAgICBERUZJTkVEX09O KGFybTY0LCB4ODYsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIsIHBwYzY0 KTsKLSAgIHZvaWQgd2FzbVRydW5jYXRlRmxvYXQzMlRvVUludDY0KEZsb2F0UmVnaXN0ZXIgaW5w dXQsIFJlZ2lzdGVyNjQgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYm9vbCBpc1NhdHVyYXRpbmcsIExhYmVsKiBvb2xFbnRyeSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhYmVsKiBvb2xSZWpvaW4sIEZsb2F0UmVnaXN0ZXIgdGVtcERv dWJsZSkKLS0gICAgICBERUZJTkVEX09OKGFybTY0LCB4ODYsIHg2NCwgbWlwczY0LCBsb29uZzY0 LCByaXNjdjY0LCB3YXNtMzIpOwotKyAgICAgIERFRklORURfT04oYXJtNjQsIHg4NiwgeDY0LCBt aXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMiwgcHBjNjQpOwotICAgdm9pZCBvb2xXYXNt VHJ1bmNhdGVDaGVja0YzMlRvSTY0KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0 cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydW5jRmxhZ3MgZmxh Z3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzbTo6VHJh cFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MsCi1AQCAtNDIyMCw3ICs0MjI3LDggQEAgY2xhc3MgTWFj cm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAvLyBjb252 ZW50aW9uLCB3aGljaCByZXF1aXJlcyBwcmVkaWN0YWJsZSBoaWdoIGJpdHMuICBJbiBwcmFjdGlj ZSwgdGhpcyBtZWFucwotICAgLy8gdGhhdCB0aGUgMzItYml0IHZhbHVlIHdpbGwgYmUgemVyby1l eHRlbmRlZCBvciBzaWduLWV4dGVuZGVkIHRvIDY0IGJpdHMgYXMKLSAgIC8vIGFwcHJvcHJpYXRl IGZvciB0aGUgcGxhdGZvcm0uCi0tICB2b2lkIHdpZGVuSW50MzIoUmVnaXN0ZXIgcikgREVGSU5F RF9PTihhcm02NCwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgdm9pZCB3aWRl bkludDMyKFJlZ2lzdGVyIHIpCi0rICAgICAgREVGSU5FRF9PTihhcm02NCwgeDY0LCBtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIC8vIEFzIGVudGVyRmFrZUV4aXRGcmFt ZSgpLCBidXQgdXNpbmcgcmVnaXN0ZXIgY29udmVudGlvbnMgYXBwcm9wcmlhdGUgZm9yCi0gICAv LyB3YXNtIHN0dWJzLgotQEAgLTQyODcsMTMgKzQyOTUsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJs ZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIGV4cGVjdGVkLAotICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgcmVwbGFjZW1lbnQsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tU ZW1wLCBSZWdpc3RlciBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQs IHJpc2N2NjQpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBw cGM2NCk7Ci0gCi0gICB2b2lkIGNvbXBhcmVFeGNoYW5nZShTY2FsYXI6OlR5cGUgdHlwZSwgU3lu Y2hyb25pemF0aW9uIHN5bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5k ZXgmIG1lbSwgUmVnaXN0ZXIgZXhwZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciByZXBsYWNlbWVudCwgUmVnaXN0ZXIgdmFsdWVUZW1wLAotICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91 dHB1dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAg ICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIC8v IHg4NjogYGV4cGVjdGVkYCBhbmQgYG91dHB1dGAgbXVzdCBiZSBlZHg6ZWF4OyBgcmVwbGFjZW1l bnRgIGlzIGVjeDplYnguCi0gICAvLyB4NjQ6IGBvdXRwdXRgIG11c3QgYmUgcmF4LgotQEAgLTQz MDMsMTIgKzQzMTEsMTIgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3Nl bWJsZXJTcGVjaWZpYyB7Ci0gICB2b2lkIGNvbXBhcmVFeGNoYW5nZTY0KFN5bmNocm9uaXphdGlv biBzeW5jLCBjb25zdCBBZGRyZXNzJiBtZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyNjQgZXhwZWN0ZWQsIFJlZ2lzdGVyNjQgcmVwbGFjZW1lbnQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0KQotLSAgICAgIERFRklORURfT04oYXJtLCBh cm02NCwgeDY0LCB4ODYsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5F RF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2 NCk7Ci0gCi0gICB2b2lkIGNvbXBhcmVFeGNoYW5nZTY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBj b25zdCBCYXNlSW5kZXgmIG1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2 NCBleHBlY3RlZCwgUmVnaXN0ZXI2NCByZXBsYWNlbWVudCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4 NjQsIHg4NiwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKGFy bSwgYXJtNjQsIHg2NCwgeDg2LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAK LSAgIC8vIEV4Y2hhbmdlIHdpdGggbWVtb3J5LiAgUmV0dXJuIHRoZSB2YWx1ZSBpbml0aWFsbHkg aW4gbWVtb3J5LgotICAgLy8gTUlQUzogYHZhbHVlVGVtcGAsIGBvZmZzZXRUZW1wYCBhbmQgYG1h c2tUZW1wYCBtdXN0IGJlIGRlZmluZWQgZm9yIDgtYml0Ci1AQCAtNDMyNSwxMiArNDMzMywxMiBA QCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsK LSAgIHZvaWQgYXRvbWljRXhjaGFuZ2UoU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlv biBzeW5jLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lz dGVyIHZhbHVlLCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciBvdXRwdXQpCi0t ICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklO RURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2b2lkIGF0b21p Y0V4Y2hhbmdlKFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKLSAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIHZhbHVlLCBS ZWdpc3RlciB2YWx1ZVRlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNl dFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciBvdXRwdXQpCi0tICAgICAgREVGSU5F RF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURfT04obWlwczY0 LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICAvLyB4ODY6IGB2YWx1ZWAgbXVzdCBi ZSBlY3g6ZWJ4OyBgb3V0cHV0YCBtdXN0IGJlIGVkeDplYXguCi0gICAvLyBBUk06IGB2YWx1ZWAg YW5kIGBvdXRwdXRgIG11c3QgYmUgZGlzdGluY3QgYW5kIChldmVuLG9kZCkgcGFpcnMuCi1AQCAt NDMzOCwxMSArNDM0NiwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fz c2VtYmxlclNwZWNpZmljIHsKLSAKLSAgIHZvaWQgYXRvbWljRXhjaGFuZ2U2NChTeW5jaHJvbml6 YXRpb24gc3luYywgY29uc3QgQWRkcmVzcyYgbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyNjQgdmFsdWUsIFJlZ2lzdGVyNjQgb3V0cHV0KQotLSAgICAgIERFRklORURfT04o YXJtLCBhcm02NCwgeDY0LCB4ODYsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAg REVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0 LCBwcGM2NCk7Ci0gCi0gICB2b2lkIGF0b21pY0V4Y2hhbmdlNjQoU3luY2hyb25pemF0aW9uIHN5 bmMsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyNjQgdmFsdWUsIFJlZ2lzdGVyNjQgb3V0cHV0KQotLSAgICAgIERFRklORURfT04oYXJtLCBh cm02NCwgeDY0LCB4ODYsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5F RF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2 NCk7Ci0gCi0gICAvLyBSZWFkLW1vZGlmeS13cml0ZSB3aXRoIG1lbW9yeS4gIFJldHVybiB0aGUg dmFsdWUgaW4gbWVtb3J5IGJlZm9yZSB0aGUKLSAgIC8vIG9wZXJhdGlvbi4KLUBAIC00Mzc2LDEy ICs0Mzg0LDEyIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVy U3BlY2lmaWMgewotICAgdm9pZCBhdG9taWNGZXRjaE9wKFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5j aHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsCi0gICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWVUZW1wLAotICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1w LCBSZWdpc3RlciBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJp c2N2NjQpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2 NCk7Ci0gCi0gICB2b2lkIGF0b21pY0ZldGNoT3AoU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9u aXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKLSAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciB2YWx1ZSwgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwg UmVnaXN0ZXIgb3V0cHV0KQotLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNj djY0KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQp OwotIAotICAgLy8geDg2OgotICAgLy8gICBgdGVtcGAgbXVzdCBiZSBlY3g6ZWJ4OyBgb3V0cHV0 YCBtdXN0IGJlIGVkeDplYXguCi1AQCAtNDM5NSw3ICs0NDAzLDcgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gCi0gICB2b2lkIGF0b21p Y0ZldGNoT3A2NChTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsIFJlZ2lzdGVyNjQg dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lz dGVyNjQgdGVtcCwgUmVnaXN0ZXI2NCBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9PTihhcm0sIGFy bTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihh cm0sIGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAg dm9pZCBhdG9taWNGZXRjaE9wNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLCBj b25zdCBBZGRyZXNzJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJl c3MmIG1lbSwgUmVnaXN0ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkKLUBAIC00NDAzLDcg KzQ0MTEsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNw ZWNpZmljIHsKLSAKLSAgIHZvaWQgYXRvbWljRmV0Y2hPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5j LCBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0IHRlbXAsIFJlZ2lzdGVyNjQgb3V0cHV0 KQotLSAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJp c2N2NjQpOwotKyAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgeDY0LCBtaXBzNjQsIGxvb25n NjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgYXRvbWljRmV0Y2hPcDY0KFN5bmNocm9u aXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwgY29uc3QgQWRkcmVzcyYgdmFsdWUsCi0gICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXI2NCB0ZW1wLCBS ZWdpc3RlcjY0IG91dHB1dCkKLUBAIC00NDIxLDE0ICs0NDI5LDE0IEBAIGNsYXNzIE1hY3JvQXNz ZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotIAotICAgdm9pZCBhdG9t aWNFZmZlY3RPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2 NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJl Z2lzdGVyNjQgdGVtcCkKLS0gICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1pcHM2NCwgbG9v bmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCBtaXBzNjQsIGxv b25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgYXRvbWljRWZmZWN0T3A2NChTeW5j aHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsIFJlZ2lzdGVyNjQgdmFsdWUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0pIERFRklORURfT04oeDY0KTsK LSAKLSAgIHZvaWQgYXRvbWljRWZmZWN0T3A2NChTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWlj T3Agb3AsIFJlZ2lzdGVyNjQgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyNjQgdGVtcCkKLS0gICAgICBERUZJTkVEX09OKGFybSwg YXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihhcm0s IGFybTY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAgIC8vIDY0LWJp dCBhdG9taWMgbG9hZC4gT24gNjQtYml0IHN5c3RlbXMsIHVzZSByZWd1bGFyIGxvYWQgd2l0aAot ICAgLy8gU3luY2hyb25pemF0aW9uOjpMb2FkLCBub3QgdGhpcyBtZXRob2QuCi1AQCAtNDQ4MSwx NCArNDQ4OSwxNCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxl clNwZWNpZmljIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByZXBsYWNl bWVudCwgUmVnaXN0ZXIgdmFsdWVUZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9v bmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2 NjQsIHBwYzY0KTsKLSAKLSAgIHZvaWQgd2FzbUNvbXBhcmVFeGNoYW5nZShjb25zdCB3YXNtOjpN ZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIGV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIHJlcGxhY2VtZW50LCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFz a1RlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KQotLSAg ICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVE X09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAgdm9pZCB3YXNtQXRv bWljRXhjaGFuZ2UoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZSwg UmVnaXN0ZXIgb3V0cHV0KQotQEAgLTQ1MDIsMTMgKzQ1MTAsMTMgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIHZhbHVlLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1w LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVy IG91dHB1dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0r ICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKLSAKLSAg IHZvaWQgd2FzbUF0b21pY0V4Y2hhbmdlKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFj Y2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBS ZWdpc3RlciB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVl VGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9PTihtaXBz NjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0 LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2b2lkIHdhc21BdG9taWNGZXRjaE9wKGNvbnN0IHdh c206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgQXRvbWljT3Agb3AsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVy IHRlbXAsCi1AQCAtNDUyOSwxMyArNDUzNywxNCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1 YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKLSAgIHZvaWQgd2FzbUF0b21pY0ZldGNoT3Ao Y29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBBdG9taWNPcCBvcCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwg UmVnaXN0ZXIgdmFsdWVUZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBv ZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgb3V0cHV0KSBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7Ci0r ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCkKLSsgICAgICBERUZJTkVE X09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAgdm9pZCB3YXNtQXRv bWljRmV0Y2hPcChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIEF0b21pY09w IG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQmFz ZUluZGV4JiBtZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVt cCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwg bG9vbmc2NCwgcmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJp c2N2NjQsIHBwYzY0KTsKLSAKLSAgIC8vIFJlYWQtbW9kaWZ5LXdyaXRlIHdpdGggbWVtb3J5LiAg UmV0dXJuIG5vIHZhbHVlLgotICAgLy8KLUBAIC00NTYyLDEzICs0NTcxLDEzIEBAIGNsYXNzIE1h Y3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zm c2V0VGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wKQot LSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJ TkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAgdm9pZCB3YXNt QXRvbWljRWZmZWN0T3AoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBBdG9t aWNPcCBvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25z dCBCYXNlSW5kZXgmIG1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZh bHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIG1hc2tUZW1wKQotLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCBy aXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBj NjQpOwotIAotICAgLy8gNjQtYml0IHdpZGUgb3BlcmF0aW9ucy4KLSAKLUBAIC00NjI2LDEyICs0 NjM1LDEyIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3Bl Y2lmaWMgewotICAgdm9pZCB3YXNtQXRvbWljRmV0Y2hPcDY0KGNvbnN0IHdhc206Ok1lbW9yeUFj Y2Vzc0Rlc2MmIGFjY2VzcywgQXRvbWljT3Agb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXI2NCB2YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVtLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdGVtcCwgUmVnaXN0ZXI2NCBvdXRwdXQpCi0tICAgICAg REVGSU5FRF9PTihhcm0sIGFybTY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHg2NCk7Ci0r ICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBw YzY0LCB4NjQpOwotIAotICAgdm9pZCB3YXNtQXRvbWljRmV0Y2hPcDY0KGNvbnN0IHdhc206Ok1l bW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgQXRvbWljT3Agb3AsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgY29uc3QgQmFzZUluZGV4JiBtZW0sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkK LS0gICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwg eDY0KTsKLSsgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlz Y3Y2NCwgcHBjNjQsIHg2NCk7Ci0gCi0gICB2b2lkIHdhc21BdG9taWNGZXRjaE9wNjQoY29uc3Qg d2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBBdG9taWNPcCBvcCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiB2YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVt LAotQEAgLTQ2ODQsMTQgKzQ2OTMsMTQgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMg TWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIHJlcGxhY2VtZW50LCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0 ZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICBBbnlSZWdpc3RlciBvdXRwdXQpCi0tICAg ICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURf T04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2b2lkIGNvbXBhcmVF eGNoYW5nZUpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAot ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIg ZXhwZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJlcGxhY2VtZW50 LCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAotICAgICAgICAg ICAgICAgICAgICAgICAgICBBbnlSZWdpc3RlciBvdXRwdXQpCi0tICAgICAgREVGSU5FRF9PTiht aXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29u ZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2b2lkIGF0b21pY0V4Y2hhbmdlSlMoU2NhbGFy OjpUeXBlIGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZSwgUmVnaXN0ZXIgdGVt cCwKLUBAIC00NzA1LDEzICs0NzE0LDEzIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGlj IE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVt cCwgUmVnaXN0ZXIgdGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBBbnlSZWdpc3RlciBv dXRwdXQpCi0tICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwotKyAg ICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7Ci0gCi0gICB2 b2lkIGF0b21pY0V4Y2hhbmdlSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwgU3luY2hyb25pemF0 aW9uIHN5bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0s IFJlZ2lzdGVyIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVl VGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwgQW55UmVnaXN0ZXIgb3V0cHV0KQotLSAgICAg IERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09O KG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOwotIAotICAgdm9pZCBhdG9taWNGZXRj aE9wSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCi0gICAg ICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFk ZHJlc3MmIG1lbSwKLUBAIC00NzM3LDEzICs0NzQ2LDEzIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVy IDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewotICAgICAgICAgICAgICAgICAgICAg ICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sCi0gICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRl bXAsCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIg dGVtcCwgQW55UmVnaXN0ZXIgb3V0cHV0KQotLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29u ZzY0LCByaXNjdjY0KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2 NCwgcHBjNjQpOwotIAotICAgdm9pZCBhdG9taWNGZXRjaE9wSlMoU2NhbGFyOjpUeXBlIGFycmF5 VHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBBdG9t aWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAotICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAot ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIHRlbXAs IEFueVJlZ2lzdGVyIG91dHB1dCkKLS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwg cmlzY3Y2NCk7Ci0rICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBw YzY0KTsKLSAKLSAgIHZvaWQgYXRvbWljRWZmZWN0T3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBl LCBTeW5jaHJvbml6YXRpb24gc3luYywKLSAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNP cCBvcCwgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwKLUBAIC00NzY0LDEyICs0 NzczLDE0IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3Bl Y2lmaWMgewotICAgdm9pZCBhdG9taWNFZmZlY3RPcEpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUs IFN5bmNocm9uaXphdGlvbiBzeW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY09w IG9wLCBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVtLAotICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKLS0gICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCkgREVGSU5FRF9PTihtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQpOwotKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1h c2tUZW1wKQotKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2 NCk7Ci0gCi0gICB2b2lkIGF0b21pY0VmZmVjdE9wSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwg U3luY2hyb25pemF0aW9uIHN5bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Ag b3AsIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBCYXNlSW5kZXgmIG1lbSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCi0tICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXApIERFRklORURfT04obWlwczY0 LCBsb29uZzY0LCByaXNjdjY0KTsKLSsgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBt YXNrVGVtcCkKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBj NjQpOwotIAotICAgdm9pZCBhdG9taWNJc0xvY2tGcmVlSlMoUmVnaXN0ZXIgdmFsdWUsIFJlZ2lz dGVyIG91dHB1dCk7Ci0gCi1AQCAtNTkyOCw3ICs1OTM5LDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJs ZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7Ci0gICBpbmxpbmUgdm9pZCBhZGRT dGFja1B0clRvKFQgdCk7Ci0gCi0gICB2b2lkIHN1YkZyb21TdGFja1B0cihJbW0zMiBpbW0zMikK LS0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyLCBhcm0s IHg4NiwgeDY0KTsKLSsgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwg cHBjNjQsIHdhc20zMiwgYXJtLCB4ODYsIHg2NCk7Ci0gICB2b2lkIHN1YkZyb21TdGFja1B0cihS ZWdpc3RlciByZWcpOwotIAotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1kaWZmIC0tZ2l0IGEv anMvc3JjL2ppdC9Nb3ZlRW1pdHRlci5oIGIvanMvc3JjL2ppdC9Nb3ZlRW1pdHRlci5oCi1pbmRl eCA2NDI4MjljMDcwZDYuLjNhODgzYzU5NmNhMCAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvTW92 ZUVtaXR0ZXIuaAotKysrIGIvanMvc3JjL2ppdC9Nb3ZlRW1pdHRlci5oCi1AQCAtMTcsNiArMTcs OCBAQAotICMgIGluY2x1ZGUgImppdC9sb29uZzY0L01vdmVFbWl0dGVyLWxvb25nNjQuaCIKLSAj ZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAjICBpbmNsdWRlICJqaXQvcmlzY3Y2 NC9Nb3ZlRW1pdHRlci1yaXNjdjY0LmgiCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0 KQotKyMgIGluY2x1ZGUgImppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5oIgotICNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCi0gIyAgaW5jbHVkZSAiaml0L3dhc20zMi9Nb3ZlRW1p dHRlci13YXNtMzIuaCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKLWRpZmYgLS1n aXQgYS9qcy9zcmMvaml0L01vdmVSZXNvbHZlci5jcHAgYi9qcy9zcmMvaml0L01vdmVSZXNvbHZl ci5jcHAKLWluZGV4IGQyZTFmMTI3MDBiZC4uOGU2MjI0MDdhMGE4IDEwMDY0NAotLS0tIGEvanMv c3JjL2ppdC9Nb3ZlUmVzb2x2ZXIuY3BwCi0rKysgYi9qcy9zcmMvaml0L01vdmVSZXNvbHZlci5j cHAKLUBAIC01Nyw2ICs1NywyMiBAQCBib29sIE1vdmVSZXNvbHZlcjo6YWRkTW92ZShjb25zdCBN b3ZlT3BlcmFuZCYgZnJvbSwgY29uc3QgTW92ZU9wZXJhbmQmIHRvLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1vdmVPcDo6VHlwZSB0eXBlKSB7Ci0gICAvLyBBc3NlcnQgdGhhdCB3ZSdy ZSBub3QgZG9pbmcgbm8tb3AgbW92ZXMuCi0gICBNT1pfQVNTRVJUKCEoZnJvbSA9PSB0bykpOwot KyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAvLyBQUEM2NCBGbG9hdFJlZ2lzdGVycyBleHBv c2UgU2luZ2xlL0RvdWJsZSBraW5kcyB0aGF0IGhhdmUgZGlzdGluY3QgY29kZSgpCi0rICAvLyB2 YWx1ZXMgYnV0IHNoYXJlIG9uZSBwaHlzaWNhbCByZWdpc3Rlci4gVGhlIHJlZ2lzdGVyIGFsbG9j YXRvciBjYW4gZW1pdCBhCi0rICAvLyBtb3ZlIGJldHdlZW4gdHdvIHN1Y2gga2luZC12aWV3cyBv ZiB0aGUgc2FtZSBGUFIgKGUuZy4gZjItRG91YmxlIHRvCi0rICAvLyBmMi1TaW5nbGUpOyB0aGVz ZSBhcmUgbm8tb3BzIG9uIHRoZSBoYXJkd2FyZSwgYXJlIG5vdCBjYXVnaHQgYnkgdGhlCi0rICAv LyAoZnJvbSA9PSB0bykgYXNzZXJ0IGFib3ZlLCBhbmQgd291bGQgb3RoZXJ3aXNlIHRyaXAgdGhl Ci0rICAvLyAhZnJvbSgpLmFsaWFzZXModG8oKSkgaW52YXJpYW50IHRoZSByZXNvbHZlciByZWxp ZXMgb24gbGF0ZXIuIERyb3AgdGhlbS4KLSsgIC8vCi0rICAvLyBUaGlzIHdvdWxkIGJlIGNvcnJl Y3QgZm9yIGFueSBiYWNrZW5kIHdob3NlIEZsb2F0UmVnaXN0ZXIgaGFzIG11bHRpcGxlCi0rICAv LyBraW5kcyBhbGlhc2luZyBvbmUgcGh5c2ljYWwgcmVnaXN0ZXIsIGFuZCBjb3VsZCBiZSB1bi1n YXRlZCBpZiBhbm90aGVyCi0rICAvLyBzdWNoIGJhY2tlbmQgbmVlZHMgaXQsIGJ1dCBpdCBpcyBz Y29wZWQgdG8gUFBDNjQgc28gbW92ZSByZXNvbHV0aW9uIG9uCi0rICAvLyB0aWVyLTEgcGxhdGZv cm1zIGlzIGxlZnQgdW5jaGFuZ2VkLgotKyAgaWYgKGZyb20uYWxpYXNlcyh0bykpIHsKLSsgICAg cmV0dXJuIHRydWU7Ci0rICB9Ci0rI2VuZGlmCi0gICBQZW5kaW5nTW92ZSogcG0gPSBtb3ZlUG9v bF8uYWxsb2NhdGUoZnJvbSwgdG8sIHR5cGUpOwotICAgaWYgKCFwbSkgewotICAgICByZXR1cm4g ZmFsc2U7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9SZWdpc3RlckFsbG9jYXRvci5oIGIvanMv c3JjL2ppdC9SZWdpc3RlckFsbG9jYXRvci5oCi1pbmRleCBlZGE5OTMzZjYzMjIuLjQyZTQ4MTEx MDQ2YSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvUmVnaXN0ZXJBbGxvY2F0b3IuaAotKysrIGIv anMvc3JjL2ppdC9SZWdpc3RlckFsbG9jYXRvci5oCi1AQCAtMjYyLDkgKzI2MiwxMCBAQCBjbGFz cyBSZWdpc3RlckFsbG9jYXRvciB7Ci0gIHB1YmxpYzoKLSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU YWtlYWJsZVNldD4KLSAgIHN0YXRpYyB2b2lkIHRha2VXYXNtUmVnaXN0ZXJzKFRha2VhYmxlU2V0 JiByZWdzKSB7Ci0tI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9BUk0pIHx8ICAgICAgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX0xP T05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyNpZiBkZWZpbmVkKEpTX0NP REVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCAgICAgICAgIFwKLSsgICAg ZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8 fCAgICBcCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUklTQ1Y2NCkgfHwgXAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICAg IHJlZ3MudGFrZShIZWFwUmVnKTsKLSAjZW5kaWYKLSAgICAgTU9aX0FTU0VSVCghcmVncy5oYXMo RnJhbWVQb2ludGVyKSk7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9SZWdpc3RlcnMuaCBiL2pz L3NyYy9qaXQvUmVnaXN0ZXJzLmgKLWluZGV4IGUwZDAyZTJmYjYwZC4uNDIzNzc3Y2UzOGNkIDEw MDY0NAotLS0tIGEvanMvc3JjL2ppdC9SZWdpc3RlcnMuaAotKysrIGIvanMvc3JjL2ppdC9SZWdp c3RlcnMuaAotQEAgLTIwLDYgKzIwLDggQEAKLSAjICBpbmNsdWRlICJqaXQvbG9vbmc2NC9BcmNo aXRlY3R1cmUtbG9vbmc2NC5oIgotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQot ICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L0FyY2hpdGVjdHVyZS1yaXNjdjY0LmgiCi0rI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyMgIGluY2x1ZGUgImppdC9wcGM2NC9BcmNoaXRl Y3R1cmUtcHBjNjQuaCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKQotICMgIGlu Y2x1ZGUgImppdC93YXNtMzIvQXJjaGl0ZWN0dXJlLXdhc20zMi5oIgotICNlbGlmIGRlZmluZWQo SlNfQ09ERUdFTl9OT05FKQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvU2FmZXBvaW50cy5jcHAg Yi9qcy9zcmMvaml0L1NhZmVwb2ludHMuY3BwCi1pbmRleCA0MmUzMDVmMDUzYWYuLjhlM2EyNWMz YzVmZiAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvU2FmZXBvaW50cy5jcHAKLSsrKyBiL2pzL3Ny Yy9qaXQvU2FmZXBvaW50cy5jcHAKLUBAIC02Myw2ICs2MywxMSBAQCBzdGF0aWMgdm9pZCBXcml0 ZUZsb2F0UmVnaXN0ZXJNYXNrKENvbXBhY3RCdWZmZXJXcml0ZXImIHN0cmVhbSwKLSAgICAgICBz dHJlYW0ud3JpdGVVbnNpZ25lZDY0KGJpdHMubG93KCkpOwotICAgICAgIHN0cmVhbS53cml0ZVVu c2lnbmVkNjQoYml0cy5oaWdoKCkpOwotICAgICAgIGJyZWFrOwotKyNlbGlmIGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkKLSsgICAgY2FzZSAxNjoKLSsgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25l ZDY0KHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXRzKSk7Ci0rICAgICAgc3RyZWFtLndyaXRlVW5z aWduZWQ2NChzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0cyA+PiA2NCkpOwotKyAgICAgIGJyZWFr OwotICNlbHNlCi0gICAgIGNhc2UgMToKLSAgICAgICBzdHJlYW0ud3JpdGVCeXRlKGJpdHMpOwot QEAgLTg4LDYgKzkzLDEyIEBAIHN0YXRpYyBGbG9hdFJlZ2lzdGVyczo6U2V0VHlwZSBSZWFkRmxv YXRSZWdpc3Rlck1hc2soCi0gICAgICAgdWludDY0X3QgaGlnaCA9IHN0cmVhbS5yZWFkVW5zaWdu ZWQ2NCgpOwotICAgICAgIHJldHVybiBCaXRzZXQxMjgoaGlnaCwgbG93KTsKLSAgICAgfQotKyNl bGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsgICAgY2FzZSAxNjogewotKyAgICAgIHVp bnQ2NF90IGxvdyA9IHN0cmVhbS5yZWFkVW5zaWduZWQ2NCgpOwotKyAgICAgIHVpbnQ2NF90IGhp Z2ggPSBzdHJlYW0ucmVhZFVuc2lnbmVkNjQoKTsKLSsgICAgICByZXR1cm4gRmxvYXRSZWdpc3Rl cnM6OlNldFR5cGUoaGlnaCkgPDwgNjQgfCBGbG9hdFJlZ2lzdGVyczo6U2V0VHlwZShsb3cpOwot KyAgICB9Ci0gI2Vsc2UKLSAgICAgY2FzZSAxOgotICAgICAgIHJldHVybiBzdHJlYW0ucmVhZEJ5 dGUoKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L1NoYXJlZElDSGVscGVycy1pbmwuaCBiL2pz L3NyYy9qaXQvU2hhcmVkSUNIZWxwZXJzLWlubC5oCi1pbmRleCBlZWRjY2M4MzE3MzIuLjEwMDVi MTQwZjFkZiAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvU2hhcmVkSUNIZWxwZXJzLWlubC5oCi0r KysgYi9qcy9zcmMvaml0L1NoYXJlZElDSGVscGVycy1pbmwuaAotQEAgLTE5LDYgKzE5LDggQEAK LSAjICBpbmNsdWRlICJqaXQvbG9vbmc2NC9TaGFyZWRJQ0hlbHBlcnMtbG9vbmc2NC1pbmwuaCIK LSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAjICBpbmNsdWRlICJqaXQvcmlz Y3Y2NC9TaGFyZWRJQ0hlbHBlcnMtcmlzY3Y2NC1pbmwuaCIKLSsjZWxpZiBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCi0rIyAgaW5jbHVkZSAiaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2 NC1pbmwuaCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKQotICMgIGluY2x1ZGUg ImppdC93YXNtMzIvU2hhcmVkSUNIZWxwZXJzLXdhc20zMi1pbmwuaCIKLSAjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fTk9ORSkKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L1NoYXJlZElDSGVscGVy cy5oIGIvanMvc3JjL2ppdC9TaGFyZWRJQ0hlbHBlcnMuaAotaW5kZXggMWViZDYxZTQ0NTA5Li5m MjcwM2M2Zjk4NmMgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L1NoYXJlZElDSGVscGVycy5oCi0r KysgYi9qcy9zcmMvaml0L1NoYXJlZElDSGVscGVycy5oCi1AQCAtMTksNiArMTksOCBAQAotICMg IGluY2x1ZGUgImppdC9sb29uZzY0L1NoYXJlZElDSGVscGVycy1sb29uZzY0LmgiCi0gI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0gIyAgaW5jbHVkZSAiaml0L3Jpc2N2NjQvU2hh cmVkSUNIZWxwZXJzLXJpc2N2NjQuaCIKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQp Ci0rIyAgaW5jbHVkZSAiaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC5oIgotICNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCi0gIyAgaW5jbHVkZSAiaml0L3dhc20zMi9TaGFy ZWRJQ0hlbHBlcnMtd2FzbTMyLmgiCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX05PTkUpCi1k aWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9TaGFyZWRJQ1JlZ2lzdGVycy5oIGIvanMvc3JjL2ppdC9T aGFyZWRJQ1JlZ2lzdGVycy5oCi1pbmRleCBjM2FiODZiZjBhODIuLjViMjcwZDBjMTY2YSAxMDA2 NDQKLS0tLSBhL2pzL3NyYy9qaXQvU2hhcmVkSUNSZWdpc3RlcnMuaAotKysrIGIvanMvc3JjL2pp dC9TaGFyZWRJQ1JlZ2lzdGVycy5oCi1AQCAtMTksNiArMTksOCBAQAotICMgIGluY2x1ZGUgImpp dC9sb29uZzY0L1NoYXJlZElDUmVnaXN0ZXJzLWxvb25nNjQuaCIKLSAjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fUklTQ1Y2NCkKLSAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9TaGFyZWRJQ1JlZ2lz dGVycy1yaXNjdjY0LmgiCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyMgIGlu Y2x1ZGUgImppdC9wcGM2NC9TaGFyZWRJQ1JlZ2lzdGVycy1wcGM2NC5oIgotICNlbGlmIGRlZmlu ZWQoSlNfQ09ERUdFTl9XQVNNMzIpCi0gIyAgaW5jbHVkZSAiaml0L3dhc20zMi9TaGFyZWRJQ1Jl Z2lzdGVycy13YXNtMzIuaCIKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKLWRpZmYg LS1naXQgYS9qcy9zcmMvaml0L1NpbXVsYXRvci5oIGIvanMvc3JjL2ppdC9TaW11bGF0b3IuaAot aW5kZXggMzk1MDM3MTZmMTBkLi45ZjYwYmFmNTMxOTggMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0 L1NpbXVsYXRvci5oCi0rKysgYi9qcy9zcmMvaml0L1NpbXVsYXRvci5oCi1AQCAtMTUsNiArMTUs OCBAQAotICMgIGluY2x1ZGUgImppdC9sb29uZzY0L1NpbXVsYXRvci1sb29uZzY0LmgiCi0gI2Vs aWYgZGVmaW5lZChKU19TSU1VTEFUT1JfUklTQ1Y2NCkKLSAjICBpbmNsdWRlICJqaXQvcmlzY3Y2 NC9TaW11bGF0b3ItcmlzY3Y2NC5oIgotKyNlbGlmIGRlZmluZWQoSlNfU0lNVUxBVE9SX1BQQzY0 KQotKyMgIGluY2x1ZGUgImppdC9wcGM2NC9TaW11bGF0b3ItcHBjNjQuaCIKLSAjZWxpZiBkZWZp bmVkKEpTX1NJTVVMQVRPUikKLSAjICBlcnJvciAiVW5leHBlY3RlZCBzaW11bGF0b3IgcGxhdGZv cm0iCi0gI2VuZGlmCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9tb3ouYnVpbGQgYi9qcy9zcmMv aml0L21vei5idWlsZAotaW5kZXggNWI1ZGYzZTViN2IyLi4zNmVmNjVkNjIyMWEgMTAwNjQ0Ci0t LS0gYS9qcy9zcmMvaml0L21vei5idWlsZAotKysrIGIvanMvc3JjL2ppdC9tb3ouYnVpbGQKLUBA IC0yMjgsNiArMjI4LDE4IEBAIGVsaWYgQ09ORklHWyJKU19DT0RFR0VOX0xPT05HNjQiXToKLSAg ICAgXQotICAgICBpZiBDT05GSUdbIkpTX1NJTVVMQVRPUl9MT09ORzY0Il06Ci0gICAgICAgICBV TklGSUVEX1NPVVJDRVMgKz0gWyJsb29uZzY0L1NpbXVsYXRvci1sb29uZzY0LmNwcCJdCi0rZWxp ZiBDT05GSUdbIkpTX0NPREVHRU5fUFBDNjQiXToKLSsgICAgVU5JRklFRF9TT1VSQ0VTICs9IFsK LSsgICAgICAgICJwcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuY3BwIiwKLSsgICAgICAgICJwcGM2 NC9Bc3NlbWJsZXItcHBjNjQuY3BwIiwKLSsgICAgICAgICJwcGM2NC9Db2RlR2VuZXJhdG9yLXBw YzY0LmNwcCIsCi0rICAgICAgICAicHBjNjQvTG93ZXJpbmctcHBjNjQuY3BwIiwKLSsgICAgICAg ICJwcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5jcHAiLAotKyAgICAgICAgInBwYzY0L01vdmVF bWl0dGVyLXBwYzY0LmNwcCIsCi0rICAgICAgICAicHBjNjQvVHJhbXBvbGluZS1wcGM2NC5jcHAi LAotKyAgICBdCi0rICAgIGlmIENPTkZJR1siSlNfU0lNVUxBVE9SX1BQQzY0Il06Ci0rICAgICAg ICBVTklGSUVEX1NPVVJDRVMgKz0gWyJwcGM2NC9TaW11bGF0b3ItcHBjNjQuY3BwIl0KLSBlbGlm IENPTkZJR1siSlNfQ09ERUdFTl9SSVNDVjY0Il06Ci0gICAgIFVOSUZJRURfU09VUkNFUyArPSBb Ci0gICAgICAgICAicmlzY3Y2NC9BcmNoaXRlY3R1cmUtcmlzY3Y2NC5jcHAiLAotZGlmZiAtLWdp dCBhL2pzL3NyYy9qaXQvcHBjNjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmNwcCBiL2pzL3NyYy9qaXQv cHBjNjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmNwcAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4 IDAwMDAwMDAwMDAwMC4uNTYzMjg2NTU1NmFjCi0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMv aml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5jcHAKLUBAIC0wLDAgKzEsMjIxIEBACi0rLyog LSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFz aWMtb2Zmc2V0OiAyIC0qLQotKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoK LSsgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhl IE1vemlsbGEgUHVibGljCi0rICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1Q TCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwotKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWlu IG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCi0rCi0rI2luY2x1ZGUgImpp dC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuaCIKLSsKLSsjaWZuZGVmIEpTX1NJTVVMQVRPUgot KyMgIGluY2x1ZGUgPHN5cy9hdXh2Lmg+Ci0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgImppdC9GbHVz aElDYWNoZS5oIiAgLy8ganM6OmppdDo6Rmx1c2hJQ2FjaGUKLSsjaW5jbHVkZSAiaml0L1JlZ2lz dGVyU2V0cy5oIgotKwotK25hbWVzcGFjZSBqcyB7Ci0rbmFtZXNwYWNlIGppdCB7Ci0rCi0rUmVn aXN0ZXJzOjpDb2RlIFJlZ2lzdGVyczo6RnJvbU5hbWUoY29uc3QgY2hhciogbmFtZSkgewotKyAg Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBUb3RhbDsgaSsrKSB7Ci0rICAgIGlmIChzdHJjbXAoR2V0 TmFtZShpKSwgbmFtZSkgPT0gMCkgewotKyAgICAgIHJldHVybiBDb2RlKGkpOwotKyAgICB9Ci0r ICB9Ci0rCi0rICByZXR1cm4gSW52YWxpZDsKLSt9Ci0rCi0rRmxvYXRSZWdpc3RlcnM6OkNvZGUg RmxvYXRSZWdpc3RlcnM6OkZyb21OYW1lKGNvbnN0IGNoYXIqIG5hbWUpIHsKLSsgIGZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgVG90YWw7IGkrKykgewotKyAgICBpZiAoc3RyY21wKEdldE5hbWUoaSks IG5hbWUpID09IDApIHsKLSsgICAgICByZXR1cm4gQ29kZShpKTsKLSsgICAgfQotKyAgfQotKwot KyAgcmV0dXJuIEludmFsaWQ7Ci0rfQotKwotK0Zsb2F0UmVnaXN0ZXJTZXQgRmxvYXRSZWdpc3Rl cjo6UmVkdWNlU2V0Rm9yUHVzaChjb25zdCBGbG9hdFJlZ2lzdGVyU2V0JiBzKSB7Ci0rICBTZXRU eXBlIGFsbCA9IHMuYml0cygpOwotKyAgU2V0VHlwZSBzaW1kMTI4U2V0ID0KLSsgICAgICAoYWxs ID4+ICh1aW50MzJfdChGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgKiBGbG9hdFJlZ2lzdGVyczo6 VG90YWxQaHlzKSkgJgotKyAgICAgIEZsb2F0UmVnaXN0ZXJzOjpBbGxQaHlzTWFzazsKLSsgIFNl dFR5cGUgZG91YmxlU2V0ID0KLSsgICAgICAoYWxsID4+ICh1aW50MzJfdChGbG9hdFJlZ2lzdGVy czo6RG91YmxlKSAqIEZsb2F0UmVnaXN0ZXJzOjpUb3RhbFBoeXMpKSAmCi0rICAgICAgRmxvYXRS ZWdpc3RlcnM6OkFsbFBoeXNNYXNrOwotKyAgU2V0VHlwZSBzaW5nbGVTZXQgPQotKyAgICAgIChh bGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGUpICogRmxvYXRSZWdpc3RlcnM6 OlRvdGFsUGh5cykpICYKLSsgICAgICBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5c01hc2s7Ci0rCi0r ICAvLyBTaW5nbGUrRG91YmxlIHNoYXJlIHBoeXNpY2FsIEZQUnMgKHB1c2ggYXMgRG91YmxlLCA4 LWJ5dGUgc2xvdCk7Ci0rICAvLyBTaW1kMTI4IGxpdmVzIGluIGl0cyBvd24gcGh5c2ljYWwgVlJz IChwdXNoIGFzIFNpbWQxMjgsIDE2LWJ5dGUKLSsgIC8vIHNsb3QpLiBEaWZmZXJlbnQgcGh5c2lj YWwgcG9vbHMg4oCUIG5vIGRlZHVwLiBOb3RlIHRoYXQKLSsgIC8vIHNpemVvZihGbG9hdFJlZ2lz dGVyczo6UmVnaXN0ZXJDb250ZW50KSBpcyA4IGJ5dGVzIChubyB2MTI4IGluIHRoZQotKyAgLy8g dW5pb24pLCBzbyBSZWdpc3RlckR1bXA6OkZQVUFycmF5IGlzIDMyIMOXIDggPSAyNTYgYnl0ZXMs IG1hdGNoaW5nCi0rICAvLyB0aGUgRmxvYXQtb25seSBsYXlvdXQgUHVzaFJlZ3NJbk1hc2sgcHJv ZHVjZXMuCi0rICBTZXRUeXBlIHNldDY0ID0gc2luZ2xlU2V0IHwgZG91YmxlU2V0OwotKwotKyAg U2V0VHlwZSByZWR1Y2VkID0KLSsgICAgICAoc2ltZDEyOFNldCA8PCAodWludDMyX3QoRmxvYXRS ZWdpc3RlcnM6OlNpbWQxMjgpICoKLSsgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl cnM6OlRvdGFsUGh5cykpIHwKLSsgICAgICAoc2V0NjQgPDwgKHVpbnQzMl90KEZsb2F0UmVnaXN0 ZXJzOjpEb3VibGUpICogRmxvYXRSZWdpc3RlcnM6OlRvdGFsUGh5cykpOwotKyAgcmV0dXJuIEZs b2F0UmVnaXN0ZXJTZXQocmVkdWNlZCk7Ci0rfQotKwotK3VpbnQzMl90IEZsb2F0UmVnaXN0ZXI6 OkdldFB1c2hTaXplSW5CeXRlcyhjb25zdCBGbG9hdFJlZ2lzdGVyU2V0JiBzKSB7Ci0rICBTZXRU eXBlIGFsbCA9IHMuYml0cygpOwotKyAgU2V0VHlwZSBzaW1kMTI4U2V0ID0KLSsgICAgICAoYWxs ID4+ICh1aW50MzJfdChGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgKiBGbG9hdFJlZ2lzdGVyczo6 VG90YWxQaHlzKSkgJgotKyAgICAgIEZsb2F0UmVnaXN0ZXJzOjpBbGxQaHlzTWFzazsKLSsgIFNl dFR5cGUgZG91YmxlU2V0ID0KLSsgICAgICAoYWxsID4+ICh1aW50MzJfdChGbG9hdFJlZ2lzdGVy czo6RG91YmxlKSAqIEZsb2F0UmVnaXN0ZXJzOjpUb3RhbFBoeXMpKSAmCi0rICAgICAgRmxvYXRS ZWdpc3RlcnM6OkFsbFBoeXNNYXNrOwotKyAgU2V0VHlwZSBzaW5nbGVTZXQgPQotKyAgICAgIChh bGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGUpICogRmxvYXRSZWdpc3RlcnM6 OlRvdGFsUGh5cykpICYKLSsgICAgICBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5c01hc2s7Ci0rCi0r ICAvLyBOYXR1cmFsIHBlci1raW5kIHNsb3Qgc2l6ZXMuIFNlZSBSZWR1Y2VTZXRGb3JQdXNoIGNv bW1lbnQuCi0rICBTZXRUeXBlIHNldDY0ID0gc2luZ2xlU2V0IHwgZG91YmxlU2V0OwotKwotKyAg dWludDMyX3QgY291bnQ2NCA9IHN0ZDo6cG9wY291bnQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNl dDY0KSk7Ci0rICB1aW50MzJfdCBjb3VudDEyOCA9IHN0ZDo6cG9wY291bnQoc3RhdGljX2Nhc3Q8 dWludDY0X3Q+KHNpbWQxMjhTZXQpKTsKLSsKLSsgIHJldHVybiBjb3VudDY0ICogc2l6ZW9mKGRv dWJsZSkgKyBjb3VudDEyOCAqIDE2OwotK30KLSsKLSt1aW50MzJfdCBGbG9hdFJlZ2lzdGVyOjpn ZXRSZWdpc3RlckR1bXBPZmZzZXRJbkJ5dGVzKCkgewotKyAgLy8gU2ltZDEyOCBlbmNvZGluZyBp cyAzMi02MyDigJQgbWFzayBiYWNrIHRvIDAtMzEgZm9yIHRoZSBGUFVBcnJheS0KLSsgIC8vIHJl bGF0aXZlIG9mZnNldC4gKEZQVUFycmF5IGhhcyAzMiBzbG90czsgU2ltZDEyOCBzaG91bGQgbmV2 ZXIgYmUgaW4KLSsgIC8vIGEgU2FmZXBvaW50U3RhdGUvQmFpbG91dFN0YXRlIGFueXdheS4pCi0r ICByZXR1cm4gKGVuY29kaW5nKCkgJiAzMSkgKiBzaXplb2YoRmxvYXRSZWdpc3RlcnM6OlJlZ2lz dGVyQ29udGVudCk7Ci0rfQotKwotK3N0YXRpYyBib29sIHNQT1dFUjlEZXRlY3RlZCA9IGZhbHNl OwotK3N0YXRpYyBib29sIHNQT1dFUjEwRGV0ZWN0ZWQgPSBmYWxzZTsKLStzdGF0aWMgYm9vbCBz Q1BVRmxhZ3NDb21wdXRlZCA9IGZhbHNlOwotKwotKyNpZm5kZWYgSlNfU0lNVUxBVE9SCi0rLy8g Q2FjaGUgbGluZSBzaXplcywgZGV0ZWN0ZWQgYXQgc3RhcnR1cCBmcm9tIEVMRiBhdXhpbGlhcnkg dmVjdG9yLgotKy8vIEZhbGxiYWNrIHRvIDMyIGJ5dGVzIChzYWZlIG1pbmltdW0gcGVyIEx1YUpJ VC9MTFZNIGNvbXBpbGVyLXJ0KS4KLStzdGF0aWMgc2l6ZV90IHNEQ2FjaGVMaW5lU2l6ZSA9IDA7 Ci0rc3RhdGljIHNpemVfdCBzSUNhY2hlTGluZVNpemUgPSAwOwotKyNlbmRpZgotKwotK3ZvaWQg UFBDNjRGbGFnczo6SW5pdCgpIHsKLSsgIGlmIChzQ1BVRmxhZ3NDb21wdXRlZCkgewotKyAgICBy ZXR1cm47Ci0rICB9Ci0rI2lmbmRlZiBKU19TSU1VTEFUT1IKLSsgIHVuc2lnbmVkIGxvbmcgaHdj YXAyID0gZ2V0YXV4dmFsKEFUX0hXQ0FQMik7Ci0rICAvLyBQUENfRkVBVFVSRTJfQVJDSF8zXzAw ID0gMHgwMDgwMDAwMCAoSVNBIDMuMCAvIFBPV0VSOSkKLSsgIHNQT1dFUjlEZXRlY3RlZCA9ICho d2NhcDIgJiAweDAwODAwMDAwKSAhPSAwOwotKyAgLy8gUFBDX0ZFQVRVUkUyX0FSQ0hfM18xID0g MHgwMDA0MDAwMCAoSVNBIDMuMSAvIFBPV0VSMTApCi0rICBzUE9XRVIxMERldGVjdGVkID0gKGh3 Y2FwMiAmIDB4MDAwNDAwMDApICE9IDA7Ci0rICAvLyBBbGxvdyBmb3JjaW5nIFBPV0VSOCBtb2Rl IGZvciB0ZXN0aW5nOiBNT1pfUFBDNjRfRk9SQ0VfUE9XRVI4PTEuCi0rICAvLyBQMTAgaW1wbGll cyBQOTsgZG93bmdyYWRlIGNsZWFycyBib3RoLgotKyAgY29uc3QgY2hhciogZm9yY2VQOCA9IGdl dGVudigiTU9aX1BQQzY0X0ZPUkNFX1BPV0VSOCIpOwotKyAgaWYgKGZvcmNlUDggJiYgZm9yY2VQ OFswXSA9PSAnMScpIHsKLSsgICAgc1BPV0VSOURldGVjdGVkID0gZmFsc2U7Ci0rICAgIHNQT1dF UjEwRGV0ZWN0ZWQgPSBmYWxzZTsKLSsgIH0KLSsKLSsgIHNpemVfdCBkY2FjaGUgPSBnZXRhdXh2 YWwoQVRfRENBQ0hFQlNJWkUpOwotKyAgc2l6ZV90IGljYWNoZSA9IGdldGF1eHZhbChBVF9JQ0FD SEVCU0laRSk7Ci0rICBzRENhY2hlTGluZVNpemUgPSBkY2FjaGUgPyBkY2FjaGUgOiAzMjsKLSsg IHNJQ2FjaGVMaW5lU2l6ZSA9IGljYWNoZSA/IGljYWNoZSA6IDMyOwotKyNlbmRpZgotKyAgLy8g Rk9SQ0VfUE9XRVI5LzEwIG9wdCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIElTQSBmYXN0IHBhdGhz LiBVc2VmdWwgdW5kZXIKLSsgIC8vIHRoZSBzaW11bGF0b3I7IG9uIHJlYWwgc2lsaWNvbiBiZWxv dyB0aGUgZ2F0ZWQgbGV2ZWwgdGhleSBhcmUgZm9vdC1ndW5zCi0rICAvLyBiZWNhdXNlIHRoZSBD UFUgd2lsbCB0cmFwIG9uIHVuZGVmaW5lZCBvcHMuIE91dHNpZGUgdGhlIEpTX1NJTVVMQVRPUgot KyAgLy8gZ3VhcmQgc28gdGhlIHNpbSBjYW4gb3B0IGluIHZpYSBlbnYuCi0rICAvLwotKyAgLy8g Rk9SQ0VfUE9XRVIxMCBhbHNvIGltcGxpZXMgRk9SQ0VfUE9XRVI5IOKAlCB0aGlzIG1hdGNoZXMg d2hhdCByZWFsLVAxMAotKyAgLy8gc2lsaWNvbiBhZHZlcnRpc2VzIGluIGh3Y2FwMiAoYm90aCBB UkNIXzNfMDAgYW5kIEFSQ0hfM18xIGJpdHMgc2V0KSwgc28KLSsgIC8vIHdlIGRvbid0IGFzayBz aW0gdXNlcnMgdG8gcGFzcyBib3RoIHZhcnMgc2VwYXJhdGVseS4KLSsgIGNvbnN0IGNoYXIqIGZv cmNlUDkgPSBnZXRlbnYoIk1PWl9QUEM2NF9GT1JDRV9QT1dFUjkiKTsKLSsgIGlmIChmb3JjZVA5 ICYmIGZvcmNlUDlbMF0gPT0gJzEnKSB7Ci0rICAgIHNQT1dFUjlEZXRlY3RlZCA9IHRydWU7Ci0r ICB9Ci0rICBjb25zdCBjaGFyKiBmb3JjZVAxMCA9IGdldGVudigiTU9aX1BQQzY0X0ZPUkNFX1BP V0VSMTAiKTsKLSsgIGlmIChmb3JjZVAxMCAmJiBmb3JjZVAxMFswXSA9PSAnMScpIHsKLSsgICAg c1BPV0VSMTBEZXRlY3RlZCA9IHRydWU7Ci0rICAgIHNQT1dFUjlEZXRlY3RlZCA9IHRydWU7Ci0r ICB9Ci0rICBzQ1BVRmxhZ3NDb21wdXRlZCA9IHRydWU7Ci0rfQotKwotK2Jvb2wgSGFzUE9XRVI5 KCkgewotKyAgTU9aX0FTU0VSVChzQ1BVRmxhZ3NDb21wdXRlZCk7Ci0rICByZXR1cm4gc1BPV0VS OURldGVjdGVkOwotK30KLSsKLStib29sIEhhc1BPV0VSMTAoKSB7Ci0rICBNT1pfQVNTRVJUKHND UFVGbGFnc0NvbXB1dGVkKTsKLSsgIHJldHVybiBzUE9XRVIxMERldGVjdGVkOwotK30KLSsKLSti b29sIENQVUZsYWdzSGF2ZUJlZW5Db21wdXRlZCgpIHsgcmV0dXJuIHNDUFVGbGFnc0NvbXB1dGVk OyB9Ci0rCi0rLy8gUGVyLWJpdCBmZWF0dXJlIGZsYWdzIHBhY2tlZCBpbnRvIHRoZSB3YXNtIGNv ZGUgc2lnbmF0dXJlLiBBZGRpbmcgYQotKy8vIG5ldyBiaXQgKGUuZy4sIFBPV0VSMTAsIFZTWDQp IHNob3VsZCBiZSBhIDEtbGluZSBjaGFuZ2UgaGVyZSBwbHVzIGEKLSsvLyBjb3JyZXNwb25kaW5n IEhhc1BPV0VSMTAoKS9Jc1ZTWDRBdmFpbGFibGUoKSBwcm9iZSBhYm92ZS4gVGhlIHZhbHVlCi0r Ly8gaXMgYWxzbyBhc3NlcnQtY2hlY2tlZCBpbnRvIGEgZml4ZWQtd2lkdGggZmllbGQgaW4KLSsv LyBqcy9zcmMvd2FzbS9XYXNtQ29tcGlsZS5jcHAg4oCUIGlmIHRoYXQgZmllbGQgZXZlciBvdmVy Zmxvd3MsIHdpZGVuCi0rLy8gaXQgdGhlcmUgYmVmb3JlIGxhbmRpbmcgbW9yZSBiaXRzIGhlcmUu Ci0rdWludDMyX3QgR2V0UFBDNjRGbGFncygpIHsKLSsgIHVpbnQzMl90IGZsYWdzID0gMDsKLSsg IGlmIChzUE9XRVI5RGV0ZWN0ZWQpIHsKLSsgICAgZmxhZ3MgfD0gUFBDNjRGbGFnX1BPV0VSOTsK LSsgIH0KLSsgIHJldHVybiBmbGFnczsKLSt9Ci0rCi0rdm9pZCBGbHVzaElDYWNoZSh2b2lkKiBj b2RlLCBzaXplX3Qgc2l6ZSkgewotKyNpZiBkZWZpbmVkKEpTX1NJTVVMQVRPUikKLSsgIGpzOjpq aXQ6OlNpbXVsYXRvclByb2Nlc3M6OkZsdXNoSUNhY2hlKGNvZGUsIHNpemUpOwotKyNlbHNlCi0r ICAvLyBQUEM2NCBoYXMgaW5jb2hlcmVudCBJL0QgY2FjaGVzLiBHQ0MncyBfX2J1aWx0aW5fX19j bGVhcl9jYWNoZSBpcyBhCi0rICAvLyBuby1vcCBvbiBQUEM2NCBMaW51eCwgc28gd2UgaW1wbGVt ZW50IHRoZSBmbHVzaCBleHBsaWNpdGx5LgotKyAgLy8gVGhpcyBmb2xsb3dzIHRoZSBzYW1lIGFw cHJvYWNoIGFzIFFFTVUgKHV0aWwvY2FjaGVmbHVzaC5jKSBhbmQgdGhlCi0rICAvLyBMaW51eCBr ZXJuZWwgKGFyY2gvcG93ZXJwYy9tbS9jYWNoZWZsdXNoLmMpOgotKyAgLy8gICBkY2JzdCBsb29w IC0+IHN5bmMgLT4gaWNiaSBsb29wIC0+IHN5bmMgLT4gaXN5bmMKLSsgIGlmICghc2l6ZSkgewot KyAgICByZXR1cm47Ci0rICB9Ci0rICBNT1pfQVNTRVJUKHNDUFVGbGFnc0NvbXB1dGVkLAotKyAg ICAgICAgICAgICAiUFBDNjRGbGFnczo6SW5pdCBtdXN0IHJ1biBiZWZvcmUgYW55IEZsdXNoSUNh Y2hlIGNhbGwiKTsKLSsKLSsgIHVpbnRwdHJfdCBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu dHB0cl90Pihjb2RlKTsKLSsgIHVpbnRwdHJfdCBlbmQgPSBzdGFydCArIHNpemU7Ci0rCi0rICAv LyBTdGVwIDE6IFdyaXRlIGJhY2sgZGF0YSBjYWNoZSB0byBtZW1vcnkuCi0rICBmb3IgKHVpbnRw dHJfdCBhZGRyID0gc3RhcnQgJiB+KHNEQ2FjaGVMaW5lU2l6ZSAtIDEpOyBhZGRyIDwgZW5kOwot KyAgICAgICBhZGRyICs9IHNEQ2FjaGVMaW5lU2l6ZSkgewotKyAgICBhc20gdm9sYXRpbGUoImRj YnN0IDAsICUwIiA6IDogInIiKGFkZHIpIDogIm1lbW9yeSIpOwotKyAgfQotKyAgYXNtIHZvbGF0 aWxlKCJzeW5jIiA6OjogIm1lbW9yeSIpOwotKwotKyAgLy8gU3RlcCAyOiBJbnZhbGlkYXRlIGlu c3RydWN0aW9uIGNhY2hlLgotKyAgZm9yICh1aW50cHRyX3QgYWRkciA9IHN0YXJ0ICYgfihzSUNh Y2hlTGluZVNpemUgLSAxKTsgYWRkciA8IGVuZDsKLSsgICAgICAgYWRkciArPSBzSUNhY2hlTGlu ZVNpemUpIHsKLSsgICAgYXNtIHZvbGF0aWxlKCJpY2JpIDAsICUwIiA6IDogInIiKGFkZHIpIDog Im1lbW9yeSIpOwotKyAgfQotKyAgLy8gVGhlIGV4dHJhIHN5bmMgYmVmb3JlIGlzeW5jIG1hdGNo ZXMgdGhlIExpbnV4IGtlcm5lbCBhbmQgUUVNVS4KLSsgIC8vIEl0IGVuc3VyZXMgYWxsIGljYmkg b3BlcmF0aW9ucyBjb21wbGV0ZSBiZWZvcmUgdGhlIHBpcGVsaW5lIGZsdXNoLgotKyAgYXNtIHZv bGF0aWxlKCJzeW5jIiA6OjogIm1lbW9yeSIpOwotKyAgYXNtIHZvbGF0aWxlKCJpc3luYyIgOjo6 ICJtZW1vcnkiKTsKLSsjZW5kaWYKLSt9Ci0rCi0rdm9pZCBGbHVzaEV4ZWN1dGlvbkNvbnRleHQo KSB7Ci0rI2lmICFkZWZpbmVkKEpTX1NJTVVMQVRPUikKLSsgIC8vIFBQQzY0J3MgaXN5bmMgZmx1 c2hlcyB0aGUgaW5zdHJ1Y3Rpb24gcGlwZWxpbmUgb24gdGhlIGN1cnJlbnQgY29yZSwKLSsgIC8v IGVuc3VyaW5nIGFueSBwcmV2aW91c2x5IGludmFsaWRhdGVkIGljYWNoZSBlbnRyaWVzIGFyZSBk aXNjYXJkZWQgYW5kCi0rICAvLyBpbnN0cnVjdGlvbnMgYXJlIHJlLWZldGNoZWQgZnJvbSBjb2hl cmVudCBtZW1vcnkuCi0rICBhc20gdm9sYXRpbGUoImlzeW5jIiA6OjogIm1lbW9yeSIpOwotKyNl bmRpZgotK30KLSsKLSt9ICAvLyBuYW1lc3BhY2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi1k aWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuaCBiL2pzL3Ny Yy9qaXQvcHBjNjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1p bmRleCAwMDAwMDAwMDAwMDAuLmVmYWFiMGIwYzg1NAotLS0tIC9kZXYvbnVsbAotKysrIGIvanMv c3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuaAotQEAgLTAsMCArMSw1ODEgQEAKLSsv KiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1i YXNpYy1vZmZzZXQ6IDIgLSotCi0rICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgw OgotKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0 aGUgTW96aWxsYSBQdWJsaWMKLSsgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUg TVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCi0rICogZmlsZSwgWW91IGNhbiBvYnRh aW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsjaWZuZGVmIGpp dF9wcGM2NF9BcmNoaXRlY3R1cmVfcHBjNjRfaAotKyNkZWZpbmUgaml0X3BwYzY0X0FyY2hpdGVj dHVyZV9wcGM2NF9oCi0rCi0rI2luY2x1ZGUgPGFsZ29yaXRobT4KLSsjaW5jbHVkZSA8Yml0Pgot KwotKyNpbmNsdWRlICJqaXQvc2hhcmVkL0FyY2hpdGVjdHVyZS1zaGFyZWQuaCIKLSsKLSsjaW5j bHVkZSAianMvVXRpbGl0eS5oIgotKwotK25hbWVzcGFjZSBqcyB7Ci0rbmFtZXNwYWNlIGppdCB7 Ci0rCi0rLy8gUFBDNjQgaGFzIDMyIDY0LWJpdCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLCBy MCB0aHJvdWdoIHIzMS4KLSsvLyBUaGUgcHJvZ3JhbSBjb3VudGVyIGlzIG5vdCBkaXJlY3RseSBh Y2Nlc3NpYmxlIGFzIGEgcmVnaXN0ZXIuCi0rLy8gVGhlIGxpbmsgcmVnaXN0ZXIgKExSKSBhbmQg Y291bnQgcmVnaXN0ZXIgKENUUikgYXJlIFNQUnMuCi0rCi0rLy8gUFBDNjQgRUxGdjIgR1BSIENv bnZlbnRpb246Ci0rLy8gIE5hbWUgICAgVXNhZ2UKLSsvLyAgcjAgICAgICBWb2xhdGlsZSwgY2Fu bm90IGJlIGJhc2UgcmVnaXN0ZXIgaW4gbG9hZC9zdG9yZQotKy8vICByMSAgICAgIFN0YWNrIHBv aW50ZXIgKGNhbGxlZS1zYXZlZCkKLSsvLyAgcjIgICAgICBUT0MgcG9pbnRlciAocmVzZXJ2ZWQp Ci0rLy8gIHIzICAgICAgUmV0dXJuIHZhbHVlIC8gZmlyc3QgYXJndW1lbnQKLSsvLyAgcjQtcjEw ICBBcmd1bWVudHMgMi04Ci0rLy8gIHIxMSAgICAgRW52aXJvbm1lbnQgcG9pbnRlciAvIHNjcmF0 Y2gKLSsvLyAgcjEyICAgICBCcmFuY2ggdGFyZ2V0IC8gc2NyYXRjaAotKy8vICByMTMgICAgIFRo cmVhZCBwb2ludGVyIChyZXNlcnZlZCwgVExTKQotKy8vICByMTQtcjMxIENhbGxlZS1zYXZlZAot KwotKy8vIFBQQzY0IEVMRnYyIEZQUiBDb252ZW50aW9uOgotKy8vICBmMCAgICAgIFNjcmF0Y2gK LSsvLyAgZjEtZjEzICBBcmd1bWVudHMgLyB2b2xhdGlsZQotKy8vICBmMTQtZjMxIENhbGxlZS1z YXZlZAotKwotK2NsYXNzIFJlZ2lzdGVycyB7Ci0rIHB1YmxpYzoKLSsgIGVudW0gUmVnaXN0ZXJJ RCB7Ci0rICAgIHIwID0gMCwKLSsgICAgcjEsCi0rICAgIHIyLAotKyAgICByMywKLSsgICAgcjQs Ci0rICAgIHI1LAotKyAgICByNiwKLSsgICAgcjcsCi0rICAgIHI4LAotKyAgICByOSwKLSsgICAg cjEwLAotKyAgICByMTEsCi0rICAgIHIxMiwKLSsgICAgcjEzLAotKyAgICByMTQsCi0rICAgIHIx NSwKLSsgICAgcjE2LAotKyAgICByMTcsCi0rICAgIHIxOCwKLSsgICAgcjE5LAotKyAgICByMjAs Ci0rICAgIHIyMSwKLSsgICAgcjIyLAotKyAgICByMjMsCi0rICAgIHIyNCwKLSsgICAgcjI1LAot KyAgICByMjYsCi0rICAgIHIyNywKLSsgICAgcjI4LAotKyAgICByMjksCi0rICAgIHIzMCwKLSsg ICAgcjMxLAotKyAgICBzcCA9IHIxLAotKyAgICBpbnZhbGlkX3JlZywKLSsgIH07Ci0rICB0eXBl ZGVmIHVpbnQ4X3QgQ29kZTsKLSsgIHR5cGVkZWYgUmVnaXN0ZXJJRCBFbmNvZGluZzsKLSsgIHR5 cGVkZWYgdWludDMyX3QgU2V0VHlwZTsKLSsKLSsgIHN0YXRpYyBjb25zdCBFbmNvZGluZyBTdGFj a1BvaW50ZXIgPSBzcDsKLSsgIHN0YXRpYyBjb25zdCBFbmNvZGluZyBJbnZhbGlkID0gaW52YWxp ZF9yZWc7Ci0rCi0rICB1bmlvbiBSZWdpc3RlckNvbnRlbnQgewotKyAgICB1aW50cHRyX3QgcjsK LSsgIH07Ci0rCi0rICBzdGF0aWMgdWludDMyX3QgU2V0U2l6ZShTZXRUeXBlIHgpIHsgcmV0dXJu IHN0ZDo6cG9wY291bnQoeCk7IH0KLSsgIHN0YXRpYyB1aW50MzJfdCBGaXJzdEJpdChTZXRUeXBl IHgpIHsKLSsgICAgTU9aX0FTU0VSVCh4KTsKLSsgICAgcmV0dXJuIHN0ZDo6Y291bnRyX3plcm8o eCk7Ci0rICB9Ci0rICBzdGF0aWMgdWludDMyX3QgTGFzdEJpdChTZXRUeXBlIHgpIHsKLSsgICAg TU9aX0FTU0VSVCh4KTsKLSsgICAgcmV0dXJuIHN0ZDo6Yml0X3dpZHRoKHgpIC0gMTsKLSsgIH0K LSsKLSsgIHN0YXRpYyBjb25zdCBjaGFyKiBHZXROYW1lKHVpbnQzMl90IGNvZGUpIHsKLSsgICAg c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IE5hbWVzW10gPSB7Ci0rICAgICAgICAicjAiLCAgInNw IiwgICJyMiIsICAicjMiLCAgInI0IiwgICJyNSIsICAicjYiLCAgInI3IiwKLSsgICAgICAgICJy OCIsICAicjkiLCAgInIxMCIsICJyMTEiLCAicjEyIiwgInIxMyIsICJyMTQiLCAicjE1IiwKLSsg ICAgICAgICJyMTYiLCAicjE3IiwgInIxOCIsICJyMTkiLCAicjIwIiwgInIyMSIsICJyMjIiLCAi cjIzIiwKLSsgICAgICAgICJyMjQiLCAicjI1IiwgInIyNiIsICJyMjciLCAicjI4IiwgInIyOSIs ICJyMzAiLCAicjMxIn07Ci0rICAgIHN0YXRpY19hc3NlcnQoVG90YWwgPT0gc3RkOjpzaXplKE5h bWVzKSwgIlRhYmxlIGlzIHRoZSBjb3JyZWN0IHNpemUiKTsKLSsgICAgaWYgKGNvZGUgPj0gVG90 YWwpIHsKLSsgICAgICByZXR1cm4gImludmFsaWQiOwotKyAgICB9Ci0rICAgIHJldHVybiBOYW1l c1tjb2RlXTsKLSsgIH0KLSsKLSsgIHN0YXRpYyBDb2RlIEZyb21OYW1lKGNvbnN0IGNoYXIqIG5h bWUpOwotKwotKyAgc3RhdGljIGNvbnN0IHVpbnQzMl90IFRvdGFsID0gMzI7Ci0rICBzdGF0aWMg Y29uc3QgdWludDMyX3QgVG90YWxQaHlzID0gMzI7Ci0rICBzdGF0aWMgY29uc3QgdWludDMyX3Qg QWxsb2NhdGFibGUgPSAyNDsKLSsKLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFsbE1hc2sgPSAw eEZGRkZGRkZGOwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgTm9uZU1hc2sgPSAweDA7Ci0rCi0r ICBzdGF0aWMgY29uc3QgU2V0VHlwZSBBcmdSZWdNYXNrID0KLSsgICAgICAoMVUgPDwgUmVnaXN0 ZXJzOjpyMykgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyNCkgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyNSkg fAotKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnI2KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnI3KSB8 ICgxVSA8PCBSZWdpc3RlcnM6OnI4KSB8Ci0rICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjkpIHwg KDFVIDw8IFJlZ2lzdGVyczo6cjEwKTsKLSsKLSsgIC8vIHIwLCByMTEsIHIxMiBhcmUgYWxzbyB2 b2xhdGlsZSBidXQgaGFuZGxlZCBzZXBhcmF0ZWx5LgotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUg Vm9sYXRpbGVNYXNrID0gQXJnUmVnTWFzazsKLSsKLSsgIC8vIEVMRnYyIGNhbGxlZS1zYXZlZCBH UFJzIGFyZSByMTQuLnIzMS4gcjIgKFRPQykgYW5kIHIxMyAoVExTKSBhcmUKLSsgIC8vIGRlZGlj YXRlZCByZWdpc3RlcnMsIE5PVCBnZW5lcmFsIGNhbGxlZS1zYXZlZDogcjIgaXMgcmVzdG9yZWQg YnkgdGhlCi0rICAvLyBQTFQtY2FsbCBsaW5rYWdlIGNvbnZlbnRpb24gKGBsZCByMiwgMjQocjEp YCBhZnRlciBldmVyeSBjcm9zcy1tb2R1bGUKLSsgIC8vIGNhbGwpOyByMTMgaXMgdGhlIHRocmVh ZCBwb2ludGVyIGFuZCBtdXN0IE5FVkVSIGJlIHdyaXR0ZW4uIEluY2x1ZGluZwotKyAgLy8gdGhl bSBoZXJlIHByZXZpb3VzbHkgbWFkZSBgUHVzaFJlZ3NJbk1hc2soTm9uVm9sYXRpbGVNYXNrKWAg c2F2ZSBhbmQKLSsgIC8vIHJlc3RvcmUgdGhlbSDigJQgd2FzdGVkIDE2IGJ5dGVzIHBlciB3YXNt LXN0dWIgZnJhbWUgYXQgYmVzdCwgbGF0ZW50Ci0rICAvLyBUTFMgY29ycnVwdGlvbiBpZiBzYXZl L3Jlc3RvcmUgd2VyZSBldmVyIG1pc29yZGVyZWQuIFZlcmlmaWVkIHRoYXQKLSsgIC8vIG5vIEpJ VC1lbWl0dGVkIGNvZGUgd3JpdGVzIHIyIG9yIHIxMyAoYm90aCBhcmUgTm9uQWxsb2NhdGFibGUs IGFuZAotKyAgLy8gZ3JlcCBhY3Jvc3MganMvc3JjL2ppdC9wcGM2NC8gZmluZHMgbm8gYGFzXypg IHNpdGUgYXNzaWduaW5nIHRvCi0rICAvLyB0aGVtKSwgc28gdGhleSdyZSBwcmVzZXJ2ZWQgYWNy b3NzIHRoZSBKSVQgYm9keSBmb3IgZnJlZS4KLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBlIE5vblZv bGF0aWxlTWFzayA9Ci0rICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjE0KSB8Ci0rICAgICAgKDFV IDw8IFJlZ2lzdGVyczo6cjE1KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnIxNikgfCAoMVUgPDwgUmVn aXN0ZXJzOjpyMTcpIHwKLSsgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMTgpIHwgKDFVIDw8IFJl Z2lzdGVyczo6cjE5KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnIyMCkgfAotKyAgICAgICgxVSA8PCBS ZWdpc3RlcnM6OnIyMSkgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMjIpIHwgKDFVIDw8IFJlZ2lzdGVy czo6cjIzKSB8Ci0rICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjI0KSB8ICgxVSA8PCBSZWdpc3Rl cnM6OnIyNSkgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMjYpIHwKLSsgICAgICAoMVUgPDwgUmVnaXN0 ZXJzOjpyMjcpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjI4KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnIy OSkgfAotKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIzMCkgfCAoMVUgPDwgUmVnaXN0ZXJzOjpy MzEpOwotKwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgTm9uQWxsb2NhdGFibGVNYXNrID0KLSsg ICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMCkgfCAgIC8vIENhbm5vdCBiZSBiYXNlIGluIGxvYWQv c3RvcmUuCi0rICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6c3ApIHwgICAvLyBTdGFjayBwb2ludGVy LgotKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIyKSB8ICAgLy8gVE9DIHBvaW50ZXIgKEVMRnYy KS4KLSsgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMTEpIHwgIC8vIFRoaXJkIHNjcmF0Y2guCi0r ICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjEyKSB8ICAvLyBTZWNvbmQgc2NyYXRjaCAvIGFkZHJl c3NUZW1wUmVnaXN0ZXIuCi0rICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjEzKSB8ICAvLyBUaHJl YWQtbG9jYWwgc3RvcmFnZSAoRUxGdjIpLgotKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIxNikg fCAgLy8gU2F2ZWQgc2NyYXRjaCByZWdpc3Rlci4KLSsgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpy MzEpOyAgIC8vIEZyYW1lIHBvaW50ZXIuCi0rCi0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBXcmFw cGVyTWFzayA9IFZvbGF0aWxlTWFzazsKLSsKLSsgIC8vIFJlZ2lzdGVycyByZXR1cm5lZCBmcm9t IGEgSlMgLT4gSlMgY2FsbC4KLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEpTQ2FsbE1hc2sgPSAo MVUgPDwgUmVnaXN0ZXJzOjpyNSk7Ci0rCi0rICAvLyBSZWdpc3RlcnMgcmV0dXJuZWQgZnJvbSBh IEpTIC0+IEMgY2FsbC4KLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBlIENhbGxNYXNrID0gKDFVIDw8 IFJlZ2lzdGVyczo6cjMpOwotKwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgQWxsb2NhdGFibGVN YXNrID0gQWxsTWFzayAmIH5Ob25BbGxvY2F0YWJsZU1hc2s7Ci0rfTsKLSsKLSt0eXBlZGVmIHVp bnQzMl90IFBhY2tlZFJlZ2lzdGVyTWFzazsKLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLStj bGFzcyBUeXBlZFJlZ2lzdGVyU2V0OwotKwotK2NsYXNzIEZsb2F0UmVnaXN0ZXJzIHsKLSsgcHVi bGljOgotKyAgZW51bSBGUFJlZ2lzdGVySUQgewotKyAgICBmMCA9IDAsCi0rICAgIGYxLAotKyAg ICBmMiwKLSsgICAgZjMsCi0rICAgIGY0LAotKyAgICBmNSwKLSsgICAgZjYsCi0rICAgIGY3LAot KyAgICBmOCwKLSsgICAgZjksCi0rICAgIGYxMCwKLSsgICAgZjExLAotKyAgICBmMTIsCi0rICAg IGYxMywKLSsgICAgZjE0LAotKyAgICBmMTUsCi0rICAgIGYxNiwKLSsgICAgZjE3LAotKyAgICBm MTgsCi0rICAgIGYxOSwKLSsgICAgZjIwLAotKyAgICBmMjEsCi0rICAgIGYyMiwKLSsgICAgZjIz LAotKyAgICBmMjQsCi0rICAgIGYyNSwKLSsgICAgZjI2LAotKyAgICBmMjcsCi0rICAgIGYyOCwK LSsgICAgZjI5LAotKyAgICBmMzAsCi0rICAgIGYzMSwKLSsgIH07Ci0rCi0rICAvLyBFaWdodCBi aXRzOiAoaW52YWxpZCA8PCA3KSB8IChraW5kIDw8IDUpIHwgZW5jb2RpbmcKLSsgIHR5cGVkZWYg dWludDhfdCBDb2RlOwotKyAgdHlwZWRlZiBGUFJlZ2lzdGVySUQgRW5jb2Rpbmc7Ci0rICAvLyAz IGtpbmRzIMOXIDMyIHJlZ3MgPSA5NiBiaXRzIG5lZWRlZC4gVXNlIF9fdWludDEyOF90LgotKyAg dHlwZWRlZiBfX3VpbnQxMjhfdCBTZXRUeXBlOwotKwotKyAgZW51bSBLaW5kIDogdWludDhfdCB7 IERvdWJsZSwgU2luZ2xlLCBTaW1kMTI4LCBOdW1UeXBlcyB9OwotKwotKyAgc3RhdGljIGNvbnN0 ZXhwciBDb2RlIEludmFsaWQgPSAweDgwOwotKwotKyAgc3RhdGljIGNvbnN0IGNoYXIqIEdldE5h bWUodWludDMyX3QgY29kZSkgewotKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgTmFtZXNb XSA9IHsKLSsgICAgICAgICJmMCIsICAiZjEiLCAgImYyIiwgICJmMyIsICAiZjQiLCAgImY1Iiwg ICJmNiIsICAiZjciLAotKyAgICAgICAgImY4IiwgICJmOSIsICAiZjEwIiwgImYxMSIsICJmMTIi LCAiZjEzIiwgImYxNCIsICJmMTUiLAotKyAgICAgICAgImYxNiIsICJmMTciLCAiZjE4IiwgImYx OSIsICJmMjAiLCAiZjIxIiwgImYyMiIsICJmMjMiLAotKyAgICAgICAgImYyNCIsICJmMjUiLCAi ZjI2IiwgImYyNyIsICJmMjgiLCAiZjI5IiwgImYzMCIsICJmMzEifTsKLSsgICAgc3RhdGljX2Fz c2VydChUb3RhbFBoeXMgPT0gc3RkOjpzaXplKE5hbWVzKSwgIlRhYmxlIGlzIHRoZSBjb3JyZWN0 IHNpemUiKTsKLSsgICAgaWYgKGNvZGUgPj0gVG90YWwpIHsKLSsgICAgICByZXR1cm4gImludmFs aWQiOwotKyAgICB9Ci0rICAgIHJldHVybiBOYW1lc1tjb2RlICUgVG90YWxQaHlzXTsKLSsgIH0K LSsKLSsgIHN0YXRpYyBDb2RlIEZyb21OYW1lKGNvbnN0IGNoYXIqIG5hbWUpOwotKwotKyAgc3Rh dGljIGNvbnN0IHVpbnQzMl90IFRvdGFsUGh5cyA9IDMyOwotKyAgc3RhdGljIGNvbnN0IHVpbnQz Ml90IFRvdGFsID0gVG90YWxQaHlzICogTnVtVHlwZXM7Ci0rICBzdGF0aWMgY29uc3QgdWludDMy X3QgQWxsb2NhdGFibGUgPSAzMTsgIC8vIFdpdGhvdXQgZjAsIHRoZSBzY3JhdGNoIHJlZ2lzdGVy LgotKwotKyAgc3RhdGljX2Fzc2VydChzaXplb2YoU2V0VHlwZSkgKiA4ID49IFRvdGFsLAotKyAg ICAgICAgICAgICAgICAiU2V0VHlwZSBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGVudW1lcmF0 ZSBhbGwgcmVnaXN0ZXJzLiIpOwotKwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgU3ByZWFkU2lu Z2xlID0gU2V0VHlwZSgxKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PDwgKHVpbnQzMl90KFNpbmdsZSkgKiBUb3RhbFBoeXMpOwotKyAgc3RhdGljIGNvbnN0IFNldFR5 cGUgU3ByZWFkRG91YmxlID0gU2V0VHlwZSgxKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPDwgKHVpbnQzMl90KERvdWJsZSkgKiBUb3RhbFBoeXMpOwotKyAgc3RhdGlj IGNvbnN0IFNldFR5cGUgU3ByZWFkU2ltZDEyOCA9IFNldFR5cGUoMSkKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAodWludDMyX3QoU2ltZDEyOCkgKiBUb3RhbFBo eXMpOwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgU3ByZWFkID0gU3ByZWFkU2luZ2xlIHwgU3By ZWFkRG91YmxlIHwgU3ByZWFkU2ltZDEyODsKLSsKLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFs bFBoeXNNYXNrID0gKChTZXRUeXBlKDEpIDw8IFRvdGFsUGh5cykgLSAxKTsKLSsgIHN0YXRpYyBj b25zdCBTZXRUeXBlIEFsbE1hc2sgPSBBbGxQaHlzTWFzayAqIFNwcmVhZDsKLSsgIHN0YXRpYyBj b25zdCBTZXRUeXBlIEFsbFNpbmdsZU1hc2sgPSBBbGxQaHlzTWFzayAqIFNwcmVhZFNpbmdsZTsK LSsgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFsbERvdWJsZU1hc2sgPSBBbGxQaHlzTWFzayAqIFNw cmVhZERvdWJsZTsKLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFsbFNpbWQxMjhNYXNrID0gQWxs UGh5c01hc2sgKiBTcHJlYWRTaW1kMTI4OwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgTm9uZU1h c2sgPSBTZXRUeXBlKDApOwotKwotKyAgLy8gRUxGdjI6IGYxNC1mMzEgYXJlIG5vbi12b2xhdGls ZSAoY2FsbGVlLXNhdmVkKSBmb3Igc2NhbGFyIEZQLgotKyAgLy8gVGhlIHVwcGVyIDY0IGJpdHMg b2YgVlNSIDAtMzEgYXJlIHZvbGF0aWxlLCBzbyBTaW1kMTI4IHZpZXcgaXMgYWxsLXZvbGF0aWxl LgotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgTm9uVm9sYXRpbGVQaHlzTWFzayA9Ci0rICAgICAg U2V0VHlwZSgoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYxNCkgfCAoMVUgPDwgRmxvYXRSZWdpc3Rl cnM6OmYxNSkgfAotKyAgICAgICAgICAgICAgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMTYpIHwg KDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMTcpIHwKLSsgICAgICAgICAgICAgICgxVSA8PCBGbG9h dFJlZ2lzdGVyczo6ZjE4KSB8ICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjE5KSB8Ci0rICAgICAg ICAgICAgICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYyMCkgfCAoMVUgPDwgRmxvYXRSZWdpc3Rl cnM6OmYyMSkgfAotKyAgICAgICAgICAgICAgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMjIpIHwg KDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMjMpIHwKLSsgICAgICAgICAgICAgICgxVSA8PCBGbG9h dFJlZ2lzdGVyczo6ZjI0KSB8ICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjI1KSB8Ci0rICAgICAg ICAgICAgICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYyNikgfCAoMVUgPDwgRmxvYXRSZWdpc3Rl cnM6OmYyNykgfAotKyAgICAgICAgICAgICAgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMjgpIHwg KDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMjkpIHwKLSsgICAgICAgICAgICAgICgxVSA8PCBGbG9h dFJlZ2lzdGVyczo6ZjMwKSB8ICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjMxKSk7Ci0rICAvLyBT aW1kMTI4IGxpdmVzIGluIFZSLW5hbWVzcGFjZSAoVlNSMzItNjMgPSBWUjAtVlIzMSkuIFBlciBF TEZ2MiBBQkksCi0rICAvLyBWUjIwLVZSMzEgYXJlIG5vbi12b2xhdGlsZSAoY2FsbGVlLXNhdmVk KS4gRW5jb2Rpbmcgc3RvcmFnZSBpcyAyMC0zMQotKyAgLy8gd2l0aCBraW5kPVNpbWQxMjguCi0r ICBzdGF0aWMgY29uc3QgU2V0VHlwZSBTaW1kTm9uVm9sYXRpbGVQaHlzTWFzayA9Ci0rICAgICAg U2V0VHlwZSgoMVUgPDwgMjApIHwgKDFVIDw8IDIxKSB8ICgxVSA8PCAyMikgfCAoMVUgPDwgMjMp IHwKLSsgICAgICAgICAgICAgICgxVSA8PCAyNCkgfCAoMVUgPDwgMjUpIHwgKDFVIDw8IDI2KSB8 ICgxVSA8PCAyNykgfAotKyAgICAgICAgICAgICAgKDFVIDw8IDI4KSB8ICgxVSA8PCAyOSkgfCAo MVUgPDwgMzApIHwgKDFVIDw8IDMxKSk7Ci0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBOb25Wb2xh dGlsZU1hc2sgPQotKyAgICAgIE5vblZvbGF0aWxlUGh5c01hc2sgKiAoU3ByZWFkU2luZ2xlIHwg U3ByZWFkRG91YmxlKSB8Ci0rICAgICAgU2ltZE5vblZvbGF0aWxlUGh5c01hc2sgKiBTcHJlYWRT aW1kMTI4OwotKwotKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgVm9sYXRpbGVNYXNrID0gQWxsTWFz ayAmIH5Ob25Wb2xhdGlsZU1hc2s7Ci0rCi0rICBzdGF0aWMgY29uc3QgU2V0VHlwZSBXcmFwcGVy TWFzayA9IFZvbGF0aWxlTWFzazsKLSsKLSsgIC8vIGYwIGlzIHRoZSBzY3JhdGNoIHJlZ2lzdGVy IChhbGwgdGhyZWUgdmlld3M6IHNpbmdsZSwgZG91YmxlLCBzaW1kMTI4KS4KLSsgIHN0YXRpYyBj b25zdCBTZXRUeXBlIE5vbkFsbG9jYXRhYmxlTWFzayA9Ci0rICAgICAgKFNldFR5cGUoMSkgPDwg RmxvYXRSZWdpc3RlcnM6OmYwKSAqIFNwcmVhZDsKLSsKLSsgIHN0YXRpYyBjb25zdCBTZXRUeXBl IEFsbG9jYXRhYmxlTWFzayA9IEFsbE1hc2sgJiB+Tm9uQWxsb2NhdGFibGVNYXNrOwotKwotKyAg dW5pb24gUmVnaXN0ZXJDb250ZW50IHsKLSsgICAgZmxvYXQgczsKLSsgICAgZG91YmxlIGQ7Ci0r ICAgIC8vIE5vIHYxMjggaGVyZS4gU2ltZDEyOCBsaXZlcyBpbiBwaHlzaWNhbGx5LWRpc3RpbmN0 IFZScyAoVlNSMzItNjMpCi0rICAgIC8vIGFuZCBuZXZlciByZWFjaGVzIFJlZ2lzdGVyRHVtcCAo YXNzZXJ0ZWQgYnkgU2FmZXBvaW50U3RhdGU7IGJhaWxvdXQKLSsgICAgLy8gQWxsUmVncyBleGNs dWRlcyBTaW1kMTI4KS4gV2l0aCB2MTI4IGluIHRoZSB1bmlvbiwgc2l6ZW9mIHdhcyAxNiwKLSsg ICAgLy8gZm9yY2luZyBQdXNoUmVnc0luTWFzayB0byBhIDE2LWJ5dGUgc3RyaWRlIHRoYXQgbWlz bWF0Y2hlZAotKyAgICAvLyBhZGRyZXNzT2ZSZWdpc3RlcidzIDgtYnl0ZSB3YWxrIHZpYSAoKml0 ZXIpLnNpemUoKS4KLSsgIH07Ci0rCi0rICBzdGF0aWMgY29uc3RleHByIEVuY29kaW5nIGVuY29k aW5nKENvZGUgYykgeyByZXR1cm4gRW5jb2RpbmcoYyAmIDMxKTsgfQotKwotKyAgc3RhdGljIGNv bnN0ZXhwciBLaW5kIGtpbmQoQ29kZSBjKSB7IHJldHVybiBLaW5kKChjID4+IDUpICYgMyk7IH0K LSsKLSsgIHN0YXRpYyBjb25zdGV4cHIgQ29kZSBmcm9tUGFydHModWludDMyX3QgZW5jb2Rpbmcs IHVpbnQzMl90IGtpbmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz Ml90IGludmFsaWQpIHsKLSsgICAgcmV0dXJuIENvZGUoKGludmFsaWQgPDwgNykgfCAoa2luZCA8 PCA1KSB8IGVuY29kaW5nKTsKLSsgIH0KLSt9OwotKwotKy8vIFNwaWxsU2xvdFNpemUgbXVzdCBm aXQgdGhlIHdpZGVzdCByZWdpc3RlciBjbGFzcyAoU2ltZDEyOCA9IDE2IGJ5dGVzKS4KLSsvLyBX ZSBjYW4ndCBkZXJpdmUgZnJvbSBzaXplb2YoRmxvYXRSZWdpc3RlcnM6OlJlZ2lzdGVyQ29udGVu dCkg4oCUIHRoYXQKLSsvLyB1bmlvbiBpcyBzaXplZCBmb3IgRlBScyBvbmx5ICg4IGJ5dGVzIHNp bmNlIHYxMjggbGl2ZXMgaW4gZGlzdGluY3QKLSsvLyBWUnMsIG5vdCBpbiB0aGUgRlBSIHVuaW9u KSwgc28gZGVyaXZpbmcgd291bGQgdW5kZXItcmVzZXJ2ZSBmb3IKLSsvLyBTaW1kMTI4IGN5Y2xl IGJyZWFrcy4gU3BpbGxTbG90U2l6ZSBpcyBjb25zdW1lZCBvbmx5IGJ5IE1vdmVFbWl0dGVyCi0r Ly8gYW5kIGlzIG5vdCBwYXJ0IG9mIHRoZSBKSVQgZnJhbWUgbGF5b3V0LgotK3N0YXRpYyBjb25z dCB1aW50MzJfdCBTcGlsbFNsb3RTaXplID0gMTY7Ci0rCi0rLy8gUFBDNjQgRUxGdjIgQUJJOiB0 aGUgY2FsbGVlIHNhdmVzIExSIGF0IFtjYWxsZXJfU1ArMTZdLCBDUiBhdAotKy8vIFtjYWxsZXJf U1ArOF0sIGFuZCBtYXkgc2F2ZSBUT0MgYXQgW2NhbGxlcl9TUCsyNF0uIFJlc2VydmUgMzIgYnl0 ZXMKLSsvLyAodGhlIG1pbmltdW0gRUxGdjIgc3RhY2sgZnJhbWUpIGFzIGEgc2hhZG93IGFyZWEg Zm9yIGV2ZXJ5IEFCSSBjYWxsLgotK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgU2hhZG93U3Rh Y2tTcGFjZSA9IDMyOwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBTaXplT2ZSZXR1cm5BZGRyZXNz QWZ0ZXJDYWxsID0gMDsKLSsKLSsvLyBQUEM2NCBicmFuY2ggaW5zdHJ1Y3Rpb25zIGhhdmUgYSAy Ni1iaXQgc2lnbmVkIG9mZnNldCBmaWVsZCwgZ2l2aW5nIGEKLSsvLyByYW5nZSBvZiArLy0gMzJN Qi4gV2UgcmVkdWNlIHRoaXMgdG8gbGVhdmUgcm9vbSBmb3IganVtcCBpc2xhbmQgaW5zZXJ0aW9u LgotK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgSnVtcEltbWVkaWF0ZVJhbmdlID0gKDMyICog MTAyNCAqIDEwMjQpIC0gMzI7Ci0rCi0rLy8gU2l6ZSBvZiBlYWNoIGJhaWxvdXQgdGFibGUgZW50 cnkgKGEgc2luZ2xlIGJsIGluc3RydWN0aW9uKS4KLStzdGF0aWMgY29uc3QgdWludDMyX3QgQkFJ TE9VVF9UQUJMRV9FTlRSWV9TSVpFID0gNDsKLSsKLSsvLyBQUEM2NCBzcGVjaWFsIHB1cnBvc2Ug cmVnaXN0ZXJzIChub3QgZXhwb3NlZCB0byB0aGUgYWxsb2NhdG9yKS4KLStlbnVtIFNQUmVnaXN0 ZXJJRCB7Ci0rICBzcHJfeGVyID0gMSwKLSsgIHNwcl9sciA9IDgsCi0rICBzcHJfY3RyID0gOSwK LSsgIHNwcl92cnNhdmUgPSAyNTYsCi0rICBpbnZhbGlkX3NwcmVnCi0rfTsKLSsKLSsvLyBQUEM2 NCBjb25kaXRpb24gcmVnaXN0ZXJzLgotK2VudW0gQ1JlZ2lzdGVySUQgeyBjcjAgPSAwLCBjcjEs IGNyNSA9IDUsIGNyNiwgY3I3LCBpbnZhbGlkX2NyZWcgfTsKLSsKLStzdHJ1Y3QgRmxvYXRSZWdp c3RlciB7Ci0rICB0eXBlZGVmIEZsb2F0UmVnaXN0ZXJzIENvZGVzOwotKyAgdHlwZWRlZiBzaXpl X3QgQ29kZTsKLSsgIHR5cGVkZWYgQ29kZXM6OkVuY29kaW5nIEVuY29kaW5nOwotKyAgdHlwZWRl ZiBDb2Rlczo6U2V0VHlwZSBTZXRUeXBlOwotKwotKyAgc3RhdGljIHVpbnQzMl90IFNldFNpemUo U2V0VHlwZSB4KSB7Ci0rICAgIC8vIEZvbGQgYWxsIDMga2luZHMgKFNpbmdsZSwgRG91YmxlLCBT aW1kMTI4KSBkb3duIHRvIHBoeXNpY2FsIG1hc2suCi0rICAgIFNldFR5cGUgcGh5cyA9ICh4ICYg RmxvYXRSZWdpc3RlcnM6OkFsbFBoeXNNYXNrKSB8Ci0rICAgICAgICAgICAgICAgICAgICgoeCA+ PiBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSAmIEZsb2F0UmVnaXN0ZXJzOjpBbGxQaHlzTWFz aykgfAotKyAgICAgICAgICAgICAgICAgICAoKHggPj4gKDIgKiBGbG9hdFJlZ2lzdGVyczo6VG90 YWxQaHlzKSkgJiBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5c01hc2spOwotKyAgICByZXR1cm4gc3Rk Ojpwb3Bjb3VudChzdGF0aWNfY2FzdDx1aW50NjRfdD4ocGh5cykpOwotKyAgfQotKwotKyAgLy8g X191aW50MTI4X3QgaGVscGVycyBmb3IgRmlyc3RCaXQvTGFzdEJpdC4KLSsgIHN0YXRpYyB1aW50 MzJfdCBGaXJzdEJpdChTZXRUeXBlIHgpIHsKLSsgICAgTU9aX0FTU0VSVCh4KTsKLSsgICAgdWlu dDY0X3QgbG8gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oeCk7Ci0rICAgIGlmIChsbykgewotKyAg ICAgIHJldHVybiBzdGQ6OmNvdW50cl96ZXJvKGxvKTsKLSsgICAgfQotKyAgICByZXR1cm4gNjQg KyBzdGQ6OmNvdW50cl96ZXJvKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih4ID4+IDY0KSk7Ci0rICB9 Ci0rICBzdGF0aWMgdWludDMyX3QgTGFzdEJpdChTZXRUeXBlIHgpIHsKLSsgICAgTU9aX0FTU0VS VCh4KTsKLSsgICAgdWludDY0X3QgaGkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oeCA+PiA2NCk7 Ci0rICAgIGlmIChoaSkgewotKyAgICAgIHJldHVybiA2NCArIChzdGQ6OmJpdF93aWR0aChoaSkg LSAxKTsKLSsgICAgfQotKyAgICByZXR1cm4gc3RkOjpiaXRfd2lkdGgoc3RhdGljX2Nhc3Q8dWlu dDY0X3Q+KHgpKSAtIDE7Ci0rICB9Ci0rCi0rIHByaXZhdGU6Ci0rICB1aW50OF90IGVuY29kaW5n XzsKLSsgIHVpbnQ4X3Qga2luZF87Ci0rICBib29sIGludmFsaWRfOwotKwotKyAgdHlwZWRlZiBD b2Rlczo6S2luZCBLaW5kOwotKwotKyBwdWJsaWM6Ci0rICBjb25zdGV4cHIgRmxvYXRSZWdpc3Rl cihFbmNvZGluZyBlbmNvZGluZywgS2luZCBraW5kKQotKyAgICAgIDogZW5jb2RpbmdfKGVuY29k aW5nKSwga2luZF8oa2luZCksIGludmFsaWRfKGZhbHNlKSB7fQotKwotKyAgY29uc3RleHByIEZs b2F0UmVnaXN0ZXIoKQotKyAgICAgIDogZW5jb2RpbmdfKDApLCBraW5kXyhGbG9hdFJlZ2lzdGVy czo6RG91YmxlKSwgaW52YWxpZF8odHJ1ZSkge30KLSsKLSsgIHN0YXRpYyBGbG9hdFJlZ2lzdGVy IEZyb21Db2RlKHVpbnQzMl90IGkpIHsKLSsgICAgTU9aX0FTU0VSVChpIDwgQ29kZXM6OlRvdGFs KTsKLSsgICAgcmV0dXJuIEZsb2F0UmVnaXN0ZXIoRmxvYXRSZWdpc3RlcnM6OmVuY29kaW5nKGkp LCBGbG9hdFJlZ2lzdGVyczo6a2luZChpKSk7Ci0rICB9Ci0rCi0rICBib29sIGlzU2luZ2xlKCkg Y29uc3QgewotKyAgICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7Ci0rICAgIHJldHVybiBraW5kXyA9 PSBGbG9hdFJlZ2lzdGVyczo6U2luZ2xlOwotKyAgfQotKyAgYm9vbCBpc0RvdWJsZSgpIGNvbnN0 IHsKLSsgICAgTU9aX0FTU0VSVCghaW52YWxpZF8pOwotKyAgICByZXR1cm4ga2luZF8gPT0gRmxv YXRSZWdpc3RlcnM6OkRvdWJsZTsKLSsgIH0KLSsgIGJvb2wgaXNTaW1kMTI4KCkgY29uc3Qgewot KyAgICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7Ci0rICAgIHJldHVybiBraW5kXyA9PSBGbG9hdFJl Z2lzdGVyczo6U2ltZDEyODsKLSsgIH0KLSsgIGJvb2wgaXNJbnZhbGlkKCkgY29uc3QgeyByZXR1 cm4gaW52YWxpZF87IH0KLSsKLSsgIEZsb2F0UmVnaXN0ZXIgYXNTaW5nbGUoKSBjb25zdCB7Ci0r ICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKLSsgICAgcmV0dXJuIEZsb2F0UmVnaXN0ZXIoRW5j b2RpbmcoZW5jb2RpbmdfKSwgRmxvYXRSZWdpc3RlcnM6OlNpbmdsZSk7Ci0rICB9Ci0rICBGbG9h dFJlZ2lzdGVyIGFzRG91YmxlKCkgY29uc3QgewotKyAgICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7 Ci0rICAgIHJldHVybiBGbG9hdFJlZ2lzdGVyKEVuY29kaW5nKGVuY29kaW5nXyksIEZsb2F0UmVn aXN0ZXJzOjpEb3VibGUpOwotKyAgfQotKyAgRmxvYXRSZWdpc3RlciBhc1NpbWQxMjgoKSBjb25z dCB7Ci0rICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKLSsgICAgcmV0dXJuIEZsb2F0UmVnaXN0 ZXIoRW5jb2RpbmcoZW5jb2RpbmdfKSwgRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjgpOwotKyAgfQot KwotKyAgY29uc3RleHByIHVpbnQzMl90IHNpemUoKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQo IWludmFsaWRfKTsKLSsgICAgaWYgKGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpEb3VibGUpIHsK LSsgICAgICByZXR1cm4gc2l6ZW9mKGRvdWJsZSk7Ci0rICAgIH0KLSsgICAgaWYgKGtpbmRfID09 IEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGUpIHsKLSsgICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KTsK LSsgICAgfQotKyAgICBNT1pfQVNTRVJUKGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4 KTsKLSsgICAgcmV0dXJuIDE2OwotKyAgfQotKwotKyAgY29uc3RleHByIENvZGUgY29kZSgpIGNv bnN0IHsKLSsgICAgcmV0dXJuIENvZGVzOjpmcm9tUGFydHMoZW5jb2RpbmdfLCBraW5kXywgaW52 YWxpZF8pOwotKyAgfQotKwotKyAgY29uc3RleHByIEVuY29kaW5nIGVuY29kaW5nKCkgY29uc3Qg ewotKyAgICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7Ci0rICAgIC8vIFNpbWQxMjggbGl2ZXMgaW4g VlItbmFtZXNwYWNlIGF0IFZTUjMyLTYzICg9IFZSMC0zMSkuIFNpbmdsZS9Eb3VibGUKLSsgICAg Ly8gc2hhcmUgRlBSIG5hbWVzcGFjZSBhdCBWU1IwLTMxLiBUaGUgdW5pZmllZCBYWC1mb3JtIGVu Y29kZXJzIHNwbGl0Ci0rICAgIC8vIHRoZSByZXN1bHQgaW50byBsb3ctNS1iaXQgVlJUL1ZSQS9W UkIgKyBUWC9BWC9CWCBiaXRzOyBWTVgKLSsgICAgLy8gRmxvYXRSZWdpc3Rlci10YWtpbmcgZW5j b2RlcnMgbWFzayB3aXRoIGAmIDMxYCBmb3IgdGhlIHJhdyBWUgotKyAgICAvLyBmaWVsZC4gU28g MzIrRSBmbG93cyBjb3JyZWN0bHkgdGhyb3VnaCBib3RoIHBhdGhzLgotKyAgICByZXR1cm4gRW5j b2RpbmcoZW5jb2RpbmdfICsKLSsgICAgICAgICAgICAgICAgICAgIChraW5kXyA9PSBGbG9hdFJl Z2lzdGVyczo6U2ltZDEyOCA/IDMyIDogMCkpOwotKyAgfQotKwotKyAgY29uc3QgY2hhciogbmFt ZSgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVnaXN0ZXJzOjpHZXROYW1lKGNvZGUoKSk7IH0KLSsg IGJvb2wgdm9sYXRpbGVfKCkgY29uc3QgewotKyAgICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7Ci0r ICAgIHJldHVybiAhISgoU2V0VHlwZSgxKSA8PCBjb2RlKCkpICYgRmxvYXRSZWdpc3RlcnM6OlZv bGF0aWxlTWFzayk7Ci0rICB9Ci0rICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KEZsb2F0UmVn aXN0ZXIgb3RoZXIpIGNvbnN0IHsKLSsgICAgcmV0dXJuIGNvZGUoKSAhPSBvdGhlci5jb2RlKCk7 Ci0rICB9Ci0rICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KEZsb2F0UmVnaXN0ZXIgb3RoZXIp IGNvbnN0IHsKLSsgICAgcmV0dXJuIGNvZGUoKSA9PSBvdGhlci5jb2RlKCk7Ci0rICB9Ci0rCi0r ICBib29sIGFsaWFzZXMoRmxvYXRSZWdpc3RlciBvdGhlcikgY29uc3QgewotKyAgICAvLyBSZWdp c3Rlci1jbGFzcyBwYXJ0aXRpb246IHtTaW5nbGUsIERvdWJsZX0gc2hhcmUgRlBScyAoVlNSMC0z MSk7Ci0rICAgIC8vIFNpbWQxMjggbGl2ZXMgaW4gVlItbmFtZXNwYWNlIChWU1IzMi02MykuIEZQ UiBmNSAoU2luZ2xlL0RvdWJsZQotKyAgICAvLyBlbmNvZGluZyA1KSBhbmQgVlIgdjUgKFNpbWQx MjggZW5jb2RpbmcgNSkgYXJlIGRpc3RpbmN0IHBoeXNpY2FsCi0rICAgIC8vIHJlZ2lzdGVycy4K LSsgICAgaWYgKGVuY29kaW5nXyAhPSBvdGhlci5lbmNvZGluZ18pIHJldHVybiBmYWxzZTsKLSsg ICAgYm9vbCBzZWxmU2ltZCA9IChraW5kXyA9PSBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCk7Ci0r ICAgIGJvb2wgb3RoZXJTaW1kID0gKG90aGVyLmtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW1k MTI4KTsKLSsgICAgcmV0dXJuIHNlbGZTaW1kID09IG90aGVyU2ltZDsKLSsgIH0KLSsgIGJvb2wg ZXF1aXYoRmxvYXRSZWdpc3RlciBvdGhlcikgY29uc3QgewotKyAgICBNT1pfQVNTRVJUKCFpbnZh bGlkXyk7Ci0rICAgIHJldHVybiBraW5kXyA9PSBvdGhlci5raW5kXzsKLSsgIH0KLSsKLSsgIHVp bnQzMl90IG51bUFsaWFzZWQoKSBjb25zdCB7Ci0rICAgIHJldHVybiAoa2luZF8gPT0gRmxvYXRS ZWdpc3RlcnM6OlNpbWQxMjgpID8gMSA6IDI7Ci0rICB9Ci0rICB1aW50MzJfdCBudW1BbGlnbmVk QWxpYXNlZCgpIHsgcmV0dXJuIG51bUFsaWFzZWQoKTsgfQotKwotKyAgRmxvYXRSZWdpc3RlciBh bGlhc2VkKHVpbnQzMl90IGFsaWFzSWR4KSB7Ci0rICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsK LSsgICAgTU9aX0FTU0VSVChhbGlhc0lkeCA8IG51bUFsaWFzZWQoKSk7Ci0rICAgIGlmIChraW5k XyA9PSBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgewotKyAgICAgIHJldHVybiAqdGhpczsKLSsg ICAgfQotKyAgICBLaW5kIG90aGVyS2luZCA9IChraW5kXyA9PSBGbG9hdFJlZ2lzdGVyczo6U2lu Z2xlKQotKyAgICAgICAgICAgICAgICAgICAgICAgICA/IEZsb2F0UmVnaXN0ZXJzOjpEb3VibGUK LSsgICAgICAgICAgICAgICAgICAgICAgICAgOiBGbG9hdFJlZ2lzdGVyczo6U2luZ2xlOwotKyAg ICBLaW5kIHNlbGVjdGVkS2luZCA9IChhbGlhc0lkeCA9PSAwKSA/IEtpbmQoa2luZF8pIDogb3Ro ZXJLaW5kOwotKyAgICByZXR1cm4gRmxvYXRSZWdpc3RlcihFbmNvZGluZyhlbmNvZGluZ18pLCBz ZWxlY3RlZEtpbmQpOwotKyAgfQotKyAgRmxvYXRSZWdpc3RlciBhbGlnbmVkQWxpYXNlZCh1aW50 MzJfdCBhbGlhc0lkeCkgewotKyAgICBNT1pfQVNTRVJUKGFsaWFzSWR4IDwgbnVtQWxpYXNlZCgp KTsKLSsgICAgcmV0dXJuIGFsaWFzZWQoYWxpYXNJZHgpOwotKyAgfQotKyAgU2V0VHlwZSBhbGln bmVkT3JEb21pbmF0ZWRBbGlhc2VkU2V0KCkgY29uc3QgewotKyAgICBpZiAoa2luZF8gPT0gRmxv YXRSZWdpc3RlcnM6OlNpbWQxMjgpIHsKLSsgICAgICByZXR1cm4gU2V0VHlwZSgxKSA8PCAoKHVp bnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4KSAqCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSArCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVuY29kaW5nXyk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIChDb2Rlczo6U3ByZWFk U2luZ2xlIHwgQ29kZXM6OlNwcmVhZERvdWJsZSkgPDwgZW5jb2RpbmdfOwotKyAgfQotKwotKyAg c3RhdGljIGNvbnN0ZXhwciBSZWdUeXBlTmFtZSBEZWZhdWx0VHlwZSA9IFJlZ1R5cGVOYW1lOjpG bG9hdDY0OwotKwotKyAgdGVtcGxhdGUgPFJlZ1R5cGVOYW1lIE5hbWUgPSBEZWZhdWx0VHlwZT4K LSsgIHN0YXRpYyBTZXRUeXBlIExpdmVBc0luZGV4YWJsZVNldChTZXRUeXBlIHMpIHsKLSsgICAg cmV0dXJuIFNldFR5cGUoMCk7Ci0rICB9Ci0rCi0rICB0ZW1wbGF0ZSA8UmVnVHlwZU5hbWUgTmFt ZSA9IERlZmF1bHRUeXBlPgotKyAgc3RhdGljIFNldFR5cGUgQWxsb2NhdGFibGVBc0luZGV4YWJs ZVNldChTZXRUeXBlIHMpIHsKLSsgICAgc3RhdGljX2Fzc2VydChOYW1lICE9IFJlZ1R5cGVOYW1l OjpBbnksICJBbGxvY2F0YWJsZSBzZXQgYXJlIG5vdCBpdGVyYWJsZSIpOwotKyAgICByZXR1cm4g TGl2ZUFzSW5kZXhhYmxlU2V0PE5hbWU+KHMpOwotKyAgfQotKwotKyAgc3RhdGljIFR5cGVkUmVn aXN0ZXJTZXQ8RmxvYXRSZWdpc3Rlcj4gUmVkdWNlU2V0Rm9yUHVzaCgKLSsgICAgICBjb25zdCBU eXBlZFJlZ2lzdGVyU2V0PEZsb2F0UmVnaXN0ZXI+JiBzKTsKLSsgIHN0YXRpYyB1aW50MzJfdCBH ZXRQdXNoU2l6ZUluQnl0ZXMoY29uc3QgVHlwZWRSZWdpc3RlclNldDxGbG9hdFJlZ2lzdGVyPiYg cyk7Ci0rICB1aW50MzJfdCBnZXRSZWdpc3RlckR1bXBPZmZzZXRJbkJ5dGVzKCk7Ci0rfTsKLSsK LSt0ZW1wbGF0ZSA8PgotK2lubGluZSBGbG9hdFJlZ2lzdGVyOjpTZXRUeXBlCi0rRmxvYXRSZWdp c3Rlcjo6TGl2ZUFzSW5kZXhhYmxlU2V0PFJlZ1R5cGVOYW1lOjpGbG9hdDMyPihTZXRUeXBlIHNl dCkgewotKyAgcmV0dXJuIHNldCAmIEZsb2F0UmVnaXN0ZXJzOjpBbGxTaW5nbGVNYXNrOwotK30K LSsKLSt0ZW1wbGF0ZSA8PgotK2lubGluZSBGbG9hdFJlZ2lzdGVyOjpTZXRUeXBlCi0rRmxvYXRS ZWdpc3Rlcjo6TGl2ZUFzSW5kZXhhYmxlU2V0PFJlZ1R5cGVOYW1lOjpGbG9hdDY0PihTZXRUeXBl IHNldCkgewotKyAgcmV0dXJuIHNldCAmIEZsb2F0UmVnaXN0ZXJzOjpBbGxEb3VibGVNYXNrOwot K30KLSsKLSt0ZW1wbGF0ZSA8PgotK2lubGluZSBGbG9hdFJlZ2lzdGVyOjpTZXRUeXBlCi0rRmxv YXRSZWdpc3Rlcjo6TGl2ZUFzSW5kZXhhYmxlU2V0PFJlZ1R5cGVOYW1lOjpWZWN0b3IxMjg+KFNl dFR5cGUgc2V0KSB7Ci0rICByZXR1cm4gc2V0ICYgRmxvYXRSZWdpc3RlcnM6OkFsbFNpbWQxMjhN YXNrOwotK30KLSsKLSt0ZW1wbGF0ZSA8PgotK2lubGluZSBGbG9hdFJlZ2lzdGVyOjpTZXRUeXBl Ci0rRmxvYXRSZWdpc3Rlcjo6TGl2ZUFzSW5kZXhhYmxlU2V0PFJlZ1R5cGVOYW1lOjpBbnk+KFNl dFR5cGUgc2V0KSB7Ci0rICByZXR1cm4gc2V0OwotK30KLSsKLStpbmxpbmUgYm9vbCBoYXNVbmFs aWFzZWREb3VibGUoKSB7IHJldHVybiBmYWxzZTsgfQotK2lubGluZSBib29sIGhhc011bHRpQWxp YXMoKSB7IHJldHVybiBmYWxzZTsgfQotKwotKy8vIFBQQzY0IGZlYXR1cmUgYml0cyBwYWNrZWQg aW50byB0aGUgdmFsdWUgR2V0UFBDNjRGbGFncygpIHJldHVybnMsCi0rLy8gd2hpY2ggZmVlZHMg d2FzbS9XYXNtQ29tcGlsZS5jcHAncyBwZXItYXJjaGl0ZWN0dXJlIGNvZGUgc2lnbmF0dXJlLgot Ky8vIERlZmluZWQgYXMgZW51bSBjb25zdGFudHMgKG5vdCBlbnVtIGNsYXNzKSBzbyBjYWxsZXJz IGNhbiBPUi9BTkQKLSsvLyBmcmVlbHkuIE5ldyBiaXRzIHNob3VsZCByZW1haW4gYmFja3dhcmQt Y29tcGF0aWJsZSDigJQgb2xkZXIgc2lnbmF0dXJlcwotKy8vIG11c3Qga2VlcCBtZWFuaW5nIHRo ZSBzYW1lIHNldCBvZiBmZWF0dXJlcy4KLStlbnVtIFBQQzY0RmVhdHVyZUZsYWdzIDogdWludDMy X3QgewotKyAgUFBDNjRGbGFnX1BPV0VSOSA9IDF1IDw8IDAsCi0rICAvLyBGdXR1cmU6IFBQQzY0 RmxhZ19QT1dFUjEwID0gMXUgPDwgMSwgUFBDNjRGbGFnX1ZTWDQgPSAxdSA8PCAyLCAuLi4KLSt9 OwotKwotK3VpbnQzMl90IEdldFBQQzY0RmxhZ3MoKTsKLSsKLStjbGFzcyBQUEM2NEZsYWdzIGZp bmFsIHsKLSsgcHVibGljOgotKyAgUFBDNjRGbGFncygpID0gZGVsZXRlOwotKwotKyAgLy8gUFBD NjRGbGFnczo6SW5pdCBpcyBjYWxsZWQgZnJvbSB0aGUgSml0Q29udGV4dCBjb25zdHJ1Y3RvciB0 byByZWFkIHRoZQotKyAgLy8gaGFyZHdhcmUgY2FwYWJpbGl0aWVzICh2aWEgZ2V0YXV4dmFsKEFU X0hXQ0FQMikpLiBJdCBtdXN0IGJlIGNhbGxlZAotKyAgLy8gZXhhY3RseSBvbmNlLCBiZWZvcmUg SGFzUE9XRVI5KCkvSGFzUE9XRVIxMCgpIGFyZSB1c2VkLgotKyAgc3RhdGljIHZvaWQgSW5pdCgp OwotK307Ci0rCi0rYm9vbCBIYXNQT1dFUjkoKTsKLStib29sIEhhc1BPV0VSMTAoKTsKLSsKLSt9 ICAvLyBuYW1lc3BhY2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi0rCi0rI2VuZGlmIC8qIGpp dF9wcGM2NF9BcmNoaXRlY3R1cmVfcHBjNjRfaCAqLwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQv cHBjNjQvQXNzZW1ibGVyLXBwYzY0LmNwcCBiL2pzL3NyYy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBw YzY0LmNwcAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uNDgxMDcw YzRjNmQ1Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3BwYzY0L0Fzc2VtYmxlci1w cGM2NC5jcHAKLUBAIC0wLDAgKzEsMzAyOCBAQAotKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0 aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KLSsgKiB2 aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6Ci0rICogVGhpcyBTb3VyY2UgQ29kZSBG b3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwotKyAqIExp Y2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3 aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEu b3JnL01QTC8yLjAvLiAqLwotKwotKyNpbmNsdWRlICJqaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0 LmgiCi0rCi0rI2luY2x1ZGUgIm1vemlsbGEvRGVidWdPbmx5LmgiCi0rI2luY2x1ZGUgIm1vemls bGEvTWF5YmUuaCIKLSsKLSsjaW5jbHVkZSAiZ2MvTWFya2luZy5oIgotKyNpbmNsdWRlICJqaXQv QXV0b1dyaXRhYmxlSml0Q29kZS5oIgotKyNpbmNsdWRlICJqaXQvRXhlY3V0YWJsZUFsbG9jYXRv ci5oIgotKyNpbmNsdWRlICJqaXQvRmx1c2hJQ2FjaGUuaCIKLSsKLSt1c2luZyBtb3ppbGxhOjpE ZWJ1Z09ubHk7Ci0rCi0rdXNpbmcgbmFtZXNwYWNlIGpzOwotK3VzaW5nIG5hbWVzcGFjZSBqczo6 aml0OwotKwotKy8vIEVMRnYyIEFCSTogOCBHUFJzIChyMy1yMTApLCAxMyBGUFJzIChmMS1mMTMp LgotKy8vIEZQIGFyZ3VtZW50cyBhbHNvIGNvbnN1bWUgYSBHUFIgc2xvdCBwZXIgRUxGdjIgY29u dmVudGlvbi4KLStBQklBcmcgQUJJQXJnR2VuZXJhdG9yOjpuZXh0KE1JUlR5cGUgdHlwZSkgewot KyAgc3dpdGNoICh0eXBlKSB7Ci0rICAgIGNhc2UgTUlSVHlwZTo6SW50MzI6Ci0rICAgIGNhc2Ug TUlSVHlwZTo6SW50NjQ6Ci0rICAgIGNhc2UgTUlSVHlwZTo6UG9pbnRlcjoKLSsgICAgY2FzZSBN SVJUeXBlOjpXYXNtQW55UmVmOgotKyAgICBjYXNlIE1JUlR5cGU6Oldhc21BcnJheURhdGE6Ci0r ICAgIGNhc2UgTUlSVHlwZTo6U3RhY2tSZXN1bHRzOiB7Ci0rICAgICAgaWYgKGludFJlZ0luZGV4 XyA+PSBOdW1JbnRBcmdSZWdzKSB7Ci0rICAgICAgICBjdXJyZW50XyA9IEFCSUFyZyhzdGFja09m ZnNldF8pOwotKyAgICAgICAgc3RhY2tPZmZzZXRfICs9IHNpemVvZih1aW50cHRyX3QpOwotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGN1cnJlbnRfID0gQUJJQXJnKFJlZ2lzdGVy OjpGcm9tQ29kZShSZWdpc3RlcnM6OnIzICsgaW50UmVnSW5kZXhfKSk7Ci0rICAgICAgaW50UmVn SW5kZXhfKys7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSBNSVJUeXBlOjpGbG9h dDMyOgotKyAgICBjYXNlIE1JUlR5cGU6OkRvdWJsZTogewotKyAgICAgIGlmIChmbG9hdFJlZ0lu ZGV4XyA9PSBOdW1GbG9hdEFyZ1JlZ3MpIHsKLSsgICAgICAgIGN1cnJlbnRfID0gQUJJQXJnKHN0 YWNrT2Zmc2V0Xyk7Ci0rICAgICAgICBzdGFja09mZnNldF8gKz0gc2l6ZW9mKGRvdWJsZSk7Ci0r ICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY3VycmVudF8gPSBBQklBcmcoRmxvYXRS ZWdpc3RlcigKLSsgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkVuY29kaW5nKEZsb2F0UmVnaXN0 ZXJzOjpmMSArIGZsb2F0UmVnSW5kZXhfKSwKLSsgICAgICAgICAgdHlwZSA9PSBNSVJUeXBlOjpE b3VibGUgPyBGbG9hdFJlZ2lzdGVyczo6RG91YmxlCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogRmxvYXRSZWdpc3RlcnM6OlNpbmdsZSkpOwotKyAgICAgIGZsb2F0UmVnSW5k ZXhfKys7Ci0rICAgICAgLy8gRUxGdjIgQUJJOiBlYWNoIEZQIGFyZyBhbHNvIGNvbnN1bWVzIGEg R1BSIHNsb3QgKHNoYWRvdykuCi0rICAgICAgLy8gQ2FwIGF0IE51bUludEFyZ1JlZ3Mgc28gc3Vi c2VxdWVudCBpbnQgYXJncyBnbyB0byB0aGUgc3RhY2suCi0rICAgICAgaWYgKGludFJlZ0luZGV4 XyA8IE51bUludEFyZ1JlZ3MpIHsKLSsgICAgICAgIGludFJlZ0luZGV4XysrOwotKyAgICAgIH0K LSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIE1JUlR5cGU6OlNpbWQxMjg6IHsKLSsg ICAgICAvLyBQYXNzIHYxMjggaW4gRlAgcmVnaXN0ZXJzIChTaW1kMTI4IGtpbmQpLiBPbiBQUEM2 NCBFTEZ2MiwgU0lNRAotKyAgICAgIC8vIHZhbHVlcyB1c2UgdGhlIHNhbWUgVlNSIHJlZ2lzdGVy IGZpbGUgYXMgRlAgYXJncy4KLSsgICAgICBpZiAoZmxvYXRSZWdJbmRleF8gPT0gTnVtRmxvYXRB cmdSZWdzKSB7Ci0rICAgICAgICBjdXJyZW50XyA9IEFCSUFyZyhzdGFja09mZnNldF8pOwotKyAg ICAgICAgc3RhY2tPZmZzZXRfICs9IDE2OwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAg ICAgIGN1cnJlbnRfID0gQUJJQXJnKEZsb2F0UmVnaXN0ZXIoCi0rICAgICAgICAgIEZsb2F0UmVn aXN0ZXJzOjpFbmNvZGluZyhGbG9hdFJlZ2lzdGVyczo6ZjEgKyBmbG9hdFJlZ0luZGV4XyksCi0r ICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4KSk7Ci0rICAgICAgZmxvYXRSZWdJbmRl eF8rKzsKLSsgICAgICBpZiAoaW50UmVnSW5kZXhfIDwgTnVtSW50QXJnUmVncykgewotKyAgICAg ICAgaW50UmVnSW5kZXhfKys7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUiKTsK LSsgIH0KLSsgIHJldHVybiBjdXJyZW50XzsKLSt9Ci0rCi0rLy8gQ29uZGl0aW9uIGludmVyc2lv biB0YWJsZXMuCi0rQXNzZW1ibGVyOjpDb25kaXRpb24gQXNzZW1ibGVyOjpJbnZlcnRDb25kaXRp b24oQ29uZGl0aW9uIGNvbmQpIHsKLSsgIHN3aXRjaCAoY29uZCkgewotKyAgICBjYXNlIEVxdWFs OgotKyAgICAgIHJldHVybiBOb3RFcXVhbDsKLSsgICAgY2FzZSBOb3RFcXVhbDoKLSsgICAgICBy ZXR1cm4gRXF1YWw7Ci0rICAgIGNhc2UgTGVzc1RoYW46Ci0rICAgICAgcmV0dXJuIEdyZWF0ZXJU aGFuT3JFcXVhbDsKLSsgICAgY2FzZSBMZXNzVGhhbk9yRXF1YWw6Ci0rICAgICAgcmV0dXJuIEdy ZWF0ZXJUaGFuOwotKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgotKyAgICAgIHJldHVybiBMZXNzVGhh bk9yRXF1YWw7Ci0rICAgIGNhc2UgR3JlYXRlclRoYW5PckVxdWFsOgotKyAgICAgIHJldHVybiBM ZXNzVGhhbjsKLSsgICAgY2FzZSBBYm92ZToKLSsgICAgICByZXR1cm4gQmVsb3dPckVxdWFsOwot KyAgICBjYXNlIEFib3ZlT3JFcXVhbDoKLSsgICAgICByZXR1cm4gQmVsb3c7Ci0rICAgIGNhc2Ug QmVsb3c6Ci0rICAgICAgcmV0dXJuIEFib3ZlT3JFcXVhbDsKLSsgICAgY2FzZSBCZWxvd09yRXF1 YWw6Ci0rICAgICAgcmV0dXJuIEFib3ZlOwotKyAgICBjYXNlIFplcm86Ci0rICAgICAgcmV0dXJu IE5vblplcm87Ci0rICAgIGNhc2UgTm9uWmVybzoKLSsgICAgICByZXR1cm4gWmVybzsKLSsgICAg Y2FzZSBTaWduZWQ6Ci0rICAgICAgcmV0dXJuIE5vdFNpZ25lZDsKLSsgICAgY2FzZSBOb3RTaWdu ZWQ6Ci0rICAgICAgcmV0dXJuIFNpZ25lZDsKLSsgICAgY2FzZSBTT0JpdDoKLSsgICAgICByZXR1 cm4gTlNPQml0OwotKyAgICBjYXNlIE5TT0JpdDoKLSsgICAgICByZXR1cm4gU09CaXQ7Ci0rICAg IGNhc2UgT3ZlcmZsb3c6Ci0rICAgICAgcmV0dXJuIE5vdE92ZXJmbG93OwotKyAgICBjYXNlIE5v dE92ZXJmbG93OgotKyAgICAgIHJldHVybiBPdmVyZmxvdzsKLSsgICAgY2FzZSBDYXJyeVNldDoK LSsgICAgICByZXR1cm4gQ2FycnlDbGVhcjsKLSsgICAgY2FzZSBDYXJyeUNsZWFyOgotKyAgICAg IHJldHVybiBDYXJyeVNldDsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goInVuZXhw ZWN0ZWQgY29uZGl0aW9uIik7Ci0rICB9Ci0rfQotKwotK0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0 aW9uIEFzc2VtYmxlcjo6SW52ZXJ0Q29uZGl0aW9uKERvdWJsZUNvbmRpdGlvbiBjb25kKSB7Ci0r ICBzd2l0Y2ggKGNvbmQpIHsKLSsgICAgY2FzZSBEb3VibGVPcmRlcmVkOgotKyAgICAgIHJldHVy biBEb3VibGVVbm9yZGVyZWQ7Ci0rICAgIGNhc2UgRG91YmxlRXF1YWw6Ci0rICAgICAgcmV0dXJu IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7Ci0rICAgIGNhc2UgRG91YmxlTm90RXF1YWw6Ci0r ICAgICAgcmV0dXJuIERvdWJsZUVxdWFsT3JVbm9yZGVyZWQ7Ci0rICAgIGNhc2UgRG91YmxlR3Jl YXRlclRoYW46Ci0rICAgICAgcmV0dXJuIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVk OwotKyAgICBjYXNlIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbDoKLSsgICAgICByZXR1cm4gRG91 YmxlTGVzc1RoYW5PclVub3JkZXJlZDsKLSsgICAgY2FzZSBEb3VibGVMZXNzVGhhbjoKLSsgICAg ICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQ7Ci0rICAgIGNhc2Ug RG91YmxlTGVzc1RoYW5PckVxdWFsOgotKyAgICAgIHJldHVybiBEb3VibGVHcmVhdGVyVGhhbk9y VW5vcmRlcmVkOwotKyAgICBjYXNlIERvdWJsZVVub3JkZXJlZDoKLSsgICAgICByZXR1cm4gRG91 YmxlT3JkZXJlZDsKLSsgICAgY2FzZSBEb3VibGVFcXVhbE9yVW5vcmRlcmVkOgotKyAgICAgIHJl dHVybiBEb3VibGVOb3RFcXVhbDsKLSsgICAgY2FzZSBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk OgotKyAgICAgIHJldHVybiBEb3VibGVFcXVhbDsKLSsgICAgY2FzZSBEb3VibGVHcmVhdGVyVGhh bk9yVW5vcmRlcmVkOgotKyAgICAgIHJldHVybiBEb3VibGVMZXNzVGhhbk9yRXF1YWw7Ci0rICAg IGNhc2UgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQ6Ci0rICAgICAgcmV0dXJu IERvdWJsZUxlc3NUaGFuOwotKyAgICBjYXNlIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQ6Ci0r ICAgICAgcmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbDsKLSsgICAgY2FzZSBEb3VibGVM ZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZDoKLSsgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRo YW47Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIGNvbmRpdGlv biIpOwotKyAgfQotK30KLSsKLSsvLyBJbnN0SW1tIGhlbHBlci4KLSt1aW50OF90IEluc3RJbW06 OnRyYXB0YWcoKSB7Ci0rICB1aW50OF90IHIgPSAoKGRhdGEgJiAweDAwMWYwMDAwKSA+PiAxNik7 Ci0rICBNT1pfQVNTRVJUKGlzT3Bjb2RlKFBQQ190dykpOwotKyAgTU9aX0FTU0VSVChyID09ICgo ZGF0YSAmIDB4MDAwMGY4MDApID4+IDExKSk7Ci0rICByZXR1cm4gciAmIDB4ZmU7Ci0rfQotKwot K0JPZmZJbW0xNjo6Qk9mZkltbTE2KEluc3RJbW0gaW5zdCkgOiBkYXRhKGluc3QuZXh0cmFjdElt bTE2VmFsdWUoKSAmIDB4RkZGQykgewotKyAgLy8gU2lnbi1leHRlbmQgdGhlIDE2LWJpdCBmaWVs ZC4KLSsgIGlmIChkYXRhICYgMHg4MDAwKSB7Ci0rICAgIGRhdGEgfD0gfjB4RkZGRjsKLSsgIH0K LSt9Ci0rCi0rSW5zdHJ1Y3Rpb24qIEJPZmZJbW0xNjo6Z2V0RGVzdChJbnN0cnVjdGlvbiogc3Jj KSBjb25zdCB7Ci0rICByZXR1cm4gKEluc3RydWN0aW9uKikoKHVpbnQ4X3QqKXNyYyArIGRhdGEp OwotK30KLSsKLStJbnN0cnVjdGlvbiogSk9mZkltbTI2OjpnZXREZXN0KEluc3RydWN0aW9uKiBz cmMpIGNvbnN0IHsKLSsgIHJldHVybiAoSW5zdHJ1Y3Rpb24qKSgodWludDhfdCopc3JjICsgZGF0 YSk7Ci0rfQotKwotK0ltbTE2OjpJbW0xNigpIDogdmFsdWUoMCkge30KLSsKLStJbW04OjpJbW04 KCkgOiB2YWx1ZSgwKSB7fQotKwotKy8vIEJ1ZmZlciBtYW5hZ2VtZW50LgotK2Jvb2wgQXNzZW1i bGVyOjpvb20oKSBjb25zdCB7Ci0rICByZXR1cm4gQXNzZW1ibGVyU2hhcmVkOjpvb20oKSB8fCBt X2J1ZmZlci5vb20oKSB8fCBqdW1wUmVsb2NhdGlvbnNfLm9vbSgpIHx8Ci0rICAgICAgICAgZGF0 YVJlbG9jYXRpb25zXy5vb20oKTsKLSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OmZpbmlzaCgpIHsK LSsgIE1PWl9BU1NFUlQoIWlzRmluaXNoZWQpOwotKyAgaXNGaW5pc2hlZCA9IHRydWU7Ci0rICBt X2J1ZmZlci5mbHVzaFBvb2woKTsKLSt9Ci0rCi0rYm9vbCBBc3NlbWJsZXI6OmFwcGVuZFJhd0Nv ZGUoY29uc3QgdWludDhfdCogY29kZSwgc2l6ZV90IG51bUJ5dGVzKSB7Ci0rICByZXR1cm4gbV9i dWZmZXIuYXBwZW5kUmF3Q29kZShjb2RlLCBudW1CeXRlcyk7Ci0rfQotKwotK2Jvb2wgQXNzZW1i bGVyOjpyZXNlcnZlKHNpemVfdCBzaXplKSB7Ci0rICAvLyBGaXhlZC1zaXplIGNodW5rIGJ1ZmZl cjsgbm8gcG9pbnQgaW4gcmVzZXJ2aW5nIG5vdyB2cy4gb24tZGVtYW5kLgotKyAgcmV0dXJuICFv b20oKTsKLSt9Ci0rCi0rYm9vbCBBc3NlbWJsZXI6OnN3YXBCdWZmZXIod2FzbTo6Qnl0ZXMmIGJ5 dGVzKSB7Ci0rICBNT1pfQVNTRVJUKGJ5dGVzLmVtcHR5KCkpOwotKyAgaWYgKCFieXRlcy5yZXNp emUoYnl0ZXNOZWVkZWQoKSkpIHsKLSsgICAgcmV0dXJuIGZhbHNlOwotKyAgfQotKyAgbV9idWZm ZXIuZXhlY3V0YWJsZUNvcHkoYnl0ZXMuYmVnaW4oKSk7Ci0rICByZXR1cm4gdHJ1ZTsKLSt9Ci0r Ci0rdm9pZCBBc3NlbWJsZXI6OmNvcHlKdW1wUmVsb2NhdGlvblRhYmxlKHVpbnQ4X3QqIGRlc3Qp IHsKLSsgIGlmIChqdW1wUmVsb2NhdGlvbnNfLmxlbmd0aCgpKSB7Ci0rICAgIG1lbWNweShkZXN0 LCBqdW1wUmVsb2NhdGlvbnNfLmJ1ZmZlcigpLCBqdW1wUmVsb2NhdGlvbnNfLmxlbmd0aCgpKTsK LSsgIH0KLSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OmNvcHlEYXRhUmVsb2NhdGlvblRhYmxlKHVp bnQ4X3QqIGRlc3QpIHsKLSsgIGlmIChkYXRhUmVsb2NhdGlvbnNfLmxlbmd0aCgpKSB7Ci0rICAg IG1lbWNweShkZXN0LCBkYXRhUmVsb2NhdGlvbnNfLmJ1ZmZlcigpLCBkYXRhUmVsb2NhdGlvbnNf Lmxlbmd0aCgpKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5 KHZvaWQqIGJ1ZmZlcikgewotKyAgTU9aX0FTU0VSVChpc0ZpbmlzaGVkKTsKLSsgIG1fYnVmZmVy LmV4ZWN1dGFibGVDb3B5KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIpKTsKLSt9Ci0rCi0r dm9pZCBBc3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5KHVpbnQ4X3QqIGJ1ZmZlcikgewotKyAgTU9a X0FTU0VSVChpc0ZpbmlzaGVkKTsKLSsgIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGJ1ZmZlcik7 Ci0rfQotKwotK3NpemVfdCBBc3NlbWJsZXI6OnNpemUoKSBjb25zdCB7Ci0rICAvLyBBc3NlbWJs ZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sczo6c2l6ZSgpIGFzc2VydHMgcG9vbCBpcyBlbXB0eS4K LSsgIC8vIEZsdXNoIHBlbmRpbmcgcG9vbCBlbnRyaWVzIGZpcnN0LgotKyAgY29uc3RfY2FzdDxQ UENCdWZmZXJXaXRoRXhlY3V0YWJsZUNvcHkmPihtX2J1ZmZlcikuZmx1c2hQb29sKCk7Ci0rICBy ZXR1cm4gbV9idWZmZXIuc2l6ZSgpOwotK30KLSsKLStzaXplX3QgQXNzZW1ibGVyOjpqdW1wUmVs b2NhdGlvblRhYmxlQnl0ZXMoKSBjb25zdCB7Ci0rICByZXR1cm4ganVtcFJlbG9jYXRpb25zXy5s ZW5ndGgoKTsKLSt9Ci0rCi0rc2l6ZV90IEFzc2VtYmxlcjo6ZGF0YVJlbG9jYXRpb25UYWJsZUJ5 dGVzKCkgY29uc3QgewotKyAgcmV0dXJuIGRhdGFSZWxvY2F0aW9uc18ubGVuZ3RoKCk7Ci0rfQot KwotK3NpemVfdCBBc3NlbWJsZXI6OmJ5dGVzTmVlZGVkKCkgY29uc3QgewotKyAgcmV0dXJuIHNp emUoKSArIGp1bXBSZWxvY2F0aW9uVGFibGVCeXRlcygpICsgZGF0YVJlbG9jYXRpb25UYWJsZUJ5 dGVzKCk7Ci0rfQotKwotKy8vIFdyaXRlIGFuIGluc3RydWN0aW9uIGludG8gdGhlIGJ1ZmZlciBv ciB0byBhbiBleHRlcm5hbCBkZXN0aW5hdGlvbi4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp3 cml0ZUluc3QodWludDMyX3QgeCwgdWludDMyX3QqIGRlc3QpIHsKLSsgIE1PWl9BU1NFUlQoaGFz Q3JlYXRvcigpKTsKLSsgIGlmIChkZXN0ID09IG51bGxwdHIpIHsKLSsgICAgcmV0dXJuIG1fYnVm ZmVyLnB1dEludCh4KTsKLSsgIH0KLSsKLSsgIFdyaXRlSW5zdFN0YXRpYyh4LCBkZXN0KTsKLSsg IHJldHVybiBCdWZmZXJPZmZzZXQoKTsKLSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OldyaXRlSW5z dFN0YXRpYyh1aW50MzJfdCB4LCB1aW50MzJfdCogZGVzdCkgewotKyAgTU9aX0FTU0VSVChkZXN0 ICE9IG51bGxwdHIpOwotKyAgKmRlc3QgPSB4OwotK30KLSsKLSsvLyBBbGlnbm1lbnQuCi0rQnVm ZmVyT2Zmc2V0IEFzc2VtYmxlcjo6aGFsdGluZ0FsaWduKGludCBhbGlnbm1lbnQpIHsKLSsgIEJ1 ZmZlck9mZnNldCByZXQ7Ci0rICBNT1pfQVNTRVJUKG1fYnVmZmVyLmlzQWxpZ25lZCg0KSk7Ci0r ICBpZiAoYWxpZ25tZW50ID09IDgpIHsKLSsgICAgaWYgKCFtX2J1ZmZlci5pc0FsaWduZWQoYWxp Z25tZW50KSkgewotKyAgICAgIEJ1ZmZlck9mZnNldCB0bXAgPSB4c190cmFwKCk7Ci0rICAgICAg aWYgKCFyZXQuYXNzaWduZWQoKSkgewotKyAgICAgICAgcmV0ID0gdG1wOwotKyAgICAgIH0KLSsg ICAgfQotKyAgfSBlbHNlIHsKLSsgICAgTU9aX0FTU0VSVCgoYWxpZ25tZW50ICYgKGFsaWdubWVu dCAtIDEpKSA9PSAwKTsKLSsgICAgd2hpbGUgKHNpemUoKSAmIChhbGlnbm1lbnQgLSAxKSkgewot KyAgICAgIEJ1ZmZlck9mZnNldCB0bXAgPSB4c190cmFwKCk7Ci0rICAgICAgaWYgKCFyZXQuYXNz aWduZWQoKSkgewotKyAgICAgICAgcmV0ID0gdG1wOwotKyAgICAgIH0KLSsgICAgfQotKyAgfQot KyAgcmV0dXJuIHJldDsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6bm9wQWxpZ24o aW50IGFsaWdubWVudCkgewotKyAgQnVmZmVyT2Zmc2V0IHJldDsKLSsgIE1PWl9BU1NFUlQobV9i dWZmZXIuaXNBbGlnbmVkKDQpKTsKLSsgIGlmIChhbGlnbm1lbnQgPT0gOCkgewotKyAgICBpZiAo IW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKSB7Ci0rICAgICAgQnVmZmVyT2Zmc2V0IHRt cCA9IGFzX25vcCgpOwotKyAgICAgIGlmICghcmV0LmFzc2lnbmVkKCkpIHsKLSsgICAgICAgIHJl dCA9IHRtcDsKLSsgICAgICB9Ci0rICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAgIE1PWl9BU1NFUlQo KGFsaWdubWVudCAmIChhbGlnbm1lbnQgLSAxKSkgPT0gMCk7Ci0rICAgIHdoaWxlIChzaXplKCkg JiAoYWxpZ25tZW50IC0gMSkpIHsKLSsgICAgICBCdWZmZXJPZmZzZXQgdG1wID0gYXNfbm9wKCk7 Ci0rICAgICAgaWYgKCFyZXQuYXNzaWduZWQoKSkgewotKyAgICAgICAgcmV0ID0gdG1wOwotKyAg ICAgIH0KLSsgICAgfQotKyAgfQotKyAgcmV0dXJuIHJldDsKLSt9Ci0rCi0rLy8gUHJpbWl0aXZl IGluc3RydWN0aW9ucy4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19ub3AoKSB7Ci0rICBz cGV3KCJub3AiKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX25vcCk7Ci0rfQotKwotK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzX2x3c3luYygpIHsKLSsgIHNwZXcoImx3c3luYyIpOwotKyAg cmV0dXJuIHdyaXRlSW5zdChQUENfbHdzeW5jKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfc3luYygpIHsKLSsgIHNwZXcoInN5bmMiKTsKLSsgIHJldHVybiB3cml0ZUluc3Qo UFBDX3N5bmMpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19pc3luYygpIHsK LSsgIHNwZXcoImlzeW5jIik7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19pc3luYyk7Ci0rfQot KwotKy8vIEJyYW5jaCBhbmQganVtcCBpbnN0cnVjdGlvbnMuCi0rQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfYihKT2ZmSW1tMjYgb2ZmLCBCcmFuY2hBZGRyZXNzVHlwZSBiYXQsIExpbmtCaXQg bGIpIHsKLSsgIHJldHVybiBhc19iKG9mZi5lbmNvZGUoKSwgYmF0LCBsYik7Ci0rfQotKwotK0J1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2IoaW50MzJfdCBvZmYsIEJyYW5jaEFkZHJlc3NUeXBl IGJhdCwgTGlua0JpdCBsYikgewotKyAgc3BldygiYiVzJXNcdCV4IiwgYmF0ID09IEFic29sdXRl QnJhbmNoID8gImEiIDogIiIsIGxiID8gImwiIDogIiIsIG9mZik7Ci0rICBNT1pfQVNTRVJUKCEo b2ZmICYgMHgwMykpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfYiB8ICgodWludDMyX3Qpb2Zm ICYgMHgzZmZmZmZjKSB8IGJhdCB8IGxiKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfYmxyKExpbmtCaXQgbGIpIHsKLSsgIHNwZXcoImJsciVzIiwgbGIgPyAibCIgOiAiIik7 Ci0rICByZXR1cm4gd3JpdGVJbnN0KHVpbnQzMl90KFBQQ19ibHIpIHwgdWludDMyX3QobGIpKTsK LSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYmN0cihMaW5rQml0IGxiKSB7Ci0r ICBzcGV3KCJiY3RyJXMiLCBsYiA/ICJsIiA6ICIiKTsKLSsgIHJldHVybiB3cml0ZUluc3QodWlu dDMyX3QoUFBDX2JjdHIpIHwgdWludDMyX3QobGIpKTsKLSt9Ci0rCi0rLy8gQ29uZGl0aW9uYWwg YnJhbmNoZXMuCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYmMoQk9mZkltbTE2IG9mZiwg Q29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpa2VseUJpdCBsa2IsIExpbmtCaXQgbGIpIHsKLSsgIHJldHVybiBhc19iYyhvZmYu ZW5jb2RlKCksIGNvbmQsIGNyLCBsa2IsIGxiKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfYmMoaW50MTZfdCBvZmYsIENvbmRpdGlvbiBjb25kLCBDUmVnaXN0ZXJJRCBjciwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWtlbHlCaXQgbGtiLCBMaW5rQml0IGxi KSB7Ci0rICByZXR1cm4gYXNfYmMob2ZmLCBjb21wdXRlQ29uZGl0aW9uQ29kZShjb25kLCBjciks IGxrYiwgbGIpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19iYyhCT2ZmSW1t MTYgb2ZmLCBEb3VibGVDb25kaXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDUmVnaXN0ZXJJRCBjciwgTGlrZWx5Qml0IGxrYiwgTGlua0JpdCBsYikgewotKyAgcmV0 dXJuIGFzX2JjKG9mZi5lbmNvZGUoKSwgY29uZCwgY3IsIGxrYiwgbGIpOwotK30KLSsKLStCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc19iYyhpbnQxNl90IG9mZiwgRG91YmxlQ29uZGl0aW9uIGNv bmQsIENSZWdpc3RlcklEIGNyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpa2Vs eUJpdCBsa2IsIExpbmtCaXQgbGIpIHsKLSsgIHJldHVybiBhc19iYyhvZmYsIGNvbXB1dGVDb25k aXRpb25Db2RlKGNvbmQsIGNyKSwgbGtiLCBsYik7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzX2JjY3RyKENvbmRpdGlvbiBjb25kLCBDUmVnaXN0ZXJJRCBjciwgTGlrZWx5Qml0 IGxrYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rQml0IGxiKSB7Ci0r ICByZXR1cm4gYXNfYmNjdHIoY29tcHV0ZUNvbmRpdGlvbkNvZGUoY29uZCwgY3IpLCBsa2IsIGxi KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYmNjdHIoRG91YmxlQ29uZGl0 aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExpa2VseUJpdCBsa2IsIExpbmtCaXQgbGIpIHsKLSsgIHJldHVybiBhc19iY2N0cihjb21w dXRlQ29uZGl0aW9uQ29kZShjb25kLCBjciksIGxrYiwgbGIpOwotK30KLSsKLSsvLyBDb25kaXRp b24gY29kZSBjb21wdXRhdGlvbjogdHVybiBEb3VibGVDb25kaXRpb24gKyBDUiBpbnRvIEJPfEJJ LgotKy8vIE1heSBlbWl0IENSIGxvZ2ljIGluc3RydWN0aW9ucyBmb3Igc3ludGhldGljIGNvbmRp dGlvbnMgaW52b2x2aW5nIEZVIGJpdC4KLSt1aW50MTZfdCBBc3NlbWJsZXI6OmNvbXB1dGVDb25k aXRpb25Db2RlKERvdWJsZUNvbmRpdGlvbiBvcCwgQ1JlZ2lzdGVySUQgY3IpIHsKLSsgIGNvbnN0 IHVpbnQ4X3QgY29uZEJpdCA9IGNyQml0KGNyLCBvcCk7Ci0rICBjb25zdCB1aW50OF90IGZ1Qml0 ID0gY3JCaXQoY3IsIERvdWJsZVVub3JkZXJlZCk7Ci0rICB1aW50MzJfdCBuZXdvcCA9ICh1aW50 MzJfdClvcCAmIDI1NTsKLSsKLSsgIGlmIChvcCAmIERvdWJsZUNvbmRpdGlvblVub3JkZXJlZCkg ewotKyAgICBpZiAoKHVpbnQzMl90KG9wKSAmIEJyYW5jaE9wdGlvbk1hc2spID09IEJyYW5jaE9u Q2xlYXIpIHsKLSsgICAgICBhc19jcm9yYyhjb25kQml0LCBmdUJpdCwgY29uZEJpdCk7Ci0rICAg ICAgbmV3b3AgfD0gQnJhbmNoT25TZXQ7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgaWYgKGNvbmRC aXQgIT0gZnVCaXQpIHsKLSsgICAgICAgIGFzX2Nyb3IoY29uZEJpdCwgZnVCaXQsIGNvbmRCaXQp OwotKyAgICAgIH0KLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgaWYgKCh1aW50MzJfdChvcCkg JiBCcmFuY2hPcHRpb25NYXNrKSA9PSBCcmFuY2hPbkNsZWFyKSB7Ci0rICAgICAgaWYgKGNvbmRC aXQgIT0gZnVCaXQpIHsKLSsgICAgICAgIGFzX2Nyb3IoY29uZEJpdCwgZnVCaXQsIGNvbmRCaXQp OwotKyAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICBpZiAoY29uZEJpdCAhPSBmdUJpdCkg ewotKyAgICAgICAgYXNfY3JhbmRjKGNvbmRCaXQsIGNvbmRCaXQsIGZ1Qml0KTsKLSsgICAgICB9 Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHJldHVybiAobmV3b3AgKyAoKHVpbnQ4X3QpY3IgPDwgNikp OwotK30KLSsKLSsvLyBDb25kaXRpb24gY29kZSBjb21wdXRhdGlvbjogdHVybiBDb25kaXRpb24g KyBDUiBpbnRvIEJPfEJJLgotKy8vIE1heSBlbWl0IG1jcnhyeCBmb3IgWEVSLW1lZGlhdGVkIGNv bmRpdGlvbnMuCi0rdWludDE2X3QgQXNzZW1ibGVyOjpjb21wdXRlQ29uZGl0aW9uQ29kZShDb25k aXRpb24gb3AsIENSZWdpc3RlcklEIGNyKSB7Ci0rICB1aW50MzJfdCBuZXdvcCA9ICh1aW50MzJf dClvcCAmIDI1NTsKLSsKLSsgIGlmIChvcCAmIENvbmRpdGlvbk9ubHlYRVIpIHsKLSsgICAgTU9a X0FTU0VSVChvcCA9PSBPdmVyZmxvdyB8fCBvcCA9PSBOb3RPdmVyZmxvdyk7Ci0rICAgIGlmIChI YXNQT1dFUjkoKSkgewotKyAgICAgIGFzX21jcnhyeChjcik7Ci0rICAgIH0gZWxzZSB7Ci0rICAg ICAgLy8gUE9XRVI4OiByZWFkIFhFUiwgcGxhY2UgT1YgaW50byB0aGUgR1QgcG9zaXRpb24gb2Yg dGhlIHRhcmdldAotKyAgICAgIC8vIENSIGZpZWxkLiBPdmVyZmxvdyBjb25kaXRpb24gKDB4MWMg PSBHcmVhdGVyVGhhbikgdGVzdHMgR1QgYml0LAotKyAgICAgIC8vIHdoaWNoIG1jcnhyeCBwb3B1 bGF0ZXMgd2l0aCBPVjMyLiBGb3IgNjQtYml0IG9wcyBPViA9PSBPVjMyLgotKyAgICAgIC8vIFhF UiBsYXlvdXQgaW4gR1BSIGxvdyAzMiBiaXRzIChJQk0pOiBiaXQgMD1TTywgMT1PViwgMj1DQS4K LSsgICAgICAvLyBUYXJnZXQ6IEdUIHBvc2l0aW9uID0gSUJNIGJpdCA0KmNyKzEuCi0rICAgICAg eHNfbWZ4ZXIocjApOwotKyAgICAgIGludCBndEJpdCA9IDQgKiAoaW50KWNyICsgMTsgICAgICAg ICAgLy8gR1QgcG9zaXRpb24gaW4gQ1IgZmllbGQKLSsgICAgICBpbnQgc2ggPSAoMSAtIGd0Qml0 KSAmIDMxOyAgICAgICAgICAgIC8vIHJvdGF0ZSBPViBmcm9tIGJpdCAxIHRvIGd0Qml0Ci0rICAg ICAgYXNfcmx3aW5tKHIwLCByMCwgc2gsIGd0Qml0LCBndEJpdCk7ICAvLyBpc29sYXRlIE9WIGF0 IEdUIG9ubHkKLSsgICAgICBhc19tdGNyZigxIDw8ICg3IC0gKGludCljciksIHIwKTsKLSsgICAg fQotKyAgICBuZXdvcCA9ICh1aW50MzJfdClvcCAmIDI1NTsKLSsgIH0KLSsKLSsgIHJldHVybiAo bmV3b3AgKyAoKHVpbnQ4X3QpY3IgPDwgNikpOwotK30KLSsKLSsvLyBHaXZlbiBCT3xCSSBpbiBh IDE2LWJpdCBxdWFudGl0eSwgc3BsaXQgaW50byBiaXQgZmllbGRzIGZvciBpbnN0cnVjdGlvbi4K LStzdGF0aWMgdWludDMyX3QgbWFrZU9wTWFzayh1aW50MTZfdCBvcCkgewotKyAgTU9aX0FTU0VS VCghKG9wICYgMHhmYzAwKSk7Ci0rICByZXR1cm4gKChvcCAmIDB4MGYpIDw8IDIxKSB8ICgob3Ag JiAweGZmZjApIDw8IDEyKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYmMo aW50MTZfdCBvZmYsIHVpbnQxNl90IG9wLCBMaWtlbHlCaXQgbGtiLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpbmtCaXQgbGIpIHsKLSsgIHNwZXcoImJjJXMlc1x0Qk9fQkk9MHgl MDR4LCVkIiwgbGIgPyAibCIgOiAiIiwgbGtiID8gIisiIDogIiIsIG9wLCBvZmYpOwotKyAgTU9a X0FTU0VSVCghKG9mZiAmIDB4MDMpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoSW5zdHJ1Y3Rpb24o UFBDX2JjIHwgbWFrZU9wTWFzayhvcCkgfCBsa2IgPDwgMjEgfAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKHVpbnQxNl90KW9mZiAmIDB4ZmZmYykgfCBsYikKLSsgICAgICAgICAg ICAgICAgICAgICAgIC5lbmNvZGUoKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzX2JjY3RyKHVpbnQxNl90IG9wLCBMaWtlbHlCaXQgbGtiLCBMaW5rQml0IGxiKSB7Ci0rICBz cGV3KCJiY2N0ciVzJXMiLCBsYiA/ICJsIiA6ICIiLCBsa2IgPyAiKyIgOiAiIik7Ci0rICByZXR1 cm4gd3JpdGVJbnN0KFBQQ19iY2N0ciB8IG1ha2VPcE1hc2sob3ApIHwgbGtiIDw8IDIxIHwgbGIp OwotK30KLSsKLSsvLyBTUFIgb3BlcmF0aW9ucy4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjph c19tdHNwcihTUFJlZ2lzdGVySUQgc3ByLCBSZWdpc3RlciByYSkgewotKyAgc3BldygibXRzcHJc dCVkLCUzcyIsIHNwciwgcmEubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX210c3By IHwgcmEuY29kZSgpIDw8IDIxIHwgUFBDX1NQUihzcHIpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfbWZzcHIoUmVnaXN0ZXIgcmQsIFNQUmVnaXN0ZXJJRCBzcHIpIHsKLSsg IHNwZXcoIm1mc3ByXHQlM3MsJWQiLCByZC5uYW1lKCksIHNwcik7Ci0rICByZXR1cm4gd3JpdGVJ bnN0KFBQQ19tZnNwciB8IHJkLmNvZGUoKSA8PCAyMSB8IFBQQ19TUFIoc3ByKSk7Ci0rfQotKwot Ky8vIENSIG9wZXJhdGlvbnMuCi0rI2RlZmluZSBERUZfQ1JDUihvcCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfIyNvcCh1aW50OF90IHQsIHVpbnQ4X3QgYSwgdWludDhfdCBiKSB7IFwKLSsgICAg c3Bldygjb3AgIlx0JWQsJWQsJWQiLCB0LCBhLCBiKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCB0IDw8IDIxIHwgYSA8 PCAxNiB8IGIgPDwgMTEpOyAgICAgICAgXAotKyAgfQotK0RFRl9DUkNSKGNyYW5kYykKLStERUZf Q1JDUihjcm9yKQotK0RFRl9DUkNSKGNyb3JjKQotKyN1bmRlZiBERUZfQ1JDUgotKwotK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzX210Y3JmKHVpbnQzMl90IG1hc2ssIFJlZ2lzdGVyIHJzKSB7 Ci0rICBzcGV3KCJtdGNyZlx0JWQsJTNzIiwgbWFzaywgcnMubmFtZSgpKTsKLSsgIHJldHVybiB3 cml0ZUluc3QoUFBDX210Y3JmIHwgcnMuY29kZSgpIDw8IDIxIHwgbWFzayA8PCAxMik7Ci0rfQot KwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX21mb2NyZihSZWdpc3RlciByZCwgQ1JlZ2lz dGVySUQgY3JmcykgewotKyAgc3BldygibWZvY3JmXHQlM3MsY3IlZCIsIHJkLm5hbWUoKSwgY3Jm cyk7Ci0rICAvLyBGWE0gaXMgYSBvbmUtaG90IDgtYml0IG1hc2sgYXQgYml0cyAxMi0xOS4gQml0 ICg3LWNyZnMpIHNlbGVjdHMgdGhlIENSLgotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfbWZvY3Jm IHwgcmQuY29kZSgpIDw8IDIxIHwgKDEgPDwgKDcgLSBjcmZzKSkgPDwgMTIpOwotK30KLSsKLStC dWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tY3J4cngoQ1JlZ2lzdGVySUQgY3IpIHsKLSsgIHNw ZXcoIm1jcnhyeFx0Y3IlZCIsIGNyKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX21jcnhyeCB8 IGNyIDw8IDIzKTsKLSt9Ci0rCi0rLy8gR1BSIG5lZy4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojphc19uZWcoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzKSB7Ci0rICBzcGV3KCJuZWdcdCUzcywl M3MiLCByZC5uYW1lKCksIHJzLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWco UFBDX25lZywgcmQsIHJzLCByMCkuZW5jb2RlKCkpOwotK30KLSsKLSsvLyBDb21wYXJlIGluc3Ry dWN0aW9ucy4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXBkKENSZWdpc3RlcklEIGNy LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoImNtcGRcdGNyJWQsJTNzLCUz cyIsIGNyLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19j bXBkIHwgY3IgPDwgMjMgfCByYS5jb2RlKCkgPDwgMTYgfCByYi5jb2RlKCkgPDwgMTEpOwotK30K LSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXBkaShDUmVnaXN0ZXJJRCBjciwgUmVn aXN0ZXIgcmEsIGludDE2X3QgaW0pIHsKLSsgIHNwZXcoImNtcGRpXHRjciVkLCUzcywlZCIsIGNy LCByYS5uYW1lKCksIGltKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcGRpIHwgY3IgPDwg MjMgfCByYS5jb2RlKCkgPDwgMTYgfAotKyAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KWlt ICYgMHhmZmZmKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGxkKENS ZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoImNtcGxk XHRjciVkLCUzcywlM3MiLCBjciwgcmEubmFtZSgpLCByYi5uYW1lKCkpOwotKyAgcmV0dXJuIHdy aXRlSW5zdChQUENfY21wbGQgfCBjciA8PCAyMyB8IHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUo KSA8PCAxMSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGxkaShDUmVn aXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pIHsKLSsgIHNwZXcoImNtcGxkaVx0 Y3IlZCwlM3MsJWQiLCBjciwgcmEubmFtZSgpLCBpbSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQ Q19jbXBsZGkgfCBjciA8PCAyMyB8IHJhLmNvZGUoKSA8PCAxNiB8Ci0rICAgICAgICAgICAgICAg ICAgICgodWludDE2X3QpaW0gJiAweGZmZmYpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfY21wdyhDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7 Ci0rICBzcGV3KCJjbXB3XHRjciVkLCUzcywlM3MiLCBjciwgcmEubmFtZSgpLCByYi5uYW1lKCkp OwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wdyB8IGNyIDw8IDIzIHwgcmEuY29kZSgpIDw8 IDE2IHwgcmIuY29kZSgpIDw8IDExKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 YXNfY21wd2koQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7Ci0rICBz cGV3KCJjbXB3aVx0Y3IlZCwlM3MsJWQiLCBjciwgcmEubmFtZSgpLCBpbSk7Ci0rICByZXR1cm4g d3JpdGVJbnN0KFBQQ19jbXB3aSB8IGNyIDw8IDIzIHwgcmEuY29kZSgpIDw8IDE2IHwKLSsgICAg ICAgICAgICAgICAgICAgKCh1aW50MTZfdClpbSAmIDB4ZmZmZikpOwotK30KLSsKLStCdWZmZXJP ZmZzZXQgQXNzZW1ibGVyOjphc19jbXBsdyhDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJjbXBsd1x0Y3IlZCwlM3MsJTNzIiwgY3IsIHJhLm5hbWUo KSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcGx3IHwgY3IgPDwgMjMg fCByYS5jb2RlKCkgPDwgMTYgfCByYi5jb2RlKCkgPDwgMTEpOwotK30KLSsKLStCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19jbXBsd2koQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBpbnQx Nl90IGltKSB7Ci0rICBzcGV3KCJjbXBsd2lcdGNyJWQsJTNzLCVkIiwgY3IsIHJhLm5hbWUoKSwg aW0pOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wbHdpIHwgY3IgPDwgMjMgfCByYS5jb2Rl KCkgPDwgMTYgfAotKyAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KWltICYgMHhmZmZmKSk7 Ci0rfQotKwotKy8vIENvbXBhcmUgaW5zdHJ1Y3Rpb25zIChjcjAgaW1wbGljaXQpLgotK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGQoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Ci0r ICBzcGV3KCJjbXBkXHQlM3MsJTNzIiwgcmEubmFtZSgpLCByYi5uYW1lKCkpOwotKyAgcmV0dXJu IHdyaXRlSW5zdChQUENfY21wZCB8IHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSk7 Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGRpKFJlZ2lzdGVyIHJhLCBp bnQxNl90IGltKSB7Ci0rICBzcGV3KCJjbXBkaVx0JTNzLCVkIiwgcmEubmFtZSgpLCBpbSk7Ci0r ICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBkaSB8IHJhLmNvZGUoKSA8PCAxNiB8ICgodWludDE2 X3QpaW0gJiAweGZmZmYpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21w bGQoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJjbXBsZFx0JTNzLCUzcyIs IHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcGxkIHwg cmEuY29kZSgpIDw8IDE2IHwgcmIuY29kZSgpIDw8IDExKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfY21wbGRpKFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7Ci0rICBzcGV3 KCJjbXBsZGlcdCUzcywlZCIsIHJhLm5hbWUoKSwgaW0pOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQ UENfY21wbGRpIHwgcmEuY29kZSgpIDw8IDE2IHwgKCh1aW50MTZfdClpbSAmIDB4ZmZmZikpOwot K30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXB3KFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYikgewotKyAgc3BldygiY21wd1x0JTNzLCUzcyIsIHJhLm5hbWUoKSwgcmIubmFtZSgp KTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcHcgfCByYS5jb2RlKCkgPDwgMTYgfCByYi5j b2RlKCkgPDwgMTEpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXB3aShS ZWdpc3RlciByYSwgaW50MTZfdCBpbSkgewotKyAgc3BldygiY21wd2lcdCUzcywlZCIsIHJhLm5h bWUoKSwgaW0pOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wd2kgfCByYS5jb2RlKCkgPDwg MTYgfCAoKHVpbnQxNl90KWltICYgMHhmZmZmKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzX2NtcGx3KFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgewotKyAgc3BldygiY21w bHdcdCUzcywlM3MiLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0 KFBQQ19jbXBsdyB8IHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSk7Ci0rfQotKwot K0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGx3aShSZWdpc3RlciByYSwgaW50MTZfdCBp bSkgewotKyAgc3BldygiY21wbHdpXHQlM3MsJWQiLCByYS5uYW1lKCksIGltKTsKLSsgIHJldHVy biB3cml0ZUluc3QoUFBDX2NtcGx3aSB8IHJhLmNvZGUoKSA8PCAxNiB8ICgodWludDE2X3QpaW0g JiAweGZmZmYpKTsKLSt9Ci0rCi0rLy8gRlAgZW5jb2RpbmcgaGVscGVycy4KLStzdGF0aWMgdWlu dDMyX3QgQUZvcm0odWludDMyX3Qgb3AsIEZsb2F0UmVnaXN0ZXIgZnJ0LCBGbG9hdFJlZ2lzdGVy IGZyYSwKLSsgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBmcmIsIEZsb2F0UmVn aXN0ZXIgZnJjLCBib29sIHJjKSB7Ci0rICByZXR1cm4gKG9wIHwgKGZydC5lbmNvZGluZygpIDw8 IDIxKSB8IChmcmEuZW5jb2RpbmcoKSA8PCAxNikgfAotKyAgICAgICAgICAoZnJiLmVuY29kaW5n KCkgPDwgMTEpIHwgKGZyYy5lbmNvZGluZygpIDw8IDYpIHwgcmMpOwotK30KLSsKLStzdGF0aWMg dWludDMyX3QgWEZvcm0odWludDMyX3Qgb3AsIEZsb2F0UmVnaXN0ZXIgZnJ0LCBGbG9hdFJlZ2lz dGVyIGZyYSwKLSsgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBmcmIsIGJvb2wg cmMpIHsKLSsgIHJldHVybiAob3AgfCAoZnJ0LmVuY29kaW5nKCkgPDwgMjEpIHwgKGZyYS5lbmNv ZGluZygpIDw8IDE2KSB8Ci0rICAgICAgICAgIChmcmIuZW5jb2RpbmcoKSA8PCAxMSkgfCByYyk7 Ci0rfQotKwotK3N0YXRpYyB1aW50MzJfdCBYRm9ybSh1aW50MzJfdCBvcCwgRmxvYXRSZWdpc3Rl ciBmcnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYiwKLSsgICAgICAgICAgICAgICAgICAgICAg Ym9vbCByYykgewotKyAgcmV0dXJuIChvcCB8IChmcnQuZW5jb2RpbmcoKSA8PCAyMSkgfCAocmEu Y29kZSgpIDw8IDE2KSB8IChyYi5jb2RlKCkgPDwgMTEpIHwKLSsgICAgICAgICAgcmMpOwotK30K LSsKLStzdGF0aWMgdWludDMyX3QgREZvcm0odWludDMyX3Qgb3AsIEZsb2F0UmVnaXN0ZXIgZnJ0 LCBSZWdpc3RlciByYSwKLSsgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCBpbW0pIHsKLSsg IHJldHVybiAob3AgfCAoZnJ0LmVuY29kaW5nKCkgPDwgMjEpIHwgKHJhLmNvZGUoKSA8PCAxNikg fAotKyAgICAgICAgICAoKHVpbnQxNl90KWltbSAmIDB4ZmZmZikpOwotK30KLSsKLSsvLyBYWC1m b3JtIGVuY29kZXJzLiBFYWNoIGZvcm0gaGFzIGl0cyBvd24gWC1iaXQgcG9zaXRpb25zLgotKy8v IEFsbCB0YWtlIHVpbnQzMl90IGVuY29kaW5ncyAoMC02Mykgc28gdGhleSBjb3JyZWN0bHkKLSsv LyBlbWl0IHRoZSBoaWdoIGJpdCBmb3IgVlNSMzItNjMuIEZsb2F0UmVnaXN0ZXIuZW5jb2Rpbmco KSByZXR1cm5zIDAtMzEKLSsvLyBmb3IgU2luZ2xlL0RvdWJsZSAoPSBWU1IwLTMxID0gRlBSIG5h bWVzcGFjZSkgYW5kIDMyLTYzIGZvciBTaW1kMTI4Ci0rLy8gKD0gVlNSMzItNjMgPSBWUiBuYW1l c3BhY2UpIOKAlCBzbyBhIHNpbmdsZSBYWC1mb3JtIGVuY29kZXIgYWRkcmVzc2VzCi0rLy8gdGhl IGZ1bGwgVlNSIHNwYWNlLgotKwotKy8vIFhYMS1mb3JtOiBUICsgR1BSIChSQSkgKyBHUFIgKFJC KS4gVFggYml0IGF0IGluc3RydWN0aW9uIGJpdCAwLgotKy8vIFVzZWQgYnkgbHh2eCwgc3R4dngs IGx4dmQyeCwgc3R4dmQyeCwgbXR2c3JkZCwgbXR2c3JkLCBtdHZzcndzLCBtdHZzcnd6LgotK3N0 YXRpYyB1aW50MzJfdCBYWDFGb3JtKHVpbnQzMl90IG9wLCB1aW50MzJfdCB4dCwgdWludDMyX3Qg cmEsIHVpbnQzMl90IHJiKSB7Ci0rICByZXR1cm4gb3AgfCAoeHQgJiAzMSkgPDwgMjEgfCAocmEg JiAzMSkgPDwgMTYgfCAocmIgJiAzMSkgPDwgMTEgfAotKyAgICAgICAgICgoeHQgPj4gNSkgJiAx KTsKLSt9Ci0rCi0rLy8gWFgxLWZvcm0gZm9yIG1mdnNyWDogR1BSIChSVCkgKyBWU1IgKFhTKS4g VFggYml0ICgiU1giKSBhdCBpbnN0cnVjdGlvbgotKy8vIGJpdCAwOyB0aGUgWCBzcGVjIGNhbGxz IHRoaXMgU1ggc2luY2UgdGhlIHNvdXJjZSByZWdpc3RlciBpcyB0aGUgVlNSLgotKy8vIFVzZWQg YnkgbWZ2c3JkLCBtZnZzcmxkLgotK3N0YXRpYyB1aW50MzJfdCBYWDFGb3JtTWZ2c3IodWludDMy X3Qgb3AsIHVpbnQzMl90IHJ0LCB1aW50MzJfdCB4cykgewotKyAgcmV0dXJuIG9wIHwgKHhzICYg MzEpIDw8IDIxIHwgKHJ0ICYgMzEpIDw8IDE2IHwgKCh4cyA+PiA1KSAmIDEpOwotK30KLSsKLSsv LyBYWDItZm9ybTogVCArIEIgKG5vIEEgZmllbGQ7IGJpdHMgMTYtMjAgdW51c2VkIG9yIGhvbGQg YSBVSU0pLiBCWCBiaXQKLSsvLyBhdCBpbnN0cnVjdGlvbiBiaXQgMSwgVFggYml0IGF0IGluc3Ry dWN0aW9uIGJpdCAwLiBUaGUgYml0czE2LTIwIHNsb3QKLSsvLyBpcyBzZXQgYnkgY2FsbGVycyDi gJQgZm9yIHBsYWluIFhYMiBpdCBtdXN0IGJlIDAsIGZvciBYWDIgd2l0aCBVSU0gaXQKLSsvLyBo b2xkcyB0aGUgaW1tZWRpYXRlLgotKy8vIFVzZWQgYnkgeHhicmQsIHh4YnJoLCB4eGJydywgeHhi cnEsIHhzY3ZkcHNwLCB4c2N2c3BkcCwgeHNjdmRwc3BuLAotKy8vIHhzY3ZzcGRwbiwgeHhzcGx0 dyAoVUlNPTIgYml0cyksIHh4aW5zZXJ0dyAoVUlNPTQgYml0cyksCi0rLy8geHhleHRyYWN0dXcg KFVJTT00IGJpdHMpLCB4dmFicyoveHZuZWcqL3h2c3FydCoveHZyKiBldGMuIHZpYQotKy8vIERF Rl9WU1hfVU4uCi0rc3RhdGljIHVpbnQzMl90IFhYMkZvcm0odWludDMyX3Qgb3AsIHVpbnQzMl90 IHh0LCB1aW50MzJfdCB4YiwKLSsgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiaXRz MTZ0bzIwID0gMCkgewotKyAgcmV0dXJuIG9wIHwgKHh0ICYgMzEpIDw8IDIxIHwgKGJpdHMxNnRv MjAgJiAzMSkgPDwgMTYgfCAoeGIgJiAzMSkgPDwgMTEgfAotKyAgICAgICAgICgoeGIgPj4gNSkg JiAxKSA8PCAxIHwgKCh4dCA+PiA1KSAmIDEpOwotK30KLSsKLSsvLyBYWDMtZm9ybTogVCArIEEg KyBCLiBBWC9CWC9UWCBiaXRzIGF0IGluc3RydWN0aW9uIGJpdHMgMi8xLzAuCi0rLy8gVXNlZCBi eSB4eGxvciwgeHhsYW5kLCB4eGx4b3IsIHh4bG5vciwgeHhsYW5kYywgeHhwZXJtZGksIHhzbWF4 amRwLAotKy8vIHhzbWluamRwLCB4dmFkZCosIHh2Y21wKiwgZXRjLgotK3N0YXRpYyB1aW50MzJf dCBYWDNGb3JtKHVpbnQzMl90IG9wLCB1aW50MzJfdCB4dCwgdWludDMyX3QgeGEsIHVpbnQzMl90 IHhiKSB7Ci0rICByZXR1cm4gb3AgfCAoeHQgJiAzMSkgPDwgMjEgfCAoeGEgJiAzMSkgPDwgMTYg fCAoeGIgJiAzMSkgPDwgMTEgfAotKyAgICAgICAgICgoeGEgPj4gNSkgJiAxKSA8PCAyIHwgKCh4 YiA+PiA1KSAmIDEpIDw8IDEgfCAoKHh0ID4+IDUpICYgMSk7Ci0rfQotKwotKy8vIFhYNC1mb3Jt OiBUICsgQSArIEIgKyBDLiBDWC9BWC9CWC9UWCBiaXRzIGF0IGluc3RydWN0aW9uIGJpdHMgMy8y LzEvMC4KLSsvLyBVc2VkIGJ5IHh4c2VsLgotK3N0YXRpYyB1aW50MzJfdCBYWDRGb3JtKHVpbnQz Ml90IG9wLCB1aW50MzJfdCB4dCwgdWludDMyX3QgeGEsIHVpbnQzMl90IHhiLAotKyAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IHhjKSB7Ci0rICByZXR1cm4gb3AgfCAoeHQgJiAzMSkg PDwgMjEgfCAoeGEgJiAzMSkgPDwgMTYgfCAoeGIgJiAzMSkgPDwgMTEgfAotKyAgICAgICAgICh4 YyAmIDMxKSA8PCA2IHwgKCh4YyA+PiA1KSAmIDEpIDw8IDMgfCAoKHhhID4+IDUpICYgMSkgPDwg MiB8Ci0rICAgICAgICAgKCh4YiA+PiA1KSAmIDEpIDw8IDEgfCAoKHh0ID4+IDUpICYgMSk7Ci0r fQotKwotKy8vIEZsb2F0UmVnaXN0ZXIgY29udmVuaWVuY2Ugb3ZlcmxvYWQgZm9yIFhYM0Zvcm0g KHRoZSBtb3N0IGNvbW1vbiBmb3JtKS4KLStzdGF0aWMgdWludDMyX3QgWFgzRm9ybSh1aW50MzJf dCBvcCwgRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0rICByZXR1cm4gWFgzRm9ybShvcCwgdWlu dDMyX3QoeHQuZW5jb2RpbmcoKSksIHVpbnQzMl90KHhhLmVuY29kaW5nKCkpLAotKyAgICAgICAg ICAgICAgICAgdWludDMyX3QoeGIuZW5jb2RpbmcoKSkpOwotK30KLSsKLSsvLyAtLS0gTWFjcm8t ZGVmaW5lZCBpbnN0cnVjdGlvbiBlbWl0dGVycyAtLS0KLSsKLSsvLyBYLWZvcm06IHJkIGluIGJp dHMgMjEtMjUsIHJhIGluIDE2LTIwLCByYiBpbiAxMS0xNS4KLSsjZGVmaW5lIERFRl9YRk9STShv cCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpIHsgXAotKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCUzcyIsIHJk Lm5hbWUoKSwgcmEubmFtZSgpLCByYi5uYW1lKCkpOyAgICAgICAgICAgIFwKLSsgICAgcmV0dXJu IHdyaXRlSW5zdChJbnN0UmVnKFBQQ18jI29wLCByZCwgcmEsIHJiKS5lbmNvZGUoKSk7ICAgICAg ICAgICAgICBcCi0rICB9Ci0rCi0rI2RlZmluZSBERUZfWEZPUk1fUkMob3ApICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc18jI29wIyNfcmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCAgICBcCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmIpIHsgICAgICAgICAg ICAgICBcCi0rICAgIHNwZXcoI29wICIuXHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFt ZSgpLCByYi5uYW1lKCkpOyAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENf IyNvcCwgcmQsIHJhLCByYikuZW5jb2RlKCkgfCAweDEpOyBcCi0rICB9Ci0rCi0rLy8gWC1mb3Jt IHdpdGggc3dhcHBlZCBSUy9SQSBlbmNvZGluZzogcnMgaW4gYml0cyAyMS0yNSwgcmEgaW4gMTYt MjAuCi0rI2RlZmluZSBERUZfWEZPUk1TKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNf IyNvcChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7IFwKLSsgICAgc3Bl dygjb3AgIlx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsg ICAgICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENfIyNvcCwgcmEs IHJkLCByYikuZW5jb2RlKCkpOyAgICAgICAgICAgICAgXAotKyAgfQotKwotKyNkZWZpbmUgREVG X1hGT1JNU19SQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3JjKFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciByYSwgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIHJiKSB7ICAgICAgICAgICAgICAgXAotKyAgICBzcGV3KCNvcCAiLlx0JTNzLCUz cywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsgICAgXAotKyAgICByZXR1 cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDXyMjb3AsIHJhLCByZCwgcmIpLmVuY29kZSgpIHwgMHgx KTsgXAotKyAgfQotKwotKy8vIFgtZm9ybSBzaGlmdCBpbW1lZGlhdGUgd2l0aCBzd2FwcGVkIGVu Y29kaW5nLgotKyNkZWZpbmUgREVGX1hGT1JNU19JKG9wKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgdWludDhfdCBzaCkgeyAgICAg IFwKLSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlZCIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCBz aCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBNT1pfQVNTRVJUKHNoIDwgMzIpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCByYS5jb2RlKCkgPDwgMjEgfCByZC5jb2Rl KCkgPDwgMTYgfCBzaCA8PCAxMSk7IFwKLSsgIH0KLSsKLSsvLyAyLXJlZyBYLWZvcm06IHJkIGlu IGJpdHMgMjEtMjUsIHJhIGluIDE2LTIwLCByYj1yMC4KLSsjZGVmaW5lIERFRl9YRk9STTIob3Ap ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKSB7IFwKLSsgICAg c3Bldygjb3AgIlx0JTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpKTsgICAgICAgICAgICAg IFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVnKFBQQ18jI29wLCByZCwgcmEsIHIwKS5l bmNvZGUoKSk7IFwKLSsgIH0KLSsKLSsjZGVmaW5lIERFRl9YRk9STTJfUkMob3ApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzXyMjb3AjI19yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEpIHsgIFwKLSsgICAg c3Bldygjb3AgIi5cdCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSk7ICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVnKFBQQ18jI29wLCByZCwgcmEs IHIwKS5lbmNvZGUoKSB8IDB4MSk7IFwKLSsgIH0KLSsKLSsvLyAyLXJlZyBYLWZvcm0gc3dhcHBl ZDogcmEgaW4gYml0cyAyMS0yNSwgcmQgaW4gMTYtMjAuCi0rI2RlZmluZSBERUZfWEZPUk0yUyhv cCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSkgeyBcCi0rICAg IHNwZXcoI29wICJcdCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSk7ICAgICAgICAgICAg ICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENfIyNvcCwgcmEsIHJkLCByMCku ZW5jb2RlKCkpOyBcCi0rICB9Ci0rCi0rI2RlZmluZSBERUZfWEZPUk0yU19SQyhvcCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjphc18jI29wIyNfcmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKSB7ICBcCi0rICAg IHNwZXcoI29wICIuXHQlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCkpOyAgICAgICAgICAg ICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoSW5zdFJlZyhQUENfIyNvcCwgcmEsIHJk LCByMCkuZW5jb2RlKCkgfCAweDEpOyBcCi0rICB9Ci0rCi0rLy8gRC1mb3JtIGxvYWQvc3RvcmU6 IHJkPVJULCByYj1SQSAoYmFzZSByZWdpc3RlciksIG9mZj1kaXNwbGFjZW1lbnQuCi0rLy8gcjAg Y2Fubm90IGJlIHVzZWQgYXMgYmFzZSByZWdpc3RlciBmb3IgRC1mb3JtIGxvYWRzL3N0b3Jlcy4K LSsjZGVmaW5lIERFRl9ERk9STShvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29w KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpIHsgXAotKyAgICBzcGV3KCNv cCAiXHQlM3MsJWQoJTNzKSIsIHJkLm5hbWUoKSwgb2ZmLCByYi5uYW1lKCkpOyAgICAgICAgICAg ICAgICAgIFwKLSsgICAgTU9aX0FTU0VSVChyYiAhPSByMCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoSW5z dEltbShQUENfIyNvcCwgcmQsIHJiLCBvZmYpLmVuY29kZSgpKTsgICAgICAgICAgICAgXAotKyAg fQotKwotKy8vIEQtZm9ybSB3aXRoIHN3YXBwZWQgUlMvUkEgZW5jb2RpbmcgZm9yIGxvZ2ljYWwg aW1tZWRpYXRlcy4KLSsjZGVmaW5lIERFRl9ERk9STVMob3ApICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgdWludDE2X3QgaW0pIHsgXAot KyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCVkIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIGltKTsg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0SW1tKFBQQ18j I29wLCByYSwgcmQsIGltKS5lbmNvZGUoKSk7ICAgICAgICAgICAgICBcCi0rICB9Ci0rCi0rLy8g TS1mb3JtOiByb3RhdGUgd2l0aCAzIHJlZ2lzdGVycyArIG1iICsgbWUuCi0rI2RlZmluZSBERUZf TUZPUk0ob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiLCAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDhfdCBtYiwgdWludDhfdCBtZSkgeyAgICAgICAgICAgICAgICAg ICBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNzLCVkLCVkIiwgcmQubmFtZSgpLCBycy5u YW1lKCksIHJiLm5hbWUoKSwgbWIsIG1lKTsgXAotKyAgICBNT1pfQVNTRVJUKG1iIDwgMzIpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgTU9aX0FTU0VSVChtZSA8IDMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCBy cy5jb2RlKCkgPDwgMjEgfCByZC5jb2RlKCkgPDwgMTYgfCAgICAgICAgICAgXAotKyAgICAgICAg ICAgICAgICAgICAgIHJiLmNvZGUoKSA8PCAxMSB8IG1iIDw8IDYgfCBtZSA8PCAxKTsgICAgICAg ICAgICAgICAgICAgIFwKLSsgIH0KLSsKLSsvLyBNLWZvcm0gd2l0aCBpbW1lZGlhdGUgc2hpZnQu Ci0rI2RlZmluZSBERUZfTUZPUk1fSShvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFz XyMjb3AoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCAgICAgICAgXAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1iLCB1aW50OF90IG1lKSB7 ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlM3MsJWQsJWQsJWQi LCByZC5uYW1lKCksIHJzLm5hbWUoKSwgc2gsIG1iLCBtZSk7ICAgICAgICAgIFwKLSsgICAgTU9a X0FTU0VSVChzaCA8IDMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICBNT1pfQVNTRVJUKG1iIDwgMzIpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIE1PWl9BU1NF UlQobWUgPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHJzLmNvZGUoKSA8 PCAyMSB8IHJkLmNvZGUoKSA8PCAxNiB8IHNoIDw8IDExIHwgXAotKyAgICAgICAgICAgICAgICAg ICAgIG1iIDw8IDYgfCBtZSA8PCAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICB9Ci0rCi0rI2RlZmluZSBERUZfTUZPUk1fSV9SQyhvcCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIHVpbnQ4 X3Qgc2gsICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3QgbWIsIHVpbnQ4X3QgbWUpIHsgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICIuXHQl M3MsJTNzLCVkLCVkLCVkIiwgcmQubmFtZSgpLCBycy5uYW1lKCksIHNoLCBtYiwgbWUpOyAgICAg ICAgIFwKLSsgICAgTU9aX0FTU0VSVChzaCA8IDMyKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBNT1pfQVNTRVJUKG1iIDwgMzIp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIE1PWl9BU1NFUlQobWUgPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNv cCB8IHJzLmNvZGUoKSA8PCAyMSB8IHJkLmNvZGUoKSA8PCAxNiB8IHNoIDw8IDExIHwgXAotKyAg ICAgICAgICAgICAgICAgICAgIG1iIDw8IDYgfCBtZSA8PCAxIHwgMSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB9Ci0rCi0rLy8gTURTLWZvcm06IHJvdGF0ZSB3aXRo IHJlZ2lzdGVyICsgbWIgKDY0LWJpdCkuCi0rI2RlZmluZSBERUZfTURTRk9STShvcCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJP ZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycywgUmVnaXN0 ZXIgcmIsICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWIp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlM3Ms JTNzLCVkIiwgcmEubmFtZSgpLCBycy5uYW1lKCksIHJiLm5hbWUoKSwgbWIpOyAgICBcCi0rICAg IE1PWl9BU1NFUlQobWIgPCA2NCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCBycy5jb2Rl KCkgPDwgMjEgfCByYS5jb2RlKCkgPDwgMTYgfCAgICAgICBcCi0rICAgICAgICAgICAgICAgICAg ICAgcmIuY29kZSgpIDw8IDExIHwgKChtYiAmIDB4MWYpIDw8IDYpIHwgKG1iICYgMHgyMCkpOyBc Ci0rICB9Ci0rCi0rI2RlZmluZSBERUZfTURTRk9STV9SQyhvcCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfIyNvcCMjX3JjKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIs IFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1iKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICIuXHQlM3MsJTNzLCUz cywlZCIsIHJhLm5hbWUoKSwgcnMubmFtZSgpLCByYi5uYW1lKCksIG1iKTsgICAgICAgXAotKyAg ICBNT1pfQVNTRVJUKG1iIDwgNjQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHJz LmNvZGUoKSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAxNiB8ICAgICAgICAgICBcCi0rICAgICAgICAg ICAgICAgICAgICAgcmIuY29kZSgpIDw8IDExIHwgKChtYiAmIDB4MWYpIDw8IDYpIHwgKG1iICYg MHgyMCkgfCAxKTsgXAotKyAgfQotKwotKy8vIE1ELWZvcm06IHJvdGF0ZS9zaGlmdCB3aXRoIGlt bWVkaWF0ZSBzaCArIG1iICg2NC1iaXQpLgotKy8vIHNoIGFuZCBtYiBhcmUgNi1iaXQgZmllbGRz IHNwbGl0IGFjcm9zcyB0aGUgaW5zdHJ1Y3Rpb24gd29yZC4KLSsjZGVmaW5lIERFRl9NREZPUk0o b3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJhLCBSZWdp c3RlciBycywgdWludDhfdCBzaCwgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50OF90IG1iKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgc3Bldygjb3AgIlx0JTNzLCUzcywlZCwlZCIsIHJhLm5hbWUoKSwgcnMubmFtZSgpLCBzaCwg bWIpOyAgICAgICAgICAgICAgICBcCi0rICAgIE1PWl9BU1NFUlQoc2ggPCA2NCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBNT1pf QVNTRVJUKG1iIDwgNjQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHJzLmNvZGUo KSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAxNiB8ICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAg ICAgICAgKChzaCAmIDB4MWYpIDw8IDExKSB8ICgobWIgJiAweDFmKSA8PCA2KSB8IChtYiAmIDB4 MjApIHwgXAotKyAgICAgICAgICAgICAgICAgICAgICgoc2ggJiAweDIwKSA+PiA0KSk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0KLSsKLSsjZGVmaW5lIERFRl9N REZPUk1fUkMob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMoUmVnaXN0 ZXIgcmEsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCAgXAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWIpIHsgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgc3Bldygjb3AgIi5cdCUzcywlM3MsJWQsJWQiLCByYS5uYW1lKCksIHJzLm5hbWUo KSwgc2gsIG1iKTsgICAgICAgICAgICAgICBcCi0rICAgIE1PWl9BU1NFUlQoc2ggPCA2NCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICBNT1pfQVNTRVJUKG1iIDwgNjQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHJz LmNvZGUoKSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAxNiB8ICAgICAgICAgICBcCi0rICAgICAgICAg ICAgICAgICAgICAgKChzaCAmIDB4MWYpIDw8IDExKSB8ICgobWIgJiAweDFmKSA8PCA2KSB8ICht YiAmIDB4MjApIHwgXAotKyAgICAgICAgICAgICAgICAgICAgICgoc2ggJiAweDIwKSA+PiA0KSB8 IDB4MDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0KLSsKLSsvLyBGUCAy LXJlZyBYLWZvcm06IGZydCBpbiBiaXRzIDIxLTI1LCBmcmE9ZjAsIGZyYiBpbiAxMS0xNS4KLSsj ZGVmaW5lIERFRl9YRk9STTJfRihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKEZsb2F0 UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEpIHsgXAotKyAgICBzcGV3KCNvcCAiXHQlM3Ms JTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgcmV0dXJuIHdyaXRlSW5zdChYRm9ybShQUENfIyNvcCwgcmQsIGYwLCByYSwgZmFsc2UpKTsg ICAgICAgICAgICAgICBcCi0rICB9Ci0rCi0rI2RlZmluZSBERUZfWEZPUk0yX0ZfUkMob3ApICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRS ZWdpc3RlciByYSkgeyBcCi0rICAgIHNwZXcoI29wICIuXHQlM3MsJTNzIiwgcmQubmFtZSgpLCBy YS5uYW1lKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHJldHVybiB3cml0 ZUluc3QoWEZvcm0oUFBDXyMjb3AsIHJkLCBmMCwgcmEsIHRydWUpKTsgICAgICAgICAgICAgICAg ICAgICBcCi0rICB9Ci0rCi0rLy8gRlAgQS1mb3JtIHdpdGggZnJjIChmbXVsLXR5cGUpOiBmcnQs IGZyYSwgZnJjOyBmcmI9ZjAuCi0rI2RlZmluZSBERUZfQUZPUk1fQyhvcCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgXAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJjKSB7ICAgICAg ICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCBy YS5uYW1lKCksIHJjLm5hbWUoKSk7ICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChBRm9y bShQUENfIyNvcCwgcmQsIHJhLCBmMCwgcmMsIGZhbHNlKSk7ICAgICAgICAgXAotKyAgfQotKwot KyNkZWZpbmUgREVGX0FGT1JNX0NfUkMob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3Aj I19yYyhGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBcCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByYykgeyAgICAgICAgICAg ICAgICAgXAotKyAgICBzcGV3KCNvcCAiLlx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5h bWUoKSwgcmMubmFtZSgpKTsgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChBRm9y bShQUENfIyNvcCwgcmQsIHJhLCBmMCwgcmMsIHRydWUpKTsgICAgICAgICAgICAgICBcCi0rICB9 Ci0rCi0rLy8gRlAgQS1mb3JtIHdpdGggZnJiIChmYWRkLXR5cGUpOiBmcnQsIGZyYSwgZnJiOyBm cmM9ZjAuCi0rI2RlZmluZSBERUZfQUZPUk1fQihvcCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMj b3AoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgXAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJiKSB7ICAgICAgICAgICAgICAgICBc Ci0rICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHJi Lm5hbWUoKSk7ICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChBRm9ybShQUENfIyNvcCwg cmQsIHJhLCByYiwgZjAsIGZhbHNlKSk7ICAgICAgICAgXAotKyAgfQotKwotKyNkZWZpbmUgREVG X0FGT1JNX0JfUkMob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhGbG9hdFJl Z2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBcCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByYikgeyAgICAgICAgICAgICAgICAgXAotKyAg ICBzcGV3KCNvcCAiLlx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFt ZSgpKTsgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChBRm9ybShQUENfIyNvcCwg cmQsIHJhLCByYiwgZjAsIHRydWUpKTsgICAgICAgICAgICAgICBcCi0rICB9Ci0rCi0rLy8gRnVs bCBGUCBBLWZvcm06IGZydCwgZnJhLCBmcmMsIGZyYiAoZm1hZGQtdHlwZSkuCi0rI2RlZmluZSBE RUZfQUZPUk0ob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRS ZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgICAgICAgICAgXAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJjLCBGbG9hdFJlZ2lzdGVyIHJiKSB7 ICAgICAgICBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwg cmEubmFtZSgpLCByYy5uYW1lKCksIHJiLm5hbWUoKSk7IFwKLSsgICAgcmV0dXJuIHdyaXRlSW5z dChBRm9ybShQUENfIyNvcCwgcmQsIHJhLCByYiwgcmMsIGZhbHNlKSk7ICAgICAgICAgICAgICAg ICAgXAotKyAgfQotKwotKyNkZWZpbmUgREVGX0FGT1JNX1JDKG9wKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfIyNvcCMjX3JjKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEs ICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgcmMsIEZsb2F0UmVnaXN0ZXIgcmIpIHsgXAotKyAgICBzcGV3KCNvcCAiLlx0JTNzLCUzcywl M3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHJjLm5hbWUoKSwgICAgICAgICAgXAotKyAg ICAgICAgIHJiLm5hbWUoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KEFGb3JtKFBQQ18jI29w LCByZCwgcmEsIHJiLCByYywgdHJ1ZSkpOyAgICAgICAgICAgICAgICAgXAotKyAgfQotKwotKy8v IEZQIEQtZm9ybSBsb2FkL3N0b3JlLgotKyNkZWZpbmUgREVGX0RGT1JNX0Yob3ApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgXAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90IG9mZikgeyAgICAgICAgICAgICAgICAg XAotKyAgICBzcGV3KCNvcCAiXHQlM3MsJWQoJTNzKSIsIHJkLm5hbWUoKSwgb2ZmLCByYi5uYW1l KCkpOyAgICAgICAgXAotKyAgICBNT1pfQVNTRVJUKHJiICE9IHIwKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KERGb3JtKFBQ Q18jI29wLCByZCwgcmIsIG9mZikpOyAgICAgICAgICAgICAgXAotKyAgfQotKwotKy8vIEZQIFgt Zm9ybSBpbmRleGVkIGxvYWQvc3RvcmUuCi0rI2RlZmluZSBERUZfRk1FTXgob3ApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjphc18jI29wKEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBcCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJiKSB7ICAgICAgICAgICAgICAg ICBcCi0rICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCks IHJiLm5hbWUoKSk7ICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoWEZvcm0oUFBDXyMjb3AsIHJk LCByYSwgcmIsIGZhbHNlKSk7ICAgICAgICBcCi0rICB9Ci0rCi0rLy8gLS0tIFJvdGF0ZS9zaGlm dCBpbnN0cnVjdGlvbnMgLS0tCi0rCi0rREVGX01GT1JNKHJsd25tKQotK0RFRl9NRk9STV9JKHJs d2lubSkKLStERUZfTUZPUk1fSV9SQyhybHdpbm0pCi0rREVGX01GT1JNX0kocmx3aW1pKQotK0RF Rl9YRk9STVNfSShzcmF3aSkKLSsKLStERUZfTURTRk9STShybGRjbCkKLStERUZfTURGT1JNKHJs ZGljbCkKLStERUZfTURGT1JNX1JDKHJsZGljbCkKLStERUZfTURGT1JNKHJsZGljcikKLStERUZf TURGT1JNX1JDKHJsZGljcikKLStERUZfTURGT1JNKHJsZGltaSkKLSsKLStCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19zcmFkaShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIGludCBzaCkgewot KyAgc3Bldygic3JhZGlcdCUzcywlM3MsJWQiLCByZC5uYW1lKCksIHJzLm5hbWUoKSwgc2gpOwot KyAgTU9aX0FTU0VSVChzaCA+PSAwICYmIHNoIDwgNjQpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQ UENfc3JhZGkgfCByZC5jb2RlKCkgPDwgMTYgfCBycy5jb2RlKCkgPDwgMjEgfAotKyAgICAgICAg ICAgICAgICAgICAoc2ggJiAweDFmKSA8PCAxMSB8IChzaCAmIDB4MjApID4+IDQpOwotK30KLSsK LSsvLyAtLS0gQUxVIHRocmVlLXJlZ2lzdGVyIC0tLQotKwotKyNkZWZpbmUgREVGX0FMVTIob3Ap IERFRl9YRk9STShvcCkKLSsKLStERUZfQUxVMihhZGQpCi0rREVGX0FMVTIoYWRkYykKLStERUZf QUxVMihhZGRlKQotK0RFRl9BTFUyKHN1YmYpCi0rREVGX0FMVTIoc3ViZmMpCi0rREVGX0FMVTIo c3ViZmUpCi0rREVGX0FMVTIoZGl2ZCkKLStERUZfQUxVMihkaXZkdSkKLStERUZfQUxVMihkaXZ3 KQotK0RFRl9BTFUyKGRpdnd1KQotKy8vIFBPV0VSOSBtb2R1bG8gKFhPLWZvcm0sIHNhbWUgZW5j b2RpbmcgcGF0dGVybiBhcyBkaXYpLgotK0RFRl9YRk9STShtb2RzZCkKLStERUZfWEZPUk0obW9k c3cpCi0rREVGX1hGT1JNKG1vZHVkKQotK0RFRl9YRk9STShtb2R1dykKLStERUZfQUxVMihtdWxs ZCkKLStERUZfQUxVMihtdWxoZCkKLStERUZfQUxVMihtdWxoZHUpCi0rREVGX0FMVTIobXVsbGRv KQotK0RFRl9BTFUyKG11bGx3KQotK0RFRl9BTFUyKG11bGh3dSkKLSsjdW5kZWYgREVGX0FMVTIK LSsKLSsvLyAtLS0gQUxVIGltbWVkaWF0ZSAtLS0KLSsKLSsvLyBELWZvcm0gQUxVLWltbWVkaWF0 ZSBvcHMgaGF2ZSBubyBSYyBiaXQgYXQgaW5zdHJ1Y3Rpb24gTFNCICh0aGF0IGJpdAotKy8vIGlz IHBhcnQgb2YgdGhlIDE2LWJpdCBpbW1lZGlhdGUpLiBUaGUgb25seSB2YWxpZCByZWNvcmQtZm9y bSB2YXJpYW50Ci0rLy8gaW4gdGhpcyBncm91cCBpcyBgYWRkaWMuYCwgd2hpY2ggaXMgYSBzZXBh cmF0ZSBwcmltYXJ5IG9wY29kZSAoMTMpCi0rLy8gaGFuZC13cml0dGVuIGJlbG93OyBzdWJmaWMg YW5kIG11bGxpIGhhdmUgbm8gcmVjb3JkIGZvcm0gYXQgYWxsLgotKyNkZWZpbmUgREVGX0FMVUko b3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChSZWdpc3RlciByZCwgUmVnaXN0 ZXIgcmEsIGludDE2X3QgaW0pIHsgXAotKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCVkIiwgcmQu bmFtZSgpLCByYS5uYW1lKCksIGltKTsgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1cm4g d3JpdGVJbnN0KEluc3RJbW0oUFBDXyMjb3AsIHJkLCByYSwgaW0pLmVuY29kZSgpKTsgICAgICAg ICAgICAgXAotKyAgfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2FkZGkoUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCBhY3R1YWxseV9saSkgewotKyNpZmRlZiBERUJVRwotKyAgaWYgKGFjdHVh bGx5X2xpKSB7Ci0rICAgIHNwZXcoImxpXHQlM3MsJWQiLCByZC5uYW1lKCksIGltKTsKLSsgIH0g ZWxzZSB7Ci0rICAgIE1PWl9BU1NFUlQocmEgIT0gcjApOwotKyAgICBzcGV3KCJhZGRpXHQlM3Ms JTNzLCVkIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIGltKTsKLSsgIH0KLSsjZW5kaWYKLSsgIHJl dHVybiB3cml0ZUluc3QoSW5zdEltbShQUENfYWRkaSwgcmQsIHJhLCBpbSkuZW5jb2RlKCkpOwot K30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19hZGRpcyhSZWdpc3RlciByZCwgUmVn aXN0ZXIgcmEsIGludDE2X3QgaW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBhY3R1YWxseV9saXMpIHsKLSsjaWZkZWYgREVCVUcKLSsgIGlmIChhY3R1YWxseV9saXMp IHsKLSsgICAgc3BldygibGlzXHQlM3MsJWQiLCByZC5uYW1lKCksIGltKTsKLSsgIH0gZWxzZSB7 Ci0rICAgIE1PWl9BU1NFUlQocmEgIT0gcjApOwotKyAgICBzcGV3KCJhZGRpc1x0JTNzLCUzcywl ZCIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCBpbSk7Ci0rICB9Ci0rI2VuZGlmCi0rICByZXR1cm4g d3JpdGVJbnN0KEluc3RJbW0oUFBDX2FkZGlzLCByZCwgcmEsIGltKS5lbmNvZGUoKSk7Ci0rfQot KwotK0RFRl9BTFVJKG11bGxpKQotK0RFRl9BTFVJKHN1YmZpYykKLSsjdW5kZWYgREVGX0FMVUkK LSsKLSsvLyAtLS0gQUxVIHVuYXJ5L2V4dGVuZGVkIC0tLQotKwotKwotKyNkZWZpbmUgREVGX0FM VUVfUyhvcCkgREVGX1hGT1JNMlMob3ApCi0rREVGX0FMVUVfUyhjbnRsencpCi0rREVGX0FMVUVf UyhjbnRsemQpCi0rREVGX0FMVUVfUyhjbnR0emQpCi0rREVGX0FMVUVfUyhjbnR0encpCi0rI3Vu ZGVmIERFRl9BTFVFX1MKLSsKLStERUZfWEZPUk0yUyhwb3BjbnRkKQotK0RFRl9YRk9STTJTKHBv cGNudHcpCi0rREVGX1hGT1JNMlMoYnJkKSAgLy8gUE9XRVIxMAotK0RFRl9YRk9STTJTKGJyaCkg IC8vIFBPV0VSMTAKLStERUZfWEZPUk0yUyhicncpICAvLyBQT1dFUjEwCi0rCi0rLy8gLS0tIEJp dHdpc2UgbG9naWNhbCAodGhyZWUtcmVnaXN0ZXIpIC0tLQotKwotKyNkZWZpbmUgREVGX0JJVEFM VTIob3ApIERFRl9YRk9STVMob3ApCi0rREVGX0JJVEFMVTIobm9yKQotK0RFRl9CSVRBTFUyKHNs dykKLStERUZfQklUQUxVMihzcncpCi0rREVGX0JJVEFMVTIoc3JhdykKLStERUZfQklUQUxVMihz bGQpCi0rREVGX0JJVEFMVTIoc3JkKQotK0RFRl9CSVRBTFUyKHNyYWQpCi0rI3VuZGVmIERFRl9C SVRBTFUyCi0rCi0rLy8gYW5kXywgb3JfLCB4b3JfIGFyZSBtYW51YWxseSBkZWZpbmVkICh0cmFp bGluZyB1bmRlcnNjb3JlIHRvIGF2b2lkIEMrKwotKy8vIGtleXdvcmQgY29uZmxpY3RzKS4geHNf bXIgZGVsZWdhdGVzIHRvIGFzX29yXyBzbyB3ZSBtdXN0IG5vdCBhc3NlcnQKLSsvLyByZD09cnM9 PXJiIGluIGFzX29yXyAod2hpY2ggd291bGQgYmUgYSB2YWxpZCBtcikuCi0rQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfb3JfKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIp IHsKLSsgIHNwZXcoIm9yXHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcnMubmFtZSgpLCByYi5u YW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVnKFBQQ19vcl8sIHJzLCByZCwgcmIp LmVuY29kZSgpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeG9yXyhSZWdp c3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJ4b3JcdCUzcywl M3MsJTNzIiwgcmQubmFtZSgpLCBycy5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3Jp dGVJbnN0KEluc3RSZWcoUFBDX3hvcl8sIHJzLCByZCwgcmIpLmVuY29kZSgpKTsKLSt9Ci0rCi0r QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYW5kXyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMs IFJlZ2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJhbmRcdCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCBy cy5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDX2Fu ZF8sIHJzLCByZCwgcmIpLmVuY29kZSgpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfYW5kX19yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKSB7Ci0r ICBzcGV3KCJhbmQuXHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcnMubmFtZSgpLCByYi5uYW1l KCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVnKFBQQ19hbmRfLCBycywgcmQsIHJiKS5l bmNvZGUoKSB8IDB4MSk7Ci0rfQotKwotKy8vIC0tLSBCaXR3aXNlIGxvZ2ljYWwgKGltbWVkaWF0 ZSkgLS0tCi0rCi0rREVGX0RGT1JNUyhvcmkpCi0rREVGX0RGT1JNUyhvcmlzKQotK0RFRl9ERk9S TVMoeG9yaSkKLStERUZfREZPUk1TKHhvcmlzKQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzX2FuZGlfcmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCB1aW50MTZfdCBpbSkgewotKyAg c3BldygiYW5kaS5cdCUzcywlM3MsJWQiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgaW0pOwotKyAg cmV0dXJuIHdyaXRlSW5zdChJbnN0SW1tKFBQQ19hbmRpX2RvdCwgcmEsIHJkLCBpbSkuZW5jb2Rl KCkpOwotK30KLSsKLSsvLyAtLS0gU2lnbiBleHRlbnNpb24gLS0tCi0rCi0rI2RlZmluZSBERUZf QUxVRVhUKG9wKSBERUZfWEZPUk0yUyhvcCkgREVGX1hGT1JNMlNfUkMob3ApCi0rREVGX1hGT1JN MlMoZXh0c2IpCi0rREVGX1hGT1JNMlMoZXh0c2gpCi0rREVGX0FMVUVYVChleHRzdykKLSsjdW5k ZWYgREVGX0FMVUVYVAotKwotKy8vIC0tLSBJbnRlZ2VyIGxvYWRzIChELWZvcm0pIC0tLQotKwot K0RFRl9ERk9STShsYnopCi0rREVGX0RGT1JNKGxoYSkKLStERUZfREZPUk0obGh6KQotKwotK0J1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2x3YShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGlu dDE2X3Qgb2ZmKSB7Ci0rICBzcGV3KCJsd2FcdCUzcywlZCglM3MpIiwgcmQubmFtZSgpLCBvZmYs IHJiLm5hbWUoKSk7Ci0rICBNT1pfQVNTRVJUKHJiICE9IHIwKTsKLSsgIE1PWl9BU1NFUlQoIShv ZmYgJiAweDAzKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KEluc3RJbW0oUFBDX2x3YSwgcmQsIHJi LCBvZmYpLmVuY29kZSgpKTsKLSt9Ci0rCi0rREVGX0RGT1JNKGx3eikKLSsKLStCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19sZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2Zm KSB7Ci0rICBzcGV3KCJsZFx0JTNzLCVkKCUzcykiLCByZC5uYW1lKCksIG9mZiwgcmIubmFtZSgp KTsKLSsgIE1PWl9BU1NFUlQocmIgIT0gcjApOwotKyAgTU9aX0FTU0VSVCghKG9mZiAmIDB4MDMp KTsKLSsgIHJldHVybiB3cml0ZUluc3QoSW5zdEltbShQUENfbGQsIHJkLCByYiwgb2ZmKS5lbmNv ZGUoKSk7Ci0rfQotKwotKy8vIC0tLSBJbnRlZ2VyIHN0b3JlcyAoRC1mb3JtKSAtLS0KLSsKLStE RUZfREZPUk0oc3RiKQotK0RFRl9ERk9STShzdGgpCi0rREVGX0RGT1JNKHN0dykKLSsKLStCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc19zdGQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQx Nl90IG9mZikgewotKyAgc3Bldygic3RkXHQlM3MsJWQoJTNzKSIsIHJkLm5hbWUoKSwgb2ZmLCBy Yi5uYW1lKCkpOwotKyAgTU9aX0FTU0VSVChyYiAhPSByMCk7Ci0rICBNT1pfQVNTRVJUKCEob2Zm ICYgMHgwMykpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0SW1tKFBQQ19zdGQsIHJkLCByYiwg b2ZmKS5lbmNvZGUoKSk7Ci0rfQotKwotK0RFRl9ERk9STShzdGR1KQotKwotKyN1bmRlZiBERUZf REZPUk0KLSsjdW5kZWYgREVGX0RGT1JNUwotKwotKy8vIC0tLSBJbnRlZ2VyIGxvYWRzL3N0b3Jl cyAoWC1mb3JtLCBpbmRleGVkKSAtLS0KLSsKLSsjZGVmaW5lIERFRl9NRU14KG9wKSBERUZfWEZP Uk0ob3ApCi0rREVGX01FTXgobGJ6eCkgREVGX01FTXgobGhheCkgREVGX01FTXgobGh6eCkgREVG X01FTXgobHdheCkKLSsgICAgREVGX01FTXgobHd6eCkgREVGX01FTXgobHdhcngpIERFRl9NRU14 KGxiYXJ4KQotKyAgICAgICAgREVGX01FTXgobGhhcngpIERFRl9NRU14KGxkeCkgREVGX01FTXgo bGRhcngpIERFRl9NRU14KHN0YngpCi0rICAgICAgICAgICAgREVGX01FTXgoc3RiY3gpIERFRl9N RU14KHN0d3gpIERFRl9NRU14KHN0d2JyeCkgREVGX01FTXgoc3RoeCkKLSsgICAgICAgICAgICAg ICAgREVGX01FTXgoc3RoY3gpIERFRl9NRU14KHN0ZHgpIERFRl9NRU14KHN0ZGN4KQotKyAgICAg ICAgICAgICAgICAgICAgREVGX01FTXgoc3R3Y3gpCi0rI3VuZGVmIERFRl9NRU14Ci0rCi0rLy8g LS0tIEludGVnZXIgc2VsZWN0IC0tLQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2lz ZWwoUmVnaXN0ZXIgcnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYiwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGJjLCBDUmVnaXN0ZXJJRCBjcikgewotKyAgTU9a X0FTU0VSVChyYSAhPSByMCk7Ci0rICByZXR1cm4gYXNfaXNlbDAocnQsIHJhLCByYiwgYmMsIGNy KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfaXNlbDAoUmVnaXN0ZXIgcnQs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MTZfdCBiYywgQ1JlZ2lzdGVySUQgY3IpIHsKLSsgIHNwZXcoImlzZWxcdCUzcywl M3MsJTNzLGNyJWQ6MHglMDJ4IiwgcnQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSwgY3Is Ci0rICAgICAgIGJjKTsKLSsgIE1PWl9BU1NFUlQoKGJjIDwgMHg0MCkgJiYgKChiYyAmIDB4MGYp ID09IDB4MGMpKTsKLSsgIHVpbnQxNl90IG5iYyA9IChiYyA+PiA0KSArIChjciA8PCAyKTsKLSsg IHJldHVybiB3cml0ZUluc3QoUFBDX2lzZWwgfCBydC5jb2RlKCkgPDwgMjEgfCByYS5jb2RlKCkg PDwgMTYgfAotKyAgICAgICAgICAgICAgICAgICByYi5jb2RlKCkgPDwgMTEgfCBuYmMgPDwgNik7 Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3NldGJjKFJlZ2lzdGVyIHJ0LCB1 aW50MTZfdCBiYywgQ1JlZ2lzdGVySUQgY3IpIHsKLSsgIHNwZXcoInNldGJjXHQlM3MsY3IlZDow eCUwMngiLCBydC5uYW1lKCksIGNyLCBiYyk7Ci0rICBNT1pfQVNTRVJUKChiYyA8IDB4NDApICYm ICgoYmMgJiAweDBmKSA9PSAweDBjKSk7Ci0rICB1aW50MTZfdCBuYmMgPSAoYmMgPj4gNCkgKyAo Y3IgPDwgMik7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19zZXRiYyB8IChydC5jb2RlKCkgPDwg MjEpIHwgKG5iYyA8PCAxNikpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19z ZXRiY3IoUmVnaXN0ZXIgcnQsIHVpbnQxNl90IGJjLCBDUmVnaXN0ZXJJRCBjcikgewotKyAgc3Bl dygic2V0YmNyXHQlM3MsY3IlZDoweCUwMngiLCBydC5uYW1lKCksIGNyLCBiYyk7Ci0rICBNT1pf QVNTRVJUKChiYyA8IDB4NDApICYmICgoYmMgJiAweDBmKSA9PSAweDBjKSk7Ci0rICB1aW50MTZf dCBuYmMgPSAoYmMgPj4gNCkgKyAoY3IgPDwgMik7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19z ZXRiY3IgfCAocnQuY29kZSgpIDw8IDIxKSB8IChuYmMgPDwgMTYpKTsKLSt9Ci0rCi0rLy8gLS0t IEZQIGNvbXBhcmUgLS0tCi0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfZmNtcHUoQ1Jl Z2lzdGVySUQgY3IsIEZsb2F0UmVnaXN0ZXIgcmEsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciByYikgewotKyAgc3BldygiZmNtcHVcdGNyJWQsJTNzLCUz cyIsIGNyLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19m Y21wdSB8IGNyIDw8IDIzIHwgcmEuZW5jb2RpbmcoKSA8PCAxNiB8Ci0rICAgICAgICAgICAgICAg ICAgIHJiLmVuY29kaW5nKCkgPDwgMTEpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojphc19mY21wdShGbG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHJiKSB7Ci0rICByZXR1 cm4gYXNfZmNtcHUoY3IwLCByYSwgcmIpOwotK30KLSsKLSsvLyAtLS0gRlAgYXJpdGhtZXRpYyAt LS0KLSsKLSsjZGVmaW5lIERFRl9GUFVBQyhvcCkgREVGX0FGT1JNX0Mob3ApCi0rREVGX0ZQVUFD KGZtdWwpCi0rREVGX0ZQVUFDKGZtdWxzKQotKyN1bmRlZiBERUZfRlBVQUMKLSsKLSsjZGVmaW5l IERFRl9GUFVBQihvcCkgREVGX0FGT1JNX0Iob3ApCi0rREVGX0ZQVUFCKGZhZGQpCi0rREVGX0ZQ VUFCKGZkaXYpCi0rREVGX0ZQVUFCKGZzdWIpCi0rREVGX0ZQVUFCKGZhZGRzKQotK0RFRl9GUFVB QihmZGl2cykKLStERUZfRlBVQUIoZnN1YnMpCi0rREVGX0ZQVUFCKGZjcHNnbikKLSsjdW5kZWYg REVGX0ZQVUFCCi0rCi0rLy8gLS0tIEZQIHVuYXJ5L2NvbnZlcnNpb24vcm91bmRpbmcgLS0tCi0r Ci0rI2RlZmluZSBERUZfRlBVRFMob3ApIERFRl9YRk9STTJfRihvcCkKLStERUZfRlBVRFMoZmFi cykKLStERUZfRlBVRFMoZm5lZykKLStERUZfRlBVRFMoZm1yKQotK0RFRl9GUFVEUyhmY2ZpZCkK LStERUZfRlBVRFMoZmNmaWRzKQotK0RFRl9GUFVEUyhmY2ZpZHUpCi0rREVGX0ZQVURTKGZjZmlk dXMpCi0rREVGX0ZQVURTKGZjdGlkKQotK0RFRl9GUFVEUyhmY3RpZHopCi0rREVGX0ZQVURTKGZj dGlkdXopCi0rREVGX0ZQVURTKGZjdGl3eikKLStERUZfRlBVRFMoZnJpbSkKLStERUZfRlBVRFMo ZnJpcCkKLStERUZfRlBVRFMoZnJpeikKLStERUZfRlBVRFMoZnJzcCkKLStERUZfRlBVRFMoZnNx cnQpCi0rREVGX0ZQVURTKGZzcXJ0cykKLSsjdW5kZWYgREVGX0ZQVURTCi0rCi0rLy8gLS0tIEZQ IGxvYWRzL3N0b3JlcyAoRC1mb3JtKSAtLS0KLSsKLStERUZfREZPUk1fRihsZmQpCi0rREVGX0RG T1JNX0YobGZzKQotK0RFRl9ERk9STV9GKHN0ZmQpCi0rREVGX0RGT1JNX0Yoc3RmcykKLStERUZf REZPUk1fRihzdGZkdSkKLStERUZfREZPUk1fRihzdGZzdSkKLSsKLSsvLyAtLS0gRlAgbG9hZHMv c3RvcmVzIChYLWZvcm0sIGluZGV4ZWQpIC0tLQotKwotK0RFRl9GTUVNeChsZmR4KSBERUZfRk1F TXgobGZzeCkgREVGX0ZNRU14KGxmaXdheCkKLSsgICAgREVGX0ZNRU14KHN0ZmR4KSBERUZfRk1F TXgoc3Rmc3gpCi0rLy8gQ2xlYW4gdXAgbWFjcm9zLgotKyN1bmRlZiBERUZfWEZPUk0KLSsjdW5k ZWYgREVGX1hGT1JNX1JDCi0rI3VuZGVmIERFRl9YRk9STVMKLSsjdW5kZWYgREVGX1hGT1JNU19S QwotKyN1bmRlZiBERUZfWEZPUk1TX0kKLSsjdW5kZWYgREVGX1hGT1JNMgotKyN1bmRlZiBERUZf WEZPUk0yX1JDCi0rI3VuZGVmIERFRl9YRk9STTJTCi0rI3VuZGVmIERFRl9YRk9STTJTX1JDCi0r I3VuZGVmIERFRl9YRk9STTJfRgotKyN1bmRlZiBERUZfWEZPUk0yX0ZfUkMKLSsjdW5kZWYgREVG X01GT1JNCi0rI3VuZGVmIERFRl9NRk9STV9JCi0rI3VuZGVmIERFRl9NRk9STV9JX1JDCi0rI3Vu ZGVmIERFRl9NRFNGT1JNCi0rI3VuZGVmIERFRl9NRFNGT1JNX1JDCi0rI3VuZGVmIERFRl9NREZP Uk0KLSsjdW5kZWYgREVGX01ERk9STV9SQwotKyN1bmRlZiBERUZfREZPUk1fRgotKyN1bmRlZiBE RUZfRk1FTXgKLSsjdW5kZWYgREVGX0FGT1JNX0MKLSsjdW5kZWYgREVGX0FGT1JNX0NfUkMKLSsj dW5kZWYgREVGX0FGT1JNX0IKLSsjdW5kZWYgREVGX0FGT1JNX0JfUkMKLSsjdW5kZWYgREVGX0FG T1JNCi0rI3VuZGVmIERFRl9BRk9STV9SQwotKwotKyAgICAvLyAtLS0gRlBTQ1Igb3BlcmF0aW9u cyAtLS0KLSsKLSsgICAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbXRmc2IwKHVpbnQ4X3Qg YnQpIHsKLSsgIHNwZXcoIm10ZnNiMFx0JWQiLCBidCk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQ Q19tdGZzYjAgfCAodWludDMyX3QpYnQgPDwgMjEpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjphc19tY3JmcyhDUmVnaXN0ZXJJRCBiZiwgdWludDhfdCBiZmEpIHsKLSsgIHNwZXco Im1jcmZzXHRjciVkLCVkIiwgYmYsIGJmYSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19tY3Jm cyB8ICh1aW50MzJfdCliZiA8PCAyMyB8ICh1aW50MzJfdCliZmEgPDwgMTgpOwotK30KLSsKLSsv LyAtLS0gVlNYIChGUFItb25seSBzdWJzZXQpIC0tLQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzX21mdnNyZChSZWdpc3RlciByYSwgRmxvYXRSZWdpc3RlciB4cykgewotKyAgc3Bldygi bWZ2c3JkXHQlM3MsJTNzIiwgcmEubmFtZSgpLCB4cy5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRl SW5zdChYWDFGb3JtTWZ2c3IoUFBDX21mdnNyZCwgcmEuY29kZSgpLCB4cy5lbmNvZGluZygpKSk7 Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX210dnNyZChGbG9hdFJlZ2lzdGVy IHh0LCBSZWdpc3RlciByYSkgewotKyAgc3BldygibXR2c3JkXHQlM3MsJTNzIiwgeHQubmFtZSgp LCByYS5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDFGb3JtKFBQQ19tdHZzcmQsIHh0 LmVuY29kaW5nKCksIHJhLmNvZGUoKSwgMCkpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc19tdHZzcndhKEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhKSB7Ci0rICBzcGV3 KCJtdHZzcndhXHQlM3MsJTNzIiwgeHQubmFtZSgpLCByYS5uYW1lKCkpOwotKyAgcmV0dXJuIHdy aXRlSW5zdChYWDFGb3JtKFBQQ19tdHZzcndhLCB4dC5lbmNvZGluZygpLCByYS5jb2RlKCksIDAp KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbXR2c3J3cyhGbG9hdFJlZ2lz dGVyIHh0LCBSZWdpc3RlciByYSkgewotKyAgc3BldygibXR2c3J3c1x0JTNzLCUzcyIsIHh0Lm5h bWUoKSwgcmEubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgxRm9ybShQUENfbXR2c3J3 cywgeHQuZW5jb2RpbmcoKSwgcmEuY29kZSgpLCAwKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzX210dnNyd3ooRmxvYXRSZWdpc3RlciB4dCwgUmVnaXN0ZXIgcmEpIHsKLSsg IHNwZXcoIm10dnNyd3pcdCUzcywlM3MiLCB4dC5uYW1lKCksIHJhLm5hbWUoKSk7Ci0rICByZXR1 cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX210dnNyd3osIHh0LmVuY29kaW5nKCksIHJhLmNvZGUo KSwgMCkpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eGJyZChGbG9hdFJl Z2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0rICBzcGV3KCJ4eGJyZFx0JTNzLCUzcyIs IHh0Lm5hbWUoKSwgeGIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgyRm9ybShQUENf eHhicmQsIHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCkpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6YXNfeHNjdmRwc3BuKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0 ZXIgeGIpIHsKLSsgIHNwZXcoInhzY3ZkcHNwblx0JTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGIubmFt ZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgyRm9ybShQUENfeHNjdmRwc3BuLCB4dC5lbmNv ZGluZygpLCB4Yi5lbmNvZGluZygpKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzX3hzY3ZzcGRwbihGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0rICBz cGV3KCJ4c2N2c3BkcG5cdCUzcywlM3MiLCB4dC5uYW1lKCksIHhiLm5hbWUoKSk7Ci0rICByZXR1 cm4gd3JpdGVJbnN0KFhYMkZvcm0oUFBDX3hzY3ZzcGRwbiwgeHQuZW5jb2RpbmcoKSwgeGIuZW5j b2RpbmcoKSkpOwotK30KLSsKLSsvLyBQT1dFUjkgKElTQSAzLjApIHNjYWxhciBGUDE2IGNvbnZl cnNpb25zLiBUaGUgVUlNIGRpc2FtYmlndWF0b3IgaXMKLSsvLyBhbHJlYWR5IGluIFBQQ194c2N2 ZHBocCAvIFBQQ194c2N2aHBkcDsgWFgyRm9ybSdzIGJpdHMxNnRvMjAgZGVmYXVsdAotKy8vIG9m IDAgbGVhdmVzIGl0IGludGFjdC4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194c2N2ZHBo cChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0rICBzcGV3KCJ4c2N2ZHBo cFx0JTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3Qo WFgyRm9ybShQUENfeHNjdmRwaHAsIHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCkpKTsKLSt9 Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHNjdmhwZHAoRmxvYXRSZWdpc3RlciB4 dCwgRmxvYXRSZWdpc3RlciB4YikgewotKyAgc3BldygieHNjdmhwZHBcdCUzcywlM3MiLCB4dC5u YW1lKCksIHhiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFhYMkZvcm0oUFBDX3hzY3Zo cGRwLCB4dC5lbmNvZGluZygpLCB4Yi5lbmNvZGluZygpKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzX3hzeGV4cGRwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIg eGIpIHsKLSsgIHNwZXcoInhzeGV4cGRwXHQlM3MsJTNzIiwgeHQubmFtZSgpLCB4Yi5uYW1lKCkp OwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDJGb3JtKFBQQ194c3hleHBkcCwgeHQuZW5jb2Rpbmco KSwgeGIuZW5jb2RpbmcoKSkpOwotK30KLSsKLSsvLyBQT1dFUjkgKElTQSAzLjApIEZQMTYgbG9h ZC9zdG9yZSwgWC1mb3JtIGluZGV4ZWQuIGx4c2loenggbG9hZHMKLSsvLyAxNiBiaXRzIGludG8g VlNSIGR3b3JkIDAgd29yZCAxJ3MgbG93IGhhbGZ3b3JkICh6ZXJvaW5nIHRoZSByZXN0KTsKLSsv LyBzdHhzaWh4IHN0b3JlcyBmcm9tIHRoZXJlLiBUaGUgWFRbNV0vWFNbNV0gYml0IHRyYXZlbHMg dmlhIHRoZQotKy8vIFgtZm9ybSdzIFRYL1NYIGJpdCBhdCBpbnN0cnVjdGlvbiBiaXQgMC4KLStC dWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19seHNpaHp4KEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lz dGVyIHJhLCBSZWdpc3RlciByYikgewotKyAgc3BldygibHhzaWh6eFx0JTNzLCUzcywlM3MiLCB4 dC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBD X2x4c2loenggfCAoeHQuZW5jb2RpbmcoKSAmIDMxKSA8PCAyMSB8Ci0rICAgICAgICAgICAgICAg ICAgIHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSB8Ci0rICAgICAgICAgICAgICAg ICAgICgoeHQuZW5jb2RpbmcoKSA+PiA1KSAmIDEpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfc3R4c2loeChGbG9hdFJlZ2lzdGVyIHhzLCBSZWdpc3RlciByYSwgUmVnaXN0 ZXIgcmIpIHsKLSsgIHNwZXcoInN0eHNpaHhcdCUzcywlM3MsJTNzIiwgeHMubmFtZSgpLCByYS5u YW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ19zdHhzaWh4IHwgKHhz LmVuY29kaW5nKCkgJiAzMSkgPDwgMjEgfAotKyAgICAgICAgICAgICAgICAgICByYS5jb2RlKCkg PDwgMTYgfCByYi5jb2RlKCkgPDwgMTEgfAotKyAgICAgICAgICAgICAgICAgICAoKHhzLmVuY29k aW5nKCkgPj4gNSkgJiAxKSk7Ci0rfQotKwotKy8vIFhYMy1mb3JtLCBGUFItc3BhY2Ugb25seSAo ZW5jb2RpbmcgMC4uMzEg4oaSIFZTUjAuLjMxLCBhbGwgQVgvQlgvVFggPSAwKS4KLSsvLyBKYXZh L0phdmFTY3JpcHQtc3R5bGUgc2NhbGFyIG1heC9taW4g4oCUIHNlbWFudGljcyB2ZXJpZmllZCB0 byBtYXRjaAotKy8vIEVDTUEtMjYyIE1hdGgubWF4L01hdGgubWluIGluY2x1ZGluZyDCsTAgYW5k IE5hTiBwcm9wYWdhdGlvbi4gUE9XRVI5LW9ubHkuCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 YXNfeHNtYXhqZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0rICBzcGV3 KCJ4c21heGpkcFx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgp KTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgzRm9ybShQUENfeHNtYXhqZHAsIHh0LCB4YSwgeGIp KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHNtaW5qZHAoRmxvYXRSZWdp c3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0rICBzcGV3KCJ4c21pbmpkcFx0JTNzLCUzcywl M3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUlu c3QoWFgzRm9ybShQUENfeHNtaW5qZHAsIHh0LCB4YSwgeGIpKTsKLSt9Ci0rCi0rLy8gLS0tIFZT WCBTSU1EIGxvYWQvc3RvcmUgLS0tCi0rCi0rLy8gRm9yIFZTWDAtMzEgKEZQUiksIHRoZSA2dGgg cmVnaXN0ZXIgYml0IChUWC9TWC9CWCkgaXMgMC4KLSsvLyBYLWZvcm06IG9wY29kZSB8IFQgPDwg MjEgfCBBIDw8IDE2IHwgQiA8PCAxMSB8IHhvIHwgVFgKLSsvLyBseHZ4L3N0eHZ4IGFyZSBQT1dF UjkgKElTQSAzLjApLiBseHZkMngvc3R4dmQyeCBhcmUgUE9XRVI4IChJU0EgMi4wNykuCi0rCi0r QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbHh2eChGbG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoImx4dnhcdCUzcywlM3MsJTNzIiwgeHQubmFt ZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0o UFBDX2x4dngsIHh0LmVuY29kaW5nKCksIHJhLmNvZGUoKSwgcmIuY29kZSgpKSk7Ci0rfQotKwot K0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3N0eHZ4KEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lz dGVyIHJhLCBSZWdpc3RlciByYikgewotKyAgc3Bldygic3R4dnhcdCUzcywlM3MsJTNzIiwgeHMu bmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFhYMUZv cm0oUFBDX3N0eHZ4LCB4cy5lbmNvZGluZygpLCByYS5jb2RlKCksIHJiLmNvZGUoKSkpOwotK30K LSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19seHZkMngoRmxvYXRSZWdpc3RlciB4dCwg UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJseHZkMnhcdCUzcywlM3MsJTNz IiwgeHQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0 KFhYMUZvcm0oUFBDX2x4dmQyeCwgeHQuZW5jb2RpbmcoKSwgcmEuY29kZSgpLCByYi5jb2RlKCkp KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfc3R4dmQyeChGbG9hdFJlZ2lz dGVyIHhzLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKLSsgIHNwZXcoInN0eHZkMnhcdCUz cywlM3MsJTNzIiwgeHMubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0rICByZXR1cm4g d3JpdGVJbnN0KFhYMUZvcm0oUFBDX3N0eHZkMngsIHhzLmVuY29kaW5nKCksIHJhLmNvZGUoKSwg cmIuY29kZSgpKSk7Ci0rfQotKwotKy8vIFZNWCByZWdpc3RlciBsb2FkL3N0b3JlLiBTZWUgUFBD X2x2eC9QUENfc3R2eCBpbiBBc3NlbWJsZXItcHBjNjQuaCBmb3IKLSsvLyB0aGUgZW5jb2Rpbmcg cmF0aW9uYWxlLgotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2x2eCh1aW50OF90IHZydCwg UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Ci0rICBNT1pfQVNTRVJUKHZydCA8IDMyKTsKLSsg IHNwZXcoImx2eFx0dnIlZCwlM3MsJTNzIiwgdnJ0LCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Ci0r ICByZXR1cm4gd3JpdGVJbnN0KFBQQ19sdnggfCB1aW50MzJfdCh2cnQpIDw8IDIxIHwgcmEuY29k ZSgpIDw8IDE2IHwKLSsgICAgICAgICAgICAgICAgICAgcmIuY29kZSgpIDw8IDExKTsKLSt9Ci0r Ci0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfc3R2eCh1aW50OF90IHZycywgUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJiKSB7Ci0rICBNT1pfQVNTRVJUKHZycyA8IDMyKTsKLSsgIHNwZXcoInN0 dnhcdHZyJWQsJTNzLCUzcyIsIHZycywgcmEubmFtZSgpLCByYi5uYW1lKCkpOwotKyAgcmV0dXJu IHdyaXRlSW5zdChQUENfc3R2eCB8IHVpbnQzMl90KHZycykgPDwgMjEgfCByYS5jb2RlKCkgPDwg MTYgfAotKyAgICAgICAgICAgICAgICAgICByYi5jb2RlKCkgPDwgMTEpOwotK30KLSsKLSsvLyAt LS0gVlNYIFNJTUQgcmVnaXN0ZXIgb3BlcmF0aW9ucyAtLS0KLSsKLSsvLyBYWDMtZm9ybTogb3Bj b2RlIHwgVFswOjRdPDwyMSB8IEFbMDo0XTw8MTYgfCBCWzA6NF08PDExIHwgeG8gfCBBWCB8IEJY IHwgVFgKLSsvLyB3aGVyZSBBWC9CWC9UWCAoYml0cyAyLzEvMCkgY2FycnkgYml0IDUgb2YgZWFj aCA2LWJpdCBWU1IgaW5kZXguCi0rLy8gRW5jb2RlZCBieSB0aGUgWFgzRm9ybSBoZWxwZXIgYWJv dmUgZm9yIGJvdGggVlNSMC0zMSAoU2luZ2xlL0RvdWJsZSkgYW5kCi0rLy8gVlNSMzItNjMgKFNp bWQxMjgpIG9wZXJhbmRzLgotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3h4bG9yKEZsb2F0 UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciB4YikgewotKyAgc3BldygieHhsb3JcdCUzcywlM3MsJTNz IiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0 KFhYM0Zvcm0oUFBDX3h4bG9yLCB4dCwgeGEsIHhiKSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzX3h4bGFuZChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7Ci0r ICBzcGV3KCJ4eGxhbmRcdCUzcywlM3MsJTNzIiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhiLm5h bWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFhYM0Zvcm0oUFBDX3h4bGFuZCwgeHQsIHhhLCB4 YikpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eGx4b3IoRmxvYXRSZWdp c3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciB4YikgewotKyAgc3BldygieHhseG9yXHQlM3MsJTNzLCUzcyIs IHh0Lm5hbWUoKSwgeGEubmFtZSgpLCB4Yi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChY WDNGb3JtKFBQQ194eGx4b3IsIHh0LCB4YSwgeGIpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfeHhsbm9yKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsKLSsg IHNwZXcoInh4bG5vclx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFt ZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgzRm9ybShQUENfeHhsbm9yLCB4dCwgeGEsIHhi KSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3h4bGFuZGMoRmxvYXRSZWdp c3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsKLSsgIHNwZXcoInh4bGFuZGNcdCUzcywlM3MsJTNz IiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0 KFhYM0Zvcm0oUFBDX3h4bGFuZGMsIHh0LCB4YSwgeGIpKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfeHhzZWwoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiLCBGbG9h dFJlZ2lzdGVyIHhjKSB7Ci0rICBzcGV3KCJ4eHNlbFx0JTNzLCUzcywlM3MsJTNzIiwgeHQubmFt ZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUoKSwgeGMubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUlu c3QoWFg0Rm9ybShQUENfeHhzZWwsIHh0LmVuY29kaW5nKCksIHhhLmVuY29kaW5nKCksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgeGIuZW5jb2RpbmcoKSwgeGMuZW5jb2RpbmcoKSkpOwot K30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eHBlcm1kaShGbG9hdFJlZ2lzdGVy IHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgeGIsIHVpbnQ4X3QgZG0pIHsKLSsgIE1PWl9BU1NFUlQoZG0gPCA0 KTsKLSsgIHNwZXcoInh4cGVybWRpXHQlM3MsJTNzLCUzcywlZCIsIHh0Lm5hbWUoKSwgeGEubmFt ZSgpLCB4Yi5uYW1lKCksIGRtKTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgzRm9ybShQUENfeHhw ZXJtZGkgfCAodWludDMyX3QoZG0pIDw8IDgpLCB4dCwgeGEsIHhiKSk7Ci0rfQotKwotKy8vIFBP V0VSOSAoSVNBIDMuMCkuIFhYMS1mb3JtIHdpdGggdHdvIEdQUiBzb3VyY2VzLgotK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzX210dnNyZGQoRmxvYXRSZWdpc3RlciB4dCwgUmVnaXN0ZXIgcmEs IFJlZ2lzdGVyIHJiKSB7Ci0rICBzcGV3KCJtdHZzcmRkXHQlM3MsJTNzLCUzcyIsIHh0Lm5hbWUo KSwgcmEubmFtZSgpLCByYi5uYW1lKCkpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDFGb3JtKFBQ Q19tdHZzcmRkLCB4dC5lbmNvZGluZygpLCByYS5jb2RlKCksIHJiLmNvZGUoKSkpOwotK30KLSsK LSsvLyBQT1dFUjkgKElTQSAzLjApLiBYWDEtZm9ybTogbW92ZSBsb3dlciBkb3VibGV3b3JkIG9m IFZTUiB0byBHUFIuCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbWZ2c3JsZChSZWdpc3Rl ciBydCwgRmxvYXRSZWdpc3RlciB4cykgewotKyAgc3BldygibWZ2c3JsZFx0JTNzLCUzcyIsIHJ0 Lm5hbWUoKSwgeHMubmFtZSgpKTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgxRm9ybU1mdnNyKFBQ Q19tZnZzcmxkLCBydC5jb2RlKCksIHhzLmVuY29kaW5nKCkpKTsKLSt9Ci0rCi0rLy8gLS0tIFhY Mi1mb3JtIFZTWCBpbnN0cnVjdGlvbnMgLS0tCi0rCi0rLy8gWFgyLWZvcm06IG9wY29kZSB8IFQ8 PDIxIHwgVUlNPDwxNl9hcmVhIHwgQjw8MTFfYXJlYSB8IFhPPDwyIHwgQlggfCBUWAotKy8vIEZv ciBWU1IwLTMxLCBCWD1UWD0wLgotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3h4c3Bs dHcoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YiwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdWltKSB7Ci0rICBNT1pfQVNTRVJUKHVpbSA8IDQp OwotKyAgc3BldygieHhzcGx0d1x0JTNzLCUzcywlZCIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpLCB1 aW0pOwotKyAgcmV0dXJuIHdyaXRlSW5zdChYWDJGb3JtKFBQQ194eHNwbHR3LCB4dC5lbmNvZGlu ZygpLCB4Yi5lbmNvZGluZygpLCB1aW0pKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfeHhpbnNlcnR3KEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdWltKSB7Ci0rICBNT1pf QVNTRVJUKHVpbSA8PSAxMiAmJiAodWltICYgMykgPT0gMCk7Ci0rICBzcGV3KCJ4eGluc2VydHdc dCUzcywlM3MsJWQiLCB4dC5uYW1lKCksIHhiLm5hbWUoKSwgdWltKTsKLSsgIHJldHVybiB3cml0 ZUluc3QoWFgyRm9ybShQUENfeHhpbnNlcnR3LCB4dC5lbmNvZGluZygpLCB4Yi5lbmNvZGluZygp LCB1aW0pKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhleHRyYWN0dXco RmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVpbSkgewotKyAgTU9aX0FTU0VSVCh1aW0gPD0g MTIgJiYgKHVpbSAmIDMpID09IDApOwotKyAgc3BldygieHhleHRyYWN0dXdcdCUzcywlM3MsJWQi LCB4dC5uYW1lKCksIHhiLm5hbWUoKSwgdWltKTsKLSsgIHJldHVybiB3cml0ZUluc3QoWFgyRm9y bShQUENfeHhleHRyYWN0dXcsIHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCksIHVpbSkpOwot K30KLSsKLSsvLyBQT1dFUjkgKElTQSAzLjApLiBYWDEtZm9ybS1pc2g6IFQoNSkgKyBVSU04KDgp ICsgWE8gKyBUWC4gVUlNOCBvY2N1cGllcwotKy8vIGJpdHMgMTguLjExIChhIG5vbi1zdGFuZGFy ZCBzbG90IHRoYXQgWFgxRm9ybSBkb2Vzbid0IGZpdCksIHNvIGVuY29kZQotKy8vIGlubGluZS4g VFggYml0IGF0IGluc3RydWN0aW9uIGJpdCAwIHNlbGVjdHMgdGhlIHVwcGVyIGhhbGYgb2YgVlNS Ci0rLy8gc3BhY2Ugd2hlbiB4dC5lbmNvZGluZygpIGlzIGluIDMyLTYzIChTaW1kMTI4KS4KLStC dWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eHNwbHRpYihGbG9hdFJlZ2lzdGVyIHh0LCB1aW50 OF90IGltbTgpIHsKLSsgIHNwZXcoInh4c3BsdGliXHQlM3MsJXUiLCB4dC5uYW1lKCksIGltbTgp OwotKyAgdWludDMyX3QgZW5jID0gdWludDMyX3QoeHQuZW5jb2RpbmcoKSk7Ci0rICByZXR1cm4g d3JpdGVJbnN0KFBQQ194eHNwbHRpYiB8IChlbmMgJiAzMSkgPDwgMjEgfCAodWludDMyX3QpaW1t OCA8PCAxMSB8Ci0rICAgICAgICAgICAgICAgICAgICgoZW5jID4+IDUpICYgMSkpOwotK30KLSsK LSsvLyAtLS0gVk1YIGluc3RydWN0aW9ucyAtLS0KLSsKLSsvLyBWWC1mb3JtOiAoNDw8MjYpIHwg VlJUPDwyMSB8IFVJTU08PDE2IHwgVlJCPDwxMSB8IFhPCi0rLy8gVlJUL1ZSQiBhcmUgNS1iaXQg cmF3IFZSIG51bWJlcnMgKDAtMzEpLiBTaW1kMTI4IEZsb2F0UmVnaXN0ZXIuZW5jb2RpbmcoKQot Ky8vIHJldHVybnMgMzItNjM7IG1hc2tpbmcgd2l0aCAmIDMxIG1hcHMgaXQgYmFjayB0byB0aGUg VlIgb2Zmc2V0IDAtMzEuCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdnNwbHRiKEZsb2F0 UmVnaXN0ZXIgdnJ0LCBGbG9hdFJlZ2lzdGVyIHZyYiwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDhfdCB1aW0pIHsKLSsgIE1PWl9BU1NFUlQodWltIDwgMTYpOwotKyAg c3BldygidnNwbHRiXHQlM3MsJTNzLCVkIiwgdnJ0Lm5hbWUoKSwgdnJiLm5hbWUoKSwgdWltKTsK LSsgIHJldHVybiB3cml0ZUluc3QoUFBDX3ZzcGx0YiB8ICh2cnQuZW5jb2RpbmcoKSAmIDMxKSA8 PCAyMSB8Ci0rICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCl1aW0gPDwgMTYgfCAodnJiLmVu Y29kaW5nKCkgJiAzMSkgPDwgMTEpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjph c192c3BsdGgoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJiLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVpbSkgewotKyAgTU9aX0FTU0VSVCh1 aW0gPCA4KTsKLSsgIHNwZXcoInZzcGx0aFx0JTNzLCUzcywlZCIsIHZydC5uYW1lKCksIHZyYi5u YW1lKCksIHVpbSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ192c3BsdGggfCAodnJ0LmVuY29k aW5nKCkgJiAzMSkgPDwgMjEgfAotKyAgICAgICAgICAgICAgICAgICAodWludDMyX3QpdWltIDw8 IDE2IHwgKHZyYi5lbmNvZGluZygpICYgMzEpIDw8IDExKTsKLSt9Ci0rCi0rLy8gVkEtZm9ybTog KDQ8PDI2KSB8IFZSVDw8MjEgfCBWUkE8PDE2IHwgVlJCPDwxMSB8IFNIQjw8NiB8IFhPKDYtYml0 KQotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3ZzbGRvaShGbG9hdFJlZ2lzdGVyIHZydCwg RmxvYXRSZWdpc3RlciB2cmEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgdnJiLCB1aW50OF90IHNoYikgewotKyAgTU9aX0FTU0VSVChzaGIgPCAxNik7 Ci0rICBzcGV3KCJ2c2xkb2lcdCUzcywlM3MsJTNzLCVkIiwgdnJ0Lm5hbWUoKSwgdnJhLm5hbWUo KSwgdnJiLm5hbWUoKSwgc2hiKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX3ZzbGRvaSB8ICh2 cnQuZW5jb2RpbmcoKSAmIDMxKSA8PCAyMSB8Ci0rICAgICAgICAgICAgICAgICAgICh2cmEuZW5j b2RpbmcoKSAmIDMxKSA8PCAxNiB8ICh2cmIuZW5jb2RpbmcoKSAmIDMxKSA8PCAxMSB8Ci0rICAg ICAgICAgICAgICAgICAgICh1aW50MzJfdClzaGIgPDwgNik7Ci0rfQotKwotKy8vIC0tLSBWTVgg aW50ZWdlciBhcml0aG1ldGljIChWUiByZWdpc3RlcnMgb25seSkgLS0tCi0rCi0rLy8gVlgtZm9y bTogKDQ8PDI2KSB8IFZSVDw8MjEgfCBWUkE8PDE2IHwgVlJCPDwxMSB8IFhPCi0rLy8gVGhlIG1h Y3JvIHRha2VzIHJhdyBWUiBudW1iZXJzICgwLTMxKS4KLSsjZGVmaW5lIERFRl9WTVhfVlZWKG9w KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpIHsgXAotKyAgICBNT1pfQVNTRVJUKHZydCA8IDMyICYmIHZyYSA8IDMy ICYmIHZyYiA8IDMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3Ag Ilx0dnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCB2cnQgPDwgMjEgfCB2cmEg PDwgMTYgfCB2cmIgPDwgMTEpOyAgICAgICAgXAotKyAgfQotKwotK0RFRl9WTVhfVlZWKHZhZGR1 Ym0pCi0rREVGX1ZNWF9WVlYodmFkZHVobSkKLStERUZfVk1YX1ZWVih2YWRkdXdtKQotK0RFRl9W TVhfVlZWKHZhZGR1ZG0pCi0rREVGX1ZNWF9WVlYodnN1YnVibSkKLStERUZfVk1YX1ZWVih2c3Vi dWhtKQotK0RFRl9WTVhfVlZWKHZzdWJ1d20pCi0rREVGX1ZNWF9WVlYodnN1YnVkbSkKLStERUZf Vk1YX1ZWVih2YWRkc2JzKQotK0RFRl9WTVhfVlZWKHZhZGRzaHMpCi0rREVGX1ZNWF9WVlYodmFk ZHVicykKLStERUZfVk1YX1ZWVih2YWRkdWhzKQotK0RFRl9WTVhfVlZWKHZzdWJzYnMpCi0rREVG X1ZNWF9WVlYodnN1YnNocykKLStERUZfVk1YX1ZWVih2c3VidWJzKQotK0RFRl9WTVhfVlZWKHZz dWJ1aHMpCi0rREVGX1ZNWF9WVlYodm1pbnNiKQotK0RFRl9WTVhfVlZWKHZtaW5zaCkKLStERUZf Vk1YX1ZWVih2bWluc3cpCi0rREVGX1ZNWF9WVlYodm1heHNiKQotK0RFRl9WTVhfVlZWKHZtYXhz aCkKLStERUZfVk1YX1ZWVih2bWF4c3cpCi0rREVGX1ZNWF9WVlYodm1heHNkKQotK0RFRl9WTVhf VlZWKHZtaW51YikKLStERUZfVk1YX1ZWVih2bWludWgpCi0rREVGX1ZNWF9WVlYodm1pbnV3KQot K0RFRl9WTVhfVlZWKHZtYXh1YikKLStERUZfVk1YX1ZWVih2bWF4dWgpCi0rREVGX1ZNWF9WVlYo dm1heHV3KQotK0RFRl9WTVhfVlZWKHZhdmd1YikKLStERUZfVk1YX1ZWVih2YXZndWgpCi0rREVG X1ZNWF9WVlYodm11bHV3bSkKLStERUZfVk1YX1ZWVih2bXVsbGQpCi0rCi0rREVGX1ZNWF9WVlYo dnNsYikKLStERUZfVk1YX1ZWVih2c2xoKQotK0RFRl9WTVhfVlZWKHZzbHcpCi0rREVGX1ZNWF9W VlYodnNsZCkKLStERUZfVk1YX1ZWVih2c3JiKQotK0RFRl9WTVhfVlZWKHZzcmgpCi0rREVGX1ZN WF9WVlYodnNydykKLStERUZfVk1YX1ZWVih2c3JkKQotK0RFRl9WTVhfVlZWKHZzcmFiKQotK0RF Rl9WTVhfVlZWKHZzcmFoKQotK0RFRl9WTVhfVlZWKHZzcmF3KQotK0RFRl9WTVhfVlZWKHZzcmFk KQotK0RFRl9WTVhfVlZWKHZzbG8pCi0rREVGX1ZNWF9WVlYodnNybykKLStERUZfVk1YX1ZWVih2 Y21wZXF1YikKLStERUZfVk1YX1ZWVih2Y21wZXF1aCkKLStERUZfVk1YX1ZWVih2Y21wZXF1dykK LStERUZfVk1YX1ZWVih2Y21wZXF1ZCkKLStERUZfVk1YX1ZWVih2Y21wZ3RzYikKLStERUZfVk1Y X1ZWVih2Y21wZ3RzaCkKLStERUZfVk1YX1ZWVih2Y21wZ3RzdykKLStERUZfVk1YX1ZWVih2Y21w Z3RzZCkKLStERUZfVk1YX1ZWVih2Y21wZ3R1YikKLStERUZfVk1YX1ZWVih2Y21wZ3R1aCkKLStE RUZfVk1YX1ZWVih2Y21wZ3R1dykKLStERUZfVk1YX1ZWVih2Y21wZ3R1ZCkKLSsvLyBQT1dFUjkg KElTQSAzLjApLiBOb3RFcXVhbCBjb21wYXJlOyBzYXZlcyB0aGUgeHhsbm9yIHRoYXQgdmNtcGVx dVggbmVlZHMuCi0rREVGX1ZNWF9WVlYodmNtcG5lYikKLStERUZfVk1YX1ZWVih2Y21wbmVoKQot K0RFRl9WTVhfVlZWKHZjbXBuZXcpCi0rCi0rLy8gUE9XRVI4KyAoSVNBIDIuMDcpLiB2YnBlcm1x IFJULFJBLFJCOiBiaXQtcGVybXV0ZSBxdWFkd29yZC4KLStERUZfVk1YX1ZWVih2YnBlcm1xKQot KwotKyN1bmRlZiBERUZfVk1YX1ZWVgotKwotKy8vIFZDLWZvcm0gcmVjb3JkIGZvcm1zOiBzYW1l IGFzIFZYLWZvcm0gYWJvdmUgd2l0aCBSYyBiaXQgKGJpdCAxMCBMU0IpIHNldC4KLSsvLyB2Y21w WFhYLiBzZXRzIENSNjogTFQgPSBhbGwtdHJ1ZSwgRVEgPSBub25lLXRydWUuCi0rI2RlZmluZSBE RUZfVk1YX1ZWVl9SQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyh1aW50 OF90IHZydCwgdWludDhfdCB2cmEsICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdnJiKSB7ICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIE1PWl9BU1NFUlQodnJ0IDwgMzIgJiYgdnJhIDwgMzIgJiYgdnJiIDwgMzIpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIi5cdHZyJWQsdnIlZCx2ciVk IiwgdnJ0LCB2cmEsIHZyYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1 cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgdnJ0IDw8IDIxIHwgdnJhIDw8IDE2IHwgdnJiIDw8IDEx IHwgMHg0MDApOyBcCi0rICB9Ci0rCi0rREVGX1ZNWF9WVlZfUkModmNtcGVxdWIpCi0rREVGX1ZN WF9WVlZfUkModmNtcGVxdWgpCi0rREVGX1ZNWF9WVlZfUkModmNtcGVxdXcpCi0rREVGX1ZNWF9W VlZfUkModmNtcGVxdWQpCi0rCi0rI3VuZGVmIERFRl9WTVhfVlZWX1JDCi0rCi0rLy8gVlNYIGZs b2F0IGNvbXBhcmUgKFhYMy1mb3JtKS4KLSsjZGVmaW5lIERFRl9WU1hfQ01QKG9wKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLCBc Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsg ICAgICAgICAgICAgICAgIFwKLSsgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MiLCB4dC5uYW1l KCksIHhhLm5hbWUoKSwgeGIubmFtZSgpKTsgICAgICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0 KFhYM0Zvcm0oUFBDXyMjb3AsIHh0LCB4YSwgeGIpKTsgICAgICAgICAgICAgICAgICBcCi0rICB9 Ci0rCi0rREVGX1ZTWF9DTVAoeHZjbXBlcXNwKQotK0RFRl9WU1hfQ01QKHh2Y21wZ3RzcCkKLStE RUZfVlNYX0NNUCh4dmNtcGdlc3ApCi0rREVGX1ZTWF9DTVAoeHZjbXBlcWRwKQotK0RFRl9WU1hf Q01QKHh2Y21wZ3RkcCkKLStERUZfVlNYX0NNUCh4dmNtcGdlZHApCi0rCi0rI3VuZGVmIERFRl9W U1hfQ01QCi0rCi0rLy8gVlNYIGZsb2F0IGFyaXRobWV0aWMgKFhYMy1mb3JtIGJpbmFyeSkuCi0r I2RlZmluZSBERUZfVlNYX0JJTihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRS ZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgXAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7ICAgICAgICAgICAgICAgICBcCi0rICAgIHNw ZXcoI29wICJcdCUzcywlM3MsJTNzIiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUoKSk7 ICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChYWDNGb3JtKFBQQ18jI29wLCB4dCwgeGEs IHhiKSk7ICAgICAgICAgICAgICAgICAgXAotKyAgfQotK0RFRl9WU1hfQklOKHh2YWRkc3ApCi0r REVGX1ZTWF9CSU4oeHZhZGRkcCkgREVGX1ZTWF9CSU4oeHZzdWJzcCkgREVGX1ZTWF9CSU4oeHZz dWJkcCkgREVGX1ZTWF9CSU4oCi0rICAgIHh2bXVsc3ApIERFRl9WU1hfQklOKHh2bXVsZHApIERF Rl9WU1hfQklOKHh2ZGl2c3ApIERFRl9WU1hfQklOKHh2ZGl2ZHApCi0rICAgIERFRl9WU1hfQklO KHh2bWluc3ApIERFRl9WU1hfQklOKHh2bWluZHApIERFRl9WU1hfQklOKHh2bWF4c3ApIERFRl9W U1hfQklOKAotKyAgICAgICAgeHZtYXhkcCkgREVGX1ZTWF9CSU4oeHZtYWRkYXNwKSBERUZfVlNY X0JJTih4dm1hZGRhZHApCi0rICAgICAgICBERUZfVlNYX0JJTih4dm5tc3ViYXNwKSBERUZfVlNY X0JJTih4dm5tc3ViYWRwKQotKyN1bmRlZiBERUZfVlNYX0JJTgotKwotKy8vIFZTWCB1bmFyeSAo WFgyLWZvcm0pOiBvcCB8IHh0PDwyMSB8IHhiPDwxMSB8IFhPPDwyCi0rLy8gWFgyLWZvcm0gdW5h cnkgVlNYIG9wOiBUICsgQiwgbm8gVUlNLiBVc2VzIFhYMkZvcm0gaGVscGVyIGZvciBUWC9CWCBi aXRzLgotKyNkZWZpbmUgREVGX1ZTWF9VTihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMj b3AoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YikgeyBcCi0rICAgIHNwZXcoI29w ICJcdCUzcywlM3MiLCB4dC5uYW1lKCksIHhiLm5hbWUoKSk7ICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICByZXR1cm4gd3JpdGVJbnN0KFhYMkZvcm0oUFBDXyMjb3AsIHh0LmVuY29kaW5n KCksIHhiLmVuY29kaW5nKCkpKTsgIFwKLSsgIH0KLSsgICAgICAgICAgICBERUZfVlNYX1VOKHh2 YWJzc3ApIERFRl9WU1hfVU4oeHZhYnNkcCkgREVGX1ZTWF9VTigKLSsgICAgICAgICAgICAgICAg eHZuZWdzcCkgREVGX1ZTWF9VTih4dm5lZ2RwKSBERUZfVlNYX1VOKHh2c3FydHNwKQotKyAgICAg ICAgICAgICAgICBERUZfVlNYX1VOKHh2c3FydGRwKSBERUZfVlNYX1VOKHh2cnNwaXApIERFRl9W U1hfVU4oCi0rICAgICAgICAgICAgICAgICAgICB4dnJkcGlwKSBERUZfVlNYX1VOKHh2cnNwaW0p IERFRl9WU1hfVU4oeHZyZHBpbSkKLSsgICAgICAgICAgICAgICAgICAgIERFRl9WU1hfVU4oeHZy c3BpeikgREVGX1ZTWF9VTih4dnJkcGl6KSBERUZfVlNYX1VOKAotKyAgICAgICAgICAgICAgICAg ICAgICAgIHh2cnNwaWMpIERFRl9WU1hfVU4oeHZyZHBpYykgREVGX1ZTWF9VTih4dmN2c3h3c3Ap Ci0rICAgICAgICAgICAgICAgICAgICAgICAgREVGX1ZTWF9VTih4dmN2dXh3c3ApIERFRl9WU1hf VU4oeHZjdnN4d2RwKSBERUZfVlNYX1VOKAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4 dmN2dXh3ZHApIERFRl9WU1hfVU4oeHZjdnNwc3h3cykKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgREVGX1ZTWF9VTih4dmN2c3B1eHdzKSBERUZfVlNYX1VOKHh2Y3ZkcHN4d3MpCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZfVlNYX1VOKHh2Y3ZkcHV4d3MpIERFRl9W U1hfVU4oeHZjdmRwc3ApCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVG X1ZTWF9VTih4dmN2c3BkcCkKLSsjdW5kZWYgREVGX1ZTWF9VTgotKwotKy8vIFZNWCB1bmFyeSBW WC1mb3JtOiAoNDw8MjYpIHwgVlJUPDwyMSB8IDA8PDE2IHwgVlJCPDwxMSB8IFhPCi0rI2RlZmlu ZSBERUZfVk1YX1VOQVJZKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKHVpbnQ4X3QgdnJ0LCB1aW50OF90 IHZyYikgeyBcCi0rICAgIE1PWl9BU1NFUlQodnJ0IDwgMzIgJiYgdnJiIDwgMzIpOyAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICJcdHZyJWQsdnIlZCIsIHZydCwgdnJi KTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMj b3AgfCB2cnQgPDwgMjEgfCB2cmIgPDwgMTEpOyAgICAgICBcCi0rICB9Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRl9WTVhfVU5BUlkodnVwa2hzYikgREVGX1ZN WF9VTkFSWSgKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ1 cGtsc2IpIERFRl9WTVhfVU5BUlkodnVwa2hzaCkKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERFRl9WTVhfVU5BUlkodnVwa2xzaCkKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZfVk1YX1VOQVJZKHZ1cGtoc3cp Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERF Rl9WTVhfVU5BUlkodnVwa2xzdykKLSsgICAgLy8gUE9XRVI5IHBlci1sYW5lIGludGVnZXIgbmVn YXRlLiBUaGUgVlJBIGZpZWxkIGhvbGRzIHRoZSBzdWJvcCBjb2RlCi0rICAgIC8vICg2IGZvciB2 bmVndywgNyBmb3Igdm5lZ2QpIHdoaWNoIGlzIGFscmVhZHkgYmFrZWQgaW50byBQUENfdm5lZ3t3 LGR9LgotKyAgICBERUZfVk1YX1VOQVJZKHZuZWd3KSBERUZfVk1YX1VOQVJZKHZuZWdkKSBERUZf Vk1YX1VOQVJZKHZwb3BjbnRiKQotKyN1bmRlZiBERUZfVk1YX1VOQVJZCi0rCi0rICAgIC8vIFBP V0VSOSBhZGRwY2lzIChEWC1mb3JtKS4gQ29tcHV0ZXMgclQgPSAoQ0lBICsgNCkgKyAoRCA8PCAx NikuCi0rICAgIC8vIEQgaXMgYSAxNi1iaXQgc2lnbmVkIGltbWVkaWF0ZSwgc3BsaXQgYWNyb3Nz IHRocmVlIGluc3RydWN0aW9uIGZpZWxkczoKLSsgICAgLy8gICBkMCA9IGJpdHMgMTYuLjI1ICgx MCBiaXRzLCBEWzE1OjZdKQotKyAgICAvLyAgIGQxID0gYml0cyAxMS4uMTUgKDUgYml0cywgIERb NToxXSkKLSsgICAgLy8gICBkMiA9IGJpdCAzMSAgICAgICgxIGJpdCwgICBEWzBdKQotKyAgICAv LyBQcmltYXJ5IG9wY29kZSAxOSwgRFggc3Vib3AgMi4KLSsgICAgQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfYWRkcGNpcyhSZWdpc3RlciBydCwgaW50MTZfdCBkKSB7Ci0rICBzcGV3KCJhZGRw Y2lzXHQlcywlZCIsIHJ0Lm5hbWUoKSwgKGludClkKTsKLSsgIHVpbnQzMl90IEQgPSB1aW50MTZf dChkKTsKLSsgIHVpbnQzMl90IGluc3QgPSAoMTl1IDw8IDI2KSB8ICh1aW50MzJfdChydC5jb2Rl KCkpIDw8IDIxKSB8Ci0rICAgICAgICAgICAgICAgICAgKChEID4+IDEpICYgMHgxRikgPDwgMTYg fCAoKEQgPj4gNikgJiAweDNGRikgPDwgNiB8Ci0rICAgICAgICAgICAgICAgICAgKDJ1IDw8IDEp IHwgKEQgJiAxdSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KGluc3QpOwotK30KLSsKLSsvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotKy8vIFBvd2VyIElTQSB2My4xIChQT1dFUjEwKSBwcmVmaXhlZCBp bnN0cnVjdGlvbnMuCi0rLy8KLSsvLyBMYXlvdXQ6Ci0rLy8KLSsvLyAgIFByZWZpeCB3b3JkIChC RSBiaXQgbnVtYmVyaW5nIGZyb20gdGhlIG1hbnVhbDsgTEUgYml0cyBpbiBwYXJlbnRoZXNlcyk6 Ci0rLy8gICAgIFswLi41XSAgIHByaW1hcnkgb3Bjb2RlID0gMSAgIChMRSAzMS4uMjYpCi0rLy8g ICAgIFs2Li43XSAgIFR5cGU6IDAwID0gOExTLCAxMCA9IE1MUyAgIChMRSAyNS4uMjQpCi0rLy8g ICAgIFs4Li4xMF0gIHJlc2VydmVkID0gMCAgIChMRSAyMy4uMjEpCi0rLy8gICAgIFsxMV0gICAg IFI6IDEgPSBQQy1yZWxhdGl2ZSAoUkEgbXVzdCBiZSByMCkgICAoTEUgMjApCi0rLy8gICAgIFsx Mi4uMTNdIHJlc2VydmVkID0gMCAgIChMRSAxOS4uMTgpCi0rLy8gICAgIFsxNC4uMzFdIGQwOiBo aWdoIDE4IGJpdHMgb2YgMzQtYml0IHNpZ25lZCBpbW1lZGlhdGUgICAoTEUgMTcuLjApCi0rLy8K LSsvLyAgIFN1ZmZpeCAocGFkZGkvcGxkLCBHUFIgdGFyZ2V0KToKLSsvLyAgICAgWzAuLjVdICAg c3VmZml4IG9wY29kZSAocGFkZGk9MTQsIHBsZD01NykgICAoTEUgMzEuLjI2KQotKy8vICAgICBb Ni4uMTBdICBSVCAgIChMRSAyNS4uMjEpCi0rLy8gICAgIFsxMS4uMTVdIFJBICAgKExFIDIwLi4x NikKLSsvLyAgICAgWzE2Li4zMV0gZDE6IGxvdyAxNiBiaXRzIG9mIGltbWVkaWF0ZSAgIChMRSAx NS4uMCkKLSsvLwotKy8vICAgU3VmZml4IChwbHh2LCBWU1IgdGFyZ2V0IOKAlCBoYXMgdGhlIFRY IGJpdCBhdCBzdWZmaXggYml0IDUvTEUgYml0IDI2KToKLSsvLyAgICAgWzAuLjRdICAgcGx4diA1 LWJpdCBvcGNvZGUgPSAxMTAwMSAoPTI1KSAgIChMRSAzMS4uMjcpCi0rLy8gICAgIFs1XSAgICAg IFRYIChoaWdoIGJpdCBvZiA2LWJpdCBYVCkgICAoTEUgMjYpCi0rLy8gICAgIFs2Li4xMF0gIFQg IChsb3cgNSBiaXRzIG9mIFhUKSAgIChMRSAyNS4uMjEpCi0rLy8gICAgIFsxMS4uMTVdIFJBICAg KExFIDIwLi4xNikKLSsvLyAgICAgWzE2Li4zMV0gZDEgICAoTEUgMTUuLjApCi0rLy8KLSsvLyBU aGUgcHJlZml4IGFuZCBzdWZmaXggb2YgYSBwcmVmaXhlZCBpbnN0cnVjdGlvbiBtdXN0IGxpZSBp biB0aGUgc2FtZQotKy8vIDY0LWJ5dGUgYWxpZ25lZCBibG9jayBhdCAqKnJ1bnRpbWUqKi4gVGhl IEppdENvZGUgYWxsb2NhdG9yIG9ubHkKLSsvLyBndWFyYW50ZWVzIDE2LWJ5dGUgYWxpZ25tZW50 LCBzbyB0aGUgYnVmZmVyLXJlbGF0aXZlIG9mZnNldCBhbmQgdGhlCi0rLy8gcnVudGltZSBhZGRy ZXNzIGNhbiBkaWZmZXIgYnkgMC8xNi8zMi80OCBtb2QgNjQuIEEgYnVmZmVyLW9ubHkgY2hlY2sK LSsvLyBgKGN1cnJlbnRPZmZzZXQoKSAmIDYzKSA9PSA2MGAgaXMgY29ycmVjdCB3aGVuIHRoZSBh bGxvY2F0b3IgYmFzZSBpcwotKy8vIDY0LWFsaWduZWQgYnV0IG1pc3NlcyB0aHJlZSBvZiB0aGUg Zm91ciAxNi1hbGlnbmVkIGJhc2UgY2xhc3NlcyDigJQgcGFkCi0rLy8gd2hlbmV2ZXIgYChjdXJy ZW50T2Zmc2V0KCkgJiAxNSkgPT0gMTJgLCB3aGljaCBjYXRjaGVzIGFsbCBmb3VyLiBUaGUKLSsv LyBlbnRlck5vUG9vbCBndWFyZCBwcmV2ZW50cyB0aGUgY29uc3RhbnQtcG9vbCBmbHVzaGVyIGZy b20gaW5zZXJ0aW5nCi0rLy8gYm9kaWVzIGJldHdlZW4gdGhlIChvcHRpb25hbCkgbm9wLCBwcmVm aXgsIGFuZCBzdWZmaXguCi0rCi0rc3RhdGljIHVpbnQzMl90IEVuY29kZVBvd2VyMTBQcmVmaXgo dWludDMyX3QgdHlwZSwgYm9vbCBSLCB1aW50MzJfdCBkMCkgewotKyAgTU9aX0FTU0VSVCh0eXBl ID09IDAgfHwgdHlwZSA9PSAyKTsgIC8vIDhMUz0wLCBNTFM9MgotKyAgTU9aX0FTU0VSVChkMCA8 ICgxdSA8PCAxOCkpOwotKyAgcmV0dXJuICgxdSA8PCAyNikgfCAodHlwZSA8PCAyNCkgfCAodWlu dDMyX3QoUiA/IDEgOiAwKSA8PCAyMCkgfAotKyAgICAgICAgIChkMCAmIDB4M0ZGRkZ1KTsKLSt9 Ci0rCi0rc3RhdGljIHZvaWQgU3BsaXRJbW0zNChpbnQ2NF90IGltbTM0LCB1aW50MzJfdCogZDAs IHVpbnQzMl90KiBkMSkgewotKyAgTU9aX0FTU0VSVChpbW0zNCA+PSAtKGludDY0X3QoMSkgPDwg MzMpKTsKLSsgIE1PWl9BU1NFUlQoaW1tMzQgPCAoaW50NjRfdCgxKSA8PCAzMykpOwotKyAgdWlu dDY0X3QgdSA9IHVpbnQ2NF90KGltbTM0KSAmIDB4M0ZGRkZGRkZGdWxsOyAgLy8gbG93IDM0IGJp dHMKLSsgICpkMCA9IHVpbnQzMl90KHUgPj4gMTYpICYgMHgzRkZGRnU7ICAgICAgICAgICAgIC8v IDE4IGJpdHMKLSsgICpkMSA9IHVpbnQzMl90KHUpICYgMHhGRkZGdTsgICAgICAgICAgICAgICAg ICAgIC8vIDE2IGJpdHMKLSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OmVuc3VyZVByZWZpeGVkQWxp Z25tZW50KCkgewotKyAgaWYgKChjdXJyZW50T2Zmc2V0KCkgJiAxNSkgPT0gMTIpIHsKLSsgICAg YXNfbm9wKCk7Ci0rICB9Ci0rfQotKwotKy8vIHBhZGRpIFJULCBSQSwgU0ksIFIgICAoTUxTLCBz dWZmaXggb3Bjb2RlIDE0ID0gYWRkaSkKLSsvLyAgIFI9MDogUlQgPSAoUkE9PTAgPyAwIDogUkEp ICsgc2lnbl9leHRlbmQoU0ksIDM0KQotKy8vICAgUj0xOiBSVCA9IENJQShwcmVmaXgpICsgc2ln bl9leHRlbmQoU0ksIDM0KSAgIChSQSBtdXN0IGJlIHIwKQotK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzX3BhZGRpKFJlZ2lzdGVyIHJ0LCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKSB7Ci0rICBNT1pfQVNTRVJU X0lGKFIsIHJhID09IHIwKTsKLSsgIHNwZXcoInBhZGRpXHQlcywlcywlbGxkLCVkIiwgcnQubmFt ZSgpLCByYS5uYW1lKCksIChsb25nIGxvbmcpaW1tMzQsCi0rICAgICAgIFIgPyAxIDogMCk7Ci0r ICB1aW50MzJfdCBkMCwgZDE7Ci0rICBTcGxpdEltbTM0KGltbTM0LCAmZDAsICZkMSk7Ci0rICB1 aW50MzJfdCBwcmVmaXggPSBFbmNvZGVQb3dlcjEwUHJlZml4KC8qdHlwZT1NTFMqLyAyLCBSLCBk MCk7Ci0rICB1aW50MzJfdCBzdWZmaXggPSAoMTR1IDw8IDI2KSB8ICh1aW50MzJfdChydC5jb2Rl KCkpIDw8IDIxKSB8Ci0rICAgICAgICAgICAgICAgICAgICAodWludDMyX3QocmEuY29kZSgpKSA8 PCAxNikgfCBkMTsKLSsgIC8vIFJlc2VydmF0aW9uID0gbm9wICh3b3JzdCBjYXNlKSArIHByZWZp eCArIHN1ZmZpeC4KLSsgIG1fYnVmZmVyLmVudGVyTm9Qb29sKDMpOwotKyAgZW5zdXJlUHJlZml4 ZWRBbGlnbm1lbnQoKTsKLSsgIEJ1ZmZlck9mZnNldCBibyA9IHdyaXRlSW5zdChwcmVmaXgpOwot KyAgd3JpdGVJbnN0KHN1ZmZpeCk7Ci0rICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwotKyAgcmV0 dXJuIGJvOwotK30KLSsKLSsvLyBwbGQgUlQsIEQoUkEpLCBSICAgKDhMUywgc3VmZml4IG9wY29k ZSA1NykKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19wbGQoUmVnaXN0ZXIgcnQsIFJlZ2lz dGVyIHJhLCBpbnQ2NF90IGltbTM0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBSKSB7Ci0rICBNT1pfQVNTRVJUX0lGKFIsIHJhID09IHIwKTsKLSsgIHNwZXcoInBsZFx0 JXMsJWxsZCglcyksJWQiLCBydC5uYW1lKCksIChsb25nIGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwK LSsgICAgICAgUiA/IDEgOiAwKTsKLSsgIHVpbnQzMl90IGQwLCBkMTsKLSsgIFNwbGl0SW1tMzQo aW1tMzQsICZkMCwgJmQxKTsKLSsgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVm aXgoLyp0eXBlPThMUyovIDAsIFIsIGQwKTsKLSsgIHVpbnQzMl90IHN1ZmZpeCA9ICg1N3UgPDwg MjYpIHwgKHVpbnQzMl90KHJ0LmNvZGUoKSkgPDwgMjEpIHwKLSsgICAgICAgICAgICAgICAgICAg ICh1aW50MzJfdChyYS5jb2RlKCkpIDw8IDE2KSB8IGQxOwotKyAgbV9idWZmZXIuZW50ZXJOb1Bv b2woMyk7Ci0rICBlbnN1cmVQcmVmaXhlZEFsaWdubWVudCgpOwotKyAgQnVmZmVyT2Zmc2V0IGJv ID0gd3JpdGVJbnN0KHByZWZpeCk7Ci0rICB3cml0ZUluc3Qoc3VmZml4KTsKLSsgIG1fYnVmZmVy LmxlYXZlTm9Qb29sKCk7Ci0rICByZXR1cm4gYm87Ci0rfQotKwotKy8vIHBseHYgWFQsIEQoUkEp LCBSICAgKDhMUywgNS1iaXQgc3VmZml4IG9wY29kZSAyNSwgVFggaW4gc3VmZml4IGJpdCAyNikK LSsvLyAgIFhUIGlzIDYtYml0OiBUWCAoaGlnaCkgfHwgVCAobG93IDUpIOKAlCBtYXRjaGVzIGx4 dnggY29udmVudGlvbi4KLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19wbHh2KHVpbnQ4X3Qg eHQsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wgUikgewotKyAgTU9aX0FTU0VSVCh4dCA8IDY0KTsKLSsgIE1PWl9BU1NF UlRfSUYoUiwgcmEgPT0gcjApOwotKyAgc3BldygicGx4dlx0dnMldSwlbGxkKCVzKSwlZCIsIHh0 LCAobG9uZyBsb25nKWltbTM0LCByYS5uYW1lKCksCi0rICAgICAgIFIgPyAxIDogMCk7Ci0rICB1 aW50MzJfdCBkMCwgZDE7Ci0rICBTcGxpdEltbTM0KGltbTM0LCAmZDAsICZkMSk7Ci0rICB1aW50 MzJfdCBwcmVmaXggPSBFbmNvZGVQb3dlcjEwUHJlZml4KC8qdHlwZT04TFMqLyAwLCBSLCBkMCk7 Ci0rICB1aW50MzJfdCBUID0geHQgJiAweDFGdTsKLSsgIHVpbnQzMl90IFRYID0gKHh0ID4+IDUp ICYgMXU7Ci0rICB1aW50MzJfdCBzdWZmaXggPSAoMjV1IDw8IDI3KSB8IChUWCA8PCAyNikgfCAo VCA8PCAyMSkgfAotKyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwg MTYpIHwgZDE7Ci0rICBtX2J1ZmZlci5lbnRlck5vUG9vbCgzKTsKLSsgIGVuc3VyZVByZWZpeGVk QWxpZ25tZW50KCk7Ci0rICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0ZUluc3QocHJlZml4KTsKLSsg IHdyaXRlSW5zdChzdWZmaXgpOwotKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgIHJldHVy biBibzsKLSt9Ci0rCi0rLy8gcGxmZCBGUlQsIEQoUkEpLCBSICAgKE1MUywgc3VmZml4IG9wY29k ZSA1MDsgRC1mb3JtLWxpa2UgRlBSIGxvYWQpCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNf cGxmZChGbG9hdFJlZ2lzdGVyIGZydCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKSB7Ci0rICBNT1pfQVNTRVJUX0lG KFIsIHJhID09IHIwKTsKLSsgIHNwZXcoInBsZmRcdGYldSwlbGxkKCVzKSwlZCIsIHVpbnQzMl90 KGZydC5lbmNvZGluZygpKSwKLSsgICAgICAgKGxvbmcgbG9uZylpbW0zNCwgcmEubmFtZSgpLCBS ID8gMSA6IDApOwotKyAgdWludDMyX3QgZDAsIGQxOwotKyAgU3BsaXRJbW0zNChpbW0zNCwgJmQw LCAmZDEpOwotKyAgdWludDMyX3QgcHJlZml4ID0gRW5jb2RlUG93ZXIxMFByZWZpeCgvKnR5cGU9 TUxTKi8gMiwgUiwgZDApOwotKyAgdWludDMyX3Qgc3VmZml4ID0gKDUwdSA8PCAyNikgfCAodWlu dDMyX3QoZnJ0LmVuY29kaW5nKCkpIDw8IDIxKSB8Ci0rICAgICAgICAgICAgICAgICAgICAodWlu dDMyX3QocmEuY29kZSgpKSA8PCAxNikgfCBkMTsKLSsgIG1fYnVmZmVyLmVudGVyTm9Qb29sKDMp OwotKyAgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsKLSsgIEJ1ZmZlck9mZnNldCBibyA9IHdy aXRlSW5zdChwcmVmaXgpOwotKyAgd3JpdGVJbnN0KHN1ZmZpeCk7Ci0rICBtX2J1ZmZlci5sZWF2 ZU5vUG9vbCgpOwotKyAgcmV0dXJuIGJvOwotK30KLSsKLSsvLyBwbGZzIEZSVCwgRChSQSksIFIg ICAoTUxTLCBzdWZmaXggb3Bjb2RlIDQ4OyB3aWRlbnMgc2luZ2xlIOKGkiBkb3VibGUgaW4gRlBS KQotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3BsZnMoRmxvYXRSZWdpc3RlciBmcnQsIFJl Z2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2wgUikgewotKyAgTU9aX0FTU0VSVF9JRihSLCByYSA9PSByMCk7Ci0rICBzcGV3KCJw bGZzXHRmJXUsJWxsZCglcyksJWQiLCB1aW50MzJfdChmcnQuZW5jb2RpbmcoKSksCi0rICAgICAg IChsb25nIGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwgUiA/IDEgOiAwKTsKLSsgIHVpbnQzMl90IGQw LCBkMTsKLSsgIFNwbGl0SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsKLSsgIHVpbnQzMl90IHByZWZp eCA9IEVuY29kZVBvd2VyMTBQcmVmaXgoLyp0eXBlPU1MUyovIDIsIFIsIGQwKTsKLSsgIHVpbnQz Ml90IHN1ZmZpeCA9ICg0OHUgPDwgMjYpIHwgKHVpbnQzMl90KGZydC5lbmNvZGluZygpKSA8PCAy MSkgfAotKyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwgMTYpIHwg ZDE7Ci0rICBtX2J1ZmZlci5lbnRlck5vUG9vbCgzKTsKLSsgIGVuc3VyZVByZWZpeGVkQWxpZ25t ZW50KCk7Ci0rICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0ZUluc3QocHJlZml4KTsKLSsgIHdyaXRl SW5zdChzdWZmaXgpOwotKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgIHJldHVybiBibzsK LSt9Ci0rCi0rLy8gcHN0ZCBSUywgRChSQSksIFIgICAoOExTLCBzdWZmaXggb3Bjb2RlIDYxID0g c3RkIEQtZm9ybSkKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19wc3RkKFJlZ2lzdGVyIHJz LCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIFIpIHsKLSsgIE1PWl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOwotKyAgc3Bl dygicHN0ZFx0JXMsJWxsZCglcyksJWQiLCBycy5uYW1lKCksIChsb25nIGxvbmcpaW1tMzQsIHJh Lm5hbWUoKSwKLSsgICAgICAgUiA/IDEgOiAwKTsKLSsgIHVpbnQzMl90IGQwLCBkMTsKLSsgIFNw bGl0SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsKLSsgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBv d2VyMTBQcmVmaXgoLyp0eXBlPThMUyovIDAsIFIsIGQwKTsKLSsgIHVpbnQzMl90IHN1ZmZpeCA9 ICg2MXUgPDwgMjYpIHwgKHVpbnQzMl90KHJzLmNvZGUoKSkgPDwgMjEpIHwKLSsgICAgICAgICAg ICAgICAgICAgICh1aW50MzJfdChyYS5jb2RlKCkpIDw8IDE2KSB8IGQxOwotKyAgbV9idWZmZXIu ZW50ZXJOb1Bvb2woMyk7Ci0rICBlbnN1cmVQcmVmaXhlZEFsaWdubWVudCgpOwotKyAgQnVmZmVy T2Zmc2V0IGJvID0gd3JpdGVJbnN0KHByZWZpeCk7Ci0rICB3cml0ZUluc3Qoc3VmZml4KTsKLSsg IG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7Ci0rICByZXR1cm4gYm87Ci0rfQotKwotKy8vIHBzdHh2 IFhTLCBEKFJBKSwgUiAgICg4TFMsIDUtYml0IHN1ZmZpeCBvcGNvZGUgMjcsIFNYIGluIHN1ZmZp eCBiaXQgMjYpCi0rLy8gICBYUyBpcyA2LWJpdDogU1ggKGhpZ2gpIHx8IFMgKGxvdyA1KSDigJQg bWF0Y2hlcyBzdHh2eCBjb252ZW50aW9uLgotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3Bz dHh2KHVpbnQ4X3QgeHMsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpIHsKLSsgIE1PWl9BU1NFUlQoeHMgPCA2NCk7 Ci0rICBNT1pfQVNTRVJUX0lGKFIsIHJhID09IHIwKTsKLSsgIHNwZXcoInBzdHh2XHR2cyV1LCVs bGQoJXMpLCVkIiwgeHMsIChsb25nIGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwKLSsgICAgICAgUiA/ IDEgOiAwKTsKLSsgIHVpbnQzMl90IGQwLCBkMTsKLSsgIFNwbGl0SW1tMzQoaW1tMzQsICZkMCwg JmQxKTsKLSsgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVmaXgoLyp0eXBlPThM UyovIDAsIFIsIGQwKTsKLSsgIHVpbnQzMl90IHN4ID0gKHhzID4+IDUpICYgMTsKLSsgIHVpbnQz Ml90IHMgPSB4cyAmIDB4MUY7Ci0rICB1aW50MzJfdCBzdWZmaXggPSAoMjd1IDw8IDI3KSB8IChz eCA8PCAyNikgfCAocyA8PCAyMSkgfAotKyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHJh LmNvZGUoKSkgPDwgMTYpIHwgZDE7Ci0rICBtX2J1ZmZlci5lbnRlck5vUG9vbCgzKTsKLSsgIGVu c3VyZVByZWZpeGVkQWxpZ25tZW50KCk7Ci0rICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0ZUluc3Qo cHJlZml4KTsKLSsgIHdyaXRlSW5zdChzdWZmaXgpOwotKyAgbV9idWZmZXIubGVhdmVOb1Bvb2wo KTsKLSsgIHJldHVybiBibzsKLSt9Ci0rCi0rLy8gcHN0ZmQgRlJTLCBEKFJBKSwgUiAgIChNTFMs IHN1ZmZpeCBvcGNvZGUgNTQgPSBzdGZkKQotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3Bz dGZkKEZsb2F0UmVnaXN0ZXIgZnJzLCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKSB7Ci0rICBNT1pfQVNTRVJUX0lG KFIsIHJhID09IHIwKTsKLSsgIHNwZXcoInBzdGZkXHRmJXUsJWxsZCglcyksJWQiLCB1aW50MzJf dChmcnMuZW5jb2RpbmcoKSksCi0rICAgICAgIChsb25nIGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwg UiA/IDEgOiAwKTsKLSsgIHVpbnQzMl90IGQwLCBkMTsKLSsgIFNwbGl0SW1tMzQoaW1tMzQsICZk MCwgJmQxKTsKLSsgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVmaXgoLyp0eXBl PU1MUyovIDIsIFIsIGQwKTsKLSsgIHVpbnQzMl90IHN1ZmZpeCA9ICg1NHUgPDwgMjYpIHwgKHVp bnQzMl90KGZycy5lbmNvZGluZygpKSA8PCAyMSkgfAotKyAgICAgICAgICAgICAgICAgICAgKHVp bnQzMl90KHJhLmNvZGUoKSkgPDwgMTYpIHwgZDE7Ci0rICBtX2J1ZmZlci5lbnRlck5vUG9vbCgz KTsKLSsgIGVuc3VyZVByZWZpeGVkQWxpZ25tZW50KCk7Ci0rICBCdWZmZXJPZmZzZXQgYm8gPSB3 cml0ZUluc3QocHJlZml4KTsKLSsgIHdyaXRlSW5zdChzdWZmaXgpOwotKyAgbV9idWZmZXIubGVh dmVOb1Bvb2woKTsKLSsgIHJldHVybiBibzsKLSt9Ci0rCi0rLy8gcHN0ZnMgRlJTLCBEKFJBKSwg UiAgIChNTFMsIHN1ZmZpeCBvcGNvZGUgNTIgPSBzdGZzKQotK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzX3BzdGZzKEZsb2F0UmVnaXN0ZXIgZnJzLCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0z NCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKSB7Ci0rICBNT1pf QVNTRVJUX0lGKFIsIHJhID09IHIwKTsKLSsgIHNwZXcoInBzdGZzXHRmJXUsJWxsZCglcyksJWQi LCB1aW50MzJfdChmcnMuZW5jb2RpbmcoKSksCi0rICAgICAgIChsb25nIGxvbmcpaW1tMzQsIHJh Lm5hbWUoKSwgUiA/IDEgOiAwKTsKLSsgIHVpbnQzMl90IGQwLCBkMTsKLSsgIFNwbGl0SW1tMzQo aW1tMzQsICZkMCwgJmQxKTsKLSsgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVm aXgoLyp0eXBlPU1MUyovIDIsIFIsIGQwKTsKLSsgIHVpbnQzMl90IHN1ZmZpeCA9ICg1MnUgPDwg MjYpIHwgKHVpbnQzMl90KGZycy5lbmNvZGluZygpKSA8PCAyMSkgfAotKyAgICAgICAgICAgICAg ICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwgMTYpIHwgZDE7Ci0rICBtX2J1ZmZlci5lbnRl ck5vUG9vbCgzKTsKLSsgIGVuc3VyZVByZWZpeGVkQWxpZ25tZW50KCk7Ci0rICBCdWZmZXJPZmZz ZXQgYm8gPSB3cml0ZUluc3QocHJlZml4KTsKLSsgIHdyaXRlSW5zdChzdWZmaXgpOwotKyAgbV9i dWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgIHJldHVybiBibzsKLSt9Ci0rCi0rLy8gUE9XRVIxMCAo SVNBIDMuMSkgVmVjdG9yIEV4dHJhY3QgTWFzay4gUlQgKEdQUikgZ2V0cyB0aGUgd2FzbS1zcGVj Ci0rLy8gYml0bWFzayAob25lIGJpdCBwZXIgbGFuZSBNU0IpIGRpcmVjdGx5IGluIGxvdyAxNi84 LzQvMiBiaXRzLiBVSU0KLSsvLyBpcyBiYWtlZCBpbnRvIFBQQ192ZXh0cmFjdHtiLGgsdyxkfW0g KDgvOS8xMC8xMSkuIENhbGxlciBtdXN0IGhhdmUKLSsvLyB2ZXJpZmllZCBIYXNQT1dFUjEwKCku Ci0rI2RlZmluZSBERUZfVkVYVFJBQ1RfTShvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNv cChSZWdpc3RlciBydCwgRmxvYXRSZWdpc3RlciB2cmIpIHsgICAgICAgIFwKLSsgICAgc3Bldygj b3AgIlx0JXMsdnIldSIsIHJ0Lm5hbWUoKSwgdWludDMyX3QodnJiLmVuY29kaW5nKCkgJiAzMSkp OyAgICAgICBcCi0rICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCAodWludDMyX3QocnQu Y29kZSgpKSA8PCAyMSkgfCAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICgo dWludDMyX3QodnJiLmVuY29kaW5nKCkpICYgMzEpIDw8IDExKSk7ICAgICAgICAgICAgIFwKLSsg IH0KLStERUZfVkVYVFJBQ1RfTSh2ZXh0cmFjdGJtKQotK0RFRl9WRVhUUkFDVF9NKHZleHRyYWN0 aG0pCi0rREVGX1ZFWFRSQUNUX00odmV4dHJhY3R3bSkKLStERUZfVkVYVFJBQ1RfTSh2ZXh0cmFj dGRtKQotKyN1bmRlZiBERUZfVkVYVFJBQ1RfTQotKwotKy8vIFBPV0VSMTAgKElTQSAzLjEpIFZl Y3RvciBJbnNlcnQgV29yZC9Eb3VibGV3b3JkIGZyb20gR1BSLiBWWC1mb3JtOgotKy8vIFZSVCBh dCBiaXRzIDIxLi4yNSwgVUlNIGF0IGJpdHMgMTYuLjIwLCBSQiBhdCBiaXRzIDExLi4xNS4KLSsj ZGVmaW5lIERFRl9WSU5TKG9wLCBtYXhfdWltKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKEZs b2F0UmVnaXN0ZXIgdnJ0LCBSZWdpc3RlciByYiwgICAgICAgICAgXAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVpbSkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgTU9aX0FTU0VSVCh1aW0gPD0gKG1heF91aW0pKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICJcdHZyJXUsJXMsJXUi LCB1aW50MzJfdCh2cnQuZW5jb2RpbmcoKSAmIDMxKSwgcmIubmFtZSgpLCAgICAgXAotKyAgICAg ICAgIHVpbnQzMl90KHVpbSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAg ICAgKCh1aW50MzJfdCh2cnQuZW5jb2RpbmcoKSkgJiAzMSkgPDwgMjEpIHwgICAgICAgICAgICAg XAotKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCh1aW0pIDw8IDE2KSB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAodWludDMyX3Qo cmIuY29kZSgpKSA8PCAxMSkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9Ci0rREVG X1ZJTlModmluc3csIDEyKQotK0RFRl9WSU5TKHZpbnNkLCA4KQotKyN1bmRlZiBERUZfVklOUwot KwotKy8vIFBPV0VSMTAgKElTQSAzLjEpIFZlY3RvciBJbnNlcnQgYnl0ZS9oYWxmd29yZCBmcm9t IEdQUiB3aXRoCi0rLy8gcmVnaXN0ZXItc3VwcGxpZWQgYnl0ZSBwb3NpdGlvbi4gVlgtZm9ybTog VlJUIGF0IGJpdHMgMjEuLjI1LAotKy8vIFJBIGF0IGJpdHMgMTYuLjIwLCBSQiBhdCBiaXRzIDEx Li4xNS4gInJ4IiBpcyByaWdodC1pbmRleGVkCi0rLy8gKExFLW5hdHVyYWwg4oCUIGluZGV4IDAg PSBMU0IgYnl0ZSkuCi0rI2RlZmluZSBERUZfVklOU19SWChvcCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHZydCwgUmVnaXN0ZXIgcmEsICAgICAgICAgIFwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmIpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICJcdHZyJXUsJXMsJXMiLCB1aW50 MzJfdCh2cnQuZW5jb2RpbmcoKSAmIDMxKSwgcmEubmFtZSgpLCAgICAgXAotKyAgICAgICAgIHJi Lm5hbWUoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgKCh1 aW50MzJfdCh2cnQuZW5jb2RpbmcoKSkgJiAzMSkgPDwgMjEpIHwgICAgICAgICAgICAgXAotKyAg ICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChyYS5jb2RlKCkpIDw8IDE2KSB8ICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QocmIuY29k ZSgpKSA8PCAxMSkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9Ci0rREVGX1ZJTlNf Ulgodmluc2JyeCkKLStERUZfVklOU19SWCh2aW5zaHJ4KQotKyN1bmRlZiBERUZfVklOU19SWAot KwotKy8vIFBPV0VSOSAoSVNBIDMuMCkgVi1mb3JtIDMtb3BlcmFuZCBpbnN0cnVjdGlvbnMgd2l0 aCBWUlQsIFVJTSwgVlJCIGF0Ci0rLy8gYml0cyAyMS4uMjUsIDE2Li4yMCwgMTEuLjE1IHJlc3Bl Y3RpdmVseSAodmluc2VydHtiLGh9LCB2ZXh0cmFjdHt1Yix1aH0pLgotKy8vIFNpbWQxMjggbGl2 ZXMgaW4gVlNSMzItNjMgKD0gVlIwLTMxKSwgc28gd2UgbWFzayBWUlQgYW5kIFZSQiB0byB0aGUK LSsvLyA1LWJpdCBWUiBmaWVsZCB2aWEgYGVuY29kaW5nKCkgJiAzMWAuCi0rI2RlZmluZSBERUZf VlJUX1VJTV9WUkIob3AsIG1heF91aW0sIHVpbV9zdGVwKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3Rl ciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJiLCAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QgdWltKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICBNT1pfQVNTRVJUKHVpbSA8PSAobWF4X3VpbSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgTU9aX0FTU0VSVCgodWltKSAlICh1aW1fc3RlcCkgPT0g MCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICJc dHZyJXUsdnIldSwldSIsIHVpbnQzMl90KHZydC5lbmNvZGluZygpICYgMzEpLCAgICAgICAgICAg ICAgXAotKyAgICAgICAgIHVpbnQzMl90KHZyYi5lbmNvZGluZygpICYgMzEpLCB1aW50MzJfdCh1 aW0pKTsgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgcmV0dXJuIHdyaXRlSW5zdChQUENfIyNv cCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgICAgICAgICAgICAgKCh1aW50MzJfdCh2cnQuZW5jb2RpbmcoKSkgJiAzMSkgPDwgMjEpIHwg ICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCh1aW0pIDw8IDE2 KSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAg ICAoKHVpbnQzMl90KHZyYi5lbmNvZGluZygpKSAmIDMxKSA8PCAxMSkpOyAgICAgICAgICAgICBc Ci0rICB9Ci0rREVGX1ZSVF9VSU1fVlJCKHZpbnNlcnRiLCAxNSwgMSkKLStERUZfVlJUX1VJTV9W UkIodmluc2VydGgsIDE0LCAyKQotK0RFRl9WUlRfVUlNX1ZSQih2ZXh0cmFjdHViLCAxNSwgMSkK LStERUZfVlJUX1VJTV9WUkIodmV4dHJhY3R1aCwgMTQsIDIpCi0rI3VuZGVmIERFRl9WUlRfVUlN X1ZSQgotKwotKy8vIFZNWCBiaW5hcnkgVlgtZm9ybSBwYWNrL21lcmdlIChyZS11c2UgREVGX1ZN WF9WVlYgcGF0dGVybikuCi0rI2RlZmluZSBERUZfVk1YX1ZWVihvcCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfIyNvcCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKSB7 IFwKLSsgICAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAzMiAmJiB2cmIgPCAzMik7ICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHNwZXcoI29wICJcdHZyJWQsdnIlZCx2ciVk IiwgdnJ0LCB2cmEsIHZyYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICByZXR1 cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgdnJ0IDw8IDIxIHwgdnJhIDw8IDE2IHwgdnJiIDw8IDEx KTsgICAgICAgIFwKLSsgIH0KLStERUZfVk1YX1ZWVih2cGtzaHNzKQotK0RFRl9WTVhfVlZWKHZw a3N3c3MpIERFRl9WTVhfVlZWKHZwa3NodXMpIERFRl9WTVhfVlZWKHZwa3N3dXMpCi0rICAgIERF Rl9WTVhfVlZWKHZtcmdoYikKLSsgICAgICAgIERFRl9WTVhfVlZWKHZtcmdoaCkgREVGX1ZNWF9W VlYodm1yZ2h3KSBERUZfVk1YX1ZWVih2bXJnbGIpCi0rICAgICAgICAgICAgREVGX1ZNWF9WVlYo dm1yZ2xoKSBERUZfVk1YX1ZWVih2bXJnbHcpIERFRl9WTVhfVlZWKHZtdWxlc2IpCi0rICAgICAg ICAgICAgICAgIERFRl9WTVhfVlZWKHZtdWxvc2IpIERFRl9WTVhfVlZWKHZtdWxldWIpIERFRl9W TVhfVlZWKHZtdWxvdWIpCi0rICAgICAgICAgICAgICAgICAgICBERUZfVk1YX1ZWVih2bXVsZXNo KSBERUZfVk1YX1ZWVih2bXVsb3NoKQotKyAgICAgICAgICAgICAgICAgICAgICAgIERFRl9WTVhf VlZWKHZtdWxldWgpIERFRl9WTVhfVlZWKHZtdWxvdWgpCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERFRl9WTVhfVlZWKHZtdWxlc3cpIERFRl9WTVhfVlZWKHZtdWxvc3cpCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBERUZfVk1YX1ZWVih2bXVsZXV3KSBERUZfVk1YX1ZW Vih2bXVsb3V3KQotKyN1bmRlZiBERUZfVk1YX1ZWVgotKwotKyAgICAvLyB2cGVybSBWQS1mb3Jt OiAoNDw8MjYpIHwgVlJUPDwyMSB8IFZSQTw8MTYgfCBWUkI8PDExIHwgVlJDPDw2IHwgWE8KLSsg ICAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdnBlcm0odWludDhfdCB2cnQsIHVpbnQ4X3Qg dnJhLCB1aW50OF90IHZyYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDhfdCB2cmMpIHsKLSsgIE1PWl9BU1NFUlQodnJ0IDwgMzIgJiYgdnJhIDwgMzIgJiYgdnJi IDwgMzIgJiYgdnJjIDwgMzIpOwotKyAgc3BldygidnBlcm1cdHZyJWQsdnIlZCx2ciVkLHZyJWQi LCB2cnQsIHZyYSwgdnJiLCB2cmMpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdnBlcm0gfCB2 cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEgfCB2cmMgPDwgNik7Ci0rfQotKwotKy8v IFZBLWZvcm0gdGVybmFyeSBWTVg6ICg0PDwyNikgfCBWUlQ8PDIxIHwgVlJBPDwxNiB8IFZSQjw8 MTEgfCBWUkM8PDYgfAotKy8vIFhPKDYtYml0KQotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFz X3ZtbGFkZHVobSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHZyYykgewotKyAgTU9aX0FT U0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAzMiAmJiB2cmIgPCAzMiAmJiB2cmMgPCAzMik7Ci0rICBz cGV3KCJ2bWxhZGR1aG1cdHZyJWQsdnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiLCB2cmMp OwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdm1sYWRkdWhtIHwgdnJ0IDw8IDIxIHwgdnJhIDw8 IDE2IHwgdnJiIDw8IDExIHwKLSsgICAgICAgICAgICAgICAgICAgdnJjIDw8IDYpOwotK30KLSsK LStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc192bWhyYWRkc2hzKHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYSwgdWludDhfdCB2cmIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50OF90IHZyYykgewotKyAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAzMiAm JiB2cmIgPCAzMiAmJiB2cmMgPCAzMik7Ci0rICBzcGV3KCJ2bWhyYWRkc2hzXHR2ciVkLHZyJWQs dnIlZCx2ciVkIiwgdnJ0LCB2cmEsIHZyYiwgdnJjKTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBD X3ZtaHJhZGRzaHMgfCB2cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEgfAotKyAgICAg ICAgICAgICAgICAgICB2cmMgPDwgNik7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzX3Ztc3Vtc2htKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB2cmMpIHsKLSsgIE1PWl9B U1NFUlQodnJ0IDwgMzIgJiYgdnJhIDwgMzIgJiYgdnJiIDwgMzIgJiYgdnJjIDwgMzIpOwotKyAg c3Bldygidm1zdW1zaG1cdHZyJWQsdnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiLCB2cmMp OwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdm1zdW1zaG0gfCB2cnQgPDwgMjEgfCB2cmEgPDwg MTYgfCB2cmIgPDwgMTEgfAotKyAgICAgICAgICAgICAgICAgICB2cmMgPDwgNik7Ci0rfQotKwot K0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3Ztc3VtdWhtKHVpbnQ4X3QgdnJ0LCB1aW50OF90 IHZyYSwgdWludDhfdCB2cmIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDhfdCB2cmMpIHsKLSsgIE1PWl9BU1NFUlQodnJ0IDwgMzIgJiYgdnJhIDwgMzIgJiYgdnJi IDwgMzIgJiYgdnJjIDwgMzIpOwotKyAgc3Bldygidm1zdW11aG1cdHZyJWQsdnIlZCx2ciVkLHZy JWQiLCB2cnQsIHZyYSwgdnJiLCB2cmMpOwotKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdm1zdW11 aG0gfCB2cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEgfAotKyAgICAgICAgICAgICAg ICAgICB2cmMgPDwgNik7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3ZzcGx0 aXNiKHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2ltbTUpIHsKLSsgIE1PWl9BU1NFUlQodnJ0IDwgMzIp OwotKyAgTU9aX0FTU0VSVChzaW1tNSA+PSAtMTYgJiYgc2ltbTUgPD0gMTUpOwotKyAgc3Bldygi dnNwbHRpc2JcdHZyJWQsJWQiLCB2cnQsIHNpbW01KTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBD X3ZzcGx0aXNiIHwgdWludDMyX3QodnJ0KSA8PCAyMSB8Ci0rICAgICAgICAgICAgICAgICAgICh1 aW50MzJfdChzaW1tNSkgJiAweDFGKSA8PCAxNik7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzX3ZzcGx0aXNoKHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2ltbTUpIHsKLSsgIE1PWl9B U1NFUlQodnJ0IDwgMzIpOwotKyAgTU9aX0FTU0VSVChzaW1tNSA+PSAtMTYgJiYgc2ltbTUgPD0g MTUpOwotKyAgc3BldygidnNwbHRpc2hcdHZyJWQsJWQiLCB2cnQsIHNpbW01KTsKLSsgIHJldHVy biB3cml0ZUluc3QoUFBDX3ZzcGx0aXNoIHwgdWludDMyX3QodnJ0KSA8PCAyMSB8Ci0rICAgICAg ICAgICAgICAgICAgICh1aW50MzJfdChzaW1tNSkgJiAweDFGKSA8PCAxNik7Ci0rfQotKwotK0J1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3ZzcGx0aXN3KHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2lt bTUpIHsKLSsgIE1PWl9BU1NFUlQodnJ0IDwgMzIpOwotKyAgTU9aX0FTU0VSVChzaW1tNSA+PSAt MTYgJiYgc2ltbTUgPD0gMTUpOwotKyAgc3BldygidnNwbHRpc3dcdHZyJWQsJWQiLCB2cnQsIHNp bW01KTsKLSsgIHJldHVybiB3cml0ZUluc3QoUFBDX3ZzcGx0aXN3IHwgdWludDMyX3QodnJ0KSA8 PCAyMSB8Ci0rICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChzaW1tNSkgJiAweDFGKSA8PCAx Nik7Ci0rfQotKwotKy8vIC0tLSBDb252ZW5pZW5jZSBwc2V1ZG8taW5zdHJ1Y3Rpb25zIC0tLQot KwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX3RyYXAoKSB7Ci0rICBzcGV3KCJ0cmFwIEAg JTA4eCIsIGN1cnJlbnRPZmZzZXQoKSk7Ci0rICByZXR1cm4gd3JpdGVJbnN0KFBQQ190cmFwKTsK LSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eHNfdHJhcF90YWdnZWQoVHJhcFRhZyB0 YWcpIHsKLSsgIHVpbnQzMl90IHR2ID0gUFBDX3RyYXAgfCAoKHVpbnQ4X3QpdGFnIDw8IDE2KSB8 ICgodWludDhfdCl0YWcgPDwgMTEpOwotKyAgc3BldygidHJhcCBAICUwOHggOyBNQVJLICVkICUw OHgiLCBjdXJyZW50T2Zmc2V0KCksICh1aW50OF90KXRhZywgdHYpOwotKyAgcmV0dXJuIHdyaXRl SW5zdCh0dik7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX21yKFJlZ2lzdGVy IHJkLCBSZWdpc3RlciByYSkgewotKyAgcmV0dXJuIGFzX29yXyhyZCwgcmEsIHJhKTsKLSt9Ci0r Ci0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eHNfbXRjdHIoUmVnaXN0ZXIgcmEpIHsKLSsgIHJl dHVybiBhc19tdHNwcigoU1BSZWdpc3RlcklEKXNwcl9jdHIsIHJhKTsKLSt9Ci0rCi0rQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6eHNfbXRscihSZWdpc3RlciByYSkgewotKyAgcmV0dXJuIGFzX210 c3ByKChTUFJlZ2lzdGVySUQpc3ByX2xyLCByYSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OnhzX21mbHIoUmVnaXN0ZXIgcmQpIHsKLSsgIHJldHVybiBhc19tZnNwcihyZCwgKFNQ UmVnaXN0ZXJJRClzcHJfbHIpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4c19t dGNyKFJlZ2lzdGVyIHJzKSB7IHJldHVybiBhc19tdGNyZigweGZmLCBycyk7IH0KLSsKLStCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjp4c19tZnhlcihSZWdpc3RlciByYSkgewotKyAgcmV0dXJuIGFz X21mc3ByKHJhLCAoU1BSZWdpc3RlcklEKXNwcl94ZXIpOwotK30KLSsKLStCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjp4c19tdHhlcihSZWdpc3RlciByYSkgewotKyAgcmV0dXJuIGFzX210c3ByKChT UFJlZ2lzdGVySUQpc3ByX3hlciwgcmEpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojp4c19saShSZWdpc3RlciByZCwgaW50MTZfdCBpbSkgewotKyAgcmV0dXJuIGFzX2FkZGkocmQs IHIwLCBpbSwgdHJ1ZSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX2xpcyhS ZWdpc3RlciByZCwgaW50MTZfdCBpbSkgewotKyAgcmV0dXJuIGFzX2FkZGlzKHJkLCByMCwgaW0s IHRydWUpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4X3N1YmkoUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7Ci0rICByZXR1cm4gYXNfYWRkaShyZCwgcmEs IC1pbSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6Onhfbm90KFJlZ2lzdGVyIHJk LCBSZWdpc3RlciByYSkgewotKyAgcmV0dXJuIGFzX25vcihyZCwgcmEsIHJhKTsKLSt9Ci0rCi0r QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eF9zbHdpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywg aW50IG4pIHsKLSsgIE1PWl9BU1NFUlQobiA+PSAwICYmIG4gPCAzMik7Ci0rICByZXR1cm4gYXNf cmx3aW5tKHJkLCBycywgbiwgMCwgMzEgLSBuKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6eF9zbGRpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgaW50IG4pIHsKLSsgIHJldHVy biBhc19ybGRpY3IocmQsIHJzLCBuLCA2MyAtIG4pOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjp4X3Nyd2koUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBpbnQgbikgewotKyAgTU9a X0FTU0VSVChuID49IDAgJiYgbiA8IDMyKTsKLSsgIGlmIChuID09IDApIHsKLSsgICAgcmV0dXJu IGFzX3Jsd2lubShyZCwgcnMsIDAsIDAsIDMxKTsKLSsgIH0KLSsgIHJldHVybiBhc19ybHdpbm0o cmQsIHJzLCAzMiAtIG4sIG4sIDMxKTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 eF9zcmRpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgaW50IG4pIHsKLSsgIE1PWl9BU1NFUlQo biA+PSAwICYmIG4gPCA2NCk7Ci0rICBpZiAobiA9PSAwKSB7Ci0rICAgIHJldHVybiBhc19vcl8o cmQsIHJzLCBycyk7Ci0rICB9Ci0rICByZXR1cm4gYXNfcmxkaWNsKHJkLCBycywgNjQgLSBuLCBu KTsKLSt9Ci0rCi0rQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eF9iaXRfdmFsdWUoUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJzLCB1bnNpZ25lZCBiaXQpIHsKLSsgIHJldHVybiBhc19ybHdpbm0ocmQs IHJzLCBiaXQgKyAxLCAzMSwgMzEpOwotK30KLSsKLStCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4 X2luc2VydGJpdHMwXzE1KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycykgewotKyAgcmV0dXJuIGFz X3Jsd2ltaShyZCwgcnMsIDAsIDE2LCAzMSk7Ci0rfQotKwotK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6Onhfc3JfbXVsbGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7Ci0r ICBhc19zcmFkaShyZCwgcmEsIDYzKTsKLSsgIHJldHVybiBhc19tdWxsaShyZCwgcmQsIGltKTsK LSt9Ci0rCi0rdm9pZCBBc3NlbWJsZXI6OmFzX2JyZWFrKHVpbnQzMl90IGNvZGUpIHsKLSsgIHNw ZXcoImJyZWFrXHQlZCIsIGNvZGUpOwotKyAgd3JpdGVJbnN0KFBQQ190cmFwKTsKLSt9Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rLy8gTGFiZWwgYmluZGluZywgcmV0YXJnZXQsIGFuZCBjb2Rl IGxhYmVsIHByb2Nlc3NpbmcuCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0rLy8gRm9yd2FyZC1k ZWNsYXJlZCBzaGFwZSBoZWxwZXJzOyBmdWxsIGRlZmluaXRpb25zIGFuZCB0aGUgbGF5b3V0Ci0r Ly8gY29tbWVudGFyeSBsaXZlIHdpdGggdGhlIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zIHNlY3Rp b24gYmVsb3cuCi0rc3RhdGljIGJvb2wgSXNBZGRwY2lzTG9hZDY0U3RhbnphKHVpbnQzMl90IGVu YzApOwotK3N0YXRpYyB1aW50OF90IExvYWQ2NFN0YW56YURlc3RSZWcoSW5zdHJ1Y3Rpb24qIGlu c3QwKTsKLSsKLStJbnN0SW1tIEFzc2VtYmxlcjo6aW52ZXJ0QnJhbmNoKEluc3RJbW0gYnJhbmNo LCBCT2ZmSW1tMTYgc2tpcE9mZnNldCkgewotKyAgLy8gRmxpcCB0aGUgQk8gY29uZGl0aW9uLXRy dWUvY29uZGl0aW9uLWZhbHNlIGJpdCAoYml0IDI0KS4KLSsgIHVpbnQzMl90IGRhdGEgPSBicmFu Y2guZW5jb2RlKCk7Ci0rICBkYXRhID0gKGRhdGEgXiAweDAxMDAwMDAwKSAmIDB4RkZGRjAwMDM7 Ci0rICBkYXRhIHw9IHNraXBPZmZzZXQuZW5jb2RlKCk7Ci0rICBicmFuY2guc2V0RGF0YShkYXRh KTsKLSsgIHJldHVybiBicmFuY2g7Ci0rfQotKwotK3ZvaWQgQXNzZW1ibGVyOjpiaW5kKEluc3RJ bW0qIGluc3QsIHVpbnRwdHJfdCBicmFuY2gsIHVpbnRwdHJfdCB0YXJnZXQpIHsKLSsgIGludHB0 cl90IG9mZnNldCA9IHRhcmdldCAtIGJyYW5jaDsKLSsgIEluc3RydWN0aW9uKiBpMCA9IChJbnN0 cnVjdGlvbiopaW5zdDsKLSsKLSsgIGlmIChpMC0+bmV4dCgpLT5lbmNvZGUoKSA9PSBQUENfYmNs X2Fsd2F5c19wbHVzNCB8fAotKyAgICAgIElzQWRkcGNpc0xvYWQ2NFN0YW56YShpMC0+ZW5jb2Rl KCkpKSB7Ci0rICAgIC8vIFByZS1leGlzdGluZyBsb25nIHN0YW56YSwgZWl0aGVyIFA4IChtZmxy ICsgYmNsIG1hcmtlciBhdCBbMV0pIG9yCi0rICAgIC8vIFA5KyAoYWRkcGNpcyBhdCBbMF07IG1h am9yIG9wY29kZSAxOSkuIEVpdGhlciB3YXksIGp1c3QgcmVnaXN0ZXIKLSsgICAgLy8gdGhlIGxv bmcganVtcCDigJQgdGhlIHN0YW56YSdzIC5xdWFkIGF0IFs2Li43XSBnZXRzIHBhdGNoZWQgbGF0 ZXIKLSsgICAgLy8gdmlhIFVwZGF0ZUxvYWQ2NFZhbHVlLgotKyAgICBhZGRMb25nSnVtcChCdWZm ZXJPZmZzZXQoYnJhbmNoKSwgQnVmZmVyT2Zmc2V0KHRhcmdldCkpOwotKyAgICByZXR1cm47Ci0r ICB9Ci0rCi0rICBpZiAoaTAtPmlzT3Bjb2RlKCh1aW50MzJfdClQUENfdHcpKSB7Ci0rICAgIC8v IFRhZ2dlZCB0cmFwIHN0YW56YS4gVGhlIHRhZyB0ZWxscyB1cyB3aGljaCBicmFuY2ggdHlwZSB3 YXMgcmVzZXJ2ZWQuCi0rICAgIFRyYXBUYWcgdGFnID0gKFRyYXBUYWcpaW5zdC0+dHJhcHRhZygp OwotKyAgICBJbnN0cnVjdGlvbiogaTEgPSBpMC0+bmV4dCgpOwotKyAgICBJbnN0cnVjdGlvbiog aTIgPSBpMS0+bmV4dCgpOwotKyAgICBJbnN0cnVjdGlvbiogaTMgPSBpMi0+bmV4dCgpOwotKyAg ICBJbnN0cnVjdGlvbiogaTQgPSBpMy0+bmV4dCgpOwotKyAgICBJbnN0cnVjdGlvbiogaTUgPSBp NC0+bmV4dCgpOwotKyAgICBJbnN0cnVjdGlvbiogaTYgPSBpNS0+bmV4dCgpOwotKyAgICBJbnN0 cnVjdGlvbiogaTcgPSBpNi0+bmV4dCgpOwotKyAgICBJbnN0cnVjdGlvbiogaTggPSBpNy0+bmV4 dCgpOwotKyAgICBJbnN0cnVjdGlvbiogaTkgPSBpOC0+bmV4dCgpOwotKwotKyAgICBzd2l0Y2gg KHRhZykgewotKyAgICAgIGNhc2UgQkNUYWc6IHsKLSsgICAgICAgIC8vIGluc3RbLTFdIGlzIHRo ZSBvcmlnaW5hbCBiYyBpbnN0cnVjdGlvbi4KLSsgICAgICAgIEluc3RydWN0aW9uKiBiYyA9IGkw IC0gMTsKLSsgICAgICAgIC8vIFRyeSBzaG9ydCBiYyAob2Zmc2V0ICsgNCBiZWNhdXNlIGJjIGlz IG9uZSBpbnN0cnVjdGlvbiBiZWZvcmUgdHcpLgotKyAgICAgICAgaWYgKEJPZmZJbW0xNjo6SXNJ blJhbmdlKG9mZnNldCArIChpbnRwdHJfdClzaXplb2YodWludDMyX3QpKSkgewotKyAgICAgICAg ICBiYy0+c2V0RGF0YSgoKGJjLT5lbmNvZGUoKSBeIDB4MDEwMDAwMDApICYgMHhGRkZGMDAwMykg fAotKyAgICAgICAgICAgICAgICAgICAgICBCT2ZmSW1tMTYob2Zmc2V0ICsgc2l6ZW9mKHVpbnQz Ml90KSkuZW5jb2RlKCkpOwotKyAgICAgICAgICBpMC0+bWFrZU5vcCgpOwotKyAgICAgICAgICBp MS0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpMi0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpMy0+ bWFrZU5vcCgpOwotKyAgICAgICAgICBpNC0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpNS0+bWFr ZU5vcCgpOwotKyAgICAgICAgICBpNi0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpNy0+bWFrZU5v cCgpOwotKyAgICAgICAgICBpOC0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpOS0+bWFrZU5vcCgp OwotKyAgICAgICAgICByZXR1cm47Ci0rICAgICAgICB9Ci0rICAgICAgICAvLyBUcnkgc2hvcnQg YiAodW5jb25kaXRpb25hbCkuCi0rICAgICAgICBpZiAoSk9mZkltbTI2OjpJc0luUmFuZ2Uob2Zm c2V0KSkgewotKyAgICAgICAgICBpMC0+c2V0RGF0YShQUENfYiB8IEpPZmZJbW0yNihvZmZzZXQp LmVuY29kZSgpKTsKLSsgICAgICAgICAgaTEtPm1ha2VOb3AoKTsKLSsgICAgICAgICAgaTItPm1h a2VOb3AoKTsKLSsgICAgICAgICAgaTMtPm1ha2VOb3AoKTsKLSsgICAgICAgICAgaTQtPm1ha2VO b3AoKTsKLSsgICAgICAgICAgaTUtPm1ha2VOb3AoKTsKLSsgICAgICAgICAgaTYtPm1ha2VOb3Ao KTsKLSsgICAgICAgICAgaTctPm1ha2VOb3AoKTsKLSsgICAgICAgICAgaTgtPm1ha2VOb3AoKTsK LSsgICAgICAgICAgaTktPm1ha2VOb3AoKTsKLSsgICAgICAgICAgcmV0dXJuOwotKyAgICAgICAg fQotKyAgICAgICAgLy8gTG9uZzogV3JpdGVMb2FkNjQgdG8gU2Vjb25kU2NyYXRjaFJlZyArIG10 Y3RyICsgYmN0ci4KLSsgICAgICAgIGFkZExvbmdKdW1wKEJ1ZmZlck9mZnNldChicmFuY2gpLCBC dWZmZXJPZmZzZXQodGFyZ2V0KSk7Ci0rICAgICAgICBXcml0ZUxvYWQ2NEluc3RydWN0aW9ucyhp MCwgU2Vjb25kU2NyYXRjaFJlZywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOwotKyAgICAgICAgaTgtPm1ha2VPcF9tdGN0cihTZWNv bmRTY3JhdGNoUmVnKTsKLSsgICAgICAgIGk5LT5tYWtlT3BfYmN0cigpOwotKyAgICAgICAgYnJl YWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgQ2FsbFRhZzogewotKyAgICAgICAgLy8gRm9yIGNh bGxzLCB0aGUgYWN0dWFsIGNhbGwgaW5zdHJ1Y3Rpb24gZ29lcyBhdCBpbnN0WzldIGFuZAotKyAg ICAgICAgLy8gdGhlIHJldHVybiBhZGRyZXNzIG11c3QgYmUgYWZ0ZXIgdGhlIHN0YW56YS4KLSsg ICAgICAgIGludHB0cl90IGNhbGxPZmZzZXQgPSBvZmZzZXQgLSA5ICogKGludHB0cl90KXNpemVv Zih1aW50MzJfdCk7Ci0rICAgICAgICBpZiAoSk9mZkltbTI2OjpJc0luUmFuZ2UoY2FsbE9mZnNl dCkpIHsKLSsgICAgICAgICAgaTAtPm1ha2VOb3AoKTsKLSsgICAgICAgICAgaTEtPm1ha2VOb3Ao KTsKLSsgICAgICAgICAgaTItPm1ha2VOb3AoKTsKLSsgICAgICAgICAgaTMtPm1ha2VOb3AoKTsK LSsgICAgICAgICAgaTQtPm1ha2VOb3AoKTsKLSsgICAgICAgICAgaTUtPm1ha2VOb3AoKTsKLSsg ICAgICAgICAgaTYtPm1ha2VOb3AoKTsKLSsgICAgICAgICAgaTctPm1ha2VOb3AoKTsKLSsgICAg ICAgICAgaTgtPm1ha2VOb3AoKTsKLSsgICAgICAgICAgaTktPnNldERhdGEoUFBDX2IgfCBKT2Zm SW1tMjYoY2FsbE9mZnNldCkuZW5jb2RlKCkgfCBMaW5rQik7Ci0rICAgICAgICAgIHJldHVybjsK LSsgICAgICAgIH0KLSsgICAgICAgIC8vIExvbmc6IFdyaXRlTG9hZDY0IHRvIFNlY29uZFNjcmF0 Y2hSZWcgKyBtdGN0ciArIGJjdHJsLgotKyAgICAgICAgYWRkTG9uZ0p1bXAoQnVmZmVyT2Zmc2V0 KGJyYW5jaCksIEJ1ZmZlck9mZnNldCh0YXJnZXQpKTsKLSsgICAgICAgIFdyaXRlTG9hZDY0SW5z dHJ1Y3Rpb25zKGkwLCBTZWNvbmRTY3JhdGNoUmVnLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7Ci0rICAgICAgICBpOC0+bWFrZU9w X210Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOwotKyAgICAgICAgaTktPm1ha2VPcF9iY3RyKExpbmtC KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIEJUYWc6IHsKLSsgICAg ICAgIGlmIChKT2ZmSW1tMjY6OklzSW5SYW5nZShvZmZzZXQpKSB7Ci0rICAgICAgICAgIGkwLT5z ZXREYXRhKFBQQ19iIHwgSk9mZkltbTI2KG9mZnNldCkuZW5jb2RlKCkpOwotKyAgICAgICAgICBp MS0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpMi0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpMy0+ bWFrZU5vcCgpOwotKyAgICAgICAgICBpNC0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpNS0+bWFr ZU5vcCgpOwotKyAgICAgICAgICBpNi0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpNy0+bWFrZU5v cCgpOwotKyAgICAgICAgICBpOC0+bWFrZU5vcCgpOwotKyAgICAgICAgICBpOS0+bWFrZU5vcCgp OwotKyAgICAgICAgICByZXR1cm47Ci0rICAgICAgICB9Ci0rICAgICAgICAvLyBMb25nOiBXcml0 ZUxvYWQ2NCB0byBTZWNvbmRTY3JhdGNoUmVnICsgbXRjdHIgKyBiY3RyLgotKyAgICAgICAgYWRk TG9uZ0p1bXAoQnVmZmVyT2Zmc2V0KGJyYW5jaCksIEJ1ZmZlck9mZnNldCh0YXJnZXQpKTsKLSsg ICAgICAgIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKGkwLCBTZWNvbmRTY3JhdGNoUmVnLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7 Ci0rICAgICAgICBpOC0+bWFrZU9wX210Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOwotKyAgICAgICAg aTktPm1ha2VPcF9iY3RyKCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgZGVm YXVsdDoKLSsgICAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCBUcmFwVGFnIik7Ci0rICAgIH0K LSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgaWYgKGkwLT5pc09wY29kZShQUENfYikpIHsKLSsg ICAgLy8gU2hvcnQgdW5jb25kaXRpb25hbCBicmFuY2gg4oCUIHNldCBvZmZzZXQsIG5vcCBuZXh0 LWluLWNoYWluIHNsb3QuCi0rICAgIE1PWl9BU1NFUlQoSk9mZkltbTI2OjpJc0luUmFuZ2Uob2Zm c2V0KSk7Ci0rICAgIGkwLT5zZXREYXRhKChpMC0+ZW5jb2RlKCkgJiB+MHgwM0ZGRkZGQykgfCBK T2ZmSW1tMjYob2Zmc2V0KS5lbmNvZGUoKSk7Ci0rICAgIGkwLT5uZXh0KCktPm1ha2VOb3AoKTsK LSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgaWYgKGkwLT5pc09wY29kZShQUENfYmMpKSB7Ci0r ICAgIC8vIFNob3J0IGNvbmRpdGlvbmFsIGJyYW5jaCDigJQgcHJlc2VydmUgdXBwZXIgMTYgYml0 cywgc2V0IG9mZnNldC4KLSsgICAgTU9aX0FTU0VSVChCT2ZmSW1tMTY6OklzSW5SYW5nZShvZmZz ZXQpKTsKLSsgICAgaTAtPnNldERhdGEoKGkwLT5lbmNvZGUoKSAmIDB4RkZGRjAwMDMpIHwgQk9m ZkltbTE2KG9mZnNldCkuZW5jb2RlKCkpOwotKyAgICBpMC0+bmV4dCgpLT5tYWtlTm9wKCk7Ci0r ICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCBpbnN0cnVjdGlv biBpbiBiaW5kIik7Ci0rfQotKwotK3ZvaWQgQXNzZW1ibGVyOjpiaW5kKExhYmVsKiBsYWJlbCwg QnVmZmVyT2Zmc2V0IGJvZmYpIHsKLSsgIGlmIChsYWJlbC0+dXNlZCgpKSB7Ci0rICAgIGJvb2wg bW9yZTsKLSsgICAgQnVmZmVyT2Zmc2V0IGIobGFiZWwpOwotKyAgICBkbyB7Ci0rICAgICAgQnVm ZmVyT2Zmc2V0IG5leHQ7Ci0rICAgICAgSW5zdEltbSogaW5zdCA9IChJbnN0SW1tKillZGl0U3Jj KGIpOwotKyAgICAgIEluc3RydWN0aW9uKiBpMSA9ICgoSW5zdHJ1Y3Rpb24qKWluc3QpLT5uZXh0 KCk7Ci0rICAgICAgbW9yZSA9IChpMS0+ZW5jb2RlKCkgIT0gTGFiZWxCYXNlOjpJTlZBTElEX09G RlNFVCk7Ci0rICAgICAgaWYgKG1vcmUpIHsKLSsgICAgICAgIG5leHQgPSBCdWZmZXJPZmZzZXQo aTEtPmVuY29kZSgpKTsKLSsgICAgICB9Ci0rICAgICAgYmluZChpbnN0LCBiLmdldE9mZnNldCgp LCBib2ZmLmdldE9mZnNldCgpKTsKLSsgICAgICBiID0gbmV4dDsKLSsgICAgfSB3aGlsZSAobW9y ZSk7Ci0rICB9Ci0rICBsYWJlbC0+YmluZChib2ZmLmdldE9mZnNldCgpKTsKLSt9Ci0rCi0rdm9p ZCBBc3NlbWJsZXI6OnJldGFyZ2V0KExhYmVsKiBsYWJlbCwgTGFiZWwqIHRhcmdldCkgewotKyAg c3BldygicmV0YXJnZXQiKTsKLSsgIGlmIChsYWJlbC0+dXNlZCgpICYmICFvb20oKSkgewotKyAg ICBpZiAodGFyZ2V0LT5ib3VuZCgpKSB7Ci0rICAgICAgYmluZChsYWJlbCwgQnVmZmVyT2Zmc2V0 KHRhcmdldCkpOwotKyAgICB9IGVsc2UgaWYgKHRhcmdldC0+dXNlZCgpKSB7Ci0rICAgICAgLy8g UHJlcGVuZCBsYWJlbCdzIHVzZSBjaGFpbiB0byB0YXJnZXQncyB1c2UgY2hhaW4uCi0rICAgICAg QnVmZmVyT2Zmc2V0IGIobGFiZWwpOwotKyAgICAgIEJ1ZmZlck9mZnNldCBuZXh0OwotKyAgICAg IGRvIHsKLSsgICAgICAgIEluc3RydWN0aW9uKiBpbnN0ID0gKEluc3RydWN0aW9uKillZGl0U3Jj KGIpOwotKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGkxID0gaW5zdC0+bmV4dCgpOwotKyAgICAgICAg aWYgKGkxLT5lbmNvZGUoKSAhPSBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKSB7Ci0rICAgICAg ICAgIG5leHQgPSBCdWZmZXJPZmZzZXQoaTEtPmVuY29kZSgpKTsKLSsgICAgICAgIH0gZWxzZSB7 Ci0rICAgICAgICAgIC8vIEVuZCBvZiBsYWJlbCdzIGNoYWluIOKAlCBsaW5rIHRvIHRhcmdldCdz IGhlYWQuCi0rICAgICAgICAgIGkxLT5zZXREYXRhKHRhcmdldC0+b2Zmc2V0KCkpOwotKyAgICAg ICAgICBicmVhazsKLSsgICAgICAgIH0KLSsgICAgICAgIGIgPSBuZXh0OwotKyAgICAgIH0gd2hp bGUgKHRydWUpOwotKyAgICB9Ci0rICAgIC8vIFRyYW5zZmVyIGxhYmVsJ3MgdXNlIGxpc3QgdG8g dGFyZ2V0LgotKyAgICBpZiAoIXRhcmdldC0+Ym91bmQoKSkgewotKyAgICAgIHRhcmdldC0+dXNl KGxhYmVsLT5vZmZzZXQoKSk7Ci0rICAgIH0KLSsgIH0KLSsgIGxhYmVsLT5yZXNldCgpOwotK30K LSsKLSt2b2lkIEFzc2VtYmxlcjo6cHJvY2Vzc0NvZGVMYWJlbHModWludDhfdCogcmF3Q29kZSkg ewotKyAgZm9yIChjb25zdCBDb2RlTGFiZWwmIGxhYmVsIDogY29kZUxhYmVsc18pIHsKLSsgICAg QmluZChyYXdDb2RlLCBsYWJlbCk7Ci0rICB9Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot Ky8vIExvYWQ2NCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSAoOCBzbG90cywgbGl0ZXJhbCBwb29sIGZv cm1hdCk6Ci0rLy8gICBbMF0gbWZsciByMCAgICAgICAgICAgIOKAlCBzYXZlIExSCi0rLy8gICBb MV0gYmNsIDIwLDAsLis0ICAgICAg4oCUIExSID0gYWRkcmVzcyBvZiBbMl0KLSsvLyAgIFsyXSBt ZmxyIHJEICAgICAgICAgICAg4oCUIHJEID0gYWRkcmVzcyBvZiBbMl0KLSsvLyAgIFszXSBtdGxy IHIwICAgICAgICAgICAg4oCUIHJlc3RvcmUgTFIKLSsvLyAgIFs0XSBsZCByRCwgMTYockQpICAg ICAg4oCUIGxvYWQgZnJvbSBbNi4uN10gKG9mZnNldCA9IDI0IC0gOCA9IDE2KQotKy8vICAgWzVd IGIgLisxMiAgICAgICAgICAgICDigJQgc2tpcCBkYXRhCi0rLy8gICBbNi4uN10gLnF1YWQgVkFM VUUgICAgIOKAlCA4LWJ5dGUgZGF0YQotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKwotKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKy8vIENvbnN0YW50IHBvb2wgY2FsbGJhY2tzIChyZXF1aXJlZCBieSBBc3Nl bWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29scykuCi0rLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0r Lyogc3RhdGljICovCi0rdm9pZCBBc3NlbWJsZXI6Okluc2VydEluZGV4SW50b1RhZyh1aW50OF90 KiBsb2FkLCB1aW50MzJfdCBpbmRleCkgewotKyAgLy8gU3Rhc2ggdGhlIHBvb2wgZW50cnkgaW5k ZXggaW4gdGhlIGhpbnQgd29yZCdzIGxvdyAxNiBiaXRzOyB0aGUgaGlnaAotKyAgLy8gYml0cyBj YXJyeSB0aGUgZGVzdCByZWcgYW5kIGxvYWQgdHlwZSwgY29uc3VtZWQgYnkKLSsgIC8vIFBhdGNo Q29uc3RhbnRQb29sTG9hZCB3aGVuIHRoZSBwb29sIGlzIHJlc29sdmVkLgotKyAgdWludDMyX3Qq IGluc3QgPSAodWludDMyX3QqKWxvYWQ7Ci0rICAqaW5zdCA9ICgqaW5zdCAmIDB4RkZGRjAwMDAp IHwgKGluZGV4ICYgMHhGRkZGKTsKLSt9Ci0rCi0rLyogc3RhdGljICovCi0rYm9vbCBBc3NlbWJs ZXI6OlBhdGNoQ29uc3RhbnRQb29sTG9hZCh2b2lkKiBsb2FkQWRkciwgdm9pZCogY29uc3RQb29s QWRkcikgewotKyAgLy8gUmV3cml0ZSBwbGFjZWhvbGRlciBpbnN0cnVjdGlvbnMgd2l0aCBhIHBv b2wgbG9hZCBzZXF1ZW5jZS4KLSsgIC8vIEhpbnQgd29yZCBsYXlvdXQgKHNldCBieSBsb2FkRnJv bVBvb2xGbG9hdDY0IC8gbG9hZEZyb21Qb29sRmxvYXQzMiAvCi0rICAvLyBsb2FkRnJvbVBvb2xT aW1kMTI4KToKLSsgIC8vICAgYml0cyAwLTE1OiAgcG9vbCBlbnRyeSBpbmRleAotKyAgLy8gICBi aXRzIDE2LTIwOiBkZXN0aW5hdGlvbiByZWdpc3RlciAoRlBSIGVuY29kaW5nKQotKyAgLy8gICBi aXRzIDIxLTIyOiBsb2FkIHR5cGUgKFBvb2xMb2FkRlBSNjQsIFBvb2xMb2FkU2ltZDEyOCwgUG9v bExvYWRGUFIzMikKLSsgIC8vICAgYml0cyAyOC0zMTogc2VudGluZWwgMHhGCi0rCi0rICB1aW50 MzJfdCogaW5zdCA9ICh1aW50MzJfdCopbG9hZEFkZHI7Ci0rCi0rICB1aW50MzJfdCBoaW50ID0g aW5zdFswXTsKLSsgIHVpbnQzMl90IGluZGV4ID0gaGludCAmIDB4RkZGRjsKLSsgIHVpbnQzMl90 IGRlc3RSZWcgPSAoaGludCA+PiAxNikgJiAweDFGOwotKyAgdWludDMyX3QgbG9hZFR5cGUgPSAo aGludCA+PiAyMSkgJiAweDM7Ci0rCi0rICAvLyBEaXNwbGFjZW1lbnQ6IHBvb2wgZW50cnkgYWRk cmVzcyByZWxhdGl2ZSB0byBpbnN0WzFdIChtZmxyIHRhcmdldCkgZm9yIHRoZQotKyAgLy8gYmNs IHBhdGgsIG9yIHJlbGF0aXZlIHRvIGluc3RbMF0rNCAoYWRkcGNpcyB0YXJnZXQgPSBDSUErNCwg d2hpY2ggaXMgdGhlCi0rICAvLyBhZGRyZXNzIG9mIGluc3RbMV0pIGZvciB0aGUgYWRkcGNpcyBw YXRoLiBCb3RoIGNvbnZlbnRpb25zIHJlc29sdmUgdG8gdGhlCi0rICAvLyBzYW1lIHZhbHVlOiAo cG9vbCBlbnRyeSkg4oiSIChsb2FkQWRkciArIDQpLgotKyAgaW50MzJfdCBkaXNwbGFjZW1lbnQg PQotKyAgICAgIChpbnQzMl90KSgodWludDhfdCopY29uc3RQb29sQWRkciArIGluZGV4ICogNCAt ICgodWludDhfdCopbG9hZEFkZHIgKyA0KSk7Ci0rCi0rICBpZiAobG9hZFR5cGUgPT0gUG9vbExv YWRGUFI2NCB8fCBsb2FkVHlwZSA9PSBQb29sTG9hZEZQUjMyKSB7Ci0rICAgIC8vIFRocmVlIGVt aXNzaW9uIHBhdGhzOgotKyAgICAvLwotKyAgICAvLyBQT1dFUjEwIChwcmVmZXJyZWQpOiBwbGZk L3BsZnMgRlJULCBTSSgwKSwgUj0xIOKAlCBzaW5nbGUgUEMtcmVsYXRpdmUKLSsgICAgLy8gICBw cmVmaXhlZCBGUCBsb2FkLiA4IGJ5dGVzID0gMiBzbG90czsgc2xvdCAyIGJlY29tZXMgYSBub3Au IElmCi0rICAgIC8vICAgbG9hZEFkZHIgJSA2NCA9PSA2MCwgcGxmZCB3b3VsZCBzdHJhZGRsZSBh IDY0LWJ5dGUgYmxvY2ssIHNvIGVtaXQKLSsgICAgLy8gICBhIGxlYWRpbmcgbm9wIGF0IHNsb3Qg MCBhbmQgcGxhY2UgcGxmZCBhdCBzbG90cyAxLTIgaW5zdGVhZC4KLSsgICAgLy8gICBSZWFjaDog wrE4IEdCICgzNC1iaXQgc2lnbmVkKS4gTm8gTFIgY2xvYmJlciwgbm8gcjE2IGJhc2UuCi0rICAg IC8vCi0rICAgIC8vIFBPV0VSOTogYWRkcGNpcyArIGxmZC9sZnMgKyBub3AuIDIgcmVhbCBpbnNu cywgbm8gTFIgY2xvYmJlciwgbm8KLSsgICAgLy8gICBSZXR1cm4gQWRkcmVzcyBTdGFjayBjb3Jy dXB0aW9uLiBCYXNlIHJlZ2lzdGVyIGlzIHIxNi4KLSsgICAgLy8gICBEaXNwbGFjZW1lbnQgc3Bs aXRzIGludG8gKGhpIDw8IDE2KSArIGxvIHdoZXJlIGxvIGlzIHRoZSAxNi1iaXQKLSsgICAgLy8g ICBzaWduZWQgRC1maWVsZCBvZiBsZmQvbGZzLiBSZWFjaDogwrEyIEdCLgotKyAgICAvLwotKyAg ICAvLyBQT1dFUjg6IGJjbCArIG1mbHIgcjE2ICsgbGZkL2xmcy4gU2FtZSBjbG9iYmVyICsgUkFT IGNhdmVhdCBhcyBiZWZvcmUuCi0rICAgIC8vICAgS2VwdCBhcyBhIGNvcnJlY3RuZXNzIGZhbGxi YWNrOyBub3QgZXhlcmNpc2VkIHRvZGF5IGJlY2F1c2UgdGhlCi0rICAgIC8vICAgbG9hZENvbnN0 YW50RG91YmxlL0Zsb2F0MzIgd3JhcHBlcnMgc2tpcCB0aGUgcG9vbCBvbiBQT1dFUjguCi0rICAg IC8vCi0rICAgIC8vIGxmcy9wbGZzICgzMi1iaXQpIGF1dG8tZXhwYW5kIHRoZWlyIHJlc3VsdCB0 byBkb3VibGUtcHJlY2lzaW9uIGluIHRoZQotKyAgICAvLyBGUFIsIHJlcGxhY2luZyB0aGUgbm9u LXBvb2wgcGF0aCdzIHNlcGFyYXRlIHhzY3ZzcGRwbiBzdGVwLgotKyAgICB1aW50MzJfdCBiYXNl UmVnID0gU2F2ZWRTY3JhdGNoUmVnaXN0ZXIuY29kZSgpOwotKyAgICB1aW50MzJfdCBsb2FkT3Ag PSAobG9hZFR5cGUgPT0gUG9vbExvYWRGUFI2NCkgPyBQUENfbGZkIDogUFBDX2xmczsKLSsKLSsg ICAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAgIC8vIE1MUyBwcmVmaXhlZCBGUCBsb2FkLiBw bGZkIHN1ZmZpeCBvcGNvZGUgPSA1MCwgcGxmcyA9IDQ4LiBTYW1lCi0rICAgICAgLy8gYWxpZ25t ZW50LWRyaXZlbiBzbG90IHBsYWNlbWVudCBhcyBQb29sTG9hZFNpbWQxMjggYWJvdmUuCi0rICAg ICAgdWludDY0X3QgbG9hZEFkZHJCaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4obG9h ZEFkZHIpOwotKyAgICAgIC8vIGxvYWRBZGRyIGlzIHRoZSBidWZmZXItdGltZSBwb2ludGVyOyB0 aGUgZmluYWwgZXhlY3V0YWJsZSBiYXNlIGlzCi0rICAgICAgLy8gb25seSAxNi1ieXRlIGFsaWdu ZWQsIHNvIHRoZSB1bnNhZmUgc3RyYWRkbGUgaXMgd2hlbgotKyAgICAgIC8vIChsb2FkQWRkckJp dHMgJiAxNSkgPT0gMTIgKG1hdGNoZXMgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQgYWJvdmUpLgot KyAgICAgIGJvb2wgbmVlZExlYWRpbmdOb3AgPSAobG9hZEFkZHJCaXRzICYgMTUpID09IDEyOwot KyAgICAgIGludCBwcmVmaXhTbG90ID0gbmVlZExlYWRpbmdOb3AgPyAxIDogMDsKLSsgICAgICBp bnQgcHJlZml4Qnl0ZU9mZnNldCA9IHByZWZpeFNsb3QgKiA0OwotKyAgICAgIGludDY0X3QgU0kg PSBpbnQ2NF90KGRpc3BsYWNlbWVudCkgKyA0IC0gcHJlZml4Qnl0ZU9mZnNldDsKLSsgICAgICBN T1pfQVNTRVJUKFNJID49IC0oaW50NjRfdCgxKSA8PCAzMykgJiYgU0kgPCAoaW50NjRfdCgxKSA8 PCAzMykpOwotKyAgICAgIHVpbnQzMl90IGQwID0gdWludDMyX3QoKHVpbnQ2NF90KFNJKSA+PiAx NikgJiAweDNGRkZGdSk7Ci0rICAgICAgdWludDMyX3QgZDEgPSB1aW50MzJfdCh1aW50NjRfdChT SSkgJiAweEZGRkZ1KTsKLSsgICAgICAvLyBUeXBlIDIgKE1MUyksIFI9MSwgUkE9MC4KLSsgICAg ICB1aW50MzJfdCBwcmVmaXggPQotKyAgICAgICAgICAoMXUgPDwgMjYpIHwgKDJ1IDw8IDI0KSB8 ICgxdSA8PCAyMCkgfCAoZDAgJiAweDNGRkZGdSk7Ci0rICAgICAgdWludDMyX3Qgc3VmZml4T3Ag PSAobG9hZFR5cGUgPT0gUG9vbExvYWRGUFI2NCkgPyA1MHUgOiA0OHU7Ci0rICAgICAgdWludDMy X3Qgc3VmZml4ID0gKHN1ZmZpeE9wIDw8IDI2KSB8IChkZXN0UmVnIDw8IDIxKSB8IGQxOwotKwot KyAgICAgIGlmIChuZWVkTGVhZGluZ05vcCkgewotKyAgICAgICAgaW5zdFswXSA9IE5vcEluc3Q7 Ci0rICAgICAgICBpbnN0WzFdID0gcHJlZml4OwotKyAgICAgICAgaW5zdFsyXSA9IHN1ZmZpeDsK LSsgICAgICB9IGVsc2UgewotKyAgICAgICAgaW5zdFswXSA9IHByZWZpeDsKLSsgICAgICAgIGlu c3RbMV0gPSBzdWZmaXg7Ci0rICAgICAgICBpbnN0WzJdID0gTm9wSW5zdDsKLSsgICAgICB9Ci0r ICAgIH0gZWxzZSBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgICAvLyBTcGxpdCBkaXNwbGFjZW1l bnQgaW50byBhZGRwY2lzIGhpIGZpZWxkIGFuZCBsZmQvbGZzIGxvIGZpZWxkIHNvIHRoYXQKLSsg ICAgICAvLyAgIHRhcmdldCA9IChDSUEgKyA0KSArIChoaSA8PCAxNikgKyBTRVhUMTYobG8pLgot KyAgICAgIC8vIE9ubHkgMiBzbG90cyBhcmUgcmVzZXJ2ZWQgb24gUDkgKGxvYWRGcm9tUG9vbEZs b2F0ezMyLDY0fSBhYm92ZSk7Ci0rICAgICAgLy8gZG8gTk9UIHRvdWNoIGluc3RbMl0sIGl0IGJl bG9uZ3MgdG8gdGhlIG5leHQgZW50cnkuCi0rICAgICAgaW50MTZfdCBsbyA9IChpbnQxNl90KShk aXNwbGFjZW1lbnQgJiAweEZGRkYpOwotKyAgICAgIGludDMyX3QgaGlBZGogPSBkaXNwbGFjZW1l bnQgLSBsbzsKLSsgICAgICBNT1pfQVNTRVJUKChoaUFkaiAmIDB4RkZGRikgPT0gMCk7Ci0rICAg ICAgaW50MzJfdCBoaSA9IGhpQWRqID4+IDE2OwotKyAgICAgIE1PWl9BU1NFUlQoaGkgPj0gLTMy NzY4ICYmIGhpIDw9IDMyNzY3KTsKLSsgICAgICAvLyBbMF0gYWRkcGNpcyByMTYsIGhpCi0rICAg ICAgdWludDMyX3QgRGhpID0gdWludDE2X3QoaGkpOwotKyAgICAgIGluc3RbMF0gPSAoMTl1IDw8 IDI2KSB8IChiYXNlUmVnIDw8IDIxKSB8ICgoRGhpID4+IDEpICYgMHgxRikgPDwgMTYgfAotKyAg ICAgICAgICAgICAgICAoKERoaSA+PiA2KSAmIDB4M0ZGKSA8PCA2IHwgKDJ1IDw8IDEpIHwgKERo aSAmIDF1KTsKLSsgICAgICAvLyBbMV0gbGZkL2xmcyBmRCwgbG8ocjE2KQotKyAgICAgIGluc3Rb MV0gPSBsb2FkT3AgfCAoZGVzdFJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8PCAxNikgfCAodWludDE2 X3QobG8pKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBNT1pfQVNTRVJUKGRpc3BsYWNlbWVudCA+ PSAtMzI3NjggJiYgZGlzcGxhY2VtZW50IDwgMzI3NjgpOwotKyAgICAgIC8vIFswXSBiY2wgMjAs MCwkKzQKLSsgICAgICBpbnN0WzBdID0gUFBDX2JjbF9hbHdheXNfcGx1czQ7Ci0rICAgICAgLy8g WzFdIG1mbHIgcjE2Ci0rICAgICAgaW5zdFsxXSA9IFBQQ19tZnNwciB8IChiYXNlUmVnIDw8IDIx KSB8IFBQQ19TUFIoc3ByX2xyKTsKLSsgICAgICAvLyBbMl0gbGZkL2xmcyBmRCwgZGlzcGxhY2Vt ZW50KHIxNikKLSsgICAgICBpbnN0WzJdID0KLSsgICAgICAgICAgbG9hZE9wIHwgKGRlc3RSZWcg PDwgMjEpIHwgKGJhc2VSZWcgPDwgMTYpIHwgKGRpc3BsYWNlbWVudCAmIDB4RkZGRik7Ci0rICAg IH0KLSsgIH0gZWxzZSBpZiAobG9hZFR5cGUgPT0gUG9vbExvYWRTaW1kMTI4KSB7Ci0rICAgIC8v IFRocmVlIGVtaXNzaW9uIHBhdGhzICg1IHNsb3RzIHJlc2VydmVkIGJ5IGxvYWRGcm9tUG9vbFNp bWQxMjgpOgotKyAgICAvLwotKyAgICAvLyBQT1dFUjEwIChwcmVmZXJyZWQpOiBwbHh2IHZzRCwg U0koMCksIFI9MSDigJQgc2luZ2xlIFBDLXJlbGF0aXZlCi0rICAgIC8vICAgcHJlZml4ZWQgbG9h ZCwgbmF0dXJhbC1MRSBieXRlIG9yZGVyIChubyB4eHBlcm1kaSBuZWVkZWQpLiA4IGJ5dGVzCi0r ICAgIC8vICAgPSAyIHNsb3RzOyBzbG90cyAyLTQgYmVjb21lIG5vcHMuIElmIHRoZSBwcmVmaXgg d291bGQgc3RyYWRkbGUgYQotKyAgICAvLyAgIDY0LWJ5dGUgYmxvY2sgKGxvYWRBZGRyICUgNjQg PT0gNjApLCBlbWl0IGEgbGVhZGluZyBub3AgYXQgc2xvdCAwCi0rICAgIC8vICAgYW5kIHBsYWNl IHBseHYgYXQgc2xvdHMgMS0yIGluc3RlYWQuIFJlYWNoOiDCsTggR0IgKDM0LWJpdCBzaWduZWQp LgotKyAgICAvLwotKyAgICAvLyBQT1dFUjk6IGFkZHBjaXMtZXF1aXZhbGVudCB2aWEgYmNsICsg bWZsciArIGFkZGkgKyBseHZ4ICsgbm9wLiA1Ci0rICAgIC8vICAgcmVhbCBpbnNucywgbmF0dXJh bCBMRS4KLSsgICAgLy8KLSsgICAgLy8gUE9XRVI4OiBzYW1lIHByZWx1ZGUgKyBseHZkMnggKyB4 eHBlcm1kaSAoQkUtRFcgYnl0ZS1zd2FwIGZpeHVwKS4KLSsgICAgLy8KLSsgICAgLy8gU2VlIFBv b2xMb2FkRlBSNjQgYWJvdmUgZm9yIHdoeSByMTYgaW5zdGVhZCBvZiByMTIuCi0rICAgIE1PWl9B U1NFUlQoZGlzcGxhY2VtZW50ID49IC0zMjc2OCAmJiBkaXNwbGFjZW1lbnQgPCAzMjc2OCk7Ci0r ICAgIC8vIFNpbWQxMjggZGVzdCBpcyBpbiBWUi1uYW1lc3BhY2UgKGVuY29kaW5nIDMyLTYzKS4g SGludCBzdG9yZXMgb25seQotKyAgICAvLyB0aGUgbG93IDUgYml0cyAobG9hZEZyb21Qb29sU2lt ZDEyOCBtYXNrcyk7IHdlIHNldCBUWCB1bmNvbmRpdGlvbmFsbHkKLSsgICAgLy8gc2luY2UgUG9v bExvYWRTaW1kMTI4IGFsd2F5cyB0YXJnZXRzIGEgU2ltZDEyOC4KLSsgICAgY29uc3RleHByIHVp bnQzMl90IGtUWCA9IDF1OwotKyAgICBjb25zdGV4cHIgdWludDMyX3Qga0F4QnhUeF94eHBlcm1k aSA9ICgxdSA8PCAyKSB8ICgxdSA8PCAxKSB8IDF1OwotKwotKyAgICBpZiAoSGFzUE9XRVIxMCgp KSB7Ci0rICAgICAgLy8gUGxhY2UgcGx4diBwcmVmaXggYXQgdGhlIGhpZ2hlc3QgNC1ieXRlLWFs aWduZWQgb2Zmc2V0IHdpdGhpbgotKyAgICAgIC8vIHRoZSA1IHJlc2VydmVkIHNsb3RzIHRoYXQg ZG9lc24ndCBzdHJhZGRsZSBhIDY0LWJ5dGUgYmxvY2suCi0rICAgICAgdWludDY0X3QgbG9hZEFk ZHJCaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4obG9hZEFkZHIpOwotKyAgICAgIC8v IGxvYWRBZGRyIGlzIHRoZSBidWZmZXItdGltZSBwb2ludGVyOyB0aGUgZmluYWwgZXhlY3V0YWJs ZSBiYXNlIGlzCi0rICAgICAgLy8gb25seSAxNi1ieXRlIGFsaWduZWQsIHNvIHRoZSB1bnNhZmUg c3RyYWRkbGUgaXMgd2hlbgotKyAgICAgIC8vIChsb2FkQWRkckJpdHMgJiAxNSkgPT0gMTIgKG1h dGNoZXMgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQgYWJvdmUpLgotKyAgICAgIGJvb2wgbmVlZExl YWRpbmdOb3AgPSAobG9hZEFkZHJCaXRzICYgMTUpID09IDEyOwotKyAgICAgIGludCBwcmVmaXhT bG90ID0gbmVlZExlYWRpbmdOb3AgPyAxIDogMDsKLSsgICAgICBpbnQgcHJlZml4Qnl0ZU9mZnNl dCA9IHByZWZpeFNsb3QgKiA0OwotKyAgICAgIC8vIFNJID0gKHBvb2wgZW50cnkgYWRkcikgLSAo cHJlZml4IGFkZHIpCi0rICAgICAgLy8gICAgPSAobG9hZEFkZHIgKyA0ICsgZGlzcGxhY2VtZW50 KSAtIChsb2FkQWRkciArIHByZWZpeEJ5dGVPZmZzZXQpCi0rICAgICAgLy8gICAgPSBkaXNwbGFj ZW1lbnQgKyA0IC0gcHJlZml4Qnl0ZU9mZnNldAotKyAgICAgIGludDY0X3QgU0kgPSBpbnQ2NF90 KGRpc3BsYWNlbWVudCkgKyA0IC0gcHJlZml4Qnl0ZU9mZnNldDsKLSsgICAgICBNT1pfQVNTRVJU KFNJID49IC0oaW50NjRfdCgxKSA8PCAzMykgJiYgU0kgPCAoaW50NjRfdCgxKSA8PCAzMykpOwot KyAgICAgIHVpbnQzMl90IGQwID0gdWludDMyX3QoKHVpbnQ2NF90KFNJKSA+PiAxNikgJiAweDNG RkZGdSk7Ci0rICAgICAgdWludDMyX3QgZDEgPSB1aW50MzJfdCh1aW50NjRfdChTSSkgJiAweEZG RkZ1KTsKLSsgICAgICAvLyBQcmVmaXg6IHByaW1hcnkgb3Bjb2RlIDEsIFR5cGUgMCAoOExTKSwg Uj0xLCBkMCBhdCBMRSBiaXRzIDE3Li4wLgotKyAgICAgIHVpbnQzMl90IHByZWZpeCA9Ci0rICAg ICAgICAgICgxdSA8PCAyNikgfCAoMHUgPDwgMjQpIHwgKDF1IDw8IDIwKSB8IChkMCAmIDB4M0ZG RkZ1KTsKLSsgICAgICAvLyBTdWZmaXg6IDUtYml0IG9wY29kZSAyNSBhdCBMRSAzMS4uMjcsIFRY IGF0IExFIDI2LCBUIGF0IExFIDI1Li4yMSwKLSsgICAgICAvLyAgICAgICAgIFJBPTAgYXQgTEUg MjAuLjE2LCBkMSBhdCBMRSAxNS4uMC4KLSsgICAgICB1aW50MzJfdCBzdWZmaXggPSAoMjV1IDw8 IDI3KSB8IChrVFggPDwgMjYpIHwgKGRlc3RSZWcgPDwgMjEpIHwgZDE7Ci0rCi0rICAgICAgLy8g UDEwIHJlc2VydmVzIDMgc2xvdHM7IG9ubHkgaW5zdFswLi4yXSBhcmUgd3JpdHRlbi4gU2xvdHMg My4uNAotKyAgICAgIC8vIGJlbG9uZyB0byB0aGUgbmV4dCBwb29sIGVudHJ5IG9uIFAxMC4KLSsg ICAgICBpZiAobmVlZExlYWRpbmdOb3ApIHsKLSsgICAgICAgIGluc3RbMF0gPSBOb3BJbnN0Owot KyAgICAgICAgaW5zdFsxXSA9IHByZWZpeDsKLSsgICAgICAgIGluc3RbMl0gPSBzdWZmaXg7Ci0r ICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGluc3RbMF0gPSBwcmVmaXg7Ci0rICAgICAgICBpbnN0 WzFdID0gc3VmZml4OwotKyAgICAgICAgaW5zdFsyXSA9IE5vcEluc3Q7Ci0rICAgICAgfQotKyAg ICB9IGVsc2UgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgICAgLy8gYWRkcGNpcyArIGFkZGkgKyBs eHZ4ICgzIHNsb3RzKSDigJQgbm8gTFIgY2xvYmJlciwgbm8gUkFTIGhhemFyZC4KLSsgICAgICAv LyBTYW1lIGRpc3BsYWNlbWVudCBzcGxpdCBhcyB0aGUgRlAgc2NhbGFyIFA5IHBhdGg6IHRhcmdl dCA9Ci0rICAgICAgLy8gKENJQSs0KSArIChoaSA8PCAxNikgKyBTRVhUMTYobG8pLiBseHZ4IGlz IFgtZm9ybSBpbmRleGVkIChubwotKyAgICAgIC8vIGltbWVkaWF0ZSBvZmZzZXQpLCBzbyBjb21i aW5lIHRoZSBsb3cgMTYgYml0cyBpbnRvIHIxNiB2aWEgYWRkaQotKyAgICAgIC8vIGJlZm9yZSB0 aGUgbG9hZC4KLSsgICAgICBpbnQxNl90IGxvID0gKGludDE2X3QpKGRpc3BsYWNlbWVudCAmIDB4 RkZGRik7Ci0rICAgICAgaW50MzJfdCBoaUFkaiA9IGRpc3BsYWNlbWVudCAtIGxvOwotKyAgICAg IE1PWl9BU1NFUlQoKGhpQWRqICYgMHhGRkZGKSA9PSAwKTsKLSsgICAgICBpbnQzMl90IGhpID0g aGlBZGogPj4gMTY7Ci0rICAgICAgTU9aX0FTU0VSVChoaSA+PSAtMzI3NjggJiYgaGkgPD0gMzI3 NjcpOwotKyAgICAgIHVpbnQzMl90IERoaSA9IHVpbnQxNl90KGhpKTsKLSsgICAgICB1aW50MzJf dCBiYXNlUmVnID0gU2F2ZWRTY3JhdGNoUmVnaXN0ZXIuY29kZSgpOwotKyAgICAgIC8vIFswXSBh ZGRwY2lzIHIxNiwgaGkKLSsgICAgICBpbnN0WzBdID0gKDE5dSA8PCAyNikgfCAoYmFzZVJlZyA8 PCAyMSkgfCAoKERoaSA+PiAxKSAmIDB4MUYpIDw8IDE2IHwKLSsgICAgICAgICAgICAgICAgKChE aGkgPj4gNikgJiAweDNGRikgPDwgNiB8ICgydSA8PCAxKSB8IChEaGkgJiAxdSk7Ci0rICAgICAg Ly8gWzFdIGFkZGkgcjE2LCByMTYsIGxvCi0rICAgICAgaW5zdFsxXSA9IFBQQ19hZGRpIHwgKGJh c2VSZWcgPDwgMjEpIHwgKGJhc2VSZWcgPDwgMTYpIHwgdWludDE2X3QobG8pOwotKyAgICAgIC8v IFsyXSBseHZ4IHZzRCwgMCwgcjE2ICAoWFRbMDo0XSBpbiBiaXRzIDIxLTI1LCBUWCBhdCBiaXQg MCkKLSsgICAgICBpbnN0WzJdID0gUFBDX2x4dnggfCAoZGVzdFJlZyA8PCAyMSkgfCAoYmFzZVJl ZyA8PCAxMSkgfCBrVFg7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgLy8gUDggZmFsbGJhY2s6IGJj bCArIG1mbHIgKyBhZGRpICsgbHh2ZDJ4ICsgeHhwZXJtZGkgKDUgc2xvdHMpLgotKyAgICAgIC8v IENsb2JiZXJzIExSOyBjb3JyZWN0bmVzcy1vbmx5IHBhdGguCi0rICAgICAgdWludDMyX3QgYmFz ZVJlZyA9IFNhdmVkU2NyYXRjaFJlZ2lzdGVyLmNvZGUoKTsKLSsgICAgICBpbnN0WzBdID0gUFBD X2JjbF9hbHdheXNfcGx1czQ7Ci0rICAgICAgaW5zdFsxXSA9IFBQQ19tZnNwciB8IChiYXNlUmVn IDw8IDIxKSB8IFBQQ19TUFIoc3ByX2xyKTsKLSsgICAgICBpbnN0WzJdID0gUFBDX2FkZGkgfCAo YmFzZVJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8PCAxNikgfAotKyAgICAgICAgICAgICAgICAoZGlz cGxhY2VtZW50ICYgMHhGRkZGKTsKLSsgICAgICAvLyBseHZkMnggWFQsIFJBPTAsIFJCPXIxNiDi gJQgbG9hZHMgaW4gQkUgb3JkZXIgb24gTEUuCi0rICAgICAgaW5zdFszXSA9IFBQQ19seHZkMngg fCAoZGVzdFJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8PCAxMSkgfCBrVFg7Ci0rICAgICAgLy8geHhw ZXJtZGkgWFQsIFhULCBYVCwgMiDigJQgc3dhcCBkb3VibGV3b3JkcyBmb3IgTEUgYnl0ZSBvcmRl ci4KLSsgICAgICBpbnN0WzRdID0gUFBDX3h4cGVybWRpIHwgKGRlc3RSZWcgPDwgMjEpIHwgKGRl c3RSZWcgPDwgMTYpIHwKLSsgICAgICAgICAgICAgICAgKGRlc3RSZWcgPDwgMTEpIHwgKDJ1IDw8 IDgpIHwga0F4QnhUeF94eHBlcm1kaTsKLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgTU9aX0NS QVNIKCJQYXRjaENvbnN0YW50UG9vbExvYWQ6IHVuc3VwcG9ydGVkIGxvYWQgdHlwZSIpOwotKyAg fQotKwotKyAgcmV0dXJuIGZhbHNlOwotK30KLSsKLSsvKiBzdGF0aWMgKi8KLSt2b2lkIEFzc2Vt Ymxlcjo6V3JpdGVQb29sR3VhcmQoQnVmZmVyT2Zmc2V0IGJyYW5jaCwgSW5zdHJ1Y3Rpb24qIGlu c3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlck9mZnNldCBkZXN0KSB7 Ci0rICAvLyBFbWl0IGFuIHVuY29uZGl0aW9uYWwgYnJhbmNoIG92ZXIgdGhlIHBvb2wgZGF0YS4K LSsgIGludDMyX3Qgb2Zmc2V0ID0gZGVzdC5nZXRPZmZzZXQoKSAtIGJyYW5jaC5nZXRPZmZzZXQo KTsKLSsgIE1PWl9BU1NFUlQoSk9mZkltbTI2OjpJc0luUmFuZ2Uob2Zmc2V0KSk7Ci0rICBpbnN0 LT5zZXREYXRhKFBQQ19iIHwgKG9mZnNldCAmIDB4MDNGRkZGRkMpKTsKLSt9Ci0rCi0rLyogc3Rh dGljICovCi0rdm9pZCBBc3NlbWJsZXI6OldyaXRlUG9vbEhlYWRlcih1aW50OF90KiBzdGFydCwg UG9vbCogcCwgYm9vbCBpc05hdHVyYWwpIHsKLSsgIC8vIFdyaXRlIHBvb2wgaWRlbnRpZmljYXRp b24gaGVhZGVyLgotKyAgLy8gRW5jb2RlIHBvb2wgc2l6ZSBhbmQgaXNOYXR1cmFsIGZsYWcgaW4g YSBzaW5nbGUgMzItYml0IHdvcmQuCi0rICB1aW50MzJfdCBwb29sU2l6ZSA9IHAtPmdldFBvb2xT aXplKCk7Ci0rICB1aW50MzJfdCBzaXplSW5Xb3JkcyA9IChwb29sU2l6ZSArIDQgKyAzKSA+PiAy OyAgLy8gaGVhZGVyICsgZGF0YSwgaW4gd29yZHMKLSsgIE1PWl9BU1NFUlQoc2l6ZUluV29yZHMg PCAoMSA8PCAxNSkpOwotKyAgdWludDMyX3QgaGVhZGVyID0gKHNpemVJbldvcmRzICYgMHg3RkZG KSB8IChpc05hdHVyYWwgPyAoMSA8PCAxNSkgOiAwKSB8Ci0rICAgICAgICAgICAgICAgICAgICAw eEZGRkYwMDAwOyAgLy8gc2VudGluZWwKLSsgICoodWludDMyX3QqKXN0YXJ0ID0gaGVhZGVyOwot K30KLSsKLSsvKiBzdGF0aWMgKi8KLSt2b2lkIEFzc2VtYmxlcjo6UGF0Y2hTaG9ydFJhbmdlQnJh bmNoVG9WZW5lZXIoUFBDQnVmZmVyKiwgdW5zaWduZWQgcmFuZ2VJZHgsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlck9mZnNldCBkZWFkbGluZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyT2Zm c2V0IHZlbmVlcikgewotKyAgLy8gUFBDNjQgZG9lcyBub3QgdXNlIHNob3J0LXJhbmdlIGJyYW5j aCB0cmFja2luZyAoTnVtU2hvcnRCcmFuY2hSYW5nZXMgPSAwKS4KLSsgIE1PWl9DUkFTSCgiUGF0 Y2hTaG9ydFJhbmdlQnJhbmNoVG9WZW5lZXI6IHNob3VsZCBub3QgYmUgY2FsbGVkIik7Ci0rfQot KwotKy8vIFR3byBzdGFuemEgc2hhcGVzIHNoYXJlIHRoZSBzYW1lIDgtc2xvdCBmb290cHJpbnQg YW5kIHRoZSBzYW1lIC5xdWFkCi0rLy8gbG9jYXRpb24gYXQgc2xvdHMgWzYuLjddIChzbyBFeHRy YWN0TG9hZDY0VmFsdWUgLyBVcGRhdGVMb2FkNjRWYWx1ZSBhcmUKLSsvLyBzaGFwZS1hZ25vc3Rp Yyk6Ci0rLy8KLSsvLyAgIFBPV0VSOCAobm8gYWRkcGNpcyk6Ci0rLy8gICAgIFswXSBtZmxyIHIw Ci0rLy8gICAgIFsxXSBiY2wgMjAsMCwuKzQgICAgICAgICAoTFIgOj0gcGMgb2YgWzJdKQotKy8v ICAgICBbMl0gbWZsciByRAotKy8vICAgICBbM10gbXRsciByMAotKy8vICAgICBbNF0gbGQgckQs IDE2KHJEKQotKy8vICAgICBbNV0gYiAuKzEyCi0rLy8gICAgIFs2Li43XSAucXVhZCBWQUxVRQot Ky8vCi0rLy8gICBQT1dFUjkrIChhZGRwY2lzKToKLSsvLyAgICAgWzBdIGFkZHBjaXMgckQsIDAg ICAgICAgIChyRCA6PSBOSUEgPSBwYyBvZiBbMV0pCi0rLy8gICAgIFsxXSBsZCByRCwgMjAockQp ICAgICAgICAockQgOj0gbWVtW3BjX29mX1sxXSArIDIwXSA9IG1lbVtzbG90WzZdXSkKLSsvLyAg ICAgWzJdIGIgLisyNAotKy8vICAgICBbMy4uNV0gTk9QLCBOT1AsIE5PUAotKy8vICAgICBbNi4u N10gLnF1YWQgVkFMVUUKLSsvLwotKy8vIFRoZSBQOSsgZm9ybSBkcm9wcyB0aGUgYmNsL21mbHIv bXRsciBMUi1ib3VuY2UgKG5vIFJBUyB0aHJhc2gpIGFuZCBydW5zCi0rLy8gMiBkeW5hbWljIGlu c25zIGluc3RlYWQgb2YgNi4gRGlzdGluZ3Vpc2hlZCBhdCBwYXRjaCB0aW1lIGJ5IGluc3RbMF0n cwotKy8vIG1ham9yIG9wY29kZTogMzEgPSBtZnNwciAoUDgpIHZzIDE5ID0gYWRkcGNpcyAoUDkr KS4KLStzdGF0aWMgYm9vbCBJc0FkZHBjaXNMb2FkNjRTdGFuemEodWludDMyX3QgZW5jMCkgewot KyAgcmV0dXJuICgoZW5jMCA+PiAyNikgJiAweDNmKSA9PSAxOTsKLSt9Ci0rCi0rLy8gRXh0cmFj dCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgZnJvbSBhIGxvYWQ2NCBzdGFuemEgaW4gZWl0aGVy IHNoYXBlLgotKy8vIFA4IHN0b3JlcyByRCBpbiBgbWZsciByRGAgYXQgc2xvdCBbMl07IFA5KyBz dG9yZXMgckQgaW4gYGFkZHBjaXMgckQsIDBgCi0rLy8gYXQgc2xvdCBbMF0uIEJvdGggZW5jb2Rl IFJUIGF0IExFIGJpdHMgWzIxLi4yNV0uCi0rc3RhdGljIHVpbnQ4X3QgTG9hZDY0U3RhbnphRGVz dFJlZyhJbnN0cnVjdGlvbiogaW5zdDApIHsKLSsgIGlmIChJc0FkZHBjaXNMb2FkNjRTdGFuemEo aW5zdDAtPmVuY29kZSgpKSkgewotKyAgICByZXR1cm4gKGluc3QwWzBdLmVuY29kZSgpID4+IDIx KSAmIDB4MWY7Ci0rICB9Ci0rICByZXR1cm4gKGluc3QwWzJdLmVuY29kZSgpID4+IDIxKSAmIDB4 MWY7Ci0rfQotKwotKy8qIHN0YXRpYyAqLwotK3ZvaWQgQXNzZW1ibGVyOjpXcml0ZUxvYWQ2NElu c3RydWN0aW9ucyhJbnN0cnVjdGlvbiogaW5zdDAsIFJlZ2lzdGVyIHJlZywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsdWUpIHsKLSsgIEluc3Ry dWN0aW9uKiBpMSA9IGluc3QwLT5uZXh0KCk7Ci0rICBJbnN0cnVjdGlvbiogaTIgPSBpMS0+bmV4 dCgpOwotKyAgSW5zdHJ1Y3Rpb24qIGkzID0gaTItPm5leHQoKTsKLSsgIEluc3RydWN0aW9uKiBp NCA9IGkzLT5uZXh0KCk7Ci0rICBJbnN0cnVjdGlvbiogaTUgPSBpNC0+bmV4dCgpOwotKyAgSW5z dHJ1Y3Rpb24qIGk2ID0gaTUtPm5leHQoKTsKLSsgIEluc3RydWN0aW9uKiBpNyA9IGk2LT5uZXh0 KCk7Ci0rCi0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgLy8gWzBdIGFkZHBjaXMgckQsIDAg ICAoRFgtZm9ybTogb3Bjb2RlPTE5LCBYTz0yLCBhbGwgRCBmaWVsZHMgPSAwKQotKyAgICBpbnN0 MC0+c2V0RGF0YSgweDRDMDAwMDA0dSB8ICh1aW50MzJfdChyZWcuY29kZSgpKSA8PCAyMSkpOwot KyAgICAvLyBbMV0gbGQgckQsIDIwKHJEKSAgIChyRCA6PSAqKHNsb3RbMV0gKyAyMCkgPSAqKHNs b3RbNl0pID0gLnF1YWQpCi0rICAgIGkxLT5zZXREYXRhKFBQQ19sZCB8ICh1aW50MzJfdChyZWcu Y29kZSgpKSA8PCAyMSkgfAotKyAgICAgICAgICAgICAgICAodWludDMyX3QocmVnLmNvZGUoKSkg PDwgMTYpIHwgMjApOwotKyAgICAvLyBbMl0gYiAuKzI0ICAgICAgICAgIChza2lwIHNsb3RzIFsz Li43XSB0byBsYW5kIGF0IHNsb3QgWzhdKQotKyAgICBpMi0+c2V0RGF0YShQUENfYiB8ICgyNCAm IDB4MDNGRkZGRkMpKTsKLSsgICAgLy8gWzMuLjVdIE5PUCBmaWxsZXIg4oCUIHVucmVhY2hhYmxl IGJ1dCBrZXB0IGFsaWduZWQgZm9yIHRoZSBwYXRjaGVyLgotKyAgICBpMy0+c2V0RGF0YShOb3BJ bnN0KTsKLSsgICAgaTQtPnNldERhdGEoTm9wSW5zdCk7Ci0rICAgIGk1LT5zZXREYXRhKE5vcElu c3QpOwotKyAgfSBlbHNlIHsKLSsgICAgLy8gWzBdIG1mbHIgcjAKLSsgICAgaW5zdDAtPnNldERh dGEoUFBDX21mc3ByIHwgKHIwLmNvZGUoKSA8PCAyMSkgfCBQUENfU1BSKHNwcl9scikpOwotKyAg ICAvLyBbMV0gYmNsIDIwLDAsLis0Ci0rICAgIGkxLT5zZXREYXRhKFBQQ19iY2xfYWx3YXlzX3Bs dXM0KTsKLSsgICAgLy8gWzJdIG1mbHIgckQKLSsgICAgaTItPnNldERhdGEoUFBDX21mc3ByIHwg KHJlZy5jb2RlKCkgPDwgMjEpIHwgUFBDX1NQUihzcHJfbHIpKTsKLSsgICAgLy8gWzNdIG10bHIg cjAKLSsgICAgaTMtPnNldERhdGEoUFBDX210c3ByIHwgKHIwLmNvZGUoKSA8PCAyMSkgfCBQUENf U1BSKHNwcl9scikpOwotKyAgICAvLyBbNF0gbGQgckQsIDE2KHJEKQotKyAgICBpNC0+c2V0RGF0 YShQUENfbGQgfCAocmVnLmNvZGUoKSA8PCAyMSkgfCAocmVnLmNvZGUoKSA8PCAxNikgfCAxNik7 Ci0rICAgIC8vIFs1XSBiIC4rMTIKLSsgICAgaTUtPnNldERhdGEoUFBDX2IgfCAoMTIgJiAweDAz RkZGRkZDKSk7Ci0rICB9Ci0rCi0rICAvLyBbNi4uN10gLnF1YWQgVkFMVUUgKGxvdyAzMiBhdCBs b3dlciBhZGRyLCBoaWdoIDMyIGF0IGhpZ2hlciBhZGRyKS4KLSsgIGk2LT5zZXREYXRhKCh1aW50 MzJfdCkodmFsdWUgJiAweEZGRkZGRkZGKSk7Ci0rICBpNy0+c2V0RGF0YSgodWludDMyX3QpKHZh bHVlID4+IDMyKSk7Ci0rfQotKwotKy8qIHN0YXRpYyAqLwotK3VpbnQ2NF90IEFzc2VtYmxlcjo6 RXh0cmFjdExvYWQ2NFZhbHVlKEluc3RydWN0aW9uKiBpbnN0MCkgewotKyAgLy8gVGhlIDgtYnl0 ZSB2YWx1ZSBpcyBhdCBpbnN0MFs2Li43XSBpbiBib3RoIHNoYXBlcy4KLSsgIEluc3RydWN0aW9u KiBpNiA9IGluc3QwICsgNjsKLSsgIEluc3RydWN0aW9uKiBpNyA9IGluc3QwICsgNzsKLSsKLSsg IHVpbnQ2NF90IGxvID0gKHVpbnQ2NF90KWk2LT5lbmNvZGUoKTsgIC8vIGxvdyAzMiBhdCBsb3dl ciBhZGRyCi0rICB1aW50NjRfdCBoaSA9ICh1aW50NjRfdClpNy0+ZW5jb2RlKCk7ICAvLyBoaWdo IDMyIGF0IGhpZ2hlciBhZGRyCi0rICByZXR1cm4gKGhpIDw8IDMyKSB8IGxvOwotK30KLSsKLSsv KiBzdGF0aWMgKi8KLSt2b2lkIEFzc2VtYmxlcjo6VXBkYXRlTG9hZDY0VmFsdWUoSW5zdHJ1Y3Rp b24qIGluc3QwLCB1aW50NjRfdCB2YWx1ZSkgewotKyAgLy8gU2FuaXR5LWNoZWNrIHRoYXQgaW5z dDAgaXMgdGhlIHN0YXJ0IG9mIGEgbG9hZDY0IHN0YW56YSBpbiBlaXRoZXIgc2hhcGUuCi0rICAv LyBQODogaW5zdDBbMV0gPT0gYmNsIDIwLDAsLis0LiBQOSs6IGluc3QwWzBdIGlzIGFkZHBjaXMg KG1ham9yIG9wY29kZSAxOSkuCi0rICBNT1pfQVNTRVJUKGluc3QwWzFdLmVuY29kZSgpID09IFBQ Q19iY2xfYWx3YXlzX3BsdXM0IHx8Ci0rICAgICAgICAgICAgICAgICBJc0FkZHBjaXNMb2FkNjRT dGFuemEoaW5zdDAtPmVuY29kZSgpKSwKLSsgICAgICAgICAgICAgIlVwZGF0ZUxvYWQ2NFZhbHVl OiBpbnN0MCBpcyBub3QgYSBsb2FkNjQgc3RhbnphIik7Ci0rCi0rICAvLyAucXVhZCBsaXZlcyBh dCBpbnN0MFs2Li43XSBpbiBib3RoIHNoYXBlcy4KLSsgIEluc3RydWN0aW9uKiBpNiA9IGluc3Qw ICsgNjsKLSsgIEluc3RydWN0aW9uKiBpNyA9IGluc3QwICsgNzsKLSsKLSsgIGk2LT5zZXREYXRh KCh1aW50MzJfdCkodmFsdWUgJiAweEZGRkZGRkZGKSk7ICAvLyBsb3cgMzIgYXQgbG93ZXIgYWRk cgotKyAgaTctPnNldERhdGEoKHVpbnQzMl90KSh2YWx1ZSA+PiAzMikpOyAgICAgICAgIC8vIGhp Z2ggMzIgYXQgaGlnaGVyIGFkZHIKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gUGF0 Y2hpbmcgYW5kIHRvZ2dsZSBvcGVyYXRpb25zLgotKy8vID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKwotKy8q IHN0YXRpYyAqLwotK3VpbnQzMl90IEFzc2VtYmxlcjo6UGF0Y2hXcml0ZV9OZWFyQ2FsbFNpemUo KSB7Ci0rICAvLyA4IGluc3RydWN0aW9ucyBmb3IgTG9hZDY0ICsgbXRjdHIgKyBiY3RybCA9IDEw IGluc3RydWN0aW9ucy4KLSsgIHJldHVybiAxMCAqIHNpemVvZih1aW50MzJfdCk7Ci0rfQotKwot Ky8qIHN0YXRpYyAqLwotK3ZvaWQgQXNzZW1ibGVyOjpQYXRjaFdyaXRlX05lYXJDYWxsKENvZGVM b2NhdGlvbkxhYmVsIHN0YXJ0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENvZGVMb2NhdGlvbkxhYmVsIHRvQ2FsbCkgewotKyAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5z dHJ1Y3Rpb24qKXN0YXJ0LnJhdygpOwotKyAgdWludDhfdCogZGVzdCA9IHRvQ2FsbC5yYXcoKTsK LSsKLSsgIEFzc2VtYmxlcjo6V3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMoaW5zdCwgU2F2ZWRTY3Jh dGNoUmVnaXN0ZXIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50 NjRfdClkZXN0KTsKLSsgIGluc3RbOF0ubWFrZU9wX210Y3RyKFNhdmVkU2NyYXRjaFJlZ2lzdGVy KTsKLSsgIGluc3RbOV0ubWFrZU9wX2JjdHIoTGlua0IpOwotKyAgRmx1c2hJQ2FjaGUoaW5zdCwg MTAgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKLSt9Ci0rCi0rLyogc3RhdGljICovCi0rdm9pZCBB c3NlbWJsZXI6OlBhdGNoV3JpdGVfSW1tMzIoQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwsIEltbTMy IGltbSkgewotKyAgdWludDMyX3QqIGwgPSAodWludDMyX3QqKWxhYmVsLnJhdygpOwotKyAgKihs IC0gMSkgPSBpbW0udmFsdWU7Ci0rICBGbHVzaElDYWNoZShsIC0gMSwgc2l6ZW9mKHVpbnQzMl90 KSk7Ci0rfQotKwotK3ZvaWQgQXNzZW1ibGVyOjpQYXRjaERhdGFXaXRoVmFsdWVDaGVjayhDb2Rl TG9jYXRpb25MYWJlbCBsYWJlbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW1tUHRyIG5ld1ZhbHVlLCBJbW1QdHIgZXhwZWN0ZWRWYWx1ZSkgewotKyAgUGF0Y2hE YXRhV2l0aFZhbHVlQ2hlY2sobGFiZWwsIFBhdGNoZWRJbW1QdHIobmV3VmFsdWUudmFsdWUpLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0Y2hlZEltbVB0cihleHBlY3RlZFZhbHVlLnZh bHVlKSk7Ci0rfQotKwotK3ZvaWQgQXNzZW1ibGVyOjpQYXRjaERhdGFXaXRoVmFsdWVDaGVjayhD b2RlTG9jYXRpb25MYWJlbCBsYWJlbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUGF0Y2hlZEltbVB0ciBuZXdWYWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUGF0Y2hlZEltbVB0ciBleHBlY3RlZFZhbHVlKSB7Ci0rICBJbnN0 cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopbGFiZWwucmF3KCk7Ci0rCi0rICBEZWJ1Z09u bHk8dWludDY0X3Q+IHZhbHVlID0gQXNzZW1ibGVyOjpFeHRyYWN0TG9hZDY0VmFsdWUoaW5zdCk7 Ci0rICBNT1pfQVNTRVJUKHZhbHVlID09IHVpbnQ2NF90KGV4cGVjdGVkVmFsdWUudmFsdWUpKTsK LSsKLSsgIEFzc2VtYmxlcjo6VXBkYXRlTG9hZDY0VmFsdWUoaW5zdCwgdWludDY0X3QobmV3VmFs dWUudmFsdWUpKTsKLSsgIEZsdXNoSUNhY2hlKGluc3QsIDggKiBzaXplb2YoSW5zdHJ1Y3Rpb24p KTsKLSt9Ci0rCi0rLy8gVG9nZ2xlQ2FsbCB0b2dnbGVzIHRoZSBjYWxsIHBvcnRpb24gb2YgYSB0 b2dnbGVkQ2FsbCBzdGFuemEuCi0rLy8gTGF5b3V0OiA4IGxvYWQ2NCBpbnN0cnVjdGlvbnMgKyBt dGN0ciArIGJjdHJsICgxMCB0b3RhbCkuCi0rLy8gV2UgdG9nZ2xlIHRoZSBsYXN0IHR3byBpbnN0 cnVjdGlvbnMgKG10Y3RyL2JjdHJsIHZzIG5vcC9ub3ApLgotKy8vIFRoZSBkZXN0aW5hdGlvbiBy ZWdpc3RlciBpcyBleHRyYWN0ZWQgdmlhIExvYWQ2NFN0YW56YURlc3RSZWcsIHdoaWNoCi0rLy8g aGFuZGxlcyBib3RoIHRoZSBQOCAobWZsci1yRCBhdCBzbG90IFsyXSkgYW5kIFA5KyAoYWRkcGNp cy1yRCBhdCBzbG90Ci0rLy8gWzBdKSBzaGFwZXMuCi0rCi0rLyogc3RhdGljICovCi0rdm9pZCBB c3NlbWJsZXI6OlRvZ2dsZUNhbGwoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdF8sIGJvb2wgZW5hYmxl ZCkgewotKyAgSW5zdHJ1Y3Rpb24qIGkwID0gKEluc3RydWN0aW9uKilpbnN0Xy5yYXcoKTsKLSsg IEluc3RydWN0aW9uKiBpOCA9IChJbnN0cnVjdGlvbiopKGluc3RfLnJhdygpICsgOCAqIHNpemVv Zih1aW50MzJfdCkpOwotKyAgSW5zdHJ1Y3Rpb24qIGk5ID0gKEluc3RydWN0aW9uKikoaW5zdF8u cmF3KCkgKyA5ICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0rCi0rICAvLyBBY2NlcHQgZWl0aGVyIFA4 IHN0YW56YSAobWZsciByMCBhdCBzbG90IFswXSkgb3IgUDkrIHN0YW56YSAoYWRkcGNpcyBhdAot KyAgLy8gc2xvdCBbMF07IG1ham9yIG9wY29kZSAxOSkuCi0rICBNT1pfQVNTRVJUKGkwLT5lbmNv ZGUoKSA9PSAoUFBDX21mc3ByIHwgKHIwLmNvZGUoKSA8PCAyMSkgfCBQUENfU1BSKHNwcl9scikp IHx8Ci0rICAgICAgICAgICAgICAgICBJc0FkZHBjaXNMb2FkNjRTdGFuemEoaTAtPmVuY29kZSgp KSk7Ci0rCi0rICAvLyBUb2dnbGVDYWxsIGlzIGlkZW1wb3RlbnQgYWNyb3NzIHRoZSBzYW1lIGBl bmFibGVkYCB2YWx1ZTogcmUtZW5hYmxpbmcKLSsgIC8vIGFuIGFscmVhZHktZW5hYmxlZCBzaXRl IChvciByZS1kaXNhYmxpbmcgYSBkaXNhYmxlZCBvbmUpIGlzIGEgbm8tb3AuCi0rICAvLyBNb3pp bGxhJ3MgZGVidWdnZXIgbWFjaGluZXJ5IG1heSBsZWdpdGltYXRlbHkgdG9nZ2xlIHRoZSBzYW1l IGNhbGwgc2l0ZQotKyAgLy8gbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIChl LmcuIHNldHRpbmcgYm90aCBhIGJyZWFrcG9pbnQKLSsgIC8vIGFuZCBhIGZyYW1lLm9uU3RlcCBv biB0aGUgc2FtZSBzY3JpcHQpLgotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IFJlZ2lzdGVyOjpGcm9t Q29kZShMb2FkNjRTdGFuemFEZXN0UmVnKGkwKSk7Ci0rICB1aW50MzJfdCBtdGN0ciA9IFBQQ19t dHNwciB8IChzY3JhdGNoLmNvZGUoKSA8PCAyMSkgfCBQUENfU1BSKHNwcl9jdHIpOwotKyAgdWlu dDMyX3QgYmN0cmwgPSAodWludDMyX3QpUFBDX2JjdHIgfCAodWludDMyX3QpTGlua0I7Ci0rICBp ZiAoZW5hYmxlZCkgewotKyAgICBNT1pfQVNTRVJUKGk4LT5lbmNvZGUoKSA9PSBOb3BJbnN0IHx8 IGk4LT5lbmNvZGUoKSA9PSBtdGN0cik7Ci0rICAgIE1PWl9BU1NFUlQoaTktPmVuY29kZSgpID09 IE5vcEluc3QgfHwgaTktPmVuY29kZSgpID09IGJjdHJsKTsKLSsgICAgaTgtPnNldERhdGEobXRj dHIpOwotKyAgICBpOS0+c2V0RGF0YShiY3RybCk7Ci0rICB9IGVsc2UgewotKyAgICBNT1pfQVNT RVJUKGk4LT5lbmNvZGUoKSA9PSBOb3BJbnN0IHx8IGk4LT5lbmNvZGUoKSA9PSBtdGN0cik7Ci0r ICAgIE1PWl9BU1NFUlQoaTktPmVuY29kZSgpID09IE5vcEluc3QgfHwgaTktPmVuY29kZSgpID09 IGJjdHJsKTsKLSsgICAgaTgtPnNldERhdGEoTm9wSW5zdCk7Ci0rICAgIGk5LT5zZXREYXRhKE5v cEluc3QpOwotKyAgfQotKyAgRmx1c2hJQ2FjaGUoaTgsIDIgKiBzaXplb2YoSW5zdHJ1Y3Rpb24p KTsKLSt9Ci0rCi0rLy8gdG9nZ2xlZEp1bXAgZW1pdHMgYSB0cmFwIHN0YW56YSB2aWEganVtcChs YWJlbCkuIEFmdGVyIGJpbmRpbmcsIHRoZSBmaXJzdAotKy8vIGluc3RydWN0aW9uIGJlY29tZXMg ImIgb2Zmc2V0IiAoc2hvcnQgYnJhbmNoKS4gV2UgdG9nZ2xlIGJldHdlZW4gYiBhbmQgb3JpOgot Ky8vICAgYiBvZmZzZXQ6ICAgICAgIFswMTAwMTBdW0xJOjI0XVswXVswXQotKy8vICAgb3JpIHIw LHIwLGltbTogIFswMTEwMDBdWzAwMDAwXVswMDAwMF1bVUk6MTZdCi0rLy8gRm9yIHNob3J0IGZv cndhcmQganVtcHMgKG9mZnNldCA8IDY0S0IpLCBiaXRzIDI1OjE2IG9mIExJIGFyZSAwLCBzbwot Ky8vIHN3YXBwaW5nIHRoZSBvcGNvZGUgcHJlc2VydmVzIHRoZSBvZmZzZXQgaW4gdGhlIGxvd2Vy IDE2IGJpdHMuCi0rLy8gb3JpIHIwLHIwLFggaXMgZWZmZWN0aXZlbHkgYSBub3AgKHdyaXRlcyB0 byByMCkuCi0rCi0rLyogc3RhdGljICovCi0rdm9pZCBBc3NlbWJsZXI6OlRvZ2dsZVRvSm1wKENv ZGVMb2NhdGlvbkxhYmVsIGluc3RfKSB7Ci0rICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVj dGlvbiopaW5zdF8ucmF3KCk7Ci0rICBNT1pfQVNTRVJUKGluc3QtPmlzT3Bjb2RlKFBQQ19vcmkp KTsKLSsgIC8vIFZlcmlmeSBSUz0wIGFuZCBSQT0wIChyMCkuCi0rICBNT1pfQVNTRVJUKChpbnN0 LT5lbmNvZGUoKSAmIDB4MDNFMDAwMDApID09IDApOwotKyAgTU9aX0FTU0VSVCgoaW5zdC0+ZW5j b2RlKCkgJiAweDAwMUYwMDAwKSA9PSAwKTsKLSsgIC8vIFN3YXAgb3Bjb2RlIGZyb20gb3JpICgw MTEwMDApIHRvIGIgKDAxMDAxMCkuCi0rICB1aW50MzJfdCBlbmNvZGluZyA9IGluc3QtPmVuY29k ZSgpOwotKyAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgJiAweDAzRkZGRkZGKSB8ICh1aW50MzJfdClQ UENfYjsKLSsgIGluc3QtPnNldERhdGEoZW5jb2RpbmcpOwotKyAgRmx1c2hJQ2FjaGUoaW5zdCwg c2l6ZW9mKEluc3RydWN0aW9uKSk7Ci0rfQotKwotKy8qIHN0YXRpYyAqLwotK3ZvaWQgQXNzZW1i bGVyOjpUb2dnbGVUb0NtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0XykgewotKyAgSW5zdHJ1Y3Rp b24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKWluc3RfLnJhdygpOwotKyAgTU9aX0FTU0VSVChpbnN0 LT5pc09wY29kZShQUENfYikpOwotKyAgLy8gVmVyaWZ5IHNob3J0IGZvcndhcmQgYnJhbmNoOiB1 cHBlciBMSSBiaXRzICgyNToxNikgYXJlIDAsIEFBPTAsIExLPTAuCi0rICBNT1pfQVNTRVJUKChp bnN0LT5lbmNvZGUoKSAmIDB4MDNGRjAwMDMpID09IDApOwotKyAgLy8gU3dhcCBvcGNvZGUgZnJv bSBiICgwMTAwMTApIHRvIG9yaSAoMDExMDAwKS4KLSsgIHVpbnQzMl90IGVuY29kaW5nID0gaW5z dC0+ZW5jb2RlKCk7Ci0rICBlbmNvZGluZyA9IChlbmNvZGluZyAmIDB4MDNGRkZGRkYpIHwgKHVp bnQzMl90KVBQQ19vcmk7Ci0rICBpbnN0LT5zZXREYXRhKGVuY29kaW5nKTsKLSsgIEZsdXNoSUNh Y2hlKGluc3QsIHNpemVvZihJbnN0cnVjdGlvbikpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsvLyBCaW5kLCB0cmFjaW5nLCBhbmQgcG9pbnRlciBleHRyYWN0aW9uLgotKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKwotK3ZvaWQgQXNzZW1ibGVyOjpCaW5kKHVpbnQ4X3QqIHJhd0NvZGUsIGNv bnN0IENvZGVMYWJlbCYgbGFiZWwpIHsKLSsgIGlmIChsYWJlbC5wYXRjaEF0KCkuYm91bmQoKSkg ewotKyAgICBhdXRvIG1vZGUgPSBsYWJlbC5saW5rTW9kZSgpOwotKyAgICBpbnRwdHJfdCBvZmZz ZXQgPSBsYWJlbC5wYXRjaEF0KCkub2Zmc2V0KCk7Ci0rICAgIGludHB0cl90IHRhcmdldCA9IGxh YmVsLnRhcmdldCgpLm9mZnNldCgpOwotKwotKyAgICBpZiAobW9kZSA9PSBDb2RlTGFiZWw6OlJh d1BvaW50ZXIpIHsKLSsgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKio+KHJhd0Nv ZGUgKyBvZmZzZXQpID0gcmF3Q29kZSArIHRhcmdldDsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBN T1pfQVNTRVJUKG1vZGUgPT0gQ29kZUxhYmVsOjpNb3ZlSW1tZWRpYXRlIHx8Ci0rICAgICAgICAg ICAgICAgICBtb2RlID09IENvZGVMYWJlbDo6SnVtcEltbWVkaWF0ZSk7Ci0rICAgICAgSW5zdHJ1 Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKShyYXdDb2RlICsgb2Zmc2V0KTsKLSsgICAgICBB c3NlbWJsZXI6OlVwZGF0ZUxvYWQ2NFZhbHVlKGluc3QsICh1aW50NjRfdCkocmF3Q29kZSArIHRh cmdldCkpOwotKyAgICB9Ci0rICB9Ci0rfQotKwotK3VpbnRwdHJfdCBBc3NlbWJsZXI6OkdldFBv aW50ZXIodWludDhfdCogaW5zdFB0cikgewotKyAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1 Y3Rpb24qKWluc3RQdHI7Ci0rICByZXR1cm4gQXNzZW1ibGVyOjpFeHRyYWN0TG9hZDY0VmFsdWUo aW5zdCk7Ci0rfQotKwotK3N0YXRpYyBKaXRDb2RlKiBDb2RlRnJvbUp1bXAoSW5zdHJ1Y3Rpb24q IGp1bXApIHsKLSsgIHVpbnQ4X3QqIHRhcmdldCA9ICh1aW50OF90KilBc3NlbWJsZXI6OkV4dHJh Y3RMb2FkNjRWYWx1ZShqdW1wKTsKLSsgIHJldHVybiBKaXRDb2RlOjpGcm9tRXhlY3V0YWJsZSh0 YXJnZXQpOwotK30KLSsKLSt2b2lkIEFzc2VtYmxlcjo6VHJhY2VKdW1wUmVsb2NhdGlvbnMoSlNU cmFjZXIqIHRyYywgSml0Q29kZSogY29kZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ29tcGFjdEJ1ZmZlclJlYWRlciYgcmVhZGVyKSB7Ci0rICB3aGlsZSAocmVhZGVy Lm1vcmUoKSkgewotKyAgICBKaXRDb2RlKiBjaGlsZCA9Ci0rICAgICAgICBDb2RlRnJvbUp1bXAo KEluc3RydWN0aW9uKikoY29kZS0+cmF3KCkgKyByZWFkZXIucmVhZFVuc2lnbmVkKCkpKTsKLSsg ICAgVHJhY2VNYW51YWxseUJhcnJpZXJlZEVkZ2UodHJjLCAmY2hpbGQsICJyZWwzMiIpOwotKyAg fQotK30KLSsKLStzdGF0aWMgdm9pZCBUcmFjZU9uZURhdGFSZWxvY2F0aW9uKEpTVHJhY2VyKiB0 cmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpNYXliZTxB dXRvV3JpdGFibGVKaXRDb2RlPiYgYXdqYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEppdENvZGUqIGNvZGUsIEluc3RydWN0aW9uKiBpbnN0KSB7Ci0rICB2b2lkKiBwdHIg PSAodm9pZCopQXNzZW1ibGVyOjpFeHRyYWN0TG9hZDY0VmFsdWUoaW5zdCk7Ci0rICB2b2lkKiBw cmlvciA9IHB0cjsKLSsKLSsgIHVpbnRwdHJfdCB3b3JkID0gcmVpbnRlcnByZXRfY2FzdDx1aW50 cHRyX3Q+KHB0cik7Ci0rICBpZiAod29yZCA+PiBKU1ZBTF9UQUdfU0hJRlQpIHsKLSsgICAgVmFs dWUgdiA9IFZhbHVlOjpmcm9tUmF3Qml0cyh3b3JkKTsKLSsgICAgVHJhY2VNYW51YWxseUJhcnJp ZXJlZEVkZ2UodHJjLCAmdiwgImppdC1tYXNtLXZhbHVlIik7Ci0rICAgIHB0ciA9ICh2b2lkKil2 LmJpdHNBc1B1bmJveFBvaW50ZXIoKTsKLSsgIH0gZWxzZSB7Ci0rICAgIFRyYWNlTWFudWFsbHlC YXJyaWVyZWRHZW5lcmljUG9pbnRlckVkZ2UoCi0rICAgICAgICB0cmMsIHJlaW50ZXJwcmV0X2Nh c3Q8Z2M6OkNlbGwqKj4oJnB0ciksICJqaXQtbWFzbS1wdHIiKTsKLSsgIH0KLSsKLSsgIGlmIChw dHIgIT0gcHJpb3IpIHsKLSsgICAgaWYgKGF3amMuaXNOb3RoaW5nKCkpIHsKLSsgICAgICBhd2pj LmVtcGxhY2UoY29kZSk7Ci0rICAgIH0KLSsgICAgQXNzZW1ibGVyOjpVcGRhdGVMb2FkNjRWYWx1 ZShpbnN0LCB1aW50NjRfdChwdHIpKTsKLSsgIH0KLSt9Ci0rCi0rLyogc3RhdGljICovCi0rdm9p ZCBBc3NlbWJsZXI6OlRyYWNlRGF0YVJlbG9jYXRpb25zKEpTVHJhY2VyKiB0cmMsIEppdENvZGUq IGNvZGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhY3RCdWZm ZXJSZWFkZXImIHJlYWRlcikgewotKyAgbW96aWxsYTo6TWF5YmU8QXV0b1dyaXRhYmxlSml0Q29k ZT4gYXdqYzsKLSsgIHdoaWxlIChyZWFkZXIubW9yZSgpKSB7Ci0rICAgIHNpemVfdCBvZmZzZXQg PSByZWFkZXIucmVhZFVuc2lnbmVkKCk7Ci0rICAgIEluc3RydWN0aW9uKiBpbnN0ID0gKEluc3Ry dWN0aW9uKikoY29kZS0+cmF3KCkgKyBvZmZzZXQpOwotKyAgICBUcmFjZU9uZURhdGFSZWxvY2F0 aW9uKHRyYywgYXdqYywgY29kZSwgaW5zdCk7Ci0rICB9Ci0rfQotKwotKy8qIHN0YXRpYyAqLwot K3VpbnQ4X3QqIEFzc2VtYmxlcjo6TmV4dEluc3RydWN0aW9uKHVpbnQ4X3QqIGluc3RydWN0aW9u LCB1aW50MzJfdCogY291bnQpIHsKLSsgIGlmIChjb3VudCAhPSBudWxscHRyKSB7Ci0rICAgICpj b3VudCArPSBzaXplb2YoSW5zdHJ1Y3Rpb24pOwotKyAgfQotKyAgcmV0dXJuIGluc3RydWN0aW9u ICsgc2l6ZW9mKEluc3RydWN0aW9uKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8g VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgaW1wbGVtZW50YXRpb24uCi0rLy8gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rCi0rVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGU6OlVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl KEFzc2VtYmxlciYgYXNzZW1ibGVyKQotKyAgICA6IGF2YWlsYWJsZV8oYXNzZW1ibGVyLkdldFNj cmF0Y2hSZWdpc3Rlckxpc3QoKSksCi0rICAgICAgb2xkX2F2YWlsYWJsZV8oKmF2YWlsYWJsZV8p IHt9Ci0rCi0rVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGU6OlVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl KEFzc2VtYmxlciogYXNzZW1ibGVyKQotKyAgICA6IGF2YWlsYWJsZV8oYXNzZW1ibGVyLT5HZXRT Y3JhdGNoUmVnaXN0ZXJMaXN0KCkpLAotKyAgICAgIG9sZF9hdmFpbGFibGVfKCphdmFpbGFibGVf KSB7fQotKwotK1VzZVNjcmF0Y2hSZWdpc3RlclNjb3BlOjp+VXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUoKSB7Ci0rICAqYXZhaWxhYmxlXyA9IG9sZF9hdmFpbGFibGVfOwotK30KLSsKLStSZWdpc3Rl ciBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZTo6QWNxdWlyZSgpIHsKLSsgIE1PWl9BU1NFUlQoYXZh aWxhYmxlXyAhPSBudWxscHRyKTsKLSsgIE1PWl9BU1NFUlQoIWF2YWlsYWJsZV8tPmVtcHR5KCkp OwotKyAgUmVnaXN0ZXIgaW5kZXggPSBHZW5lcmFsUmVnaXN0ZXJTZXQ6OkZpcnN0UmVnaXN0ZXIo YXZhaWxhYmxlXy0+Yml0cygpKTsKLSsgIGF2YWlsYWJsZV8tPnRha2VSZWdpc3RlckluZGV4KGlu ZGV4KTsKLSsgIHJldHVybiBpbmRleDsKLSt9Ci0rCi0rdm9pZCBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZTo6UmVsZWFzZShjb25zdCBSZWdpc3RlciYgcmVnKSB7Ci0rICBNT1pfQVNTRVJUKGF2YWls YWJsZV8gIT0gbnVsbHB0cik7Ci0rICBNT1pfQVNTRVJUKG9sZF9hdmFpbGFibGVfLmhhc1JlZ2lz dGVySW5kZXgocmVnKSk7Ci0rICBNT1pfQVNTRVJUKCFhdmFpbGFibGVfLT5oYXNSZWdpc3Rlcklu ZGV4KHJlZykpOwotKyAgSW5jbHVkZShHZW5lcmFsUmVnaXN0ZXJTZXQoMSA8PCByZWcuY29kZSgp KSk7Ci0rfQotKwotK2Jvb2wgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGU6Omhhc0F2YWlsYWJsZSgp IGNvbnN0IHsKLSsgIHJldHVybiAoYXZhaWxhYmxlXy0+c2l6ZSgpKSAhPSAwOwotK30KLWRpZmYg LS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oIGIvanMvc3JjL2ppdC9w cGM2NC9Bc3NlbWJsZXItcHBjNjQuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAw MDAwMDAwMC4uNjBlODRiZjcxY2Y3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3Bw YzY0L0Fzc2VtYmxlci1wcGM2NC5oCi1AQCAtMCwwICsxLDIxMTQgQEAKLSsvKiAtKi0gTW9kZTog QysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6 IDIgLSotCi0rICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgotKyAqIFRoaXMg U291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQ dWJsaWMKLSsgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3Qg ZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCi0rICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0 dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsjaWZuZGVmIGppdF9wcGM2NF9Bc3Nl bWJsZXJfcHBjNjRfaAotKyNkZWZpbmUgaml0X3BwYzY0X0Fzc2VtYmxlcl9wcGM2NF9oCi0rCi0r I2luY2x1ZGUgImppdC9Db21wYWN0QnVmZmVyLmgiCi0rI2luY2x1ZGUgImppdC9KaXRDb2RlLmgi Ci0rI2luY2x1ZGUgImppdC9KaXRTcGV3ZXIuaCIKLSsjaW5jbHVkZSAiaml0L3BwYzY0L0FyY2hp dGVjdHVyZS1wcGM2NC5oIgotKyNpbmNsdWRlICJqaXQvc2hhcmVkL0Fzc2VtYmxlci1zaGFyZWQu aCIKLSsjaW5jbHVkZSAiaml0L3NoYXJlZC9EaXNhc3NlbWJsZXItc2hhcmVkLmgiCi0rI2luY2x1 ZGUgImppdC9zaGFyZWQvSW9uQXNzZW1ibGVyQnVmZmVyLmgiCi0rI2luY2x1ZGUgImppdC9zaGFy ZWQvSW9uQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbHMuaCIKLSsjaW5jbHVkZSAid2Fz bS9XYXNtVHlwZURlY2xzLmgiCi0rCi0rbmFtZXNwYWNlIGpzIHsKLStuYW1lc3BhY2Ugaml0IHsK LSsKLSsvLyBHUFIgcmVnaXN0ZXIgY29uc3RhbnRzLgotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXIgcjB7UmVnaXN0ZXJzOjpyMH07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMXtSZWdp c3RlcnM6OnIxfTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIye1JlZ2lzdGVyczo6cjJ9 OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjN7UmVnaXN0ZXJzOjpyM307Ci0rc3RhdGlj IGNvbnN0ZXhwciBSZWdpc3RlciByNHtSZWdpc3RlcnM6OnI0fTsKLStzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIHI1e1JlZ2lzdGVyczo6cjV9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIg cjZ7UmVnaXN0ZXJzOjpyNn07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByN3tSZWdpc3Rl cnM6OnI3fTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHI4e1JlZ2lzdGVyczo6cjh9Owot K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjl7UmVnaXN0ZXJzOjpyOX07Ci0rc3RhdGljIGNv bnN0ZXhwciBSZWdpc3RlciByMTB7UmVnaXN0ZXJzOjpyMTB9OwotK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgcjExe1JlZ2lzdGVyczo6cjExfTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IHIxMntSZWdpc3RlcnM6OnIxMn07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMTN7UmVn aXN0ZXJzOjpyMTN9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjE0e1JlZ2lzdGVyczo6 cjE0fTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIxNXtSZWdpc3RlcnM6OnIxNX07Ci0r c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMTZ7UmVnaXN0ZXJzOjpyMTZ9OwotK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgcjE3e1JlZ2lzdGVyczo6cjE3fTsKLStzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIHIxOHtSZWdpc3RlcnM6OnIxOH07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciByMTl7UmVnaXN0ZXJzOjpyMTl9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjIwe1Jl Z2lzdGVyczo6cjIwfTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIyMXtSZWdpc3RlcnM6 OnIyMX07Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMjJ7UmVnaXN0ZXJzOjpyMjJ9Owot K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjIze1JlZ2lzdGVyczo6cjIzfTsKLStzdGF0aWMg Y29uc3RleHByIFJlZ2lzdGVyIHIyNHtSZWdpc3RlcnM6OnIyNH07Ci0rc3RhdGljIGNvbnN0ZXhw ciBSZWdpc3RlciByMjV7UmVnaXN0ZXJzOjpyMjV9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXIgcjI2e1JlZ2lzdGVyczo6cjI2fTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIyN3tS ZWdpc3RlcnM6OnIyN307Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMjh7UmVnaXN0ZXJz OjpyMjh9OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjI5e1JlZ2lzdGVyczo6cjI5fTsK LStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIzMHtSZWdpc3RlcnM6OnIzMH07Ci0rc3RhdGlj IGNvbnN0ZXhwciBSZWdpc3RlciByMzF7UmVnaXN0ZXJzOjpyMzF9OwotKwotKy8vIEZQUiByZWdp c3RlciBjb25zdGFudHMuCi0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYwe0Zsb2F0 UmVnaXN0ZXJzOjpmMCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhw ciBGbG9hdFJlZ2lzdGVyIGYxe0Zsb2F0UmVnaXN0ZXJzOjpmMSwgRmxvYXRSZWdpc3RlcnM6OkRv dWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYye0Zsb2F0UmVnaXN0ZXJz OjpmMiwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJl Z2lzdGVyIGYze0Zsb2F0UmVnaXN0ZXJzOjpmMywgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0r c3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGY0e0Zsb2F0UmVnaXN0ZXJzOjpmNCwgRmxv YXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGY1 e0Zsb2F0UmVnaXN0ZXJzOjpmNSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNv bnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGY2e0Zsb2F0UmVnaXN0ZXJzOjpmNiwgRmxvYXRSZWdpc3Rl cnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGY3e0Zsb2F0UmVn aXN0ZXJzOjpmNywgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBG bG9hdFJlZ2lzdGVyIGY4e0Zsb2F0UmVnaXN0ZXJzOjpmOCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJs ZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGY5e0Zsb2F0UmVnaXN0ZXJzOjpm OSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lz dGVyIGYxMHtGbG9hdFJlZ2lzdGVyczo6ZjEwLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStz dGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjExe0Zsb2F0UmVnaXN0ZXJzOjpmMTEsIEZs b2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBm MTJ7RmxvYXRSZWdpc3RlcnM6OmYxMiwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGlj IGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxM3tGbG9hdFJlZ2lzdGVyczo6ZjEzLCBGbG9hdFJl Z2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjE0e0Zs b2F0UmVnaXN0ZXJzOjpmMTQsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25z dGV4cHIgRmxvYXRSZWdpc3RlciBmMTV7RmxvYXRSZWdpc3RlcnM6OmYxNSwgRmxvYXRSZWdpc3Rl cnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxNntGbG9hdFJl Z2lzdGVyczo6ZjE2LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHBy IEZsb2F0UmVnaXN0ZXIgZjE3e0Zsb2F0UmVnaXN0ZXJzOjpmMTcsIEZsb2F0UmVnaXN0ZXJzOjpE b3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMTh7RmxvYXRSZWdpc3Rl cnM6OmYxOCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9h dFJlZ2lzdGVyIGYxOXtGbG9hdFJlZ2lzdGVyczo6ZjE5LCBGbG9hdFJlZ2lzdGVyczo6RG91Ymxl fTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjIwe0Zsb2F0UmVnaXN0ZXJzOjpm MjAsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdp c3RlciBmMjF7RmxvYXRSZWdpc3RlcnM6OmYyMSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0r c3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYyMntGbG9hdFJlZ2lzdGVyczo6ZjIyLCBG bG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIg ZjIze0Zsb2F0UmVnaXN0ZXJzOjpmMjMsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRp YyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMjR7RmxvYXRSZWdpc3RlcnM6OmYyNCwgRmxvYXRS ZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYyNXtG bG9hdFJlZ2lzdGVyczo6ZjI1LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29u c3RleHByIEZsb2F0UmVnaXN0ZXIgZjI2e0Zsb2F0UmVnaXN0ZXJzOjpmMjYsIEZsb2F0UmVnaXN0 ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMjd7RmxvYXRS ZWdpc3RlcnM6OmYyNywgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGljIGNvbnN0ZXhw ciBGbG9hdFJlZ2lzdGVyIGYyOHtGbG9hdFJlZ2lzdGVyczo6ZjI4LCBGbG9hdFJlZ2lzdGVyczo6 RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjI5e0Zsb2F0UmVnaXN0 ZXJzOjpmMjksIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxv YXRSZWdpc3RlciBmMzB7RmxvYXRSZWdpc3RlcnM6OmYzMCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJs ZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYzMXtGbG9hdFJlZ2lzdGVyczo6 ZjMxLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLSsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lz dGVyIEludmFsaWRSZWd7UmVnaXN0ZXJzOjpJbnZhbGlkfTsKLStzdGF0aWMgY29uc3RleHByIEZs b2F0UmVnaXN0ZXIgSW52YWxpZEZsb2F0UmVnOwotKwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXIgU3RhY2tQb2ludGVyID0gcjE7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBGcmFtZVBv aW50ZXIgPSByMzE7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBSZXR1cm5SZWcgPSByMzsK LStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyNjQgUmV0dXJuUmVnNjQoUmV0dXJuUmVnKTsKLStz dGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgUmV0dXJuRmxvYXQzMlJlZ3tGbG9hdFJlZ2lz dGVyczo6ZjEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlcnM6OlNpbmdsZX07Ci0rc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lz dGVyIFJldHVybkRvdWJsZVJlZyA9IGYxOwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3Rl ciBSZXR1cm5TaW1kMTI4UmVne0Zsb2F0UmVnaXN0ZXJzOjpmMSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOH07 Ci0rCi0rLy8gcjE2IGlzIG5vbi12b2xhdGlsZSBhbmQgbm9uLWFsbG9jYXRhYmxlLCB1c2VkIGFz IGEgc2F2ZWQgc2NyYXRjaC4KLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFNhdmVkU2NyYXRj aFJlZ2lzdGVyID0gcjE2OwotKwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgU2Vjb25kU2Ny YXRjaFJlZyA9IHIxMjsKLSsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgU2NyYXRj aEZsb2F0MzJSZWd7RmxvYXRSZWdpc3RlcnM6OmYwLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6U2luZ2xlfTsKLStzdGF0 aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgU2NyYXRjaERvdWJsZVJlZyA9IGYwOwotK3N0YXRp YyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBTY3JhdGNoU2ltZDEyOFJlZ3tGbG9hdFJlZ2lzdGVy czo6ZjAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4fTsKLSsKLStzdHJ1Y3QgU2NyYXRjaEZsb2F0MzJTY29w ZSA6IHB1YmxpYyBBdXRvRmxvYXRSZWdpc3RlclNjb3BlIHsKLSsgIGV4cGxpY2l0IFNjcmF0Y2hG bG9hdDMyU2NvcGUoTWFjcm9Bc3NlbWJsZXImIG1hc20pCi0rICAgICAgOiBBdXRvRmxvYXRSZWdp c3RlclNjb3BlKG1hc20sIFNjcmF0Y2hGbG9hdDMyUmVnKSB7fQotK307Ci0rCi0rc3RydWN0IFNj cmF0Y2hEb3VibGVTY29wZSA6IHB1YmxpYyBBdXRvRmxvYXRSZWdpc3RlclNjb3BlIHsKLSsgIGV4 cGxpY2l0IFNjcmF0Y2hEb3VibGVTY29wZShNYWNyb0Fzc2VtYmxlciYgbWFzbSkKLSsgICAgICA6 IEF1dG9GbG9hdFJlZ2lzdGVyU2NvcGUobWFzbSwgU2NyYXRjaERvdWJsZVJlZykge30KLSt9Owot KwotKy8vIFBQQzY0OiBTY3JhdGNoU2ltZDEyOFNjb3BlIGlzIGEgc2ltcGxlIHJlZ2lzdGVyIHdy YXBwZXIsIE5PVCBhIHNjb3BlZAotKy8vIGFjcXVpcmUvcmVsZWFzZS4gT24gUFBDNjQsIFNjcmF0 Y2hTaW1kMTI4UmVnIGlzIHYwIChWU1IzMjsgZW5jb2RlZCBhcwotKy8vIHtGbG9hdFJlZ2lzdGVy czo6ZjAsIFNpbWQxMjh9IHNvIGVuY29kaW5nKCkgPSAwICsgMzIgPSAzMikg4oCUIGRpc3RpbmN0 Ci0rLy8gZnJvbSBTY3JhdGNoRG91YmxlUmVnID0gZjAgKFZTUjApLiBJdCBpcyBub24tYWxsb2Nh dGFibGUgYW5kIGFsd2F5cwotKy8vIGF2YWlsYWJsZS4gTWFueSBTSU1EIGZ1bmN0aW9ucyBjYWxs IG90aGVyIFNJTUQgZnVuY3Rpb25zIHRoYXQgYWxzbyBuZWVkCi0rLy8gdjAsIGNyZWF0aW5nIG5l c3RlZCAic2NvcGVzIi4gVXNpbmcgQXV0b0Zsb2F0UmVnaXN0ZXJTY29wZSB3b3VsZCBhc3NlcnQK LSsvLyBvbiBkb3VibGUtYWNxdWlyZSBpbiBkZWJ1ZyBidWlsZHMuIFNpbmNlIHYwIGlzIG5ldmVy IGFsbG9jYXRlZCBieSB0aGUKLSsvLyByZWdpc3RlciBhbGxvY2F0b3IsIG5lc3RpbmcgaXMgc2Fm ZS4KLStzdHJ1Y3QgU2NyYXRjaFNpbWQxMjhTY29wZSA6IHB1YmxpYyBGbG9hdFJlZ2lzdGVyIHsK LSsgIGV4cGxpY2l0IFNjcmF0Y2hTaW1kMTI4U2NvcGUoTWFjcm9Bc3NlbWJsZXImKQotKyAgICAg IDogRmxvYXRSZWdpc3RlcihTY3JhdGNoU2ltZDEyOFJlZykge30KLSt9OwotKwotK2NsYXNzIEFz c2VtYmxlcjsKLSsKLStjbGFzcyBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB7Ci0rIHB1YmxpYzoK LSsgIGV4cGxpY2l0IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlKEFzc2VtYmxlciYgYXNzZW1ibGVy KTsKLSsgIGV4cGxpY2l0IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlKEFzc2VtYmxlciogYXNzZW1i bGVyKTsKLSsgIH5Vc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSgpOwotKwotKyAgUmVnaXN0ZXIgQWNx dWlyZSgpOwotKyAgdm9pZCBSZWxlYXNlKGNvbnN0IFJlZ2lzdGVyJiByZWcpOwotKyAgYm9vbCBo YXNBdmFpbGFibGUoKSBjb25zdDsKLSsgIHZvaWQgSW5jbHVkZShjb25zdCBHZW5lcmFsUmVnaXN0 ZXJTZXQmIGxpc3QpIHsKLSsgICAgKmF2YWlsYWJsZV8gPSBHZW5lcmFsUmVnaXN0ZXJTZXQ6OlVu aW9uKCphdmFpbGFibGVfLCBsaXN0KTsKLSsgIH0KLSsgIHZvaWQgRXhjbHVkZShjb25zdCBHZW5l cmFsUmVnaXN0ZXJTZXQmIGxpc3QpIHsKLSsgICAgKmF2YWlsYWJsZV8gPSBHZW5lcmFsUmVnaXN0 ZXJTZXQ6OlN1YnRyYWN0KCphdmFpbGFibGVfLCBsaXN0KTsKLSsgIH0KLSsKLSsgcHJpdmF0ZToK LSsgIEdlbmVyYWxSZWdpc3RlclNldCogYXZhaWxhYmxlXzsKLSsgIEdlbmVyYWxSZWdpc3RlclNl dCBvbGRfYXZhaWxhYmxlXzsKLSt9OwotKwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgT3Ny RnJhbWVSZWcgPSByNjsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFByZUJhcnJpZXJSZWcg PSByNDsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludGVycHJldGVyUENSZWcgPSByMTc7 Ci0rCi0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBDYWxsVGVtcFJlZzAgPSByNDsKLStzdGF0 aWMgY29uc3RleHByIFJlZ2lzdGVyIENhbGxUZW1wUmVnMSA9IHI5OwotK3N0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgQ2FsbFRlbXBSZWcyID0gcjEwOwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXIgQ2FsbFRlbXBSZWczID0gcjc7Ci0rLy8gQ2FsbFRlbXBSZWc0IG11c3QgTk9UIGJlIEpTUmV0 dXJuUmVnIChyNSk6IExNZWdhbW9ycGhpY0xvYWRTbG90UGVybWlzc2l2ZQotKy8vIHVzZXMgdGVt cEZpeGVkKENhbGxUZW1wUmVnNCkgZm9yIGEgc2F2ZWQgb2JqIHBvaW50ZXIgQU5EIGRlZmluZVJl dHVybgotKy8vIChKU1JldHVybk9wZXJhbmQ9cjUpIGZvciBvdXRwdXQuIElmIHRoZXkgYWxpYXMs IHRoZSBtZWdhbW9ycGhpYyBjYWNoZQotKy8vIGxvb2t1cCBjbG9iYmVycyB0aGUgc2F2ZWQgb2Jq LCBjb3JydXB0aW5nIHRoZSAndGhpcycgcG9pbnRlci4KLStzdGF0aWMgY29uc3RleHByIFJlZ2lz dGVyIENhbGxUZW1wUmVnNCA9IHI4OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQ2FsbFRl bXBSZWc1ID0gcjY7Ci0rCi0rLy8gUFBDNjQgRUxGdjIgaGFzIG5vIHZvbGF0aWxlIG5vbi1hcmcg R1BScyAocjMtcjEwIGFyZSBhbGwgYXJnIHJlZ3MpLgotKy8vIFVzZSBhbGxvY2F0YWJsZSBub24t dm9sYXRpbGUgcmVnaXN0ZXJzIGFzIG92ZXJmbG93IHRlbXBzLgotK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgQ2FsbFRlbXBOb25BcmdSZWdzW10gPSB7cjE0LCByMTV9OwotK3N0YXRpYyBjb25z dCB1aW50MzJfdCBOdW1DYWxsVGVtcE5vbkFyZ1JlZ3MgPSBzdGQ6OnNpemUoQ2FsbFRlbXBOb25B cmdSZWdzKTsKLSsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFyZ1JlZzAgPSByMzsK LStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFyZ1JlZzEgPSByNDsKLStzdGF0aWMgY29u c3RleHByIFJlZ2lzdGVyIEludEFyZ1JlZzIgPSByNTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lz dGVyIEludEFyZ1JlZzMgPSByNjsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFyZ1Jl ZzQgPSByNzsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFyZ1JlZzUgPSByODsKLStz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFyZ1JlZzYgPSByOTsKLStzdGF0aWMgY29uc3Rl eHByIFJlZ2lzdGVyIEludEFyZ1JlZzcgPSByMTA7Ci0rCi0rLy8gUmVnaXN0ZXJzIHVzZWQgYnkg UmVnRXhwTWF0Y2hlciBhbmQgUmVnRXhwRXhlY01hdGNoIHN0dWJzLgotK3N0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgUmVnRXhwTWF0Y2hlclJlZ0V4cFJlZyA9IENhbGxUZW1wUmVnMDsKLStzdGF0 aWMgY29uc3RleHByIFJlZ2lzdGVyIFJlZ0V4cE1hdGNoZXJTdHJpbmdSZWcgPSBDYWxsVGVtcFJl ZzE7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBSZWdFeHBNYXRjaGVyTGFzdEluZGV4UmVn ID0gQ2FsbFRlbXBSZWcyOwotKwotKy8vIFJlZ2lzdGVycyB1c2VkIGJ5IFJlZ0V4cEV4ZWNUZXN0 IHN0dWIgKGRvIG5vdCB1c2UgUmV0dXJuUmVnKS4KLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IFJlZ0V4cEV4ZWNUZXN0UmVnRXhwUmVnID0gQ2FsbFRlbXBSZWcwOwotK3N0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgUmVnRXhwRXhlY1Rlc3RTdHJpbmdSZWcgPSBDYWxsVGVtcFJlZzE7Ci0rCi0r Ly8gUmVnaXN0ZXJzIHVzZWQgYnkgUmVnRXhwU2VhcmNoZXIgc3R1YiAoZG8gbm90IHVzZSBSZXR1 cm5SZWcpLgotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmVnRXhwU2VhcmNoZXJSZWdFeHBS ZWcgPSBDYWxsVGVtcFJlZzA7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBSZWdFeHBTZWFy Y2hlclN0cmluZ1JlZyA9IENhbGxUZW1wUmVnMTsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IFJlZ0V4cFNlYXJjaGVyTGFzdEluZGV4UmVnID0gQ2FsbFRlbXBSZWcyOwotKwotK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgSlNSZXR1cm5SZWdfVHlwZSA9IHI2OwotK3N0YXRpYyBjb25zdGV4 cHIgUmVnaXN0ZXIgSlNSZXR1cm5SZWdfRGF0YSA9IHI1OwotK3N0YXRpYyBjb25zdGV4cHIgUmVn aXN0ZXIgSlNSZXR1cm5SZWcgPSByNTsKLStzdGF0aWMgY29uc3RleHByIFZhbHVlT3BlcmFuZCBK U1JldHVybk9wZXJhbmQgPSBWYWx1ZU9wZXJhbmQoSlNSZXR1cm5SZWcpOwotKwotK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgQUJJTm9uQXJnUmVnMCA9IHIxOTsKLStzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIEFCSU5vbkFyZ1JlZzEgPSByMjA7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciBBQklOb25BcmdSZWcyID0gcjIxOwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQUJJTm9u QXJnUmVnMyA9IHIyMjsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEFCSU5vbkFyZ1JldHVy blJlZzAgPSByMjk7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBBQklOb25BcmdSZXR1cm5S ZWcxID0gcjMwOwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQUJJTm9uVm9sYXRpbGVSZWcg PSByMTQ7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBBQklOb25BcmdSZXR1cm5Wb2xhdGls ZVJlZyA9IHIxMTsKLSsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgQUJJTm9uQXJn RG91YmxlUmVne0Zsb2F0UmVnaXN0ZXJzOjpmMTQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKLSsKLSsv LyBXYXNtIGluc3RhbmNlIHBvaW50ZXIgcmVnaXN0ZXIuIFByZXNlcnZlZCBhY3Jvc3Mgd2FzbSBm dW5jdGlvbiBjYWxscy4KLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEluc3RhbmNlUmVnID0g cjE4OwotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSGVhcFJlZyA9IHIyNDsKLStzdGF0aWMg Y29uc3RleHByIFJlZ2lzdGVyIEdsb2JhbFJlZyA9IHIyMzsKLSsKLSsvLyBXYXNtIHRhYmxlIGNh bGwgcmVnaXN0ZXJzLgotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgV2FzbVRhYmxlQ2FsbFNj cmF0Y2hSZWcwID0gQUJJTm9uQXJnUmVnMDsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdh c21UYWJsZUNhbGxTY3JhdGNoUmVnMSA9IEFCSU5vbkFyZ1JlZzE7Ci0rc3RhdGljIGNvbnN0ZXhw ciBSZWdpc3RlciBXYXNtVGFibGVDYWxsU2lnUmVnID0gQUJJTm9uQXJnUmVnMjsKLStzdGF0aWMg Y29uc3RleHByIFJlZ2lzdGVyIFdhc21UYWJsZUNhbGxJbmRleFJlZyA9IEFCSU5vbkFyZ1JlZzM7 Ci0rCi0rLy8gV2FzbSByZWYgY2FsbCByZWdpc3RlcnMuCi0rc3RhdGljIGNvbnN0ZXhwciBSZWdp c3RlciBXYXNtQ2FsbFJlZkNhbGxTY3JhdGNoUmVnMCA9IEFCSU5vbkFyZ1JlZzA7Ci0rc3RhdGlj IGNvbnN0ZXhwciBSZWdpc3RlciBXYXNtQ2FsbFJlZkNhbGxTY3JhdGNoUmVnMSA9IEFCSU5vbkFy Z1JlZzE7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBXYXNtQ2FsbFJlZkNhbGxTY3JhdGNo UmVnMiA9IEFCSU5vbkFyZ1JlZzI7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBXYXNtQ2Fs bFJlZlJlZyA9IEFCSU5vbkFyZ1JlZzM7Ci0rCi0rLy8gV2FzbSB0YWlsIGNhbGwgc2NyYXRjaCBy ZWdpc3RlcnMuCi0rLy8gV2FzbVRhaWxDYWxsUkFTY3JhdGNoUmVnIG11c3QgTk9UIGJlIEFCSU5v bkFyZ1JlZzA6IHRoZSBzaGFyZWQgdGFpbC1jYWxsCi0rLy8gY29kZSAod2FzbVJldHVybkNhbGxJ bXBvcnQsIHdhc21SZXR1cm5DYWxsSW5kaXJlY3QsIHdhc21SZXR1cm5DYWxsUmVmKQotKy8vIHN0 b3JlcyB0aGUgY2FsbGVlIGFkZHJlc3MgaW4gQUJJTm9uQXJnUmVnMCwgYW5kIENvbGxhcHNlV2Fz bUZyYW1lKgotKy8vIG92ZXJ3cml0ZXMgdGVtcEZvclJBLiBPbiBhcmNoaXRlY3R1cmVzIHdpdGgg YSBHUFIgbGluayByZWdpc3RlciAoQVJNLAotKy8vIE1JUFMsIExBNjQsIFJJU0MtVikgdGhpcyBp cyByYS9sci4gUFBDNjQncyBMUiBpcyBhbiBTUFIsIHNvIHdlIHVzZSByMTQKLSsvLyAoQUJJTm9u Vm9sYXRpbGVSZWcpIHdoaWNoIGlzIGNhbGxlZS1zYXZlZCBhbmQgbm90IHVzZWQgaW4gY2FsbCBz ZXR1cC4KLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21UYWlsQ2FsbEluc3RhbmNlU2Ny YXRjaFJlZyA9IEFCSU5vbkFyZ1JlZzE7Ci0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBXYXNt VGFpbENhbGxSQVNjcmF0Y2hSZWcgPSBBQklOb25Wb2xhdGlsZVJlZzsKLStzdGF0aWMgY29uc3Rl eHByIFJlZ2lzdGVyIFdhc21UYWlsQ2FsbEZQU2NyYXRjaFJlZyA9IEFCSU5vbkFyZ1JlZzM7Ci0r Ci0rLy8gUmVnaXN0ZXIgdXNlZCBhcyBhIHNjcmF0Y2ggYWxvbmcgdGhlIHJldHVybiBwYXRoIGlu IHRoZSBmYXN0IGpzIC0+IHdhc20gc3R1YgotKy8vIGNvZGUuIE11c3Qgbm90IG92ZXJsYXAgUmV0 dXJuUmVnLCBKU1JldHVybk9wZXJhbmQsIG9yIEluc3RhbmNlUmVnLgotKy8vIE11c3QgYmUgdm9s YXRpbGUuCi0rc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBXYXNtSml0RW50cnlSZXR1cm5TY3Jh dGNoID0gcjEwOwotKwotK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgQUJJU3RhY2tBbGlnbm1l bnQgPSAxNjsKLStzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IENvZGVBbGlnbm1lbnQgPSAxNjsK LStzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IEppdFN0YWNrQWxpZ25tZW50ID0gMTY7Ci0rCi0r c3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBKaXRTdGFja1ZhbHVlQWxpZ25tZW50ID0KLSsgICAg Sml0U3RhY2tBbGlnbm1lbnQgLyBzaXplb2YoVmFsdWUpOwotK3N0YXRpY19hc3NlcnQoSml0U3Rh Y2tBbGlnbm1lbnQgJSBzaXplb2YoVmFsdWUpID09IDAgJiYKLSsgICAgICAgICAgICAgICAgICBK aXRTdGFja1ZhbHVlQWxpZ25tZW50ID49IDEsCi0rICAgICAgICAgICAgICAiU3RhY2sgYWxpZ25t ZW50IHNob3VsZCBiZSBhIG5vbi16ZXJvIG11bHRpcGxlIG9mIHNpemVvZihWYWx1ZSkiKTsKLSsK LStzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IFNpbWRNZW1vcnlBbGlnbm1lbnQgPSAxNjsKLStz dGF0aWNfYXNzZXJ0KAotKyAgICBDb2RlQWxpZ25tZW50ICUgU2ltZE1lbW9yeUFsaWdubWVudCA9 PSAwLAotKyAgICAiQ29kZSBhbGlnbm1lbnQgc2hvdWxkIGJlIGxhcmdlciB0aGFuIGFueSBvZiB0 aGUgYWxpZ25tZW50cyAiCi0rICAgICJ3aGljaCBhcmUgdXNlZCBmb3IgdGhlIGNvbnN0YW50IHNl Y3Rpb25zIG9mIHRoZSBjb2RlIGJ1ZmZlci4gIgotKyAgICAiVGh1cyBpdCBzaG91bGQgYmUgbGFy Z2VyIHRoYW4gdGhlIGFsaWdubWVudCBmb3IgU0lNRCBjb25zdGFudHMuIik7Ci0rCi0rc3RhdGlj IGNvbnN0ZXhwciB1aW50MzJfdCBXYXNtU3RhY2tBbGlnbm1lbnQgPSBTaW1kTWVtb3J5QWxpZ25t ZW50OwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBXYXNtVHJhcEluc3RydWN0aW9uTGVuZ3RoID0g NDsKLSsKLStzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IFdhc21DaGVja2VkQ2FsbEVudHJ5T2Zm c2V0ID0gMHU7Ci0rc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBXYXNtQ2hlY2tlZFRhaWxFbnRy eU9mZnNldCA9IDMydTsKLSsKLStzdGF0aWMgY29uc3RleHByIFNjYWxlIFNjYWxlUG9pbnRlciA9 IFRpbWVzRWlnaHQ7Ci0rCi0rY2xhc3MgQUJJQXJnR2VuZXJhdG9yIDogcHVibGljIEFCSUFyZ0dl bmVyYXRvclNoYXJlZCB7Ci0rIHB1YmxpYzoKLSsgIGV4cGxpY2l0IEFCSUFyZ0dlbmVyYXRvcihB QklLaW5kIGtpbmQpCi0rICAgICAgOiBBQklBcmdHZW5lcmF0b3JTaGFyZWQoa2luZCksCi0rICAg ICAgICBpbnRSZWdJbmRleF8oMCksCi0rICAgICAgICBmbG9hdFJlZ0luZGV4XygwKSwKLSsgICAg ICAgIGN1cnJlbnRfKCkgewotKyAgICAvLyBQUEM2NCBFTEZ2MiBBQkk6IHRoZSBjYWxsZWUgc2F2 ZXMgTFIsIENSLCBUT0MgaW50byB0aGUgY2FsbGVyJ3MKLSsgICAgLy8gZnJhbWUgKG9mZnNldHMg OCwgMTYsIDI0IGZyb20gY2FsbGVyIFNQKS4gUmVzZXJ2ZSAzMiBieXRlcyBzbyB0aGF0Ci0rICAg IC8vIGNhbGxXaXRoQUJJUHJlIGFsd2F5cyBhbGxvY2F0ZXMgZW5vdWdoIHNwYWNlIGZvciB0aGlz IGxpbmsgYXJlYS4KLSsgICAgc3RhY2tPZmZzZXRfICs9IFNoYWRvd1N0YWNrU3BhY2U7Ci0rICB9 Ci0rCi0rICBBQklBcmcgbmV4dChNSVJUeXBlIGFyZ1R5cGUpOwotKyAgQUJJQXJnJiBjdXJyZW50 KCkgeyByZXR1cm4gY3VycmVudF87IH0KLSsKLSsgcHJvdGVjdGVkOgotKyAgdW5zaWduZWQgaW50 UmVnSW5kZXhfOwotKyAgdW5zaWduZWQgZmxvYXRSZWdJbmRleF87Ci0rICBBQklBcmcgY3VycmVu dF87Ci0rfTsKLSsKLStzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IE51bUludEFyZ1JlZ3MgPSA4 OwotK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgTnVtRmxvYXRBcmdSZWdzID0gMTM7Ci0rCi0r c3RhdGljIGlubGluZSBib29sIEdldEludEFyZ1JlZyh1aW50MzJfdCB1c2VkSW50QXJncywgUmVn aXN0ZXIqIG91dCkgewotKyAgaWYgKHVzZWRJbnRBcmdzIDwgTnVtSW50QXJnUmVncykgewotKyAg ICAqb3V0ID0gUmVnaXN0ZXI6OkZyb21Db2RlKHIzLmNvZGUoKSArIHVzZWRJbnRBcmdzKTsKLSsg ICAgcmV0dXJuIHRydWU7Ci0rICB9Ci0rICByZXR1cm4gZmFsc2U7Ci0rfQotKwotK3N0YXRpYyBp bmxpbmUgYm9vbCBHZXRGbG9hdEFyZ1JlZyh1aW50MzJfdCB1c2VkRmxvYXRBcmdzLCBGbG9hdFJl Z2lzdGVyKiBvdXQpIHsKLSsgIGlmICh1c2VkRmxvYXRBcmdzIDwgTnVtRmxvYXRBcmdSZWdzKSB7 Ci0rICAgICpvdXQgPSBGbG9hdFJlZ2lzdGVyOjpGcm9tQ29kZShmMS5jb2RlKCkgKyB1c2VkRmxv YXRBcmdzKTsKLSsgICAgcmV0dXJuIHRydWU7Ci0rICB9Ci0rICByZXR1cm4gZmFsc2U7Ci0rfQot KwotK3N0YXRpYyBpbmxpbmUgYm9vbCBHZXRUZW1wUmVnRm9ySW50QXJnKHVpbnQzMl90IHVzZWRJ bnRBcmdzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90 IHVzZWRGbG9hdEFyZ3MsIFJlZ2lzdGVyKiBvdXQpIHsKLSsgIE1PWl9BU1NFUlQodXNlZEZsb2F0 QXJncyA9PSAwKTsKLSsKLSsgIGlmIChHZXRJbnRBcmdSZWcodXNlZEludEFyZ3MsIG91dCkpIHsK LSsgICAgcmV0dXJuIHRydWU7Ci0rICB9Ci0rCi0rICB1c2VkSW50QXJncyAtPSBOdW1JbnRBcmdS ZWdzOwotKyAgaWYgKHVzZWRJbnRBcmdzID49IE51bUNhbGxUZW1wTm9uQXJnUmVncykgewotKyAg ICByZXR1cm4gZmFsc2U7Ci0rICB9Ci0rICAqb3V0ID0gQ2FsbFRlbXBOb25BcmdSZWdzW3VzZWRJ bnRBcmdzXTsKLSsgIHJldHVybiB0cnVlOwotK30KLSsKLSsvLyBQUEM2NCBpbnN0cnVjdGlvbiBm aWVsZCBwb3NpdGlvbnMuCi0rLy8gUFBDIHVzZXMgYmlnLWVuZGlhbiBiaXQgbnVtYmVyaW5nIChi aXQgMCA9IE1TQiksIGJ1dCB3ZSBzdG9yZSBpbnN0cnVjdGlvbnMKLSsvLyBpbiBhIHVpbnQzMl90 IHdoZXJlIGJpdCAwID0gTFNCLiBUaGUgc2hpZnRzIGJlbG93IGFyZSBpbiBMU0ItMCB0ZXJtcy4K LSsvLwotKy8vICAgWzA6NV0gIHByaW1hcnkgb3Bjb2RlICAgKE9wY29kZVNoaWZ0PTI2KQotKy8v ICAgWzY6MTBdICBSVC9SUy9CRi9UTyAgICAgKFJUU2hpZnQ9MjEsIDUgYml0cykKLSsvLyAgIFsx MToxNV0gUkEvQkkgICAgICAgICAgIChSQVNoaWZ0PTE2LCA1IGJpdHMpCi0rLy8gICBbMTY6MjBd IFJCL1NIICAgICAgICAgICAoUkJTaGlmdD0xMSwgNSBiaXRzKQotKy8vICAgWzE2OjMxXSBTSS9V SS9EICAgICAgICAgKEltbTE2U2hpZnQ9MCwgMTYgYml0cykKLSsvLyAgIFsyMToyNV0gc3Vib3Ag Yml0cyAgICAgICh2YXJpZXMpCi0rLy8gICBbMjE6MzBdIFhPICAgICAgICAgICAgICAoWC1mb3Jt OyBBL00vTUQvTURTIG5hcnJvd2VyKQotKy8vICAgWzMxXSAgICBSYyBiaXQgICAgICAgICAgKFJj U2hpZnQ9MCkKLSsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgT3Bjb2RlU2hpZnQgPSAyNjsKLStz dGF0aWMgY29uc3QgdWludDMyX3QgT3Bjb2RlQml0cyA9IDY7Ci0rCi0rc3RhdGljIGNvbnN0IHVp bnQzMl90IFJUU2hpZnQgPSAyMTsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgUlRCaXRzID0gNTsK LStzdGF0aWMgY29uc3QgdWludDMyX3QgUlNTaGlmdCA9IDIxOwotK3N0YXRpYyBjb25zdCB1aW50 MzJfdCBSU0JpdHMgPSA1OwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSQVNoaWZ0ID0gMTY7Ci0r c3RhdGljIGNvbnN0IHVpbnQzMl90IFJBQml0cyA9IDU7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90 IFJCU2hpZnQgPSAxMTsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgUkJCaXRzID0gNTsKLStzdGF0 aWMgY29uc3QgdWludDMyX3QgUkNTaGlmdCA9IDY7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFJD Qml0cyA9IDU7Ci0rCi0rc3RhdGljIGNvbnN0IHVpbnQzMl90IEJPU2hpZnQgPSAyMTsKLStzdGF0 aWMgY29uc3QgdWludDMyX3QgQk9CaXRzID0gNTsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgQklT aGlmdCA9IDE2OwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBCSUJpdHMgPSA1OwotKwotK3N0YXRp YyBjb25zdCB1aW50MzJfdCBJbW0xNlNoaWZ0ID0gMDsKLStzdGF0aWMgY29uc3QgdWludDMyX3Qg SW1tMTZCaXRzID0gMTY7Ci0rCi0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFJjU2hpZnQgPSAwOwot K3N0YXRpYyBjb25zdCB1aW50MzJfdCBSY0JpdCA9IDE7Ci0rCi0rc3RhdGljIGNvbnN0IHVpbnQz Ml90IFJUTWFzayA9ICgoMSA8PCBSVEJpdHMpIC0gMSkgPDwgUlRTaGlmdDsKLStzdGF0aWMgY29u c3QgdWludDMyX3QgUlNNYXNrID0gKCgxIDw8IFJTQml0cykgLSAxKSA8PCBSU1NoaWZ0OwotK3N0 YXRpYyBjb25zdCB1aW50MzJfdCBSQU1hc2sgPSAoKDEgPDwgUkFCaXRzKSAtIDEpIDw8IFJBU2hp ZnQ7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFJCTWFzayA9ICgoMSA8PCBSQkJpdHMpIC0gMSkg PDwgUkJTaGlmdDsKLStzdGF0aWMgY29uc3QgdWludDMyX3QgSW1tMTZNYXNrID0gKDEgPDwgSW1t MTZCaXRzKSAtIDE7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFJlZ01hc2sgPSAoMSA8PCBSVEJp dHMpIC0gMTsKLSsKLStzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJUKFJlZ2lzdGVyIHIpIHsgcmV0 dXJuICh1aW50MzJfdClyLmNvZGUoKSA8PCBSVFNoaWZ0OyB9Ci0rc3RhdGljIGlubGluZSB1aW50 MzJfdCBSVChGbG9hdFJlZ2lzdGVyIHIpIHsKLSsgIHJldHVybiAodWludDMyX3Qpci5jb2RlKCkg PDwgUlRTaGlmdDsKLSt9Ci0rc3RhdGljIGlubGluZSB1aW50MzJfdCBSUyhSZWdpc3RlciByKSB7 IHJldHVybiAodWludDMyX3Qpci5jb2RlKCkgPDwgUlNTaGlmdDsgfQotK3N0YXRpYyBpbmxpbmUg dWludDMyX3QgUlMoRmxvYXRSZWdpc3RlciByKSB7Ci0rICByZXR1cm4gKHVpbnQzMl90KXIuY29k ZSgpIDw8IFJTU2hpZnQ7Ci0rfQotK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgUkEoUmVnaXN0ZXIg cikgeyByZXR1cm4gKHVpbnQzMl90KXIuY29kZSgpIDw8IFJBU2hpZnQ7IH0KLStzdGF0aWMgaW5s aW5lIHVpbnQzMl90IFJBKEZsb2F0UmVnaXN0ZXIgcikgewotKyAgcmV0dXJuICh1aW50MzJfdCly LmNvZGUoKSA8PCBSQVNoaWZ0OwotK30KLStzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJCKFJlZ2lz dGVyIHIpIHsgcmV0dXJuICh1aW50MzJfdClyLmNvZGUoKSA8PCBSQlNoaWZ0OyB9Ci0rc3RhdGlj IGlubGluZSB1aW50MzJfdCBSQihGbG9hdFJlZ2lzdGVyIHIpIHsKLSsgIHJldHVybiAodWludDMy X3Qpci5jb2RlKCkgPDwgUkJTaGlmdDsKLSt9Ci0rCi0rLy8gU1BSIGVuY29kaW5nOiB0aGUgU1BS IG51bWJlciBpcyBzcGxpdCBhY3Jvc3MgYml0cyAxMS0xNSBhbmQgMTYtMjAgaW4gYQotKy8vIHN3 YXBwZWQgYXJyYW5nZW1lbnQuICBQUENfU1BSKHgpIHByb2R1Y2VzIHRoZSB2YWx1ZSB0byBPUiBp bnRvIGFuCi0rLy8gbXRzcHIvbWZzcHIgaW5zdHJ1Y3Rpb24gYXQgdGhlIFJCK1JBIHBvc2l0aW9u IChiaXRzIDExLTIwKS4KLSsjZGVmaW5lIFBQQ19TUFIoeCkgKCgoKGludCkoeCkgPj4gNSkgJiAw eDFmKSA8PCAxMSB8ICgoaW50KSh4KSAmIDB4MWYpIDw8IDE2KQotKwotK2VudW0gUFBDT3Bjb2Rl cyB7Ci0rICBQUENfYWRkID0gMHg3QzAwMDIxNCwKLSsgIFBQQ19hZGRjID0gMHg3QzAwMDAxNCwK LSsgIFBQQ19hZGRlID0gMHg3QzAwMDExNCwKLSsgIFBQQ19hZGRpID0gMHgzODAwMDAwMCwKLSsg IFBQQ19hZGRpcyA9IDB4M0MwMDAwMDAsCi0rICBQUENfYW5kXyA9IDB4N0MwMDAwMzgsCi0rICAv LyBhbmRpLiBpcyBhbHdheXMgcmVjb3JkIGZvcm0gKG5vIG5vbi1yZWNvcmQgYW5kaSBleGlzdHMp LgotKyAgUFBDX2FuZGlfZG90ID0gMHg3MDAwMDAwMCwKLSsgIFBQQ19iID0gMHg0ODAwMDAwMCwK LSsgIFBQQ19iYyA9IDB4NDAwMDAwMDAsCi0rICAvLyBFbmNvZGVkICJiY2wgMjAsIGx0LCAkKzQi OiBQQy1yZWxhdGl2ZSBicmFuY2gtYW5kLWxpbmsgYnkgNCBieXRlcwotKyAgLy8gKGxhbmQgYXQg dGhlIG5leHQgaW5zdHJ1Y3Rpb24pIHdpdGggQk89MjAgKGJyYW5jaCBhbHdheXMpOyBCST0wCi0r ICAvLyAoPWx0KSBpcyBkb24ndC1jYXJlIGJlY2F1c2UgQk89MjAgZm9yY2VzIHRoZSBicmFuY2gu IFVzZWQgYnkKLSsgIC8vIFBvb2xMb2FkRlBSezMyLDY0fSdzIFBPV0VSOCBzdGFuemEgYW5kIFBv b2xMb2FkU2ltZDEyOCdzIHN0YW56YSB0bwotKyAgLy8gc2VlZCBMUiB3aXRoIHRoZSBjdXJyZW50 IFBDIGZvciB0aGUgc3Vic2VxdWVudCBtZmxyK2xkIGJhc2UKLSsgIC8vIGNvbXB1dGF0aW9uLiBV c2VkIGJ5IHBhdGNoIHNpdGVzIHRoYXQgd3JpdGUgcmF3IGluc3RydWN0aW9uIG1lbW9yeQotKyAg Ly8gKFBhdGNoQ29uc3RhbnRQb29sTG9hZCwgV3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMsIGV0Yy4p LiBOYW1lZCBmb3IKLSsgIC8vIGdyZXAtYWJpbGl0eSBhbmQgdG8gYXZvaWQgbWFnaWMtbnVtYmVy IGNvcGllcy4KLSsgIFBQQ19iY2xfYWx3YXlzX3BsdXM0ID0gMHg0MjgwMDAwNSwKLSsgIFBQQ19i Y3RyID0gMHg0RTgwMDQyMCwKLSsgIFBQQ19iY2N0ciA9IDB4NEMwMDA0MjAsCi0rICBQUENfYmxy ID0gMHg0RTgwMDAyMCwKLSsgIFBQQ19jbXBkID0gMHg3QzIwMDAwMCwKLSsgIFBQQ19jbXBkaSA9 IDB4MkMyMDAwMDAsCi0rICBQUENfY21wbGQgPSAweDdDMjAwMDQwLAotKyAgUFBDX2NtcGxkaSA9 IDB4MjgyMDAwMDAsCi0rICBQUENfY21wdyA9IDB4N0MwMDAwMDAsCi0rICBQUENfY21wd2kgPSAw eDJDMDAwMDAwLAotKyAgUFBDX2NtcGx3ID0gMHg3QzAwMDA0MCwKLSsgIFBQQ19jbXBsd2kgPSAw eDI4MDAwMDAwLAotKyAgUFBDX2NudGx6ZCA9IDB4N0MwMDAwNzQsCi0rICBQUENfY250bHp3ID0g MHg3QzAwMDAzNCwKLSsgIFBQQ19jbnR0emQgPSAweDdDMDAwNDc0LAotKyAgUFBDX2NudHR6dyA9 IDB4N0MwMDA0MzQsCi0rICBQUENfY3JhbmRjID0gMHg0QzAwMDEwMiwKLSsgIFBQQ19jcm9yID0g MHg0QzAwMDM4MiwKLSsgIFBQQ19jcm9yYyA9IDB4NEMwMDAzNDIsCi0rICBQUENfZGl2ZCA9IDB4 N0MwMDAzRDIsCi0rICBQUENfZGl2ZHUgPSAweDdDMDAwMzkyLAotKyAgUFBDX2RpdncgPSAweDdD MDAwM0Q2LAotKyAgUFBDX2Rpdnd1ID0gMHg3QzAwMDM5NiwKLSsgIC8vIFBPV0VSOSAoSVNBIDMu MCkgbW9kdWxvIGluc3RydWN0aW9ucy4KLSsgIFBQQ19tb2RzZCA9IDB4N0MwMDA2MTIsCi0rICBQ UENfbW9kc3cgPSAweDdDMDAwNjE2LAotKyAgUFBDX21vZHVkID0gMHg3QzAwMDIxMiwKLSsgIFBQ Q19tb2R1dyA9IDB4N0MwMDAyMTYsCi0rICBQUENfZXh0c2IgPSAweDdDMDAwNzc0LAotKyAgUFBD X2V4dHNoID0gMHg3QzAwMDczNCwKLSsgIFBQQ19leHRzdyA9IDB4N0MwMDA3QjQsCi0rICBQUENf ZmFicyA9IDB4RkMwMDAyMTAsCi0rICBQUENfZmFkZCA9IDB4RkMwMDAwMkEsCi0rICBQUENfZmFk ZHMgPSAweEVDMDAwMDJBLAotKyAgUFBDX2ZjcHNnbiA9IDB4RkMwMDAwMTAsCi0rICBQUENfZmNm aWQgPSAweEZDMDAwNjlDLAotKyAgUFBDX2ZjZmlkcyA9IDB4RUMwMDA2OUMsCi0rICBQUENfZmNm aWR1ID0gMHhGQzAwMDc5QywKLSsgIFBQQ19mY2ZpZHVzID0gMHhFQzAwMDc5QywKLSsgIFBQQ19m Y21wdSA9IDB4RkMwMDAwMDAsCi0rICBQUENfZmN0aWQgPSAweEZDMDAwNjVDLAotKyAgUFBDX2Zj dGlkeiA9IDB4RkMwMDA2NUUsCi0rICBQUENfZmN0aWR1eiA9IDB4RkMwMDA3NUUsCi0rICBQUENf ZmN0aXd6ID0gMHhGQzAwMDAxRSwKLSsgIFBQQ19mZGl2ID0gMHhGQzAwMDAyNCwKLSsgIFBQQ19m ZGl2cyA9IDB4RUMwMDAwMjQsCi0rICBQUENfZm1yID0gMHhGQzAwMDA5MCwKLSsgIFBQQ19mbXVs ID0gMHhGQzAwMDAzMiwKLSsgIFBQQ19mbXVscyA9IDB4RUMwMDAwMzIsCi0rICBQUENfZm5lZyA9 IDB4RkMwMDAwNTAsCi0rICBQUENfZnJpbSA9IDB4RkMwMDAzRDAsCi0rICBQUENfZnJpcCA9IDB4 RkMwMDAzOTAsCi0rICBQUENfZnJpeiA9IDB4RkMwMDAzNTAsCi0rICBQUENfZnJzcCA9IDB4RkMw MDAwMTgsCi0rICBQUENfZnN1YiA9IDB4RkMwMDAwMjgsCi0rICBQUENfZnN1YnMgPSAweEVDMDAw MDI4LAotKyAgUFBDX2ZzcXJ0ID0gMHhGQzAwMDAyQywKLSsgIFBQQ19mc3FydHMgPSAweEVDMDAw MDJDLAotKyAgUFBDX2lzZWwgPSAweDdDMDAwMDFFLAotKyAgLy8gUE9XRVIxMCAoSVNBIDMuMSku IFJUID0gKENSW0JJXT09MSkgPyAxIDogMC4gWE89Mzg0IGF0IGJpdHMgMjEtMzAuCi0rICBQUENf c2V0YmMgPSAweDdDMDAwMzAwLAotKyAgLy8gUE9XRVIxMCAoSVNBIDMuMSkuIFJUID0gKENSW0JJ XT09MCkgPyAxIDogMC4gWE89NDE2LgotKyAgUFBDX3NldGJjciA9IDB4N0MwMDAzNDAsCi0rICBQ UENfbGJhcnggPSAweDdDMDAwMDY4LAotKyAgUFBDX2xieiA9IDB4ODgwMDAwMDAsCi0rICBQUENf bGJ6eCA9IDB4N0MwMDAwQUUsCi0rICBQUENfbGQgPSAweEU4MDAwMDAwLAotKyAgUFBDX2xkYXJ4 ID0gMHg3QzAwMDBBOCwKLSsgIFBQQ19sZHggPSAweDdDMDAwMDJBLAotKyAgUFBDX2xmZCA9IDB4 QzgwMDAwMDAsCi0rICBQUENfbGZkeCA9IDB4N0MwMDA0QUUsCi0rICBQUENfbGZpd2F4ID0gMHg3 QzAwMDZBRSwKLSsgIFBQQ19sZml3enggPSAweDdDMDAwNkVFLAotKyAgUFBDX2xmcyA9IDB4QzAw MDAwMDAsCi0rICBQUENfbGZzeCA9IDB4N0MwMDA0MkUsCi0rICBQUENfbGhhID0gMHhBODAwMDAw MCwKLSsgIFBQQ19saGFyeCA9IDB4N0MwMDAwRTgsCi0rICBQUENfbGhheCA9IDB4N0MwMDAyQUUs Ci0rICBQUENfbGh6ID0gMHhBMDAwMDAwMCwKLSsgIFBQQ19saHp4ID0gMHg3QzAwMDIyRSwKLSsg IFBQQ19sd2EgPSAweEU4MDAwMDAyLAotKyAgUFBDX2x3YXJ4ID0gMHg3QzAwMDAyOCwKLSsgIFBQ Q19sd3ogPSAweDgwMDAwMDAwLAotKyAgLy8gWC1mb3JtIHNpZ24tZXh0ZW5kaW5nIHdvcmQgbG9h ZCAob3Bjb2RlIDMxLCBYTz0zNDEpLiBTaW5nbGUtaW5zbgotKyAgLy8gZXF1aXZhbGVudCBvZiBs d3p4ICsgZXh0c3cuCi0rICBQUENfbHdheCA9IDB4N0MwMDAyQUEsCi0rICBQUENfbHd6eCA9IDB4 N0MwMDAwMkUsCi0rICBQUENfbWNyeHJ4ID0gMHg3QzAwMDQ4MCwKLSsgIFBQQ19tY3JmcyA9IDB4 RkMwMDAwODAsCi0rICBQUENfbWZvY3JmID0gMHg3QzEwMDAyNiwKLSsgIFBQQ19tZmZzID0gMHhG QzAwMDQ4RSwKLSsgIFBQQ19tZnNwciA9IDB4N0MwMDAyQTYsCi0rICBQUENfbWZ2c3JkID0gMHg3 QzAwMDA2NiwKLSsgIFBQQ19tdGNyZiA9IDB4N0MwMDAxMjAsCi0rICBQUENfbXRmc2IwID0gMHhG QzAwMDA4QywKLSsgIFBQQ19tdHZzcmQgPSAweDdDMDAwMTY2LAotKyAgLy8gUE9XRVI4KyAoSVNB IDIuMDcpLiBWU1JbWFRdLmR3WzBdID0gc2lnbl9leHRfNjQoUkFbMzI6NjNdKS4KLSsgIC8vIFhP PTIxMSBhdCBiaXRzIDIxLTMwLiBDb21iaW5lcyBleHRzdyArIG10dnNyZCBpbnRvIG9uZSBpbnNu LgotKyAgUFBDX210dnNyd2EgPSAweDdDMDAwMUE2LAotKyAgUFBDX210dnNyd3MgPSAweDdDMDAw MzI2LAotKyAgUFBDX210dnNyd3ogPSAweDdDMDAwMUU2LAotKyAgUFBDX210c3ByID0gMHg3QzAw MDNBNiwKLSsgIFBQQ19tdWxoZCA9IDB4N0MwMDAwOTIsCi0rICBQUENfbXVsaGR1ID0gMHg3QzAw MDAxMiwKLSsgIFBQQ19tdWxod3UgPSAweDdDMDAwMDE2LAotKyAgUFBDX211bGxpID0gMHgxQzAw MDAwMCwKLSsgIFBQQ19tdWxsZCA9IDB4N0MwMDAxRDIsCi0rICBQUENfbXVsbGRvID0gMHg3QzAw MDVEMiwKLSsgIFBQQ19tdWxsdyA9IDB4N0MwMDAxRDYsCi0rICBQUENfbmVnID0gMHg3QzAwMDBE MCwKLSsgIFBQQ19ub3IgPSAweDdDMDAwMEY4LAotKyAgUFBDX29yXyA9IDB4N0MwMDAzNzgsCi0r ICBQUENfb3JpID0gMHg2MDAwMDAwMCwKLSsgIFBQQ19vcmlzID0gMHg2NDAwMDAwMCwKLSsgIFBQ Q19wb3BjbnRiID0gMHg3QzAwMDBGNCwKLSsgIFBQQ19wb3BjbnRkID0gMHg3QzAwMDNGNCwKLSsg IFBQQ19wb3BjbnR3ID0gMHg3QzAwMDJGNCwKLSsgIFBQQ19icmQgPSAweDdDMDAwMTc2LCAgLy8g UE9XRVIxMDogYnl0ZS1yZXZlcnNlIGRvdWJsZXdvcmQgKFgtZm9ybSwgWE89MTg3KQotKyAgUFBD X2JyaCA9IDB4N0MwMDAxQjYsICAvLyBQT1dFUjEwOiBieXRlLXJldmVyc2UgZWFjaCBoYWxmd29y ZCAoWC1mb3JtLCBYTz0yMTkpCi0rICBQUENfYnJ3ID0gMHg3QzAwMDEzNiwgIC8vIFBPV0VSMTA6 IGJ5dGUtcmV2ZXJzZSBlYWNoIHdvcmQgICAgIChYLWZvcm0sIFhPPTE1NSkKLSsgIFBQQ19ybGRj bCA9IDB4NzgwMDAwMTAsCi0rICBQUENfcmxkaWNsID0gMHg3ODAwMDAwMCwKLSsgIFBQQ19ybGRj ciA9IDB4NzgwMDAwMTIsCi0rICBQUENfcmxkaWNyID0gMHg3ODAwMDAwNCwKLSsgIFBQQ19ybGRp bWkgPSAweDc4MDAwMDBDLAotKyAgUFBDX3Jsd2ltaSA9IDB4NTAwMDAwMDAsCi0rICBQUENfcmx3 aW5tID0gMHg1NDAwMDAwMCwKLSsgIFBQQ19ybHdubSA9IDB4NUMwMDAwMDAsCi0rICBQUENfc2xk ID0gMHg3QzAwMDAzNiwKLSsgIFBQQ19zbHcgPSAweDdDMDAwMDMwLAotKyAgUFBDX3NyYWQgPSAw eDdDMDAwNjM0LAotKyAgUFBDX3NyYWRpID0gMHg3QzAwMDY3NCwKLSsgIFBQQ19zcmF3ID0gMHg3 QzAwMDYzMCwKLSsgIFBQQ19zcmF3aSA9IDB4N0MwMDA2NzAsCi0rICBQUENfc3JkID0gMHg3QzAw MDQzNiwKLSsgIFBQQ19zcncgPSAweDdDMDAwNDMwLAotKyAgUFBDX3N0YiA9IDB4OTgwMDAwMDAs Ci0rICBQUENfc3RiY3ggPSAweDdDMDAwNTZELAotKyAgUFBDX3N0YnggPSAweDdDMDAwMUFFLAot KyAgUFBDX3N0ZCA9IDB4RjgwMDAwMDAsCi0rICBQUENfc3RkY3ggPSAweDdDMDAwMUFELAotKyAg UFBDX3N0ZHUgPSAweEY4MDAwMDAxLAotKyAgUFBDX3N0ZHggPSAweDdDMDAwMTJBLAotKyAgUFBD X3N0ZmQgPSAweEQ4MDAwMDAwLAotKyAgUFBDX3N0ZmR1ID0gMHhEQzAwMDAwMCwKLSsgIFBQQ19z dGZkeCA9IDB4N0MwMDA1QUUsCi0rICBQUENfc3RmcyA9IDB4RDAwMDAwMDAsCi0rICBQUENfc3Rm c3UgPSAweEQ0MDAwMDAwLAotKyAgUFBDX3N0ZnN4ID0gMHg3QzAwMDUyRSwKLSsgIFBQQ19zdGgg PSAweEIwMDAwMDAwLAotKyAgUFBDX3N0aGN4ID0gMHg3QzAwMDVBRCwKLSsgIFBQQ19zdGh4ID0g MHg3QzAwMDMyRSwKLSsgIFBQQ19zdHcgPSAweDkwMDAwMDAwLAotKyAgUFBDX3N0d3ggPSAweDdD MDAwMTJFLAotKyAgUFBDX3N0d2JyeCA9IDB4N0MwMDA1MkMsCi0rICBQUENfc3R3Y3ggPSAweDdD MDAwMTJELAotKyAgUFBDX3N1YmYgPSAweDdDMDAwMDUwLAotKyAgUFBDX3N1YmZjID0gMHg3QzAw MDAxMCwKLSsgIFBQQ19zdWJmZSA9IDB4N0MwMDAxMTAsCi0rICBQUENfc3ViZmljID0gMHgyMDAw MDAwMCwKLSsgIFBQQ19zeW5jID0gMHg3QzAwMDRBQywKLSsgIC8vIGlzeW5jIOKAlCBleGVjdXRp b24gc3luY2hyb25pemF0aW9uLiBEaXNjYXJkcyBwcmVmZXRjaGVkIGluc3RydWN0aW9ucyBhbmQK LSsgIC8vIGZvcmNlcyBhIHJlZmV0Y2grcmVleGVjdXRlIG9mIGV2ZXJ5dGhpbmcgcGFzdCB0aGUg YmFycmllcjsgcHJldmVudHMKLSsgIC8vIHNwZWN1bGF0aXZlIGJ5cGFzcy4gVXNlZCBmb3IgU3Bl Y3RyZSB2MSBtaXRpZ2F0aW9uIGluIHNwZWN1bGF0aW9uQmFycmllci4KLSsgIC8vIEVuY29kaW5n OiBieXRlcyBgMmMgMDEgMDAgNGNgIChMRSkgPSAweDRDMDAwMTJDLgotKyAgUFBDX2lzeW5jID0g MHg0QzAwMDEyQywKLSsgIFBQQ190cmFwID0gMHg3RkUwMDAwOCwKLSsgIFBQQ190dyA9IDB4N0Mw MDAwMDgsCi0rICBQUENfeG9yXyA9IDB4N0MwMDAyNzgsCi0rICBQUENfeG9yaSA9IDB4NjgwMDAw MDAsCi0rICBQUENfeG9yaXMgPSAweDZDMDAwMDAwLAotKyAgLy8gVk1YIHJlZ2lzdGVyIGxvYWQv c3RvcmUgKFgtZm9ybSwgb3Bjb2RlIDMxLCBYTz0xMDMvMjMxKS4KLSsgIC8vIE9wZXJhdGUgb24g cmF3IFZSMC0zMSAodGhlIGx2eC9zdHZ4IG1uZW1vbmljcyBwcmVkYXRlIFZTWCwgc28gdGhlCi0r ICAvLyBhc3NlbWJsZXIgZXhwb3NlcyB0aGVtIHdpdGggYSB1aW50OF90IFZSIGluZGV4IHJhdGhl ciB0aGFuIHZpYSB0aGUKLSsgIC8vIFZTUi1uYW1lc3BhY2UgRmxvYXRSZWdpc3RlciBvdmVybG9h ZHMgdXNlZCBmb3IgbHh2eC9zdHh2eC4pCi0rICBQUENfbHZ4ID0gMHg3QzAwMDBDRSwKLSsgIFBQ Q19seHZkMnggPSAweDdDMDAwNjk4LAotKyAgUFBDX2x4dnggPSAweDdDMDAwMjE4LAotKyAgUFBD X21mdnNybGQgPSAweDdDMDAwMjY2LAotKyAgUFBDX210dnNyZGQgPSAweDdDMDAwMzY2LAotKyAg UFBDX3N0dnggPSAweDdDMDAwMUNFLAotKyAgUFBDX3N0eHZkMnggPSAweDdDMDAwNzk4LAotKyAg UFBDX3N0eHZ4ID0gMHg3QzAwMDMxOCwKLSsgIFBQQ192YWRkdWJtID0gMHgxMDAwMDAwMCwKLSsg IFBQQ192YXZndWIgPSAweDEwMDAwNDAyLAotKyAgUFBDX3Zhdmd1aCA9IDB4MTAwMDA0NDIsCi0r ICBQUENfdmNtcGVxdWIgPSAweDEwMDAwMDA2LAotKyAgUFBDX3ZjbXBlcXVoID0gMHgxMDAwMDA0 NiwKLSsgIFBQQ192Y21wZXF1dyA9IDB4MTAwMDAwODYsCi0rICBQUENfdmNtcGVxdWQgPSAweDEw MDAwMEM3LAotKyAgUFBDX3ZjbXBndHNiID0gMHgxMDAwMDMwNiwKLSsgIFBQQ192Y21wZ3RzaCA9 IDB4MTAwMDAzNDYsCi0rICBQUENfdmNtcGd0c3cgPSAweDEwMDAwMzg2LAotKyAgUFBDX3ZjbXBn dHNkID0gMHgxMDAwMDNDNywKLSsgIFBQQ192Y21wZ3R1YiA9IDB4MTAwMDAyMDYsCi0rICBQUENf dmNtcGd0dWggPSAweDEwMDAwMjQ2LAotKyAgUFBDX3ZjbXBndHV3ID0gMHgxMDAwMDI4NiwKLSsg IFBQQ192Y21wZ3R1ZCA9IDB4MTAwMDAyQzcsCi0rICBQUENfdmNtcG5lYiA9IDB4MTAwMDAwMDcs ICAvLyBQT1dFUjkgKElTQSAzLjApCi0rICBQUENfdmNtcG5laCA9IDB4MTAwMDAwNDcsICAvLyBQ T1dFUjkKLSsgIFBQQ192Y21wbmV3ID0gMHgxMDAwMDA4NywgIC8vIFBPV0VSOQotKyAgUFBDX3Zh ZGR1aG0gPSAweDEwMDAwMDQwLAotKyAgUFBDX3ZhZGR1d20gPSAweDEwMDAwMDgwLAotKyAgUFBD X3ZhZGR1ZG0gPSAweDEwMDAwMEMwLAotKyAgUFBDX3ZhZGR1YnMgPSAweDEwMDAwMjAwLAotKyAg UFBDX3ZhZGR1aHMgPSAweDEwMDAwMjQwLAotKyAgUFBDX3ZhZGRzYnMgPSAweDEwMDAwMzAwLAot KyAgUFBDX3ZhZGRzaHMgPSAweDEwMDAwMzQwLAotKyAgUFBDX3ZtYXhzYiA9IDB4MTAwMDAxMDIs Ci0rICBQUENfdm1heHNoID0gMHgxMDAwMDE0MiwKLSsgIFBQQ192bWF4c3cgPSAweDEwMDAwMTgy LAotKyAgUFBDX3ZtYXhzZCA9IDB4MTAwMDAxQzIsCi0rICBQUENfdm1heHViID0gMHgxMDAwMDAw MiwKLSsgIFBQQ192bWF4dWggPSAweDEwMDAwMDQyLAotKyAgUFBDX3ZtYXh1dyA9IDB4MTAwMDAw ODIsCi0rICBQUENfdm1ocmFkZHNocyA9IDB4MTAwMDAwMjEsCi0rICBQUENfdm1yZ2hiID0gMHgx MDAwMDAwQywKLSsgIFBQQ192bXJnaGggPSAweDEwMDAwMDRDLAotKyAgUFBDX3ZtcmdodyA9IDB4 MTAwMDAwOEMsCi0rICBQUENfdm1yZ2xiID0gMHgxMDAwMDEwQywKLSsgIFBQQ192bXJnbGggPSAw eDEwMDAwMTRDLAotKyAgUFBDX3ZtcmdsdyA9IDB4MTAwMDAxOEMsCi0rICBQUENfdm1pbnNiID0g MHgxMDAwMDMwMiwKLSsgIFBQQ192bWluc2ggPSAweDEwMDAwMzQyLAotKyAgUFBDX3ZtaW5zdyA9 IDB4MTAwMDAzODIsCi0rICBQUENfdm1pbnViID0gMHgxMDAwMDIwMiwKLSsgIFBQQ192bWludWgg PSAweDEwMDAwMjQyLAotKyAgUFBDX3ZtaW51dyA9IDB4MTAwMDAyODIsCi0rICAvLyBQT1dFUjkg KElTQSAzLjApIHBlci1sYW5lIGludGVnZXIgbmVnYXRlLiBWUkEgZmllbGQgY2FycmllcyB0aGUg c3Vib3AKLSsgIC8vIGNvZGU6IDYgZm9yIHZuZWd3LCA3IGZvciB2bmVnZC4gQmFzZSBYTyBpcyAw eDYwMi4KLSsgIFBQQ192bmVndyA9IDB4MTAwNjA2MDIsCi0rICBQUENfdm5lZ2QgPSAweDEwMDcw NjAyLAotKyAgUFBDX3ZtbGFkZHVobSA9IDB4MTAwMDAwMjIsCi0rICBQUENfdm11bHV3bSA9IDB4 MTAwMDAwODksCi0rICBQUENfdm11bGxkID0gMHgxMDAwMDFDOSwgICAgICAvLyBQT1dFUjEwIChY Tz00NTcsIHZlY3RvciBpNjR4MiBtdWx0aXBseSBsb3cpCi0rICBQUENfdm11bGVzYiA9IDB4MTAw MDAzMDgsCi0rICBQUENfdm11bGV1YiA9IDB4MTAwMDAyMDgsCi0rICBQUENfdm11bGVzaCA9IDB4 MTAwMDAzNDgsCi0rICBQUENfdm11bGV1aCA9IDB4MTAwMDAyNDgsCi0rICBQUENfdm11bGVzdyA9 IDB4MTAwMDAzODgsCi0rICBQUENfdm11bGV1dyA9IDB4MTAwMDAyODgsCi0rICBQUENfdm11bG9z YiA9IDB4MTAwMDAxMDgsCi0rICBQUENfdm11bG91YiA9IDB4MTAwMDAwMDgsCi0rICBQUENfdm11 bG9zaCA9IDB4MTAwMDAxNDgsCi0rICBQUENfdm11bG91aCA9IDB4MTAwMDAwNDgsCi0rICBQUENf dm11bG9zdyA9IDB4MTAwMDAxODgsCi0rICBQUENfdm11bG91dyA9IDB4MTAwMDAwODgsCi0rICBQ UENfdm1zdW1zaG0gPSAweDEwMDAwMDI4LAotKyAgUFBDX3Ztc3VtdWhtID0gMHgxMDAwMDAyNiwK LSsgIFBQQ192cGVybSA9IDB4MTAwMDAwMkIsCi0rICAvLyBWWC1mb3JtLCBvcGNvZGUgNCwgWE89 MHg1NEMuIFBlci1ieXRlIGJpdC1wZXJtdXRlIG9mIGEgMTI4LWJpdCB2YWx1ZTsKLSsgIC8vIHJl c3VsdCAxNi1iaXQgYml0bWFwIGxhbmRzIGluIGR3MCBsb3cgMTYgYml0cywgcmVjb3ZlcmFibGUg dmlhIG1mdnNyZC4KLSsgIC8vIEF2YWlsYWJsZSBvbiBQT1dFUjgrIChJU0EgMi4wNykuCi0rICBQ UENfdmJwZXJtcSA9IDB4MTAwMDA1NEMsCi0rICAvLyBQT1dFUjEwIChJU0EgMy4xKSBWZWN0b3Ig RXh0cmFjdCBNYXNrLiBWWC1mb3JtLCBvcGNvZGUgNCwgWE89MHg2NDIsCi0rICAvLyB3aXRoIFVJ TSBhdCBiaXRzIDExLi4xNSBzZWxlY3RpbmcgbGFuZSB3aWR0aDogOD1ieXRlLCA5PWhhbGZ3b3Jk LAotKyAgLy8gMTA9d29yZCwgMTE9ZG91Ymxld29yZC4gUlQgaXMgYSBHUFIgKGxvdyBOIGJpdHMg PSB3YXNtIGJpdG1hc2spLgotKyAgUFBDX3ZleHRyYWN0Ym0gPSAweDEwMDgwNjQyLAotKyAgUFBD X3ZleHRyYWN0aG0gPSAweDEwMDkwNjQyLAotKyAgUFBDX3ZleHRyYWN0d20gPSAweDEwMEEwNjQy LAotKyAgUFBDX3ZleHRyYWN0ZG0gPSAweDEwMEIwNjQyLAotKyAgLy8gUE9XRVIxMCB2ZWN0b3Ig aW5zZXJ0IGZyb20gR1BSIGF0IGltbWVkaWF0ZSBieXRlIG9mZnNldDoKLSsgIC8vICAgdmluc3cg VlJULCBSQiwgVUlNICAgVlJUW1VJTSo4OlVJTSo4KzMxXSDihpAgUkJbMzI6NjNdCi0rICAvLyAg IHZpbnNkIFZSVCwgUkIsIFVJTSAgIFZSVFtVSU0qODpVSU0qOCs2M10g4oaQIFJCWzA6NjNdCi0r ICAvLyBWWC1mb3JtLCBvcGNvZGUgNC4gUkIgYXQgYml0cyAxNi4uMjAsIFVJTSBhdCBiaXRzIDEx Li4xNS4KLSsgIFBQQ192aW5zdyA9IDB4MTAwMDAwQ0YsICAvLyBQT1dFUjEwIChYTz0yMDcpCi0r ICBQUENfdmluc2QgPSAweDEwMDAwMUNGLCAgLy8gUE9XRVIxMCAoWE89NDYzKQotKyAgLy8gUE9X RVIxMCB2ZWN0b3IgaW5zZXJ0IGJ5dGUvaGFsZndvcmQgZnJvbSBHUFIgd2l0aCByZWdpc3Rlci1z dXBwbGllZAotKyAgLy8gKHJpZ2h0LWluZGV4ZWQgPSBMRS1uYXR1cmFsKSBieXRlIHBvc2l0aW9u OgotKyAgLy8gICB2aW5zYnJ4IFZSVCwgUkEsIFJCICAgVlJULmJ5dGVbUkEgJiAweEZdICDihpAg UkIgJiAweEZGCi0rICAvLyAgIHZpbnNocnggVlJULCBSQSwgUkIgICBWUlQuaHdvcmRbKFJBICYg MHhFKS8yXSDihpAgUkIgJiAweEZGRkYKLSsgIC8vIFZYLWZvcm0sIG9wY29kZSA0LiBSQSBhdCBi aXRzIDE2Li4yMCwgUkIgYXQgYml0cyAxMS4uMTUuCi0rICBQUENfdmluc2JyeCA9IDB4MTAwMDAz MEYsICAvLyBQT1dFUjEwIChYTz03ODMpCi0rICBQUENfdmluc2hyeCA9IDB4MTAwMDAzNEYsICAv LyBQT1dFUjEwIChYTz04NDcpCi0rICAvLyBQT1dFUjkgKElTQSAzLjApIHZlY3RvciBpbnNlcnQg Ynl0ZS9oYWxmd29yZCBmcm9tIFZSIGF0IGltbWVkaWF0ZQotKyAgLy8gYnl0ZSBwb3NpdGlvbjoK LSsgIC8vICAgdmluc2VydGIgVlJULCBWUkIsIFVJTSAgVlJULmJ5dGVbVUlNXSAgICAgIOKGkCBW UkIuYnl0ZVs3XSAgICAoQkUpCi0rICAvLyAgIHZpbnNlcnRoIFZSVCwgVlJCLCBVSU0gIFZSVC5o d29yZFtVSU0uLisxXSDihpAgVlJCLmJ5dGVbNi4uN10gKEJFKQotKyAgLy8gVi1mb3JtLCBvcGNv ZGUgNC4gVlJCIGF0IGJpdHMgMTEuLjE1LCBVSU0gYXQgYml0cyAxNi4uMjAuIFNpbWQxMjgKLSsg IC8vIGxpdmVzIGluIFZTUjMyLTYzICg9IFZSMC0zMSksIHNvIHRoZSBWLWZvcm0gVlJUIGZpZWxk IGFkZHJlc3NlcyBvdXIKLSsgIC8vIFNpbWQxMjggc3RvcmFnZSB2aWEgYGVuY29kaW5nKCkgJiAz MWAuCi0rICBQUENfdmluc2VydGIgPSAweDEwMDAwMzBELCAgLy8gUE9XRVI5IChYTz03ODEpCi0r ICBQUENfdmluc2VydGggPSAweDEwMDAwMzRELCAgLy8gUE9XRVI5IChYTz04NDUpCi0rICBQUENf dmV4dHJhY3R1YiA9IDB4MTAwMDAyMEQsICAvLyBQT1dFUjkgKFhPPTUyNSkKLSsgIFBQQ192ZXh0 cmFjdHVoID0gMHgxMDAwMDI0RCwgIC8vIFBPV0VSOSAoWE89NTg5KQotKyAgUFBDX3ZzcGx0aXNi ID0gMHgxMDAwMDMwQywgICAgLy8gUE9XRVI3KyAoWE89NzgwLCBzcGxhdCA1LWJpdCBTSU1NIHRv IGFsbCAxNiBieXRlIGxhbmVzKQotKyAgUFBDX3ZzcGx0aXNoID0gMHgxMDAwMDM0QywgICAgLy8g UE9XRVI3KyAoWE89ODQ0LCBzcGxhdCA1LWJpdCBTSU1NIHRvIGFsbCA4IGkxNiBsYW5lcykKLSsg IFBQQ192c3BsdGlzdyA9IDB4MTAwMDAzOEMsICAgIC8vIFBPV0VSNysgKFhPPTkwOCwgc3BsYXQg NS1iaXQgU0lNTSB0byBhbGwgNCBpMzIgbGFuZXMpCi0rICBQUENfdnBvcGNudGIgPSAweDEwMDAw NzAzLAotKyAgUFBDX3ZzbGIgPSAweDEwMDAwMTA0LAotKyAgUFBDX3ZzbGQgPSAweDEwMDAwNUM0 LAotKyAgUFBDX3ZzbGRvaSA9IDB4MTAwMDAwMkMsCi0rICBQUENfdnNsaCA9IDB4MTAwMDAxNDQs Ci0rICBQUENfdnNsbyA9IDB4MTAwMDA0MEMsCi0rICBQUENfdnNsdyA9IDB4MTAwMDAxODQsCi0r ICBQUENfdnNwbHRiID0gMHgxMDAwMDIwQywKLSsgIFBQQ192c3BsdGggPSAweDEwMDAwMjRDLAot KyAgUFBDX3ZzcmFiID0gMHgxMDAwMDMwNCwKLSsgIFBQQ192c3JhZCA9IDB4MTAwMDAzQzQsCi0r ICBQUENfdnNyYWggPSAweDEwMDAwMzQ0LAotKyAgUFBDX3ZzcmF3ID0gMHgxMDAwMDM4NCwKLSsg IFBQQ192c3JiID0gMHgxMDAwMDIwNCwKLSsgIFBQQ192c3JkID0gMHgxMDAwMDZDNCwKLSsgIFBQ Q192c3JoID0gMHgxMDAwMDI0NCwKLSsgIFBQQ192c3JvID0gMHgxMDAwMDQ0QywKLSsgIFBQQ192 c3J3ID0gMHgxMDAwMDI4NCwKLSsgIFBQQ192cGtzaHNzID0gMHgxMDAwMDE4RSwKLSsgIFBQQ192 cGtzaHVzID0gMHgxMDAwMDEwRSwKLSsgIFBQQ192cGtzd3NzID0gMHgxMDAwMDFDRSwKLSsgIFBQ Q192cGtzd3VzID0gMHgxMDAwMDE0RSwKLSsgIFBQQ192dXBraHNiID0gMHgxMDAwMDIwRSwKLSsg IFBQQ192dXBraHNoID0gMHgxMDAwMDI0RSwKLSsgIFBQQ192dXBraHN3ID0gMHgxMDAwMDY0RSwK LSsgIFBQQ192dXBrbHNiID0gMHgxMDAwMDI4RSwKLSsgIFBQQ192dXBrbHNoID0gMHgxMDAwMDJD RSwKLSsgIFBQQ192dXBrbHN3ID0gMHgxMDAwMDZDRSwKLSsgIFBQQ192c3VidWJtID0gMHgxMDAw MDQwMCwKLSsgIFBQQ192c3VidWhtID0gMHgxMDAwMDQ0MCwKLSsgIFBQQ192c3VidXdtID0gMHgx MDAwMDQ4MCwKLSsgIFBQQ192c3VidWRtID0gMHgxMDAwMDRDMCwKLSsgIFBQQ192c3VidWJzID0g MHgxMDAwMDYwMCwKLSsgIFBQQ192c3VidWhzID0gMHgxMDAwMDY0MCwKLSsgIFBQQ192c3Vic2Jz ID0gMHgxMDAwMDcwMCwKLSsgIFBQQ192c3Vic2hzID0gMHgxMDAwMDc0MCwKLSsgIFBQQ194c2N2 ZHBzcG4gPSAweEYwMDAwNDJDLAotKyAgUFBDX3hzY3ZzcGRwbiA9IDB4RjAwMDA1MkMsCi0rICAv LyBQT1dFUjkgKElTQSAzLjApIHNjYWxhciBGUDE2IGNvbnZlcnNpb25zLCBYWDItZm9ybS4gVGhl IFVJTQotKyAgLy8gZGlzYW1iaWd1YXRvciBpcyBiYWtlZCBpbnRvIHRoZSBjb25zdGFudCAoeHNj dmRwaHA9MTcsIHhzY3ZocGRwPTE2KS4KLSsgIC8vIEVuY29kaW5ncyBjcm9zcy1jaGVja2VkIGFn YWluc3QgYmludXRpbHMgd2l0aCBgLm1hY2hpbmUgcG93ZXI5YC4KLSsgIFBQQ194c2N2ZHBocCA9 IDB4RjAxMTA1NkMsCi0rICBQUENfeHNjdmhwZHAgPSAweEYwMTAwNTZDLAotKyAgLy8gUE9XRVI5 IChJU0EgMy4wKSBzY2FsYXIgVlNYIGV4dHJhY3QgYmlhc2VkIGV4cG9uZW50LCBYWDItZm9ybS4K LSsgIC8vIFhULmR3b3JkWzBdID0gKHplcm8gfHwgYmlhc2VkX2V4cF8xMWJpdCksIFhULmR3b3Jk WzFdID0gMC4gWE89MzQ3Ci0rICAvLyAoc2hhcmVzIFhPIHdpdGggeHNjdntkcCxocH17aHAsZHB9 IOKAlCBkaXNhbWJpZ3VhdGVkIGJ5IGJpdHMgMTYtMjA9MCkuCi0rICAvLyBFbmNvZGluZyBjcm9z cy1jaGVja2VkIGFnYWluc3QgYmludXRpbHMgd2l0aCBgLm1hY2hpbmUgcG93ZXI5YC4KLSsgIFBQ Q194c3hleHBkcCA9IDB4RjAwMDA1NkMsCi0rICAvLyBQT1dFUjkgKElTQSAzLjApIHNjYWxhciBG UDE2IGxvYWQvc3RvcmUsIFgtZm9ybSAob3Bjb2RlIDMxKS4KLSsgIC8vIGx4c2loenggemVyby1l eHRlbmRzOyBzdHhzaWh4IHdyaXRlcyAxNiBiaXRzIGZyb20gVlNSIGR3b3JkIDAKLSsgIC8vIHdv cmQgMSdzIGxvdyBoYWxmd29yZC4KLSsgIFBQQ19seHNpaHp4ID0gMHg3QzAwMDY1QSwKLSsgIFBQ Q19zdHhzaWh4ID0gMHg3QzAwMDc1QSwKLSsgIC8vIFBPV0VSOSBzY2FsYXIgVlNYIG1heC9taW4g d2l0aCBKYXZhL0phdmFTY3JpcHQgc2VtYW50aWNzIOKAlCBoYW5kbGVzCi0rICAvLyDCsTAgYW5k IE5hTiBpZGVudGljYWxseSB0byBNYXRoLm1heC9NYXRoLm1pbiBpbiBFQ01BLTI2MiAoY292ZXJz Ci0rICAvLyAxOSBjb3JuZXIgY2FzZXMgYWdhaW5zdCB0aGUgSlMgc2hlbGwpLgotKyAgLy8gWFgz LWZvcm0sIHByaW1hcnkgb3Bjb2RlIDYwLCBYTz0xNDQgKG1heCkgLyBYTz0xNTIgKG1pbikuCi0r ICBQUENfeHNtYXhqZHAgPSAweEYwMDAwNDgwLAotKyAgUFBDX3hzbWluamRwID0gMHhGMDAwMDRD MCwKLSsgIFBQQ194eGJyZCA9IDB4RjAxNzA3NkMsCi0rICBQUENfeHZhYnNkcCA9IDB4RjAwMDA3 NjQsCi0rICBQUENfeHZhYnNzcCA9IDB4RjAwMDA2NjQsCi0rICBQUENfeHZhZGRkcCA9IDB4RjAw MDAzMDAsCi0rICBQUENfeHZhZGRzcCA9IDB4RjAwMDAyMDAsCi0rICBQUENfeHZjbXBlcWRwID0g MHhGMDAwMDMxOCwKLSsgIFBQQ194dmNtcGVxc3AgPSAweEYwMDAwMjE4LAotKyAgUFBDX3h2Y21w Z2VkcCA9IDB4RjAwMDAzOTgsCi0rICBQUENfeHZjbXBnZXNwID0gMHhGMDAwMDI5OCwKLSsgIFBQ Q194dmNtcGd0ZHAgPSAweEYwMDAwMzU4LAotKyAgUFBDX3h2Y21wZ3RzcCA9IDB4RjAwMDAyNTgs Ci0rICBQUENfeHZjdmRwc3AgPSAweEYwMDAwNjI0LAotKyAgUFBDX3h2Y3ZkcHN4d3MgPSAweEYw MDAwMzYwLAotKyAgUFBDX3h2Y3ZkcHV4d3MgPSAweEYwMDAwMzIwLAotKyAgUFBDX3h2Y3ZzcGRw ID0gMHhGMDAwMDcyNCwKLSsgIFBQQ194dmN2c3BzeHdzID0gMHhGMDAwMDI2MCwKLSsgIFBQQ194 dmN2c3B1eHdzID0gMHhGMDAwMDIyMCwKLSsgIFBQQ194dmN2c3h3ZHAgPSAweEYwMDAwM0UwLAot KyAgUFBDX3h2Y3ZzeHdzcCA9IDB4RjAwMDAyRTAsCi0rICBQUENfeHZjdnV4d2RwID0gMHhGMDAw MDNBMCwKLSsgIFBQQ194dmN2dXh3c3AgPSAweEYwMDAwMkEwLAotKyAgUFBDX3h2ZGl2ZHAgPSAw eEYwMDAwM0MwLAotKyAgUFBDX3h2ZGl2c3AgPSAweEYwMDAwMkMwLAotKyAgUFBDX3h2bWFkZGFk cCA9IDB4RjAwMDAzMDgsCi0rICBQUENfeHZtYWRkYXNwID0gMHhGMDAwMDIwOCwKLSsgIFBQQ194 dm1heGRwID0gMHhGMDAwMDcwMCwKLSsgIFBQQ194dm1heHNwID0gMHhGMDAwMDYwMCwKLSsgIFBQ Q194dm1pbmRwID0gMHhGMDAwMDc0MCwKLSsgIFBQQ194dm1pbnNwID0gMHhGMDAwMDY0MCwKLSsg IFBQQ194dm11bGRwID0gMHhGMDAwMDM4MCwKLSsgIFBQQ194dm11bHNwID0gMHhGMDAwMDI4MCwK LSsgIFBQQ194dm5lZ2RwID0gMHhGMDAwMDdFNCwKLSsgIFBQQ194dm5tc3ViYWRwID0gMHhGMDAw MDc4OCwKLSsgIFBQQ194dm5tc3ViYXNwID0gMHhGMDAwMDY4OCwKLSsgIFBQQ194dm5lZ3NwID0g MHhGMDAwMDZFNCwKLSsgIFBQQ194dnJkcGljID0gMHhGMDAwMDNBQywKLSsgIFBQQ194dnJkcGlt ID0gMHhGMDAwMDNFNCwKLSsgIFBQQ194dnJkcGlwID0gMHhGMDAwMDNBNCwKLSsgIFBQQ194dnJk cGl6ID0gMHhGMDAwMDM2NCwKLSsgIFBQQ194dnJzcGljID0gMHhGMDAwMDJBQywKLSsgIFBQQ194 dnJzcGltID0gMHhGMDAwMDJFNCwKLSsgIFBQQ194dnJzcGlwID0gMHhGMDAwMDJBNCwKLSsgIFBQ Q194dnJzcGl6ID0gMHhGMDAwMDI2NCwKLSsgIFBQQ194dnNxcnRkcCA9IDB4RjAwMDAzMkMsCi0r ICBQUENfeHZzcXJ0c3AgPSAweEYwMDAwMjJDLAotKyAgUFBDX3h2c3ViZHAgPSAweEYwMDAwMzQw LAotKyAgUFBDX3h2c3Vic3AgPSAweEYwMDAwMjQwLAotKyAgUFBDX3h4ZXh0cmFjdHV3ID0gMHhG MDAwMDI5NCwKLSsgIFBQQ194eGluc2VydHcgPSAweEYwMDAwMkQ0LAotKyAgUFBDX3h4bGFuZCA9 IDB4RjAwMDA0MTAsCi0rICBQUENfeHhsYW5kYyA9IDB4RjAwMDA0NTAsCi0rICBQUENfeHhsbm9y ID0gMHhGMDAwMDUxMCwKLSsgIFBQQ194eGxvciA9IDB4RjAwMDA0OTAsCi0rICBQUENfeHhseG9y ID0gMHhGMDAwMDREMCwKLSsgIFBQQ194eHBlcm1kaSA9IDB4RjAwMDAwNTAsCi0rICBQUENfeHhz ZWwgPSAweEYwMDAwMDMwLAotKyAgUFBDX3h4c3BsdGliID0gMHhGMDAwMDJEMCwgIC8vIFBPV0VS OSAoSVNBIDMuMCk6IFhYMS1mb3JtLCBubyBSYwotKyAgUFBDX3h4c3BsdHcgPSAweEYwMDAwMjkw LAotKwotKyAgLy8gU2ltcGxpZmllZCBtbmVtb25pY3MuCi0rICBQUENfbXIgPSBQUENfb3JfLAot KyAgUFBDX25vdCA9IFBQQ19ub3IsCi0rICBQUENfbm9wID0gUFBDX29yaSwKLSsgIFBQQ19sd3N5 bmMgPSBQUENfc3luYyB8ICgxIDw8IDIxKSwKLSsKLSsgIFBQQ19NQUpPUl9PUENPREVfTUFTSyA9 IDB4RkMwMDAwMDAKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1aW50MzJfdCBOb3BJbnN0ID0gKHVp bnQzMl90KVBQQ19ub3A7Ci0rc3RhdGljIGNvbnN0IHVpbnQzMl90IFBQQ19TVEFOWkFfTEVOR1RI ID0gMTY7Ci0rCi0rY2xhc3MgSW5zdHJ1Y3Rpb247Ci0rY2xhc3MgSW5zdFJlZzsKLStjbGFzcyBJ bnN0SW1tOwotK2NsYXNzIEJPZmZJbW0xNjsKLStjbGFzcyBKT2ZmSW1tMjY7Ci0rCi0rLy8gUFBD NjQgYmFzZSBpbnN0cnVjdGlvbiB0eXBlOiBhIHNpbmdsZSAzMi1iaXQgd29yZC4KLStjbGFzcyBJ bnN0cnVjdGlvbiB7Ci0rIHByb3RlY3RlZDoKLSsgIHVpbnQzMl90IGRhdGE7Ci0rCi0rIHB1Ymxp YzoKLSsgIGV4cGxpY2l0IEluc3RydWN0aW9uKHVpbnQzMl90IGRhdGFfKSA6IGRhdGEoZGF0YV8p IHt9Ci0rICBleHBsaWNpdCBJbnN0cnVjdGlvbihQUENPcGNvZGVzIG9wKSA6IGRhdGEoKHVpbnQz Ml90KW9wKSB7fQotKwotKyAgdWludDMyX3QgZW5jb2RlKCkgY29uc3QgeyByZXR1cm4gZGF0YTsg fQotKwotKyAgdm9pZCBtYWtlTm9wKCkgeyBkYXRhID0gTm9wSW5zdDsgfQotKyAgdm9pZCBtYWtl T3BfbXRjdHIoUmVnaXN0ZXIgcikgewotKyAgICBkYXRhID0gUFBDX210c3ByIHwgKCh1aW50MzJf dClyLmNvZGUoKSkgPDwgMjEgfCBQUENfU1BSKDkpOwotKyAgfQotKyAgdm9pZCBtYWtlT3BfYmN0 cih1aW50MzJfdCBsaW5rQml0ID0gMCkgeyBkYXRhID0gUFBDX2JjdHIgfCBsaW5rQml0OyB9Ci0r Ci0rICB2b2lkIHNldERhdGEodWludDMyX3QgZGF0YSkgeyB0aGlzLT5kYXRhID0gZGF0YTsgfQot KwotKyAgY29uc3QgSW5zdHJ1Y3Rpb24mIG9wZXJhdG9yPShjb25zdCBJbnN0cnVjdGlvbiYgc3Jj KSB7Ci0rICAgIGRhdGEgPSBzcmMuZGF0YTsKLSsgICAgcmV0dXJuICp0aGlzOwotKyAgfQotKwot KyAgdWludDMyX3QgZXh0cmFjdEJpdCh1aW50MzJfdCBiaXQpIGNvbnN0IHsgcmV0dXJuIChlbmNv ZGUoKSA+PiBiaXQpICYgMTsgfQotKyAgdWludDMyX3QgZXh0cmFjdEJpdEZpZWxkKHVpbnQzMl90 IGhpLCB1aW50MzJfdCBsbykgY29uc3QgewotKyAgICByZXR1cm4gKGVuY29kZSgpID4+IGxvKSAm ICgoMiA8PCAoaGkgLSBsbykpIC0gMSk7Ci0rICB9Ci0rCi0rICB1aW50MzJfdCBleHRyYWN0T3Bj b2RlKCkgY29uc3QgeyByZXR1cm4gZGF0YSAmIFBQQ19NQUpPUl9PUENPREVfTUFTSzsgfQotKyAg Ym9vbCBpc09wY29kZSh1aW50MzJfdCBvcCkgY29uc3QgewotKyAgICByZXR1cm4gZXh0cmFjdE9w Y29kZSgpID09IChvcCAmIFBQQ19NQUpPUl9PUENPREVfTUFTSyk7Ci0rICB9Ci0rCi0rICB1aW50 MzJfdCBleHRyYWN0UlQoKSBjb25zdCB7Ci0rICAgIHJldHVybiBleHRyYWN0Qml0RmllbGQoUlRT aGlmdCArIFJUQml0cyAtIDEsIFJUU2hpZnQpOwotKyAgfQotKyAgdWludDMyX3QgZXh0cmFjdFJB KCkgY29uc3QgewotKyAgICByZXR1cm4gZXh0cmFjdEJpdEZpZWxkKFJBU2hpZnQgKyBSQUJpdHMg LSAxLCBSQVNoaWZ0KTsKLSsgIH0KLSsgIHVpbnQzMl90IGV4dHJhY3RSQigpIGNvbnN0IHsKLSsg ICAgcmV0dXJuIGV4dHJhY3RCaXRGaWVsZChSQlNoaWZ0ICsgUkJCaXRzIC0gMSwgUkJTaGlmdCk7 Ci0rICB9Ci0rICB1aW50MzJfdCBleHRyYWN0SW1tMTYoKSBjb25zdCB7IHJldHVybiBkYXRhICYg SW1tMTZNYXNrOyB9Ci0rCi0rICBJbnN0cnVjdGlvbiogbmV4dCgpIHsgcmV0dXJuIHRoaXMgKyAx OyB9Ci0rCi0rICBjb25zdCB1aW50MzJfdCogcmF3KCkgY29uc3QgeyByZXR1cm4gJmRhdGE7IH0K LSsgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiA0OyB9Ci0rfTsKLSsKLStzdGF0aWNf YXNzZXJ0KHNpemVvZihJbnN0cnVjdGlvbikgPT0gNCk7Ci0rCi0rY2xhc3MgSW5zdE5PUCA6IHB1 YmxpYyBJbnN0cnVjdGlvbiB7Ci0rIHB1YmxpYzoKLSsgIEluc3ROT1AoKSA6IEluc3RydWN0aW9u KE5vcEluc3QpIHt9Ci0rfTsKLSsKLSsvLyBSZWdpc3Rlci1yZWdpc3Rlci1yZWdpc3RlciBpbnN0 cnVjdGlvbiAoWC1mb3JtIGFuZCBYTy1mb3JtKS4KLStjbGFzcyBJbnN0UmVnIDogcHVibGljIElu c3RydWN0aW9uIHsKLSsgcHVibGljOgotKyAgZXhwbGljaXQgSW5zdFJlZyhQUENPcGNvZGVzIG9w KSA6IEluc3RydWN0aW9uKG9wKSB7fQotKyAgSW5zdFJlZyhQUENPcGNvZGVzIG9wLCBSZWdpc3Rl ciBydCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKQotKyAgICAgIDogSW5zdHJ1Y3Rpb24oKHVp bnQzMl90KW9wIHwgUlQocnQpIHwgUkEocmEpIHwgUkIocmIpKSB7fQotKyAgSW5zdFJlZyhQUENP cGNvZGVzIG9wLCBGbG9hdFJlZ2lzdGVyIGZydCwgRmxvYXRSZWdpc3RlciBmcmEsCi0rICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZnJiKQotKyAgICAgIDogSW5zdHJ1Y3Rpb24oKHVpbnQzMl90KW9w IHwgUlQoZnJ0KSB8IFJBKGZyYSkgfCBSQihmcmIpKSB7fQotKwotKyAgdm9pZCBzZXRSVChSZWdp c3RlciByKSB7IGRhdGEgPSAoZGF0YSAmIH5SVE1hc2spIHwgUlQocik7IH0KLSsgIHZvaWQgc2V0 UkEoUmVnaXN0ZXIgcikgeyBkYXRhID0gKGRhdGEgJiB+UkFNYXNrKSB8IFJBKHIpOyB9Ci0rICB2 b2lkIHNldFJCKFJlZ2lzdGVyIHIpIHsgZGF0YSA9IChkYXRhICYgflJCTWFzaykgfCBSQihyKTsg fQotKwotKyAgdm9pZCBzZXRJbW0xNih1aW50MzJfdCBpbW0pIHsKLSsgICAgZGF0YSA9IChkYXRh ICYgMHhGRkZGMDAwMCkgfCAoaW1tICYgSW1tMTZNYXNrKTsKLSsgIH0KLSsgIHVpbnQzMl90IGV4 dHJhY3RJbW0xNlZhbHVlKCkgY29uc3QgeyByZXR1cm4gZGF0YSAmIEltbTE2TWFzazsgfQotK307 Ci0rCi0rLy8gUmVnaXN0ZXItaW1tZWRpYXRlIGluc3RydWN0aW9uIChELWZvcm0pLgotKy8vIEJp dHMgMjEtMjUgaG9sZCBSVCAobG9hZHMsIGFkZGkpIG9yIFJTIChzdG9yZXMsIG9yaSkuIEJvdGgg ZW5jb2RlIGlkZW50aWNhbGx5Ci0rLy8gc2luY2UgUlQgYW5kIFJTIG9jY3VweSB0aGUgc2FtZSBm aWVsZDsgdGhlIGNhbGxlciBzaW1wbHkgcGFzc2VzIHRoZSByaWdodAotKy8vIHJlZ2lzdGVyLgot K2NsYXNzIEluc3RJbW0gOiBwdWJsaWMgSW5zdHJ1Y3Rpb24gewotKyBwdWJsaWM6Ci0rICBleHBs aWNpdCBJbnN0SW1tKFBQQ09wY29kZXMgb3ApIDogSW5zdHJ1Y3Rpb24ob3ApIHt9Ci0rICBJbnN0 SW1tKFBQQ09wY29kZXMgb3AsIFJlZ2lzdGVyIHJ0LCBSZWdpc3RlciByYSwgdWludDMyX3QgaW1t MTYpCi0rICAgICAgOiBJbnN0cnVjdGlvbigodWludDMyX3Qpb3AgfCBSVChydCkgfCBSQShyYSkg fCAoaW1tMTYgJiBJbW0xNk1hc2spKSB7fQotKwotKyAgdm9pZCBzZXRSVChSZWdpc3RlciByKSB7 IGRhdGEgPSAoZGF0YSAmIH5SVE1hc2spIHwgUlQocik7IH0KLSsgIHZvaWQgc2V0UkEoUmVnaXN0 ZXIgcikgeyBkYXRhID0gKGRhdGEgJiB+UkFNYXNrKSB8IFJBKHIpOyB9Ci0rCi0rICB2b2lkIHNl dEltbTE2KHVpbnQzMl90IGltbSkgewotKyAgICBkYXRhID0gKGRhdGEgJiAweEZGRkYwMDAwKSB8 IChpbW0gJiBJbW0xNk1hc2spOwotKyAgfQotKyAgdm9pZCBzZXRMb3dlclJlZyhSZWdpc3RlciBy bCkgewotKyAgICBkYXRhID0gKGRhdGEgJiAweEZGRTBGRkZGKSB8ICgodWludDMyX3QpcmwuY29k ZSgpIDw8IDE2KTsKLSsgIH0KLSsgIHVpbnQzMl90IGV4dHJhY3RJbW0xNlZhbHVlKCkgY29uc3Qg eyByZXR1cm4gZGF0YSAmIEltbTE2TWFzazsgfQotKwotKyAgLy8gRXh0cmFjdCB0aGUgVHJhcFRh ZyBmcm9tIGEgdGFnZ2VkIHRyYXAgaW5zdHJ1Y3Rpb24gKHR3KS4KLSsgIC8vIERlZmluZWQgaW4g QXNzZW1ibGVyLXBwYzY0LmNwcC4gUmV0dXJucyBhIFRyYXBUYWcgdmFsdWUgYXMgdWludDhfdAot KyAgLy8gYmVjYXVzZSBBc3NlbWJsZXI6OlRyYXBUYWcgaXMgbm90IHlldCBkZWZpbmVkIGF0IHRo aXMgcG9pbnQgaW4gdGhlIGhlYWRlci4KLSsgIHVpbnQ4X3QgdHJhcHRhZygpOwotK307Ci0rCi0r Ly8gQSBCT2ZmSW1tMTYgaXMgYSAxNi1iaXQgc2lnbmVkIGJyYW5jaCBvZmZzZXQgZm9yIGNvbmRp dGlvbmFsIGJyYW5jaGVzCi0rLy8gKGJjLWZvcm0gaW5zdHJ1Y3Rpb25zKS4gIFRoZSBvZmZzZXQg aXMgc3RvcmVkIGluIGJpdHMgMi4uMTUgYW5kIGlzCi0rLy8gNC1ieXRlIGFsaWduZWQsIGdpdmlu ZyBhIHJhbmdlIG9mICsvLTMyIEtCLgotK2NsYXNzIEJPZmZJbW0xNiB7Ci0rICBpbnQzMl90IGRh dGE7Ci0rCi0rIHB1YmxpYzoKLSsgIHVpbnQzMl90IGVuY29kZSgpIGNvbnN0IHsKLSsgICAgTU9a X0FTU0VSVCghaXNJbnZhbGlkKCkpOwotKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+ KGRhdGEpICYgMHhGRkZDOwotKyAgfQotKyAgaW50MzJfdCBkZWNvZGUoKSBjb25zdCB7Ci0rICAg IE1PWl9BU1NFUlQoIWlzSW52YWxpZCgpKTsKLSsgICAgcmV0dXJuIGRhdGE7Ci0rICB9Ci0rCi0r ICBleHBsaWNpdCBCT2ZmSW1tMTYoaW50IG9mZnNldCkgOiBkYXRhKG9mZnNldCkgewotKyAgICBN T1pfQVNTRVJUKChvZmZzZXQgJiAweDMpID09IDApOwotKyAgICBNT1pfQVNTRVJUKElzSW5SYW5n ZShvZmZzZXQpKTsKLSsgIH0KLSsgIHN0YXRpYyBib29sIElzSW5SYW5nZShpbnQgb2Zmc2V0KSB7 Ci0rICAgIHJldHVybiBvZmZzZXQgPj0gLTMyNzY4ICYmIG9mZnNldCA8PSAzMjc2NDsKLSsgIH0K LSsKLSsgIHN0YXRpYyBjb25zdCBpbnQzMl90IElOVkFMSUQgPSAweDAwMDIwMDAwOwotKyAgQk9m ZkltbTE2KCkgOiBkYXRhKElOVkFMSUQpIHt9Ci0rCi0rICBib29sIGlzSW52YWxpZCgpIGNvbnN0 IHsgcmV0dXJuIGRhdGEgPT0gSU5WQUxJRDsgfQotKwotKyAgSW5zdHJ1Y3Rpb24qIGdldERlc3Qo SW5zdHJ1Y3Rpb24qIHNyYykgY29uc3Q7Ci0rCi0rICBleHBsaWNpdCBCT2ZmSW1tMTYoSW5zdElt bSBpbnN0KTsKLSt9OwotKwotKy8vIEEgSk9mZkltbTI2IGlzIGEgMjYtYml0IHNpZ25lZCBicmFu Y2ggb2Zmc2V0IGZvciB1bmNvbmRpdGlvbmFsIGJyYW5jaGVzCi0rLy8gKGIvYmwgaW5zdHJ1Y3Rp b25zKS4gIEJpdHMgMi4uMjUgZW5jb2RlIHRoZSBvZmZzZXQsIDQtYnl0ZSBhbGlnbmVkLAotKy8v IGdpdmluZyBhIHJhbmdlIG9mICsvLTMyIE1CLgotK2NsYXNzIEpPZmZJbW0yNiB7Ci0rICBpbnQz Ml90IGRhdGE7Ci0rCi0rIHB1YmxpYzoKLSsgIHVpbnQzMl90IGVuY29kZSgpIGNvbnN0IHsKLSsg ICAgTU9aX0FTU0VSVCghaXNJbnZhbGlkKCkpOwotKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu dDMyX3Q+KGRhdGEpICYgMHgwM0ZGRkZGQzsKLSsgIH0KLSsgIGludDMyX3QgZGVjb2RlKCkgY29u c3QgewotKyAgICBNT1pfQVNTRVJUKCFpc0ludmFsaWQoKSk7Ci0rICAgIHJldHVybiBkYXRhOwot KyAgfQotKwotKyAgZXhwbGljaXQgSk9mZkltbTI2KGludCBvZmZzZXQpIDogZGF0YShvZmZzZXQp IHsKLSsgICAgTU9aX0FTU0VSVCgob2Zmc2V0ICYgMHgzKSA9PSAwKTsKLSsgICAgTU9aX0FTU0VS VChJc0luUmFuZ2Uob2Zmc2V0KSk7Ci0rICB9Ci0rICBzdGF0aWMgYm9vbCBJc0luUmFuZ2UoaW50 IG9mZnNldCkgewotKyAgICByZXR1cm4gb2Zmc2V0ID49IC0zMzU1NDQzMiAmJiBvZmZzZXQgPD0g MzM1NTQ0Mjg7Ci0rICB9Ci0rCi0rICBzdGF0aWMgY29uc3QgaW50MzJfdCBJTlZBTElEID0gMHgy MDAwMDAwMDsKLSsgIEpPZmZJbW0yNigpIDogZGF0YShJTlZBTElEKSB7fQotKwotKyAgYm9vbCBp c0ludmFsaWQoKSBjb25zdCB7IHJldHVybiBkYXRhID09IElOVkFMSUQ7IH0KLSsKLSsgIEluc3Ry dWN0aW9uKiBnZXREZXN0KEluc3RydWN0aW9uKiBzcmMpIGNvbnN0OwotK307Ci0rCi0rLy8gQSAx Ni1iaXQgaW1tZWRpYXRlIHZhbHVlIHVzZWQgaW4gRC1mb3JtIGluc3RydWN0aW9ucy4KLStjbGFz cyBJbW0xNiB7Ci0rICBpbnQzMl90IHZhbHVlOwotKwotKyBwdWJsaWM6Ci0rICBJbW0xNigpOwot KyAgZXhwbGljaXQgSW1tMTYodWludDMyX3QgaW1tKSA6IHZhbHVlKGltbSkge30KLSsgIHVpbnQz Ml90IGVuY29kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkg JiAweGZmZmY7IH0KLSsgIGludDMyX3QgZGVjb2RlU2lnbmVkKCkgY29uc3QgeyByZXR1cm4gdmFs dWU7IH0KLSsgIHVpbnQzMl90IGRlY29kZVVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gdmFsdWU7 IH0KLSsgIHN0YXRpYyBib29sIElzSW5TaWduZWRSYW5nZShpbnQzMl90IGltbSkgewotKyAgICBy ZXR1cm4gaW1tID49IElOVDE2X01JTiAmJiBpbW0gPD0gSU5UMTZfTUFYOwotKyAgfQotKyAgc3Rh dGljIGJvb2wgSXNJblVuc2lnbmVkUmFuZ2UodWludDMyX3QgaW1tKSB7IHJldHVybiBpbW0gPD0g VUlOVDE2X01BWDsgfQotKyAgc3RhdGljIEltbTE2IExvd2VyKEltbTMyIGltbSkgeyByZXR1cm4g SW1tMTYoaW1tLnZhbHVlICYgMHhmZmZmKTsgfQotKyAgc3RhdGljIEltbTE2IFVwcGVyKEltbTMy IGltbSkgeyByZXR1cm4gSW1tMTYoKGltbS52YWx1ZSA+PiAxNikgJiAweGZmZmYpOyB9Ci0rfTsK LSsKLStjbGFzcyBJbW04IHsKLSsgIHVpbnQ4X3QgdmFsdWU7Ci0rCi0rIHB1YmxpYzoKLSsgIElt bTgoKTsKLSsgIGV4cGxpY2l0IEltbTgodWludDMyX3QgaW1tKSA6IHZhbHVlKGltbSkge30KLSsg IHVpbnQzMl90IGVuY29kZSh1aW50MzJfdCBzaGlmdCkgY29uc3QgeyByZXR1cm4gdmFsdWUgPDwg c2hpZnQ7IH0KLSsgIGludDMyX3QgZGVjb2RlU2lnbmVkKCkgY29uc3QgeyByZXR1cm4gdmFsdWU7 IH0KLSsgIHVpbnQzMl90IGRlY29kZVVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gdmFsdWU7IH0K LSsgIHN0YXRpYyBib29sIElzSW5TaWduZWRSYW5nZShpbnQzMl90IGltbSkgewotKyAgICByZXR1 cm4gaW1tID49IElOVDhfTUlOICYmIGltbSA8PSBJTlQ4X01BWDsKLSsgIH0KLSsgIHN0YXRpYyBi b29sIElzSW5VbnNpZ25lZFJhbmdlKHVpbnQzMl90IGltbSkgeyByZXR1cm4gaW1tIDw9IFVJTlQ4 X01BWDsgfQotKyAgc3RhdGljIEltbTggTG93ZXIoSW1tMTYgaW1tKSB7IHJldHVybiBJbW04KGlt bS5kZWNvZGVTaWduZWQoKSAmIDB4ZmYpOyB9Ci0rICBzdGF0aWMgSW1tOCBVcHBlcihJbW0xNiBp bW0pIHsKLSsgICAgcmV0dXJuIEltbTgoKGltbS5kZWNvZGVTaWduZWQoKSA+PiA4KSAmIDB4ZmYp OwotKyAgfQotK307Ci0rCi0rY2xhc3MgT3BlcmFuZCB7Ci0rIHB1YmxpYzoKLSsgIGVudW0gVGFn IHsgUkVHLCBGUkVHLCBNRU0gfTsKLSsKLSsgcHJpdmF0ZToKLSsgIFRhZyB0YWcgOiAzOwotKyAg dWludDMyX3QgcmVnIDogNTsKLSsgIGludDMyX3Qgb2Zmc2V0OwotKwotKyBwdWJsaWM6Ci0rICBN T1pfSU1QTElDSVQgT3BlcmFuZChSZWdpc3RlciByZWdfKSA6IHRhZyhSRUcpLCByZWcocmVnXy5j b2RlKCkpIHt9Ci0rCi0rICBleHBsaWNpdCBPcGVyYW5kKEZsb2F0UmVnaXN0ZXIgZnJlZykgOiB0 YWcoRlJFRyksIHJlZyhmcmVnLmNvZGUoKSkge30KLSsKLSsgIE9wZXJhbmQoUmVnaXN0ZXIgYmFz ZSwgSW1tMzIgb2ZmKQotKyAgICAgIDogdGFnKE1FTSksIHJlZyhiYXNlLmNvZGUoKSksIG9mZnNl dChvZmYudmFsdWUpIHt9Ci0rCi0rICBPcGVyYW5kKFJlZ2lzdGVyIGJhc2UsIGludDMyX3Qgb2Zm KQotKyAgICAgIDogdGFnKE1FTSksIHJlZyhiYXNlLmNvZGUoKSksIG9mZnNldChvZmYpIHt9Ci0r Ci0rICBleHBsaWNpdCBPcGVyYW5kKGNvbnN0IEFkZHJlc3MmIGFkZHIpCi0rICAgICAgOiB0YWco TUVNKSwgcmVnKGFkZHIuYmFzZS5jb2RlKCkpLCBvZmZzZXQoYWRkci5vZmZzZXQpIHt9Ci0rCi0r ICBUYWcgZ2V0VGFnKCkgY29uc3QgeyByZXR1cm4gdGFnOyB9Ci0rCi0rICBSZWdpc3RlciB0b1Jl ZygpIGNvbnN0IHsKLSsgICAgTU9aX0FTU0VSVCh0YWcgPT0gUkVHKTsKLSsgICAgcmV0dXJuIFJl Z2lzdGVyOjpGcm9tQ29kZShyZWcpOwotKyAgfQotKwotKyAgRmxvYXRSZWdpc3RlciB0b0ZSZWco KSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQodGFnID09IEZSRUcpOwotKyAgICByZXR1cm4gRmxv YXRSZWdpc3Rlcjo6RnJvbUNvZGUocmVnKTsKLSsgIH0KLSsKLSsgIHZvaWQgdG9BZGRyKFJlZ2lz dGVyKiByLCBJbW0zMiogZGVzdCkgY29uc3QgewotKyAgICBNT1pfQVNTRVJUKHRhZyA9PSBNRU0p OwotKyAgICAqciA9IFJlZ2lzdGVyOjpGcm9tQ29kZShyZWcpOwotKyAgICAqZGVzdCA9IEltbTMy KG9mZnNldCk7Ci0rICB9Ci0rICBBZGRyZXNzIHRvQWRkcmVzcygpIGNvbnN0IHsKLSsgICAgTU9a X0FTU0VSVCh0YWcgPT0gTUVNKTsKLSsgICAgcmV0dXJuIEFkZHJlc3MoUmVnaXN0ZXI6OkZyb21D b2RlKHJlZyksIG9mZnNldCk7Ci0rICB9Ci0rICBpbnQzMl90IGRpc3AoKSBjb25zdCB7Ci0rICAg IE1PWl9BU1NFUlQodGFnID09IE1FTSk7Ci0rICAgIHJldHVybiBvZmZzZXQ7Ci0rICB9Ci0rCi0r ICBpbnQzMl90IGJhc2UoKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQodGFnID09IE1FTSk7Ci0r ICAgIHJldHVybiByZWc7Ci0rICB9Ci0rICBSZWdpc3RlciBiYXNlUmVnKCkgY29uc3QgewotKyAg ICBNT1pfQVNTRVJUKHRhZyA9PSBNRU0pOwotKyAgICByZXR1cm4gUmVnaXN0ZXI6OkZyb21Db2Rl KHJlZyk7Ci0rICB9Ci0rfTsKLSsKLSsvLyBCdWcgMjAzNDA2NCBjb2xsYXBzZWQgdGhlIHBlci1i dWZmZXIgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gb2YKLSsvLyBBc3NlbWJsZXJCdWZmZXJX aXRoQ29uc3RhbnRQb29scyBpbnRvIEFzc2VtYmxlckJ1ZmZlclNldHRpbmdzLCBhbmQgcmVkdWNl ZAotKy8vIHRoZSBydW50aW1lIGN0b3IgdG8gKHBvb2xNYXhPZmZzZXQsIG5vcEZpbGwpLiBpbnN0 QnVmZmVyQWxpZ24gYW5kIHRoZQotKy8vIE51bVNob3J0QnJhbmNoUmFuZ2VzIHRlbXBsYXRlIGFy ZyB3ZXJlIGRyb3BwZWQ6IFBQQzY0IHByZXZpb3VzbHkgcGFzc2VkCi0rLy8gaW5zdEJ1ZmZlckFs aWduPTggKHVudXNlZCBvbiB0aGlzIGJhY2tlbmQ7IHBvb2wgZW50cmllcyBhcmUgNC1ieXRlIGFs aWduZWQpCi0rLy8gYW5kIE51bVNob3J0QnJhbmNoUmFuZ2VzPTAuCi0rdXNpbmcgUFBDQnVmZmVy ID0ganM6OmppdDo6QXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbHM8Ci0rICAgIEluc3Ry dWN0aW9uLCBBc3NlbWJsZXIsCi0rICAgIGpzOjpqaXQ6OkFzc2VtYmxlckJ1ZmZlclNldHRpbmdz ewotKyAgICAgICAgLmluc3RTaXplID0gNCwKLSsgICAgICAgIC5ndWFyZFNpemUgPSAxLAotKyAg ICAgICAgLmhlYWRlclNpemUgPSAxLAotKyAgICAgICAgLnBjQmlhcyA9IDAsCi0rICAgICAgICAu YWxpZ25GaWxsSW5zdCA9IE5vcEluc3QsCi0rICAgICAgICAubm9wRmlsbEluc3QgPSBOb3BJbnN0 LAotKyAgICB9PjsKLSsKLSsvLyBJbmhlcml0cyBleGVjdXRhYmxlQ29weSgpIGFuZCBhcHBlbmRS YXdDb2RlKCkgZnJvbQotKy8vIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2xzLCB3aGlj aCBhc3NlcnQgcG9vbCBpcyBmbHVzaGVkLgotK2NsYXNzIFBQQ0J1ZmZlcldpdGhFeGVjdXRhYmxl Q29weSA6IHB1YmxpYyBQUENCdWZmZXIgewotKyBwdWJsaWM6Ci0rICBQUENCdWZmZXJXaXRoRXhl Y3V0YWJsZUNvcHkoc2l6ZV90IHBvb2xNYXhPZmZzZXQsIHVuc2lnbmVkIG5vcEZpbGwpCi0rICAg ICAgOiBQUENCdWZmZXIocG9vbE1heE9mZnNldCwgbm9wRmlsbCkge30KLSt9OwotKwotK2NsYXNz IEFzc2VtYmxlciA6IHB1YmxpYyBBc3NlbWJsZXJTaGFyZWQgewotKyBwdWJsaWM6Ci0rICAvLyBU cmFwIHRhZ3MgZW5jb2RlZCBpbiB0aGUgbG93IGJpdHMgb2YgYSB0cmFwIHdvcmQuCi0rICAvLyBG cmVlQlNEIGFuZCBvdGhlcnMgbWF5IHVzZSByMSBpbiB0aGVpciB0cmFwIHdvcmQsIHNvIGJpdCAw IGlzIGF2b2lkZWQuCi0rICBlbnVtIFRyYXBUYWcgewotKyAgICBCVGFnID0gMiwKLSsgICAgQkNU YWcgPSA0LAotKyAgICBDYWxsVGFnID0gNiwKLSsgICAgRGVidWdUYWcwID0gMTAsCi0rICAgIERl YnVnVGFnMSA9IDEyLAotKyAgICBEZWJ1Z1RhZzIgPSAxNAotKyAgfTsKLSsKLSsgIC8vIFBvb2wg bG9hZCB0eXBlcyBlbmNvZGVkIGluIGJpdHMgMjEtMjIgb2YgcG9vbCBoaW50IHdvcmRzLgotKyAg Ly8gVXNlZCBieSBJbnNlcnRJbmRleEludG9UYWcgLyBQYXRjaENvbnN0YW50UG9vbExvYWQuCi0r ICBlbnVtIFBvb2xMb2FkVHlwZSB7Ci0rICAgIFBvb2xMb2FkRlBSNjQgPSAxLCAgICAvLyBsZmQg ZkQsIG9mZnNldChyQmFzZSkKLSsgICAgUG9vbExvYWRTaW1kMTI4ID0gMiwgIC8vIGFkZGkgckJh c2UsIHJCYXNlLCBvZmZzZXQ7IGx4dnggdnNELCAwLCByQmFzZQotKyAgICBQb29sTG9hZEZQUjMy ID0gMyAgICAgLy8gbGZzIGZELCBvZmZzZXQockJhc2UpIOKAlCBhdXRvLWV4cGFuZHMgdG8gZG91 YmxlCi0rICB9OwotKwotKyAgZW51bSBCcmFuY2hCaXRzIHsKLSsgICAgQnJhbmNoT25DbGVhciA9 IDB4MDQsCi0rICAgIEJyYW5jaE9uU2V0ID0gMHgwYywKLSsgICAgQnJhbmNoT3B0aW9uTWFzayA9 IDB4MGYsCi0rICAgIEJyYW5jaE9wdGlvbkludmVydCA9IDB4MDgKLSsgIH07Ci0rCi0rICAvLyBQ UEMgY29uZGl0aW9uIGVuY29kaW5nLiBUaGUgdG9wIG55YmJsZSBpcyB0aGUgb2Zmc2V0IHRvIHRo ZSBDUiBmaWVsZAotKyAgLy8gKHRoZSB4IGluIEJJRio0K3gpLCBhbmQgdGhlIGJvdHRvbSBpcyB0 aGUgQk8gZmllbGQuCi0rICAvLyBTeW50aGV0aWMgZmxhZ3Mgc2l0IGluIHRoZSBNU0IgYW5kIGFy ZSBtYXNrZWQgb2ZmIGJlZm9yZSB1c2UuCi0rICBlbnVtIENvbmRpdGlvbiB7Ci0rICAgIENvbmRp dGlvblVuc2lnbmVkID0gMHgxMDAsCi0rICAgIENvbmRpdGlvblVuc2lnbmVkSGFuZGxlZCA9IDB4 MmZmLAotKyAgICBDb25kaXRpb25aZXJvID0gMHg0MDAsCi0rICAgIENvbmRpdGlvbk9ubHlYRVIg PSAweDIwMCwKLSsgICAgQ29uZGl0aW9uWEVSQ0EgPSAweDIzYywKLSsgICAgQ29uZGl0aW9uWEVS TkNBID0gMHgyMzQsCi0rICAgIENvbmRpdGlvblhFUk9WID0gMHgyMWMsCi0rCi0rICAgIEVxdWFs ID0gMHgyYywKLSsgICAgTm90RXF1YWwgPSAweDI0LAotKyAgICBHcmVhdGVyVGhhbiA9IDB4MWMs Ci0rICAgIEdyZWF0ZXJUaGFuT3JFcXVhbCA9IDB4MDQsCi0rICAgIExlc3NUaGFuID0gMHgwYywK LSsgICAgTGVzc1RoYW5PckVxdWFsID0gMHgxNCwKLSsKLSsgICAgQWJvdmUgPSBHcmVhdGVyVGhh biB8IENvbmRpdGlvblVuc2lnbmVkLAotKyAgICBBYm92ZU9yRXF1YWwgPSBHcmVhdGVyVGhhbk9y RXF1YWwgfCBDb25kaXRpb25VbnNpZ25lZCwKLSsgICAgQmVsb3cgPSBMZXNzVGhhbiB8IENvbmRp dGlvblVuc2lnbmVkLAotKyAgICBCZWxvd09yRXF1YWwgPSBMZXNzVGhhbk9yRXF1YWwgfCBDb25k aXRpb25VbnNpZ25lZCwKLSsKLSsgICAgU2lnbmVkID0gTGVzc1RoYW4gfCBDb25kaXRpb25aZXJv LAotKyAgICBOb3RTaWduZWQgPSBHcmVhdGVyVGhhbk9yRXF1YWwgfCBDb25kaXRpb25aZXJvLAot KyAgICBaZXJvID0gRXF1YWwgfCBDb25kaXRpb25aZXJvLAotKyAgICBOb25aZXJvID0gTm90RXF1 YWwgfCBDb25kaXRpb25aZXJvLAotKwotKyAgICBPdmVyZmxvdyA9IENvbmRpdGlvblhFUk9WLAot KyAgICBOb3RPdmVyZmxvdyA9IENvbmRpdGlvbk9ubHlYRVIgfCBMZXNzVGhhbk9yRXF1YWwsCi0r ICAgIENhcnJ5U2V0ID0gQ29uZGl0aW9uWEVSQ0EsCi0rICAgIENhcnJ5Q2xlYXIgPSBDb25kaXRp b25YRVJOQ0EsCi0rCi0rICAgIEFsd2F5cyA9IDB4MWYsCi0rICAgIFNPQml0ID0gMHgzYywKLSsg ICAgTlNPQml0ID0gMHgzNAotKyAgfTsKLSsKLSsgIGVudW0gRG91YmxlQ29uZGl0aW9uIHsKLSsg ICAgRG91YmxlQ29uZGl0aW9uVW5vcmRlcmVkID0gMHgxMDAsCi0rICAgIERvdWJsZU9yZGVyZWQg PSAweDM0LAotKyAgICBEb3VibGVFcXVhbCA9IDB4MmMsCi0rICAgIERvdWJsZU5vdEVxdWFsID0g MHgyNCwKLSsgICAgRG91YmxlR3JlYXRlclRoYW4gPSAweDFjLAotKyAgICBEb3VibGVHcmVhdGVy VGhhbk9yRXF1YWwgPSAweDA0LAotKyAgICBEb3VibGVMZXNzVGhhbiA9IDB4MGMsCi0rICAgIERv dWJsZUxlc3NUaGFuT3JFcXVhbCA9IDB4MTQsCi0rICAgIERvdWJsZVVub3JkZXJlZCA9IDB4M2Ms Ci0rICAgIERvdWJsZUVxdWFsT3JVbm9yZGVyZWQgPSBEb3VibGVFcXVhbCB8IERvdWJsZUNvbmRp dGlvblVub3JkZXJlZCwKLSsgICAgRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCA9IERvdWJsZU5v dEVxdWFsIHwgRG91YmxlQ29uZGl0aW9uVW5vcmRlcmVkLAotKyAgICBEb3VibGVHcmVhdGVyVGhh bk9yVW5vcmRlcmVkID0gRG91YmxlR3JlYXRlclRoYW4gfCBEb3VibGVDb25kaXRpb25Vbm9yZGVy ZWQsCi0rICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkID0KLSsgICAgICAg IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCB8IERvdWJsZUNvbmRpdGlvblVub3JkZXJlZCwKLSsg ICAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCA9IERvdWJsZUxlc3NUaGFuIHwgRG91YmxlQ29u ZGl0aW9uVW5vcmRlcmVkLAotKyAgICBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCA9 Ci0rICAgICAgICBEb3VibGVMZXNzVGhhbk9yRXF1YWwgfCBEb3VibGVDb25kaXRpb25Vbm9yZGVy ZWQsCi0rICB9OwotKwotKyAgZW51bSBKdW1wT3JDYWxsIHsgQnJhbmNoSXNKdW1wLCBCcmFuY2hJ c0NhbGwgfTsKLSsKLSsgIGVudW0gTGlua0JpdCB7Ci0rICAgIERvbnRMaW5rQiA9IDAsCi0rICAg IExpbmtCID0gMSwKLSsgIH07Ci0rCi0rICBlbnVtIExpa2VseUJpdCB7Ci0rICAgIE5vdExpa2Vs eUIgPSAwLAotKyAgICBMaWtlbHlCID0gMSwKLSsgIH07Ci0rCi0rICBlbnVtIEJyYW5jaEFkZHJl c3NUeXBlIHsKLSsgICAgUmVsYXRpdmVCcmFuY2ggPSAwLAotKyAgICBBYnNvbHV0ZUJyYW5jaCA9 IDIsCi0rICB9OwotKwotKyAgZW51bSBGbG9hdEZvcm1hdCB7IFNpbmdsZUZsb2F0LCBEb3VibGVG bG9hdCB9OwotKyAgZW51bSBGbG9hdFRlc3RLaW5kIHsgVGVzdEZvclRydWUsIFRlc3RGb3JGYWxz ZSB9OwotKwotKyAgQnVmZmVyT2Zmc2V0IG5leHRPZmZzZXQoKSB7IHJldHVybiBtX2J1ZmZlci5u ZXh0T2Zmc2V0KCk7IH0KLSsKLSsgcHJvdGVjdGVkOgotKyAgSW5zdHJ1Y3Rpb24qIGVkaXRTcmMo QnVmZmVyT2Zmc2V0IGJvKSB7Ci0rICAgIGlmICghYm8uYXNzaWduZWQoKSkgewotKyAgICAgIC8v IFVuZGVyIE9PTSwgd3JpdGVJbnN0IG1heSByZXR1cm4gYW4gdW5hc3NpZ25lZCBCdWZmZXJPZmZz ZXQuCi0rICAgICAgLy8gUmV0dXJuIGEgZHVtbXkgd3JpdGFibGUgYXJlYSBzbyBjYWxsZXJzIChX cml0ZUxvYWQ2NEluc3RydWN0aW9ucykKLSsgICAgICAvLyBjYW4gcHJvY2VlZCBoYXJtbGVzc2x5 OyB0aGUgY29tcGlsYXRpb24gd2lsbCBiZSBkaXNjYXJkZWQuCi0rICAgICAgc3RhdGljIHVpbnQz Ml90IG9vbUR1bW15X1s4XTsKLSsgICAgICByZXR1cm4gKEluc3RydWN0aW9uKilvb21EdW1teV87 Ci0rICAgIH0KLSsgICAgcmV0dXJuIG1fYnVmZmVyLmdldEluc3QoYm8pOwotKyAgfQotKwotKyAg c3RydWN0IFJlbGF0aXZlUGF0Y2ggewotKyAgICBCdWZmZXJPZmZzZXQgb2Zmc2V0OwotKyAgICB2 b2lkKiB0YXJnZXQ7Ci0rICAgIFJlbG9jYXRpb25LaW5kIGtpbmQ7Ci0rCi0rICAgIFJlbGF0aXZl UGF0Y2goQnVmZmVyT2Zmc2V0IG9mZnNldCwgdm9pZCogdGFyZ2V0LCBSZWxvY2F0aW9uS2luZCBr aW5kKQotKyAgICAgICAgOiBvZmZzZXQob2Zmc2V0KSwgdGFyZ2V0KHRhcmdldCksIGtpbmQoa2lu ZCkge30KLSsgIH07Ci0rCi0rICBqczo6VmVjdG9yPFJlbGF0aXZlUGF0Y2gsIDgsIFN5c3RlbUFs bG9jUG9saWN5PiBqdW1wc187Ci0rCi0rICBDb21wYWN0QnVmZmVyV3JpdGVyIGp1bXBSZWxvY2F0 aW9uc187Ci0rICBDb21wYWN0QnVmZmVyV3JpdGVyIGRhdGFSZWxvY2F0aW9uc187Ci0rCi0rICBQ UENCdWZmZXJXaXRoRXhlY3V0YWJsZUNvcHkgbV9idWZmZXI7Ci0rCi0rI2lmZGVmIEpTX0pJVFNQ RVcKLSsgIFNwcmludGVyKiBwcmludGVyOwotKyNlbmRpZgotKwotKyBwdWJsaWM6Ci0rICAvLyBX aGljaCBhYnNvbHV0ZSBiaXQgbnVtYmVyIGRvZXMgYSBDUiArIENvbmRpdGlvbiBwYWlyIHJlZmVy IHRvPwotKyAgc3RhdGljIHVpbnQ4X3QgY3JCaXQoQ1JlZ2lzdGVySUQgY3IsIENvbmRpdGlvbiBj b25kKSB7Ci0rICAgIHJldHVybiAoY3IgPDwgMikgKyAoKGNvbmQgJiAweGYwKSA+PiA0KTsKLSsg IH0KLSsgIHN0YXRpYyB1aW50OF90IGNyQml0KENSZWdpc3RlcklEIGNyLCBEb3VibGVDb25kaXRp b24gY29uZCkgewotKyAgICByZXR1cm4gKGNyIDw8IDIpICsgKChjb25kICYgMHhmMCkgPj4gNCk7 Ci0rICB9Ci0rCi0rICBBc3NlbWJsZXIoKQotKyAgICAgIDogbV9idWZmZXIoLyogcG9vbE1heE9m ZnNldCAqLyA4MTkyLCAvKiBub3BGaWxsICovIDApLAotKyNpZmRlZiBKU19KSVRTUEVXCi0rICAg ICAgICBwcmludGVyKG51bGxwdHIpLAotKyNlbmRpZgotKyAgICAgICAgaXNGaW5pc2hlZChmYWxz ZSksCi0rICAgICAgICBzY3JhdGNoX3JlZ2lzdGVyX2xpc3RfKCgxIDw8IFJlZ2lzdGVyczo6cjEx KSB8ICgxIDw8IFJlZ2lzdGVyczo6cjEyKSkgewotKyAgfQotKwotKyAgdm9pZCBzZXRVbmxpbWl0 ZWRCdWZmZXIoKSB7IG1fYnVmZmVyLnNldFVubGltaXRlZCgpOyB9Ci0rCi0rICAvLyBDb25zdGFu dCBwb29sIGNhbGxiYWNrcyByZXF1aXJlZCBieSBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQ b29scy4KLSsgIHN0YXRpYyB2b2lkIEluc2VydEluZGV4SW50b1RhZyh1aW50OF90KiBsb2FkLCB1 aW50MzJfdCBpbmRleCk7Ci0rICBzdGF0aWMgYm9vbCBQYXRjaENvbnN0YW50UG9vbExvYWQodm9p ZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFkZHIpOwotKyAgc3RhdGljIHZvaWQgV3JpdGVQ b29sR3VhcmQoQnVmZmVyT2Zmc2V0IGJyYW5jaCwgSW5zdHJ1Y3Rpb24qIGluc3QsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJPZmZzZXQgZGVzdCk7Ci0rICBzdGF0aWMgdm9p ZCBXcml0ZVBvb2xIZWFkZXIodWludDhfdCogc3RhcnQsIGpzOjpqaXQ6OlBvb2wqIHAsIGJvb2wg aXNOYXR1cmFsKTsKLSsgIHN0YXRpYyB2b2lkIFBhdGNoU2hvcnRSYW5nZUJyYW5jaFRvVmVuZWVy KFBQQ0J1ZmZlciosIHVuc2lnbmVkIHJhbmdlSWR4LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQnVmZmVyT2Zmc2V0IGRlYWRsaW5lLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyT2Zmc2V0IHZlbmVlcik7Ci0r Ci0rICBzdGF0aWMgQ29uZGl0aW9uIEludmVydENvbmRpdGlvbihDb25kaXRpb24gY29uZCk7Ci0r ICBzdGF0aWMgRG91YmxlQ29uZGl0aW9uIEludmVydENvbmRpdGlvbihEb3VibGVDb25kaXRpb24g Y29uZCk7Ci0rCi0rICB2b2lkIHdyaXRlUmVsb2NhdGlvbihCdWZmZXJPZmZzZXQgc3JjKSB7Ci0r ICAgIGp1bXBSZWxvY2F0aW9uc18ud3JpdGVVbnNpZ25lZChzcmMuZ2V0T2Zmc2V0KCkpOwotKyAg fQotKwotKyAgdm9pZCB3cml0ZURhdGFSZWxvY2F0aW9uKEltbUdDUHRyIHB0cikgewotKyAgICBp ZiAocHRyLnZhbHVlKSB7Ci0rICAgICAgaWYgKGdjOjpJc0luc2lkZU51cnNlcnkocHRyLnZhbHVl KSkgewotKyAgICAgICAgZW1iZWRzTnVyc2VyeVBvaW50ZXJzXyA9IHRydWU7Ci0rICAgICAgfQot KyAgICAgIGRhdGFSZWxvY2F0aW9uc18ud3JpdGVVbnNpZ25lZChuZXh0T2Zmc2V0KCkuZ2V0T2Zm c2V0KCkpOwotKyAgICB9Ci0rICB9Ci0rICB2b2lkIHdyaXRlRGF0YVJlbG9jYXRpb24oQnVmZmVy T2Zmc2V0IGJvLCBJbW1HQ1B0ciBwdHIpIHsKLSsgICAgaWYgKHB0ci52YWx1ZSkgewotKyAgICAg IGlmIChnYzo6SXNJbnNpZGVOdXJzZXJ5KHB0ci52YWx1ZSkpIHsKLSsgICAgICAgIGVtYmVkc051 cnNlcnlQb2ludGVyc18gPSB0cnVlOwotKyAgICAgIH0KLSsgICAgICBkYXRhUmVsb2NhdGlvbnNf LndyaXRlVW5zaWduZWQoYm8uZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICB9Ci0rCi0rICB2b2lk IGFzc2VydE5vR0NUaGluZ3MoKSBjb25zdCB7Ci0rI2lmZGVmIERFQlVHCi0rICAgIE1PWl9BU1NF UlQoZGF0YVJlbG9jYXRpb25zXy5sZW5ndGgoKSA9PSAwKTsKLSsgICAgZm9yIChhdXRvJiBqIDog anVtcHNfKSB7Ci0rICAgICAgTU9aX0FTU0VSVChqLmtpbmQgPT0gUmVsb2NhdGlvbktpbmQ6OkhB UkRDT0RFRCk7Ci0rICAgIH0KLSsjZW5kaWYKLSsgIH0KLSsKLSsgIGJvb2wgb29tKCkgY29uc3Q7 Ci0rCi0rICB2b2lkIHNldFByaW50ZXIoU3ByaW50ZXIqIHNwKSB7Ci0rI2lmZGVmIEpTX0pJVFNQ RVcKLSsgICAgcHJpbnRlciA9IHNwOwotKyNlbmRpZgotKyAgfQotKwotKyNpZmRlZiBKU19KSVRT UEVXCi0rICBpbmxpbmUgdm9pZCBzcGV3KGNvbnN0IGNoYXIqIGZtdCwgLi4uKSBNT1pfRk9STUFU X1BSSU5URigyLCAzKSB7Ci0rICAgIGlmIChNT1pfVU5MSUtFTFkocHJpbnRlciB8fCBKaXRTcGV3 RW5hYmxlZChKaXRTcGV3X0NvZGVnZW4pKSkgewotKyAgICAgIHZhX2xpc3QgdmE7Ci0rICAgICAg dmFfc3RhcnQodmEsIGZtdCk7Ci0rICAgICAgc3Bld1ZBKGZtdCwgdmEpOwotKyAgICAgIHZhX2Vu ZCh2YSk7Ci0rICAgIH0KLSsgIH0KLSsgIE1PWl9DT0xEIHZvaWQgc3Bld1ZBKGNvbnN0IGNoYXIq IGZtdCwgdmFfbGlzdCB2YSkgTU9aX0ZPUk1BVF9QUklOVEYoMiwgMCkgewotKyAgICBjaGFyIGJ1 ZlsyMDBdOwotKyAgICBpbnQgaSA9IFZzcHJpbnRmTGl0ZXJhbChidWYsIGZtdCwgdmEpOwotKyAg ICBpZiAoaSA+IC0xKSB7Ci0rICAgICAgaWYgKHByaW50ZXIpIHsKLSsgICAgICAgIHByaW50ZXIt PnByaW50ZigiJXNcbiIsIGJ1Zik7Ci0rICAgICAgfQotKyAgICAgIGpzOjpqaXQ6OkppdFNwZXco anM6OmppdDo6Sml0U3Bld19Db2RlZ2VuLCAiJXMiLCBidWYpOwotKyAgICB9Ci0rICB9Ci0rI2Vs c2UKLSsgIE1PWl9BTFdBWVNfSU5MSU5FIHZvaWQgc3Bldyhjb25zdCBjaGFyKiBmbXQsIC4uLikg TU9aX0ZPUk1BVF9QUklOVEYoMiwgMykge30KLSsjZW5kaWYKLSsKLSsgIFJlZ2lzdGVyIGdldFN0 YWNrUG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIFN0YWNrUG9pbnRlcjsgfQotKwotKyBwcm90ZWN0 ZWQ6Ci0rICBib29sIGlzRmluaXNoZWQ7Ci0rCi0rIHB1YmxpYzoKLSsgIHN0YXRpYyB1aW50cHRy X3QgR2V0UG9pbnRlcih1aW50OF90Kik7Ci0rICB2b2lkIGZsdXNoKCkgewotKyAgICBNT1pfQVNT RVJUKCFpc0ZpbmlzaGVkKTsKLSsgICAgbV9idWZmZXIuZmx1c2hQb29sKCk7Ci0rICB9Ci0rICAv LyBJbmhpYml0IHBvb2wgZmx1c2hlcyBmb3IgdGhlIG5leHQgbWF4SW5zdCBpbnN0cnVjdGlvbnMu IE1pcnJvcnMgdGhlCi0rICAvLyBBUk0vQVJNNjQgd3JhcHBlcnM7IGxldHMgc2hhcmVkIGNvZGUg KGUuZy4gV2FzbUZyYW1lSXRlciBlcGlsb2d1ZXMKLSsgIC8vIHRoYXQgbmVlZCBzdGF0aWMgYnl0 ZSBkaXN0YW5jZXMgYmV0d2VlbiBjdXJyZW50T2Zmc2V0KCkgY2FwdHVyZXMpCi0rICAvLyBmZW5j ZSBhIHNtYWxsIGluc3RydWN0aW9uIHdpbmRvdyB3aXRob3V0IHJlYWNoaW5nIGludG8gbV9idWZm ZXIuCi0rICB2b2lkIGVudGVyTm9Qb29sKHNpemVfdCBtYXhJbnN0KSB7IG1fYnVmZmVyLmVudGVy Tm9Qb29sKG1heEluc3QpOyB9Ci0rICB2b2lkIGxlYXZlTm9Qb29sKCkgeyBtX2J1ZmZlci5sZWF2 ZU5vUG9vbCgpOyB9Ci0rICB2b2lkIGZpbmlzaCgpOwotKyAgYm9vbCBhcHBlbmRSYXdDb2RlKGNv bnN0IHVpbnQ4X3QqIGNvZGUsIHNpemVfdCBudW1CeXRlcyk7Ci0rICBib29sIHJlc2VydmUoc2l6 ZV90IHNpemUpOwotKyAgYm9vbCBzd2FwQnVmZmVyKHdhc206OkJ5dGVzJiBieXRlcyk7Ci0rICB2 b2lkIGV4ZWN1dGFibGVDb3B5KHZvaWQqIGJ1ZmZlcik7Ci0rICB2b2lkIGNvcHlKdW1wUmVsb2Nh dGlvblRhYmxlKHVpbnQ4X3QqIGRlc3QpOwotKyAgdm9pZCBjb3B5RGF0YVJlbG9jYXRpb25UYWJs ZSh1aW50OF90KiBkZXN0KTsKLSsKLSsgIHNpemVfdCBzaXplKCkgY29uc3Q7Ci0rICBzaXplX3Qg anVtcFJlbG9jYXRpb25UYWJsZUJ5dGVzKCkgY29uc3Q7Ci0rICBzaXplX3QgZGF0YVJlbG9jYXRp b25UYWJsZUJ5dGVzKCkgY29uc3Q7Ci0rICBzaXplX3QgYnl0ZXNOZWVkZWQoKSBjb25zdDsKLSsK LSsgIEJ1ZmZlck9mZnNldCB3cml0ZUluc3QodWludDMyX3QgeCwgdWludDMyX3QqIGRlc3QgPSBu dWxscHRyKTsKLSsgIHN0YXRpYyB2b2lkIFdyaXRlSW5zdFN0YXRpYyh1aW50MzJfdCB4LCB1aW50 MzJfdCogZGVzdCk7Ci0rCi0rIHB1YmxpYzoKLSsgIEJ1ZmZlck9mZnNldCBoYWx0aW5nQWxpZ24o aW50IGFsaWdubWVudCk7Ci0rICBCdWZmZXJPZmZzZXQgbm9wQWxpZ24oaW50IGFsaWdubWVudCk7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfbm9wKCk7Ci0rCi0rICAvLyAtLS0gSW5zdHJ1Y3Rpb24gZW1p c3Npb24gKGRlY2xhcmF0aW9ucyBvbmx5LCBpbXBsZW1lbnRlZCBpbiBsYXRlciBjb21taXRzKQot KwotKyAgLy8gQnJhbmNoIGluc3RydWN0aW9ucy4KLSsgIHVpbnQxNl90IGNvbXB1dGVDb25kaXRp b25Db2RlKENvbmRpdGlvbiBvcCwgQ1JlZ2lzdGVySUQgY3IgPSBjcjApOwotKyAgdWludDE2X3Qg Y29tcHV0ZUNvbmRpdGlvbkNvZGUoRG91YmxlQ29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNy ID0gY3IwKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19iKEpPZmZJbW0yNiBvZmYsIEJyYW5jaEFkZHJl c3NUeXBlIGJhdCA9IFJlbGF0aXZlQnJhbmNoLAotKyAgICAgICAgICAgICAgICAgICAgTGlua0Jp dCBsYiA9IERvbnRMaW5rQik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfYihpbnQzMl90IG9mZiwgQnJh bmNoQWRkcmVzc1R5cGUgYmF0ID0gUmVsYXRpdmVCcmFuY2gsCi0rICAgICAgICAgICAgICAgICAg ICBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19ibHIoTGlua0Jp dCBsYiA9IERvbnRMaW5rQik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfYmN0cihMaW5rQml0IGxiID0g RG9udExpbmtCKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19iYyhCT2ZmSW1tMTYgb2ZmLCBDb25kaXRp b24gY29uZCwgQ1JlZ2lzdGVySUQgY3IgPSBjcjAsCi0rICAgICAgICAgICAgICAgICAgICAgTGlr ZWx5Qml0IGxrYiA9IE5vdExpa2VseUIsIExpbmtCaXQgbGIgPSBEb250TGlua0IpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX2JjKGludDE2X3Qgb2ZmLCBDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQg Y3IgPSBjcjAsCi0rICAgICAgICAgICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiA9IE5vdExpa2Vs eUIsIExpbmtCaXQgbGIgPSBEb250TGlua0IpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2JjKEJPZmZJ bW0xNiBvZmYsIERvdWJsZUNvbmRpdGlvbiBjb25kLCBDUmVnaXN0ZXJJRCBjciA9IGNyMCwKLSsg ICAgICAgICAgICAgICAgICAgICBMaWtlbHlCaXQgbGtiID0gTm90TGlrZWx5QiwgTGlua0JpdCBs YiA9IERvbnRMaW5rQik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfYmMoaW50MTZfdCBvZmYsIERvdWJs ZUNvbmRpdGlvbiBjb25kLCBDUmVnaXN0ZXJJRCBjciA9IGNyMCwKLSsgICAgICAgICAgICAgICAg ICAgICBMaWtlbHlCaXQgbGtiID0gTm90TGlrZWx5QiwgTGlua0JpdCBsYiA9IERvbnRMaW5rQik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfYmNjdHIoQ29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNy ID0gY3IwLAotKyAgICAgICAgICAgICAgICAgICAgICAgIExpa2VseUJpdCBsa2IgPSBOb3RMaWtl bHlCLCBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19iY2N0cihE b3VibGVDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3IgPSBjcjAsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiA9IE5vdExpa2VseUIsIExpbmtCaXQgbGIgPSBEb250 TGlua0IpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2JjKGludDE2X3Qgb2ZmLCB1aW50MTZfdCBvcCwg TGlrZWx5Qml0IGxrYiA9IE5vdExpa2VseUIsCi0rICAgICAgICAgICAgICAgICAgICAgTGlua0Jp dCBsYiA9IERvbnRMaW5rQik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfYmNjdHIodWludDE2X3Qgb3As IExpa2VseUJpdCBsa2IgPSBOb3RMaWtlbHlCLAotKyAgICAgICAgICAgICAgICAgICAgICAgIExp bmtCaXQgbGIgPSBEb250TGlua0IpOwotKwotKyAgLy8gU1BSIG9wZXJhdGlvbnMuCi0rICBCdWZm ZXJPZmZzZXQgYXNfbXRzcHIoU1BSZWdpc3RlcklEIHNwciwgUmVnaXN0ZXIgcmEpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX21mc3ByKFJlZ2lzdGVyIHJkLCBTUFJlZ2lzdGVySUQgc3ByKTsKLSsKLSsg IC8vIENSIG9wZXJhdGlvbnMuCi0rICBCdWZmZXJPZmZzZXQgYXNfY3JhbmQodWludDhfdCB0LCB1 aW50OF90IGEsIHVpbnQ4X3QgYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY3JhbmRjKHVpbnQ4X3Qg dCwgdWludDhfdCBhLCB1aW50OF90IGIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2Nyb3IodWludDhf dCB0LCB1aW50OF90IGEsIHVpbnQ4X3QgYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY3JvcmModWlu dDhfdCB0LCB1aW50OF90IGEsIHVpbnQ4X3QgYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY3J4b3Io dWludDhfdCB0LCB1aW50OF90IGEsIHVpbnQ4X3QgYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbXRj cmYodWludDMyX3QgbWFzaywgUmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX21mb2Ny ZihSZWdpc3RlciByZCwgQ1JlZ2lzdGVySUQgY3Jmcyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbWNy eHJ4KENSZWdpc3RlcklEIGNydCk7Ci0rCi0rICAvLyBDb21wYXJlIGluc3RydWN0aW9ucy4KLSsg IEJ1ZmZlck9mZnNldCBhc19jbXBkKENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgUmVnaXN0 ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGRpKENSZWdpc3RlcklEIGNyLCBSZWdpc3Rl ciByYSwgaW50MTZfdCBpbSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY21wbGQoQ1JlZ2lzdGVySUQg Y3IsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY21wbGRp KENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7Ci0rICBCdWZmZXJPZmZz ZXQgYXNfY21wdyhDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsg IEJ1ZmZlck9mZnNldCBhc19jbXB3aShDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIGludDE2 X3QgaW0pOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGx3KENSZWdpc3RlcklEIGNyLCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGx3aShDUmVnaXN0ZXJJ RCBjciwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGQo UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jbXBkaShSZWdp c3RlciByYSwgaW50MTZfdCBpbSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY21wbGQoUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jbXBsZGkoUmVnaXN0ZXIgcmEs IGludDE2X3QgaW0pOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcHcoUmVnaXN0ZXIgcmEsIFJlZ2lz dGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jbXB3aShSZWdpc3RlciByYSwgaW50MTZfdCBp bSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfY21wbHcoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsK LSsgIEJ1ZmZlck9mZnNldCBhc19jbXBsd2koUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pOwotKwot KyAgLy8gQUxVICh0aHJlZS1yZWdpc3RlcikuCi0rICBCdWZmZXJPZmZzZXQgYXNfYWRkKFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2Fk ZGMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZz ZXQgYXNfYWRkZShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc19zdWJmKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3N1YmZjKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVn aXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3N1YmZlKFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX25lZyhSZWdpc3RlciByZCwg UmVnaXN0ZXIgcnMpOwotKwotKyAgQnVmZmVyT2Zmc2V0IGFzX211bGxkKFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX211bGhkKFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX211 bGhkdShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc19tdWxsZG8oUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfbXVsbHcoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3Rl ciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbXVsaHd1KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBy YSwgUmVnaXN0ZXIgcmIpOwotKwotKyAgQnVmZmVyT2Zmc2V0IGFzX2RpdmQoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZGl2ZHUoUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNf ZGl2dyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc19kaXZ3dShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsg IC8vIFBPV0VSOSBtb2R1bG8uCi0rICBCdWZmZXJPZmZzZXQgYXNfbW9kc2QoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbW9kc3coUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNf bW9kdWQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfbW9kdXcoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0r Ci0rICAvLyBBTFUgaW1tZWRpYXRlLgotKyAgQnVmZmVyT2Zmc2V0IGFzX2FkZGkoUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltLAotKyAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBhY3R1YWxseV9saSA9IGZhbHNlKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19hZGRpcyhSZWdpc3Rl ciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBhY3R1YWxseV9saXMgPSBmYWxzZSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbXVsbGkoUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19z dWJmaWMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKTsKLSsKLSsgIC8vIEFM VSB1bmFyeS9leHRlbmRlZC4KLSsgIEJ1ZmZlck9mZnNldCBhc19jbnRsencoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jbnRsemQoUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJhKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jbnR0emQoUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJhKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19jbnR0encoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJhKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19wb3BjbnRkKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBy cyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfcG9wY250dyhSZWdpc3RlciByYSwgUmVnaXN0ZXIgcnMp OwotKyAgLy8gUE9XRVIxMCBieXRlLXJldmVyc2UgZG91Ymxld29yZDogcmEgPSBic3dhcDY0KHJz KS4gMSBpbnNuIHJlcGxhY2luZyB0aGUKLSsgIC8vIFBPV0VSOSBtdHZzcmQgLyB4eGJyZCAvIG1m dnNyZCByb3VuZC10cmlwIGluIGJ5dGVTd2FwNjQuCi0rICBCdWZmZXJPZmZzZXQgYXNfYnJkKFJl Z2lzdGVyIHJhLCBSZWdpc3RlciBycyk7Ci0rICAvLyBQT1dFUjEwIGJ5dGUtcmV2ZXJzZSBlYWNo IGhhbGZ3b3JkICg0IGhhbGZ3b3JkcykgLyBlYWNoIHdvcmQgKDIgd29yZHMpCi0rICAvLyBpbiB0 aGUgNjQtYml0IGRvdWJsZXdvcmQuIFRoZSB3YXNtL2FzbSBjYWxsZXIgdXN1YWxseSBtYXNrcyBv cgotKyAgLy8gc2lnbi1leHRlbmRzIHRoZSBsb3cgaGFsZndvcmQvd29yZCBhZnRlcndhcmRzLgot KyAgQnVmZmVyT2Zmc2V0IGFzX2JyaChSZWdpc3RlciByYSwgUmVnaXN0ZXIgcnMpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX2JydyhSZWdpc3RlciByYSwgUmVnaXN0ZXIgcnMpOwotKwotKyAgLy8gQml0 IG9wZXJhdGlvbnMgKGxvZ2ljYWwsIHRocmVlLXJlZ2lzdGVyKS4KLSsgIEJ1ZmZlck9mZnNldCBh c19hbmRfKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX2FuZF9fcmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfbm9yKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0 ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX29yXyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMs IFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194b3JfKFJlZ2lzdGVyIHJkLCBSZWdp c3RlciBycywgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3NsdyhSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19zcncoUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNf c3JhdyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc19zbGQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYik7Ci0rICBC dWZmZXJPZmZzZXQgYXNfc3JkKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3NyYWQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdp c3RlciByYik7Ci0rCi0rICAvLyBCaXQgb3BlcmF0aW9ucyAobG9naWNhbCwgaW1tZWRpYXRlKS4K LSsgIEJ1ZmZlck9mZnNldCBhc19vcmkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCB1aW50MTZf dCBpbSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfb3JpcyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEs IHVpbnQxNl90IGltKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194b3JpKFJlZ2lzdGVyIHJkLCBSZWdp c3RlciByYSwgdWludDE2X3QgaW0pOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3hvcmlzKFJlZ2lzdGVy IHJkLCBSZWdpc3RlciByYSwgdWludDE2X3QgaW0pOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2FuZGlf cmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCB1aW50MTZfdCBpbSk7Ci0rCi0rICAvLyBTaWdu IGV4dGVuc2lvbi4KLSsgIEJ1ZmZlck9mZnNldCBhc19leHRzYihSZWdpc3RlciByZCwgUmVnaXN0 ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2V4dHNoKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBy cyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZXh0c3coUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzKTsK LSsgIEJ1ZmZlck9mZnNldCBhc19leHRzd19yYyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMpOwot KwotKyAgLy8gU2hpZnQvcm90YXRlIHdpdGggaW1tZWRpYXRlcy4KLSsgIEJ1ZmZlck9mZnNldCBh c19zcmF3aShSZWdpc3RlciBpZCwgUmVnaXN0ZXIgcnMsIHVpbnQ4X3Qgbik7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfc3JhZGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBpbnQgbik7Ci0rICBCdWZm ZXJPZmZzZXQgYXNfcmxkY2woUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYiwg dWludDhfdCBtYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfcmxkaWNsKFJlZ2lzdGVyIHJhLCBSZWdp c3RlciBycywgdWludDhfdCBzaCwgdWludDhfdCBtYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfcmxk aWNsX3JjKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgdWludDhfdCBtYik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfcmxkaWNyKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycywgdWlu dDhfdCBzaCwgdWludDhfdCBtYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfcmxkaWNyX3JjKFJlZ2lz dGVyIHJhLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgdWludDhfdCBtYik7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfcmx3aW5tKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgdWlu dDhfdCBtYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtZSk7Ci0rICBCdWZm ZXJPZmZzZXQgYXNfcmx3aW5tX3JjKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgdWludDhfdCBz aCwgdWludDhfdCBtYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtZSk7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfcmx3aW1pKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgdWlu dDhfdCBzaCwgdWludDhfdCBtYiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBt ZSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfcmxkaW1pKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywg dWludDhfdCBzaCwgdWludDhfdCBtYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfcmx3bm0oUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYiwgdWludDhfdCBtYiwKLSsgICAgICAgICAg ICAgICAgICAgICAgICB1aW50OF90IG1lKTsKLSsKLSsgIC8vIEludGVnZXIgbG9hZHMgKEQtZm9y bSkuCi0rICBCdWZmZXJPZmZzZXQgYXNfbGJ6KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50 MTZfdCBvZmYpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2xoYShSZWdpc3RlciByZCwgUmVnaXN0ZXIg cmIsIGludDE2X3Qgb2ZmKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19saHooUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJiLCBpbnQxNl90IG9mZik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbHdhKFJlZ2lzdGVy IHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2x3eihS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKLSsgIEJ1ZmZlck9mZnNldCBh c19sZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKLSsKLSsgIC8vIElu dGVnZXIgc3RvcmVzIChELWZvcm0pLgotKyAgQnVmZmVyT2Zmc2V0IGFzX3N0YihSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19zdGgoUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7Ci0rICBCdWZmZXJPZmZzZXQgYXNf c3R3KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOwotKyAgQnVmZmVyT2Zm c2V0IGFzX3N0ZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc19zdGR1KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYp OwotKwotKyAgLy8gSW50ZWdlciBsb2Fkcy9zdG9yZXMgKFgtZm9ybSwgaW5kZXhlZCkuCi0rICBC dWZmZXJPZmZzZXQgYXNfbGJ6eChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc19saGF4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVn aXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2xoengoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbHd6eChSZWdpc3RlciByZCwg UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIC8vIFgtZm9ybSBzaWduLWV4dGVuZGluZyB3 b3JkIGxvYWQuIFNpbmdsZS1pbnNuIGVxdWl2YWxlbnQgb2YgbHd6eCArIGV4dHN3LgotKyAgQnVm ZmVyT2Zmc2V0IGFzX2x3YXgoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfbHdhcngoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbGJhcngoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbGhhcngoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbGR4KFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2xk YXJ4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zm c2V0IGFzX3N0YngoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBC dWZmZXJPZmZzZXQgYXNfc3RiY3goUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBy Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3R3eChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19zdHdicngoUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3RoeChSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19zdGhjeChS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBh c19zdGR4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX3N0ZGN4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3N0d2N4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0 ZXIgcmIpOwotKwotKyAgLy8gSW50ZWdlciBzZWxlY3QuCi0rICAvLyBQT1dFUjEwIChJU0EgMy4x KS4gU2V0IFJUID0gMS8wIGJhc2VkIG9uIGEgQ1IgYml0LgotKyAgQnVmZmVyT2Zmc2V0IGFzX3Nl dGJjKFJlZ2lzdGVyIHJ0LCB1aW50MTZfdCBiYywgQ1JlZ2lzdGVySUQgY3IpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX3NldGJjcihSZWdpc3RlciBydCwgdWludDE2X3QgYmMsIENSZWdpc3RlcklEIGNy KTsKLSsgIEJ1ZmZlck9mZnNldCBhc19pc2VsKFJlZ2lzdGVyIHJ0LCBSZWdpc3RlciByYSwgUmVn aXN0ZXIgcmIsIHVpbnQxNl90IHJjLAotKyAgICAgICAgICAgICAgICAgICAgICAgQ1JlZ2lzdGVy SUQgY3IgPSBjcjApOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2lzZWwwKFJlZ2lzdGVyIHJ0LCBSZWdp c3RlciByYSwgUmVnaXN0ZXIgcmIsIHVpbnQxNl90IHJjLAotKyAgICAgICAgICAgICAgICAgICAg ICAgIENSZWdpc3RlcklEIGNyID0gY3IwKTsKLSsKLSsgIC8vIEZQIGNvbXBhcmUuCi0rICBCdWZm ZXJPZmZzZXQgYXNfZmNtcHUoQ1JlZ2lzdGVySUQgY3IsIEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0 UmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZjbXB1KEZsb2F0UmVnaXN0ZXIgcmEs IEZsb2F0UmVnaXN0ZXIgcmIpOwotKwotKyAgLy8gRlAgYXJpdGhtZXRpYyAodHdvLXNvdXJjZSku Ci0rICBCdWZmZXJPZmZzZXQgYXNfZmFkZChGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVy IHJhLCBGbG9hdFJlZ2lzdGVyIHJjKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19mYWRkcyhGbG9hdFJl Z2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHJjKTsKLSsgIEJ1ZmZl ck9mZnNldCBhc19mc3ViKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0 UmVnaXN0ZXIgcmMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZzdWJzKEZsb2F0UmVnaXN0ZXIgcmQs IEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmMpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X2ZkaXYoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgRmxvYXRSZWdpc3RlciBy Yyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZmRpdnMoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdp c3RlciByYSwgRmxvYXRSZWdpc3RlciByYyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZm11bChGbG9h dFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHJjKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc19mbXVscyhGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBG bG9hdFJlZ2lzdGVyIHJjKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19mY3BzZ24oRmxvYXRSZWdpc3Rl ciByZCwgRmxvYXRSZWdpc3RlciByYSwgRmxvYXRSZWdpc3RlciByYyk7Ci0rICAvLyBGUCB1bmFy eS4KLSsgIEJ1ZmZlck9mZnNldCBhc19mYWJzKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0 ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZuZWcoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRS ZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZm1yKEZsb2F0UmVnaXN0ZXIgcmQsIEZs b2F0UmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZzcXJ0KEZsb2F0UmVnaXN0ZXIg cmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZzcXJ0cyhGbG9hdFJl Z2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19mcnNwKEZs b2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKwotKyAgLy8gRlAgY29udmVyc2lv bnMuCi0rICBCdWZmZXJPZmZzZXQgYXNfZmNmaWQoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdp c3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZmNmaWRzKEZsb2F0UmVnaXN0ZXIgcmQsIEZs b2F0UmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZjZmlkdShGbG9hdFJlZ2lzdGVy IHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19mY2ZpZHVzKEZsb2F0 UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZjdGlk KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X2ZjdGlkeihGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc19mY3RpZHV6KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX2ZjdGl3eihGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJz KTsKLSsKLSsgIC8vIEZQIHJvdW5kaW5nLgotKyAgQnVmZmVyT2Zmc2V0IGFzX2ZyaW0oRmxvYXRS ZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfZnJpcChG bG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19m cml6KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwotKwotKyAgLy8gRlAgbG9h ZHMgKEQtZm9ybSkuCi0rICBCdWZmZXJPZmZzZXQgYXNfbGZkKEZsb2F0UmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJiLCBpbnQxNl90IG9mZik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfbGZzKEZsb2F0UmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7Ci0rCi0rICAvLyBGUCBzdG9yZXMg KEQtZm9ybSkuCi0rICBCdWZmZXJPZmZzZXQgYXNfc3RmZChGbG9hdFJlZ2lzdGVyIHJkLCBSZWdp c3RlciByYiwgaW50MTZfdCBvZmYpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZnMoRmxvYXRSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19z dGZkdShGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3N0ZnN1KEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90 IG9mZik7Ci0rCi0rICAvLyBGUCBsb2Fkcy9zdG9yZXMgKFgtZm9ybSwgaW5kZXhlZCkuCi0rICBC dWZmZXJPZmZzZXQgYXNfbGZkeChGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0 ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX2xmc3goRmxvYXRSZWdpc3RlciByZCwgUmVnaXN0 ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19sZml3YXgoRmxvYXRSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19z dGZkeChGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3N0ZnN4KEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3Rl ciByYik7Ci0rCi0rICAvLyBGUFNDUiBvcGVyYXRpb25zLgotKyAgQnVmZmVyT2Zmc2V0IGFzX210 ZnNiMCh1aW50OF90IGJ0KTsKLSsgIEJ1ZmZlck9mZnNldCBhc19tY3JmcyhDUmVnaXN0ZXJJRCBi ZiwgdWludDhfdCBiZmEpOwotKwotKyAgLy8gVlNYIChGUFItb25seSBzdWJzZXQpLgotKyAgQnVm ZmVyT2Zmc2V0IGFzX21mdnNyZChSZWdpc3RlciByYSwgRmxvYXRSZWdpc3RlciB4cyk7Ci0rICBC dWZmZXJPZmZzZXQgYXNfbXR2c3JkKEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhKTsKLSsg IC8vIFBPV0VSOCsgKElTQSAyLjA3KS4gU2lnbi1leHRlbmRpbmcgbW92ZSBvZiBSQSdzIGxvdyAz MiBiaXRzIHRvIEZQUi4KLSsgIEJ1ZmZlck9mZnNldCBhc19tdHZzcndhKEZsb2F0UmVnaXN0ZXIg eHMsIFJlZ2lzdGVyIHJhKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19tdHZzcnd6KEZsb2F0UmVnaXN0 ZXIgeHMsIFJlZ2lzdGVyIHJhKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19tdHZzcndzKEZsb2F0UmVn aXN0ZXIgeHMsIFJlZ2lzdGVyIHJhKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194eGJyZChGbG9hdFJl Z2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKTsKLSsgIC8vIFBPV0VSOSBzY2FsYXIgVlNYIG1h eC9taW4gd2l0aCBKYXZhL0phdmFTY3JpcHQgc2VtYW50aWNzIChtYXRjaGVzCi0rICAvLyBFQ01B LTI2MiBNYXRoLm1heCAvIE1hdGgubWluKS4gT3BlcmF0ZSBvbiBGUFItc3BhY2UgKGVuY29kaW5n IDAuLjMxKS4KLSsgIEJ1ZmZlck9mZnNldCBhc194c21heGpkcChGbG9hdFJlZ2lzdGVyIHh0LCBG bG9hdFJlZ2lzdGVyIHhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgeGIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3hzbWluamRwKEZsb2F0UmVnaXN0ZXIgeHQsIEZs b2F0UmVnaXN0ZXIgeGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciB4Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHNjdmRwc3BuKEZsb2F0UmVnaXN0ZXIgeHQsIEZs b2F0UmVnaXN0ZXIgeGIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3hzY3ZzcGRwbihGbG9hdFJlZ2lz dGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKTsKLSsgIC8vIFBPV0VSOSAoSVNBIDMuMCkgc2NhbGFy IEZQMTYgY29udmVyc2lvbnMuCi0rICBCdWZmZXJPZmZzZXQgYXNfeHNjdmRwaHAoRmxvYXRSZWdp c3RlciB4dCwgRmxvYXRSZWdpc3RlciB4Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHNjdmhwZHAo RmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4Yik7Ci0rICAvLyBQT1dFUjkgKElTQSAz LjApIHNjYWxhciBleHRyYWN0IGJpYXNlZCBleHBvbmVudC4KLSsgIEJ1ZmZlck9mZnNldCBhc194 c3hleHBkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKTsKLSsgIC8vIFBPV0VS OSAoSVNBIDMuMCkgc2NhbGFyIEZQMTYgbG9hZC9zdG9yZSwgWC1mb3JtIGluZGV4ZWQuCi0rICBC dWZmZXJPZmZzZXQgYXNfbHhzaWh6eChGbG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3RlciByYSwgUmVn aXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3N0eHNpaHgoRmxvYXRSZWdpc3RlciB4cywg UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKLSsKLSsgIC8vIFZTWCBTSU1EIGxvYWQvc3RvcmUg KFgtZm9ybSwgaW5kZXhlZCkuCi0rICBCdWZmZXJPZmZzZXQgYXNfbHh2eChGbG9hdFJlZ2lzdGVy IHh0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3N0eHZ4 KEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfbHh2ZDJ4KEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBy Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfc3R4dmQyeChGbG9hdFJlZ2lzdGVyIHhzLCBSZWdpc3Rl ciByYSwgUmVnaXN0ZXIgcmIpOwotKwotKyAgLy8gVk1YIFNJTUQgbG9hZC9zdG9yZSAoWC1mb3Jt LCBpbmRleGVkKS4gVGFrZSBhIHJhdyBWUiBudW1iZXIgKDAtMzEpCi0rICAvLyBiZWNhdXNlIFZS MjAtVlIzMSBhcmUgb3V0c2lkZSB0aGUgRmxvYXRSZWdpc3RlciBlbmNvZGluZyAod2hpY2ggb25s eQotKyAgLy8gY292ZXJzIFZTUjAtMzEgPSBmMC1mMzEpLiBVc2VkIGJ5IHRoZSBKSVQgdHJhbXBv bGluZSB0byBzYXZlL3Jlc3RvcmUKLSsgIC8vIHRoZSBFTEZ2MiBjYWxsZWUtc2F2ZWQgVlIyMC1W UjMxLiBFQSBpcyBmb3JjZS1hbGlnbmVkIHRvIDE2IGJ5dGVzCi0rICAvLyAobG93IDQgYml0cyBv ZiB0aGUgYWRkcmVzcyBhcmUgaWdub3JlZCksIHNvIHRoZSBzbG90J3MgYWxpZ25tZW50Ci0rICAv LyBtYXR0ZXJzIGZvciBsYXlvdXQgYnV0IG5vdCBmb3IgdHJhcCBhdm9pZGFuY2UuCi0rICBCdWZm ZXJPZmZzZXQgYXNfbHZ4KHVpbnQ4X3QgdnJ0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3N0dngodWludDhfdCB2cnMsIFJlZ2lzdGVyIHJhLCBSZWdpc3Rl ciByYik7Ci0rCi0rICAvLyBWU1ggU0lNRCByZWdpc3RlciBvcGVyYXRpb25zIChYWDMtZm9ybSAv IFhYMS1mb3JtIC8gWFgyLWZvcm0pLgotKyAgQnVmZmVyT2Zmc2V0IGFzX3h4bG9yKEZsb2F0UmVn aXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsIEZsb2F0UmVnaXN0ZXIgeGIpOwotKwotKyAgLy8g VlNYIGJpdHdpc2Ugb3BlcmF0aW9ucyAoWFgzLWZvcm0pLgotKyAgQnVmZmVyT2Zmc2V0IGFzX3h4 bGFuZChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLCBGbG9hdFJlZ2lzdGVyIHhi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc194eGx4b3IoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdp c3RlciB4YSwgRmxvYXRSZWdpc3RlciB4Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHhsbm9yKEZs b2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsIEZsb2F0UmVnaXN0ZXIgeGIpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX3h4bGFuZGMoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4 YSwgRmxvYXRSZWdpc3RlciB4Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHhzZWwoRmxvYXRSZWdp c3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgRmxvYXRSZWdpc3RlciB4YiwKLSsgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhjKTsKLSsKLSsgIC8vIFZNWCBpbnRlZ2VyIGFy aXRobWV0aWMgKFZSMC0zMSA9IFZTUjMyLTYzIG9ubHkpLgotKyAgLy8gQ2FsbGVycyBtdXN0IGVu c3VyZSBvcGVyYW5kcyBhcmUgaW4gVlIgc3BhY2UuCi0rICBCdWZmZXJPZmZzZXQgYXNfdmFkZHVi bSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc192YWRkdWhtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX3ZhZGR1d20odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90 IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmFkZHVkbSh1aW50OF90IHZydCwgdWludDhfdCB2 cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c3VidWJtKHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzdWJ1aG0o dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQg YXNfdnN1YnV3bSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc192c3VidWRtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZhZGRzYnModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJh LCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmFkZHNocyh1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192YWRkdWJzKHVp bnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X3ZhZGR1aHModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZm ZXJPZmZzZXQgYXNfdnN1YnNicyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c3Vic2hzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwg dWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzdWJ1YnModWludDhfdCB2cnQsIHVp bnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnN1YnVocyh1aW50 OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192 bWluc2IodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfdm1pbnNoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3ZtaW5zdyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4 X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bWF4c2IodWludDhfdCB2cnQsIHVpbnQ4X3Qg dnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm1heHNoKHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtYXhzdyh1 aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBh c192bWF4c2QodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZm ZXJPZmZzZXQgYXNfdm1pbnViKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtaW51aCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVp bnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bWludXcodWludDhfdCB2cnQsIHVpbnQ4 X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm1heHViKHVpbnQ4X3Qg dnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtYXh1 aCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc192bWF4dXcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICAv LyBQT1dFUjkgKElTQSAzLjApOiBwZXItbGFuZSBpbnRlZ2VyIG5lZ2F0ZS4KLSsgIEJ1ZmZlck9m ZnNldCBhc192bmVndyh1aW50OF90IHZydCwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZuZWdkKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYik7Ci0rICAvLyBQT1dFUjkgKElTQSAz LjApOiBhZGRwY2lzIHJULCBELiAgQ29tcHV0ZXMgclQgPSAoQ0lBICsgNCkgKyAoRCA8PCAxNiku Ci0rICAvLyBEIGlzIGEgMTYtYml0IHNpZ25lZCBpbW1lZGlhdGU7IERYLWZvcm0gc3BsaXRzIEQg YWNyb3NzIHRocmVlIGluc3RydWN0aW9uCi0rICAvLyBmaWVsZHMgKGQwWzE2Li4yNV0g4oilIGQx WzExLi4xNV0g4oilIGQyWzMxXSkuICBObyBMUiBjbG9iYmVyLCBubyBSQVMgaGF6YXJkLgotKyAg QnVmZmVyT2Zmc2V0IGFzX2FkZHBjaXMoUmVnaXN0ZXIgcnQsIGludDE2X3QgZCk7Ci0rICAvLyBQ T1dFUjEwIChJU0EgMy4xKSBwcmVmaXhlZCBpbnN0cnVjdGlvbnMuIEVhY2ggZW1pdHMgOCBieXRl cyAocHJlZml4ICsKLSsgIC8vIHN1ZmZpeCkgd2l0aCBhIHNpbmdsZSBub3AgaW5zZXJ0ZWQgYmVm b3JlIGlmZiB0aGUgcHJlZml4IHdvdWxkCi0rICAvLyBzdHJhZGRsZSBhIDY0LWJ5dGUgYmxvY2su IENhbGxlciBtdXN0IGd1YXJhbnRlZSBIYXNQT1dFUjEwKCkuCi0rICAvLyBpbW0zNCBpcyBzaWdu ZWQgMzQtYml0OyBSPXRydWUgc2VsZWN0cyBQQy1yZWxhdGl2ZSBmb3JtIChSQSBtdXN0IGJlIHIw KS4KLSsgIC8vIFJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgcHJlZml4IHdvcmQuCi0rICBCdWZm ZXJPZmZzZXQgYXNfcGFkZGkoUmVnaXN0ZXIgcnQsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0 LCBib29sIFIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3BsZChSZWdpc3RlciBydCwgUmVnaXN0ZXIg cmEsIGludDY0X3QgaW1tMzQsIGJvb2wgUik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfcGx4dih1aW50 OF90IHh0LCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwgYm9vbCBSKTsKLSsgIC8vIEZQLXRh cmdldCBwcmVmaXhlZCBsb2FkczogcGxmZC9wbGZzIGFyZSBNTFMgKFR5cGU9Mikgd2l0aCBzdWZm aXgKLSsgIC8vIG9wY29kZXMgNTAgYW5kIDQ4LiBwbGZzIHdpZGVucyBzaW5nbGUg4oaSIGRvdWJs ZSBpbiB0aGUgRlBSCi0rICAvLyAobWF0Y2hlcyBub24tcHJlZml4ZWQgbGZzIHNlbWFudGljcyku Ci0rICBCdWZmZXJPZmZzZXQgYXNfcGxmZChGbG9hdFJlZ2lzdGVyIGZydCwgUmVnaXN0ZXIgcmEs IGludDY0X3QgaW1tMzQsCi0rICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3BsZnMoRmxvYXRSZWdpc3RlciBmcnQsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90 IGltbTM0LAotKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKTsKLSsgIC8vIFByZWZpeGVk LXN0b3JlIGNvdW50ZXJwYXJ0cy4gU2FtZSBwcmVmaXggc2hhcGU7IHN1ZmZpeCBvcGNvZGVzIGFy ZQotKyAgLy8gdGhlIEQtZm9ybSB2YXJpYW50cyBvZiBzdGQvc3R4di9zdGZkL3N0ZnMgKDYxLCAy NywgNTQsIDUyKS4KLSsgIEJ1ZmZlck9mZnNldCBhc19wc3RkKFJlZ2lzdGVyIHJzLCBSZWdpc3Rl ciByYSwgaW50NjRfdCBpbW0zNCwgYm9vbCBSKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19wc3R4dih1 aW50OF90IHhzLCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwgYm9vbCBSKTsKLSsgIEJ1ZmZl ck9mZnNldCBhc19wc3RmZChGbG9hdFJlZ2lzdGVyIGZycywgUmVnaXN0ZXIgcmEsIGludDY0X3Qg aW1tMzQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc19wc3RmcyhGbG9hdFJlZ2lzdGVyIGZycywgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKTsKLSsKLSsgcHJpdmF0ZToKLSsgIC8v IEVtaXQgYSBub3AgYmVmb3JlIGEgcHJlZml4ZWQgaW5zdHJ1Y3Rpb24gaWZmIHRoZSBwcmVmaXgg d291bGQgb3RoZXJ3aXNlCi0rICAvLyBzdGFydCBhdCBvZmZzZXQgNjAgKG1vZCA2NCkgYW5kIHRo ZSBzdWZmaXggd291bGQgbGFuZCBpbiB0aGUgbmV4dCBibG9jay4KLSsgIHZvaWQgZW5zdXJlUHJl Zml4ZWRBbGlnbm1lbnQoKTsKLSsKLSsgcHVibGljOgotKyAgQnVmZmVyT2Zmc2V0IGFzX3Zhdmd1 Yih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc192YXZndWgodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBC dWZmZXJPZmZzZXQgYXNfdm11bHV3bSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3Qg dnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bXVsbGQodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJh LCB1aW50OF90IHZyYik7Ci0rICAvLyBWTVggc2hpZnQgKFZSMC0zMSBvbmx5KS4KLSsgIEJ1ZmZl ck9mZnNldCBhc192c2xiKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3ZzbGgodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90 IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnNsdyh1aW50OF90IHZydCwgdWludDhfdCB2cmEs IHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c2xkKHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcmIodWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnNyaCh1 aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBh c192c3J3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX3ZzcmQodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfdnNyYWIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90 IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnNyYWgodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJh LCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnNyYXcodWludDhfdCB2cnQsIHVp bnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnNyYWQodWludDhf dCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnNs byh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNl dCBhc192c3JvKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKwotKyAg Ly8gVk1YIGludGVnZXIgY29tcGFyZSAoVlIwLTMxIG9ubHkpLgotKyAgQnVmZmVyT2Zmc2V0IGFz X3ZjbXBlcXViKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3ZjbXBlcXVoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXV3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXVkKHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgLy8gUmVjb3JkIGZvcm1zIHNldCBDUjY6 IExUID0gYWxsLXRydWUsIEVRID0gbm9uZS10cnVlLgotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBl cXViX3JjKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX3ZjbXBlcXVoX3JjKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXV3X3JjKHVpbnQ4X3QgdnJ0LCB1aW50OF90 IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXVkX3JjKHVpbnQ4 X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3Zj bXBndHNiKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVy T2Zmc2V0IGFzX3ZjbXBndHNoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHN3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwg dWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHNkKHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHViKHVp bnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFz X3ZjbXBndHVoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVm ZmVyT2Zmc2V0IGFzX3ZjbXBndHV3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHVkKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOwotKyAgLy8gUE9XRVI5IChJU0EgMy4wKS4gTm90RXF1YWwgY29tcGFy ZTsgbm8gZG91Ymxld29yZCB2YXJpYW50LgotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBuZWIodWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNf dmNtcG5laCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZl ck9mZnNldCBhc192Y21wbmV3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIp OwotKwotKyAgLy8gVlNYIGZsb2F0IGNvbXBhcmUgKFhYMy1mb3JtLCBWU1IwLTYzKS4KLSsgIEJ1 ZmZlck9mZnNldCBhc194dmNtcGVxc3AoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4 YSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4Yik7Ci0rICBC dWZmZXJPZmZzZXQgYXNfeHZjbXBndHNwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIg eGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX3h2Y21wZ2VzcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVy IHhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKTsKLSsg IEJ1ZmZlck9mZnNldCBhc194dmNtcGVxZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3Rl ciB4YSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4Yik7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfeHZjbXBndGRwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0 ZXIgeGEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3h2Y21wZ2VkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lz dGVyIHhhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKTsK LSsKLSsgIC8vIFZTWCBmbG9hdCBhcml0aG1ldGljIChYWDMtZm9ybSBiaW5hcnksIFhYMi1mb3Jt IHVuYXJ5KS4KLSsjZGVmaW5lIERFQ0xfVlNYX0JJTihvcCkgXAotKyAgQnVmZmVyT2Zmc2V0IGFz XyMjb3AoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgRmxvYXRSZWdpc3RlciB4 Yik7Ci0rICBERUNMX1ZTWF9CSU4oeHZhZGRzcCkKLSsgIERFQ0xfVlNYX0JJTih4dmFkZGRwKSBE RUNMX1ZTWF9CSU4oeHZzdWJzcCkgREVDTF9WU1hfQklOKAotKyAgICAgIHh2c3ViZHApIERFQ0xf VlNYX0JJTih4dm11bHNwKSBERUNMX1ZTWF9CSU4oeHZtdWxkcCkgREVDTF9WU1hfQklOKHh2ZGl2 c3ApCi0rICAgICAgREVDTF9WU1hfQklOKHh2ZGl2ZHApIERFQ0xfVlNYX0JJTih4dm1pbnNwKSBE RUNMX1ZTWF9CSU4oCi0rICAgICAgICAgIHh2bWluZHApIERFQ0xfVlNYX0JJTih4dm1heHNwKSBE RUNMX1ZTWF9CSU4oeHZtYXhkcCkKLSsgICAgICAgICAgREVDTF9WU1hfQklOKHh2bWFkZGFzcCkg REVDTF9WU1hfQklOKHh2bWFkZGFkcCkgREVDTF9WU1hfQklOKAotKyAgICAgICAgICAgICAgeHZu bXN1YmFzcCkgREVDTF9WU1hfQklOKHh2bm1zdWJhZHApCi0rI3VuZGVmIERFQ0xfVlNYX0JJTgot KyNkZWZpbmUgREVDTF9WU1hfVU4ob3ApIFwKLSsgIEJ1ZmZlck9mZnNldCBhc18jI29wKEZsb2F0 UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpOwotKyAgICAgICAgICAgICAgREVDTF9WU1hf VU4oeHZhYnNzcCkgREVDTF9WU1hfVU4oeHZhYnNkcCkgREVDTF9WU1hfVU4oeHZuZWdzcCkKLSsg ICAgICAgICAgICAgICAgICBERUNMX1ZTWF9VTih4dm5lZ2RwKSBERUNMX1ZTWF9VTih4dnNxcnRz cCkgREVDTF9WU1hfVU4oCi0rICAgICAgICAgICAgICAgICAgICAgIHh2c3FydGRwKSBERUNMX1ZT WF9VTih4dnJzcGlwKSBERUNMX1ZTWF9VTih4dnJkcGlwKQotKyAgICAgICAgICAgICAgICAgICAg ICBERUNMX1ZTWF9VTih4dnJzcGltKSBERUNMX1ZTWF9VTih4dnJkcGltKSBERUNMX1ZTWF9VTigK LSsgICAgICAgICAgICAgICAgICAgICAgICAgIHh2cnNwaXopIERFQ0xfVlNYX1VOKHh2cmRwaXop IERFQ0xfVlNYX1VOKHh2cnNwaWMpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBERUNMX1ZT WF9VTih4dnJkcGljKSBERUNMX1ZTWF9VTih4dmN2c3h3c3ApCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZjdnV4d3NwKSBERUNMX1ZTWF9VTih4dmN2c3h3ZHAp Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xfVlNYX1VOKHh2Y3Z1eHdk cCkgREVDTF9WU1hfVU4oeHZjdnNwc3h3cykKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERFQ0xfVlNYX1VOKHh2Y3ZzcHV4d3MpCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZjdmRwc3h3cykKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZjdmRwdXh3 cykKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERF Q0xfVlNYX1VOKHh2Y3ZkcHNwKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERFQ0xfVlNYX1VOKHh2Y3ZzcGRwKQotKyN1bmRlZiBERUNMX1ZT WF9VTgotKwotKyAgICAgIC8vIFZNWCB3aWRlbi9uYXJyb3cvbWVyZ2UvcGFjayAoVlIwLTMxIG9u bHkpLgotKyAgICAgIEJ1ZmZlck9mZnNldCBhc192dXBraHNiKHVpbnQ4X3QgdnJ0LCB1aW50OF90 IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnVwa2xzYih1aW50OF90IHZydCwgdWludDhfdCB2 cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3Z1cGtoc2godWludDhfdCB2cnQsIHVpbnQ4X3QgdnJi KTsKLSsgIEJ1ZmZlck9mZnNldCBhc192dXBrbHNoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYik7 Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnVwa2hzdyh1aW50OF90IHZydCwgdWludDhfdCB2cmIpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3Z1cGtsc3codWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKTsKLSsg IEJ1ZmZlck9mZnNldCBhc192cGtzaHNzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhf dCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3Zwa3N3c3ModWludDhfdCB2cnQsIHVpbnQ4X3Qg dnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnBrc2h1cyh1aW50OF90IHZy dCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192cGtzd3Vz KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZtcmdoYih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc192bXJnaGgodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZy Yik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm1yZ2h3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwg dWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtcmdsYih1aW50OF90IHZydCwgdWlu dDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bXJnbGgodWludDhf dCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm1y Z2x3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKwotKyAgLy8gVk1Y IGV4dGVuZGVkIG11bHRpcGx5IChWUjAtMzEgb25seSkuCi0rICBCdWZmZXJPZmZzZXQgYXNfdm11 bGVzYih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9m ZnNldCBhc192bXVsb3NiKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxldWIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50 OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm11bG91Yih1aW50OF90IHZydCwgdWludDhf dCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bXVsZXNoKHVpbnQ4X3Qg dnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxv c2godWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZz ZXQgYXNfdm11bGV1aCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsg IEJ1ZmZlck9mZnNldCBhc192bXVsb3VoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhf dCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxlc3codWludDhfdCB2cnQsIHVpbnQ4X3Qg dnJhLCB1aW50OF90IHZyYik7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm11bG9zdyh1aW50OF90IHZy dCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192bXVsZXV3 KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwotKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZtdWxvdXcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICBC dWZmZXJPZmZzZXQgYXNfdnBvcGNudGIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKTsKLSsgIEJ1 ZmZlck9mZnNldCBhc192cGVybSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJi LCB1aW50OF90IHZyYyk7Ci0rICAvLyBQT1dFUjgrIChJU0EgMi4wNykuIFZYLWZvcm0gYml0LXBl cm11dGUuIFNlZSBQUENfdmJwZXJtcSBjb21tZW50LgotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZicGVy bXEodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Ci0rICAvLyBQT1dFUjEw IChJU0EgMy4xKSBWZWN0b3IgRXh0cmFjdCBNYXNrLiBSVCBpcyBhIEdQUi4KLSsgIEJ1ZmZlck9m ZnNldCBhc192ZXh0cmFjdGJtKFJlZ2lzdGVyIHJ0LCBGbG9hdFJlZ2lzdGVyIHZyYik7Ci0rICBC dWZmZXJPZmZzZXQgYXNfdmV4dHJhY3RobShSZWdpc3RlciBydCwgRmxvYXRSZWdpc3RlciB2cmIp OwotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZleHRyYWN0d20oUmVnaXN0ZXIgcnQsIEZsb2F0UmVnaXN0 ZXIgdnJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192ZXh0cmFjdGRtKFJlZ2lzdGVyIHJ0LCBGbG9h dFJlZ2lzdGVyIHZyYik7Ci0rICAvLyBQT1dFUjEwIChJU0EgMy4xKSBWZWN0b3IgSW5zZXJ0IGZy b20gR1BSIGF0IGltbWVkaWF0ZSBieXRlIG9mZnNldC4KLSsgIC8vIFVJTSByYW5nZTogdmluc3cg MC4uMTIsIHZpbnNkIDAuLjggKGNhbGxlciBtdXN0IGVuZm9yY2UpLgotKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZpbnN3KEZsb2F0UmVnaXN0ZXIgdnJ0LCBSZWdpc3RlciByYiwgdWludDhfdCB1aW0pOwot KyAgQnVmZmVyT2Zmc2V0IGFzX3ZpbnNkKEZsb2F0UmVnaXN0ZXIgdnJ0LCBSZWdpc3RlciByYiwg dWludDhfdCB1aW0pOwotKyAgLy8gUE9XRVIxMCAoSVNBIDMuMSkgVmVjdG9yIEluc2VydCBieXRl IC8gaGFsZndvcmQgZnJvbSBHUFIgd2l0aCB0aGUKLSsgIC8vIGJ5dGUgcG9zaXRpb24gc3VwcGxp ZWQgYnkgYW5vdGhlciBHUFIgKFJBICYgMHhGIGZvciB2aW5zYnJ4LAotKyAgLy8gUkEgJiAweEUg Zm9yIHZpbnNocngpLiAicngiID0gcmlnaHQtaW5kZXhlZCA9IExFLW5hdHVyYWwuCi0rICBCdWZm ZXJPZmZzZXQgYXNfdmluc2JyeChGbG9hdFJlZ2lzdGVyIHZydCwgUmVnaXN0ZXIgcmEsIFJlZ2lz dGVyIHJiKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192aW5zaHJ4KEZsb2F0UmVnaXN0ZXIgdnJ0LCBS ZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwotKyAgLy8gUE9XRVI5IChJU0EgMy4wKSBWZWN0b3Ig SW5zZXJ0IGJ5dGUgLyBoYWxmd29yZCBmcm9tIFZSIGF0IGltbWVkaWF0ZQotKyAgLy8gYnl0ZSBw b3NpdGlvbi4gVUlNIHJhbmdlOiB2aW5zZXJ0YiAwLi4xNSwgdmluc2VydGggMC4uMTQKLSsgIC8v IChjYWxsZXIgbXVzdCBlbmZvcmNlOyB2aW5zZXJ0aCBVSU0gaXMgaW4gYnl0ZXMsIGV2ZW4tYWxp Z25lZCkuCi0rICBCdWZmZXJPZmZzZXQgYXNfdmluc2VydGIoRmxvYXRSZWdpc3RlciB2cnQsIEZs b2F0UmVnaXN0ZXIgdnJiLCB1aW50OF90IHVpbSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdmluc2Vy dGgoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJiLCB1aW50OF90IHVpbSk7Ci0r ICAvLyBQT1dFUjkgKElTQSAzLjApIFZlY3RvciBFeHRyYWN0IGJ5dGUgLyBoYWxmd29yZCBmcm9t IFZSIGF0IGltbWVkaWF0ZQotKyAgLy8gQkUgYnl0ZSBwb3NpdGlvbi4gVUlNIHJhbmdlOiB2ZXh0 cmFjdHViIDAuLjE1LCB2ZXh0cmFjdHVoIDAuLjE0Ci0rICAvLyAoY2FsbGVyIG11c3QgZW5mb3Jj ZTsgdmV4dHJhY3R1aCBVSU0gaXMgaW4gYnl0ZXMsIGV2ZW4tYWxpZ25lZCkuIFRoZQotKyAgLy8g ZXh0cmFjdGVkIGJ5dGUvaGFsZndvcmQgbGFuZHMgYXQgQkUgYnl0ZSA3IG9mIFZSVCwgd2l0aCB0 aGUgcmVzdAotKyAgLy8gemVyb2VkIOKAlCBzbyBhIHN1YnNlcXVlbnQgbWZ2c3JkIHJlYWRzIGl0 IGFzIHRoZSBsb3cgYnl0ZS9oYWxmd29yZAotKyAgLy8gb2YgdGhlIEdQUiB3aXRoIGltcGxpY2l0 IHplcm8tZXh0ZW5zaW9uLgotKyAgQnVmZmVyT2Zmc2V0IGFzX3ZleHRyYWN0dWIoRmxvYXRSZWdp c3RlciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJiLCB1aW50OF90IHVpbSk7Ci0rICBCdWZmZXJPZmZz ZXQgYXNfdmV4dHJhY3R1aChGbG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmIsIHVp bnQ4X3QgdWltKTsKLSsgIC8vIFZYLWZvcm0gd2l0aCA1LWJpdCBzaWduZWQgaW1tZWRpYXRlIHNw bGF0OiBlYWNoIGxhbmUgb2YgVlJUIGlzCi0rICAvLyBzZXQgdG8gc2lnbl9leHRlbmQoU0lNTTUp IChyYW5nZSBbLTE2LCAxNV0pIGF0IGJ5dGUvaGFsZndvcmQvd29yZCBncmFudWxhcml0eS4KLSsg IEJ1ZmZlck9mZnNldCBhc192c3BsdGlzYih1aW50OF90IHZydCwgaW50OF90IHNpbW01KTsKLSsg IEJ1ZmZlck9mZnNldCBhc192c3BsdGlzaCh1aW50OF90IHZydCwgaW50OF90IHNpbW01KTsKLSsg IEJ1ZmZlck9mZnNldCBhc192c3BsdGlzdyh1aW50OF90IHZydCwgaW50OF90IHNpbW01KTsKLSsK LSsgIC8vIFZBLWZvcm0gdGVybmFyeSBWTVggaW5zdHJ1Y3Rpb25zLgotKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZtbGFkZHVobSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiLCB1aW50 OF90IHZyYyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdm1ocmFkZHNocyh1aW50OF90IHZydCwgdWlu dDhfdCB2cmEsIHVpbnQ4X3QgdnJiLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDhfdCB2cmMpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX3Ztc3Vtc2htKHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYSwgdWludDhfdCB2cmIsIHVpbnQ4X3QgdnJjKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192 bXN1bXVobSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiLCB1aW50OF90IHZy Yyk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfeHhwZXJtZGkoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRS ZWdpc3RlciB4YSwgRmxvYXRSZWdpc3RlciB4YiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50OF90IGRtKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194eHNwbHR3KEZsb2F0UmVnaXN0ZXIg eHQsIEZsb2F0UmVnaXN0ZXIgeGIsIHVpbnQ4X3QgdWltKTsKLSsgIC8vIFBPV0VSOSAoSVNBIDMu MCkuIFNwbGF0IDgtYml0IGltbWVkaWF0ZSB0byBhbGwgMTYgYnl0ZXMgb2YgYW4gRlBSLWVuY29k ZWQKLSsgIC8vIFZTUiAoVFggYml0IGZvcmNlZCAwKS4gWFgxLWZvcm0sIG5vIFJjLgotKyAgQnVm ZmVyT2Zmc2V0IGFzX3h4c3BsdGliKEZsb2F0UmVnaXN0ZXIgeHQsIHVpbnQ4X3QgaW1tOCk7Ci0r ICBCdWZmZXJPZmZzZXQgYXNfeHhpbnNlcnR3KEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0 ZXIgeGIsIHVpbnQ4X3QgdWltKTsKLSsgIEJ1ZmZlck9mZnNldCBhc194eGV4dHJhY3R1dyhGbG9h dFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiLCB1aW50OF90IHVpbSk7Ci0rICBCdWZmZXJP ZmZzZXQgYXNfbXR2c3JkZChGbG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIg cmIpOwotKyAgQnVmZmVyT2Zmc2V0IGFzX21mdnNybGQoUmVnaXN0ZXIgcnQsIEZsb2F0UmVnaXN0 ZXIgeHMpOwotKwotKyAgLy8gVk1YIHZlY3RvciBvcGVyYXRpb25zLgotKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZzcGx0YihGbG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3Qg dWltKTsKLSsgIEJ1ZmZlck9mZnNldCBhc192c3BsdGgoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0 UmVnaXN0ZXIgdnJiLCB1aW50OF90IHVpbSk7Ci0rICBCdWZmZXJPZmZzZXQgYXNfdnNsZG9pKEZs b2F0UmVnaXN0ZXIgdnJ0LCBGbG9hdFJlZ2lzdGVyIHZyYSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3Qgc2hiKTsKLSsKLSsgIC8vIEJhcnJpZXIg YW5kIHN5bmMgaW5zdHJ1Y3Rpb25zLgotKyAgQnVmZmVyT2Zmc2V0IGFzX2x3c3luYygpOwotKyAg QnVmZmVyT2Zmc2V0IGFzX3N5bmMoKTsKLSsgIEJ1ZmZlck9mZnNldCBhc19pc3luYygpOwotKwot KyAgLy8gQ29udmVuaWVuY2UgcHNldWRvLWluc3RydWN0aW9ucy4KLSsgIEJ1ZmZlck9mZnNldCB4 c190cmFwKCk7Ci0rICBCdWZmZXJPZmZzZXQgeHNfdHJhcF90YWdnZWQoVHJhcFRhZyB0YWcpOwot KyAgQnVmZmVyT2Zmc2V0IHhzX21yKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSk7Ci0rICBCdWZm ZXJPZmZzZXQgeHNfbXRjdHIoUmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IHhzX210bHIo UmVnaXN0ZXIgcmEpOwotKyAgQnVmZmVyT2Zmc2V0IHhzX21mbHIoUmVnaXN0ZXIgcmQpOwotKyAg QnVmZmVyT2Zmc2V0IHhzX210Y3IoUmVnaXN0ZXIgcnMpOwotKyAgQnVmZmVyT2Zmc2V0IHhzX21m eGVyKFJlZ2lzdGVyIHJhKTsKLSsgIEJ1ZmZlck9mZnNldCB4c19tdHhlcihSZWdpc3RlciByYSk7 Ci0rICBCdWZmZXJPZmZzZXQgeHNfbGkoUmVnaXN0ZXIgcmQsIGludDE2X3QgaW0pOwotKyAgQnVm ZmVyT2Zmc2V0IHhzX2xpcyhSZWdpc3RlciByZCwgaW50MTZfdCBpbSk7Ci0rICBCdWZmZXJPZmZz ZXQgeF9zdWJpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7Ci0rICBCdWZm ZXJPZmZzZXQgeF9ub3QoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKTsKLSsgIEJ1ZmZlck9mZnNl dCB4X3Nsd2koUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBpbnQgbik7Ci0rICBCdWZmZXJPZmZz ZXQgeF9zbGRpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgaW50IG4pOwotKyAgQnVmZmVyT2Zm c2V0IHhfc3J3aShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIGludCBuKTsKLSsgIEJ1ZmZlck9m ZnNldCB4X3NyZGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBpbnQgbik7Ci0rICBCdWZmZXJP ZmZzZXQgeF9pbnNlcnRiaXRzMF8xNShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMpOwotKyAgQnVm ZmVyT2Zmc2V0IHhfYml0X3ZhbHVlKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgdW5zaWduZWQg Yml0KTsKLSsgIEJ1ZmZlck9mZnNldCB4X3NyX211bGxpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBy YSwgaW50MTZfdCBpbSk7Ci0rCi0rICAvLyAtLS0gTGFiZWwgb3BlcmF0aW9ucy4KLSsgIHZvaWQg YmluZChMYWJlbCogbGFiZWwpIHsgYmluZChsYWJlbCwgbmV4dE9mZnNldCgpKTsgfQotKyAgdm9p ZCBiaW5kKExhYmVsKiBsYWJlbCwgQnVmZmVyT2Zmc2V0IGJvZmYpOwotKyAgdm9pZCBiaW5kKElu c3RJbW0qIGluc3QsIHVpbnRwdHJfdCBicmFuY2gsIHVpbnRwdHJfdCB0YXJnZXQpOwotKyAgdm9p ZCBiaW5kKENvZGVMYWJlbCogbGFiZWwpIHsgbGFiZWwtPnRhcmdldCgpLT5iaW5kKGN1cnJlbnRP ZmZzZXQoKSk7IH0KLSsgIHVpbnQzMl90IGN1cnJlbnRPZmZzZXQoKSB7IHJldHVybiBuZXh0T2Zm c2V0KCkuZ2V0T2Zmc2V0KCk7IH0KLSsgIHZvaWQgcmV0YXJnZXQoTGFiZWwqIGxhYmVsLCBMYWJl bCogdGFyZ2V0KTsKLSsgIHZvaWQgY2FsbChMYWJlbCogbGFiZWwpOwotKyAgdm9pZCBjYWxsKHZv aWQqIHRhcmdldCk7Ci0rCi0rICB2b2lkIGFzX2JyZWFrKHVpbnQzMl90IGNvZGUpOwotKwotKyAg Ly8gLS0tIFN0YXRpYyBjYXBhYmlsaXR5IHF1ZXJpZXMuCi0rICBzdGF0aWMgYm9vbCBTdXBwb3J0 c0Zsb2F0aW5nUG9pbnQoKSB7IHJldHVybiB0cnVlOyB9Ci0rICBzdGF0aWMgYm9vbCBTdXBwb3J0 c1dhc21TaW1kKCkgeyByZXR1cm4gdHJ1ZTsgfQotKyAgc3RhdGljIGJvb2wgU3VwcG9ydHNVbmFs aWduZWRBY2Nlc3NlcygpIHsgcmV0dXJuIHRydWU7IH0KLSsgIHN0YXRpYyBib29sIFN1cHBvcnRz RmFzdFVuYWxpZ25lZEZQQWNjZXNzZXMoKSB7IHJldHVybiB0cnVlOyB9Ci0rICAvLyBQT1dFUjkg aGFzIHNjYWxhciBGUDE2IGhhcmR3YXJlICh4c2N2ZHBocC94c2N2aHBkcCk7IFBPV0VSOCBkb2Vz bid0LgotKyAgLy8gUnVudGltZS1nYXRlIGxpa2UgeDg2J3MgU3VwcG9ydHNGbG9hdDMyVG8xNiAo d2hpY2gga2V5cyBvZmYgRjE2QykuCi0rICBzdGF0aWMgYm9vbCBTdXBwb3J0c0Zsb2F0NjRUbzE2 KCkgeyByZXR1cm4gSGFzUE9XRVI5KCk7IH0KLSsgIHN0YXRpYyBib29sIFN1cHBvcnRzRmxvYXQz MlRvMTYoKSB7IHJldHVybiBIYXNQT1dFUjkoKTsgfQotKyAgc3RhdGljIGJvb2wgSGFzUm91bmRJ bnN0cnVjdGlvbihSb3VuZGluZ01vZGUgbW9kZSkgewotKyAgICAvLyBQUEM2NCBoYXMgZnJpeiAo dHJ1bmMpLCBmcmlwIChjZWlsKSwgZnJpbSAoZmxvb3IpLCB3aGljaCBhcmUgYWxsIGNvcnJlY3Qu Ci0rICAgIC8vIGZyaW4gKHJvdW5kLXRvLW5lYXJlc3QpIGRvZXMgTk9UIGltcGxlbWVudCBwcm9w ZXIgSUVFRSBiYW5rZXIncyByb3VuZGluZwotKyAgICAvLyAodGllcyB0byBldmVuKSwgc28gTmVh cmVzdFRpZXNUb0V2ZW4gaXMgbm90IHN1cHBvcnRlZC4KLSsgICAgcmV0dXJuIG1vZGUgPT0gUm91 bmRpbmdNb2RlOjpUb3dhcmRzWmVybyB8fCBtb2RlID09IFJvdW5kaW5nTW9kZTo6VXAgfHwKLSsg ICAgICAgICAgIG1vZGUgPT0gUm91bmRpbmdNb2RlOjpEb3duOwotKyAgfQotKwotKyBwcm90ZWN0 ZWQ6Ci0rICBJbnN0SW1tIGludmVydEJyYW5jaChJbnN0SW1tIGJyYW5jaCwgQk9mZkltbTE2IHNr aXBPZmZzZXQpOwotKyAgdm9pZCBhZGRQZW5kaW5nSnVtcChCdWZmZXJPZmZzZXQgc3JjLCBJbW1Q dHIgdGFyZ2V0LCBSZWxvY2F0aW9uS2luZCBraW5kKSB7Ci0rICAgIGVub3VnaE1lbW9yeV8gJj0g anVtcHNfLmFwcGVuZChSZWxhdGl2ZVBhdGNoKHNyYywgdGFyZ2V0LnZhbHVlLCBraW5kKSk7Ci0r ICAgIGlmIChraW5kID09IFJlbG9jYXRpb25LaW5kOjpKSVRDT0RFKSB7Ci0rICAgICAgd3JpdGVS ZWxvY2F0aW9uKHNyYyk7Ci0rICAgIH0KLSsgIH0KLSsgIHZvaWQgYWRkTG9uZ0p1bXAoQnVmZmVy T2Zmc2V0IHNyYywgQnVmZmVyT2Zmc2V0IGRzdCkgewotKyAgICBDb2RlTGFiZWwgY2w7Ci0rICAg IGNsLnBhdGNoQXQoKS0+YmluZChzcmMuZ2V0T2Zmc2V0KCkpOwotKyAgICBjbC50YXJnZXQoKS0+ YmluZChkc3QuZ2V0T2Zmc2V0KCkpOwotKyAgICBjbC5zZXRMaW5rTW9kZShDb2RlTGFiZWw6Okp1 bXBJbW1lZGlhdGUpOwotKyAgICBhZGRDb2RlTGFiZWwoc3RkOjptb3ZlKGNsKSk7Ci0rICB9Ci0r Ci0rIHB1YmxpYzoKLSsgIHZvaWQgZmx1c2hCdWZmZXIoKSB7IG1fYnVmZmVyLmZsdXNoUG9vbCgp OyB9Ci0rICB2b2lkIGNvbW1lbnQoY29uc3QgY2hhciogbXNnKSB7IHNwZXcoIjsgJXMiLCBtc2cp OyB9Ci0rICBzdGF0aWMgdWludDMyX3QgTm9wU2l6ZSgpIHsgcmV0dXJuIDQ7IH0KLSsKLSsgIC8v IC0tLSBTdGF0aWMgcGF0Y2hpbmcgQVBJLgotKyAgc3RhdGljIHVpbnQ2NF90IEV4dHJhY3RMb2Fk NjRWYWx1ZShJbnN0cnVjdGlvbiogaW5zdDApOwotKyAgc3RhdGljIHZvaWQgVXBkYXRlTG9hZDY0 VmFsdWUoSW5zdHJ1Y3Rpb24qIGluc3QwLCB1aW50NjRfdCB2YWx1ZSk7Ci0rICBzdGF0aWMgdm9p ZCBXcml0ZUxvYWQ2NEluc3RydWN0aW9ucyhJbnN0cnVjdGlvbiogaW5zdDAsIFJlZ2lzdGVyIHJl ZywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZhbHVl KTsKLSsKLSsgIHN0YXRpYyB2b2lkIFBhdGNoV3JpdGVfSW1tMzIoQ29kZUxvY2F0aW9uTGFiZWwg bGFiZWwsIEltbTMyIGltbSk7Ci0rICBzdGF0aWMgdWludDhfdCogTmV4dEluc3RydWN0aW9uKHVp bnQ4X3QqIGluc3RydWN0aW9uLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCogY291bnQgPSBudWxscHRyKTsKLSsgIHN0YXRpYyB2b2lkIFRvZ2dsZVRvSm1wKENv ZGVMb2NhdGlvbkxhYmVsIGluc3RfKTsKLSsgIHN0YXRpYyB2b2lkIFRvZ2dsZVRvQ21wKENvZGVM b2NhdGlvbkxhYmVsIGluc3RfKTsKLSsKLSsgIHZvaWQgdmVyaWZ5SGVhcEFjY2Vzc0Rpc2Fzc2Vt Ymx5KHVpbnQzMl90IGJlZ2luLCB1aW50MzJfdCBlbmQsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBEaXNhc3NlbWJsZXI6OkhlYXBBY2Nlc3MmIGhhKSB7fQotKwot KyAgLy8gLS0tIFB1YmxpYyBwYXRjaGluZyBBUEkgKHJlcXVpcmVkIGJ5IHNoYXJlZCBjb2RlKS4K LSsgIHN0YXRpYyB2b2lkIEJpbmQodWludDhfdCogcmF3Q29kZSwgY29uc3QgQ29kZUxhYmVsJiBs YWJlbCk7Ci0rICB2b2lkIHByb2Nlc3NDb2RlTGFiZWxzKHVpbnQ4X3QqIHJhd0NvZGUpOwotKwot KyAgc3RhdGljIHZvaWQgVHJhY2VKdW1wUmVsb2NhdGlvbnMoSlNUcmFjZXIqIHRyYywgSml0Q29k ZSogY29kZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhY3RCdWZm ZXJSZWFkZXImIHJlYWRlcik7Ci0rICBzdGF0aWMgdm9pZCBUcmFjZURhdGFSZWxvY2F0aW9ucyhK U1RyYWNlciogdHJjLCBKaXRDb2RlKiBjb2RlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ29tcGFjdEJ1ZmZlclJlYWRlciYgcmVhZGVyKTsKLSsKLSsgIHZvaWQgZXhlY3V0 YWJsZUNvcHkodWludDhfdCogYnVmZmVyKTsKLSsKLSsgIHN0YXRpYyB1aW50MzJfdCBQYXRjaFdy aXRlX05lYXJDYWxsU2l6ZSgpOwotKyAgc3RhdGljIHZvaWQgUGF0Y2hXcml0ZV9OZWFyQ2FsbChD b2RlTG9jYXRpb25MYWJlbCBzdGFydCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ29kZUxvY2F0aW9uTGFiZWwgdG9DYWxsKTsKLSsgIHN0YXRpYyB2b2lkIFBhdGNoRGF0YVdp dGhWYWx1ZUNoZWNrKENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsLCBJbW1QdHIgbmV3VmFsdWUsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW1QdHIgZXhwZWN0ZWRWYWx1 ZSk7Ci0rICBzdGF0aWMgdm9pZCBQYXRjaERhdGFXaXRoVmFsdWVDaGVjayhDb2RlTG9jYXRpb25M YWJlbCBsYWJlbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGNo ZWRJbW1QdHIgbmV3VmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQYXRjaGVkSW1tUHRyIGV4cGVjdGVkVmFsdWUpOwotKyAgc3RhdGljIHZvaWQgVG9nZ2xlQ2Fs bChDb2RlTG9jYXRpb25MYWJlbCBpbnN0XywgYm9vbCBlbmFibGVkKTsKLSsKLSsgcHJpdmF0ZToK LSsgIEdlbmVyYWxSZWdpc3RlclNldCBzY3JhdGNoX3JlZ2lzdGVyX2xpc3RfOwotKwotKyBwdWJs aWM6Ci0rICBHZW5lcmFsUmVnaXN0ZXJTZXQqIEdldFNjcmF0Y2hSZWdpc3Rlckxpc3QoKSB7Ci0r ICAgIHJldHVybiAmc2NyYXRjaF9yZWdpc3Rlcl9saXN0XzsKLSsgIH0KLSt9OyAgLy8gQXNzZW1i bGVyCi0rCi0raW5saW5lIGJvb2wgSXNVbmFsaWduZWQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNz RGVzYyYgYWNjZXNzKSB7Ci0rICBpZiAoIWFjY2Vzcy5hbGlnbigpKSB7Ci0rICAgIHJldHVybiBm YWxzZTsKLSsgIH0KLSsgIHJldHVybiBhY2Nlc3MuYWxpZ24oKSA8IGFjY2Vzcy5ieXRlU2l6ZSgp OwotK30KLSsKLSt9ICAvLyBuYW1lc3BhY2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi0rCi0r Ly8gV2hldGhlciBhbiBJbW0zMiBmaXRzIGluIGFuIHVuc2lnbmVkIDE2LWJpdCBpbW1lZGlhdGUu Ci0rI2RlZmluZSBQUENfSU1NX09LX1UoeCkgKE1PWl9MSUtFTFkoKCh4KS52YWx1ZSAmIDB4ZmZm ZjAwMDApID09IDApKQotKwotKy8vIFdoZXRoZXIgYW4gSW1tMzIgZml0cyBpbiBhIHNpZ25lZCAx Ni1iaXQgaW1tZWRpYXRlLgotKyNkZWZpbmUgUFBDX0lNTV9PS19TKHgpICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgKE1PWl9MSUtFTFkoKCh4KS52YWx1ZSAmIDB4ZmZmZjgwMDApID09IDAg fHwgXAotKyAgICAgICAgICAgICAgKCh4KS52YWx1ZSAmIDB4ZmZmZjgwMDApID09IDB4ZmZmZjgw MDApKQotKwotKy8vIFdoZXRoZXIgdGhlIG9mZnNldCBwYXJ0IG9mIGFuIEFkZHJlc3MgZml0cyBp biBhIHNpZ25lZCAxNi1iaXQgaW1tZWRpYXRlLgotKyNkZWZpbmUgUFBDX09GRlNfT0soeCkgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChNT1pfTElLRUxZKCgoeCkub2Zmc2V0ICYgMHhm ZmZmODAwMCkgPT0gMCB8fCBcCi0rICAgICAgICAgICAgICAoKHgpLm9mZnNldCAmIDB4ZmZmZjgw MDApID09IDB4ZmZmZjgwMDApKQotKwotKy8vIFNhbWUgdGVzdCBidXQgY2hlY2tpbmcgYSBiaXQg YWhlYWQgKGZvciBwYWlyZWQgbG9hZHMpLgotKyNkZWZpbmUgUFBDX09GRlNfSU5DUl9PSyh4LCBp bmNyKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKE1PWl9MSUtFTFkoKCgoeCkub2Zm c2V0ICsgKGluY3IpKSAmIDB4ZmZmZjgwMDApID09IDAgfHwgXAotKyAgICAgICAgICAgICAgKCgo eCkub2Zmc2V0ICsgKGluY3IpKSAmIDB4ZmZmZjgwMDApID09IDB4ZmZmZjgwMDApKQotKwotKyNl bmRpZiAvKiBqaXRfcHBjNjRfQXNzZW1ibGVyX3BwYzY0X2ggKi8KLWRpZmYgLS1naXQgYS9qcy9z cmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuY3BwIGIvanMvc3JjL2ppdC9wcGM2NC9D b2RlR2VuZXJhdG9yLXBwYzY0LmNwcAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAw MDAwMDAwMC4uMGE0MzZmYjEyMDFhCi0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3Bw YzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuY3BwCi1AQCAtMCwwICsxLDM2NDcgQEAKLSsvKiAtKi0g TW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1v ZmZzZXQ6IDIgLSotCi0rICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgotKyAq IFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96 aWxsYSBQdWJsaWMKLSsgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdh cyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCi0rICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25l IGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsjaW5jbHVkZSAiaml0L3Bw YzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuaCIKLSsKLSsjaW5jbHVkZSAibW96aWxsYS9NYXRoQWxn b3JpdGhtcy5oIgotKwotKyNpbmNsdWRlIDxiaXQ+Ci0rCi0rI2luY2x1ZGUgImJ1aWx0aW4vTnVt YmVyLmgiCi0rI2luY2x1ZGUgImppdC9Db2RlR2VuZXJhdG9yLmgiCi0rI2luY2x1ZGUgImppdC9J bmxpbmVTY3JpcHRUcmVlLmgiCi0rI2luY2x1ZGUgImppdC9KaXRSdW50aW1lLmgiCi0rI2luY2x1 ZGUgImppdC9NSVItd2FzbS5oIgotKyNpbmNsdWRlICJqaXQvTUlSLmgiCi0rI2luY2x1ZGUgImpp dC9NSVJHcmFwaC5oIgotKyNpbmNsdWRlICJ2bS9KU0NvbnRleHQuaCIKLSsjaW5jbHVkZSAidm0v UmVhbG0uaCIKLSsjaW5jbHVkZSAidm0vU2hhcGUuaCIKLSsKLSsjaW5jbHVkZSAiaml0L3NoYXJl ZC9Db2RlR2VuZXJhdG9yLXNoYXJlZC1pbmwuaCIKLSsjaW5jbHVkZSAidm0vSlNTY3JpcHQtaW5s LmgiCi0rCi0rdXNpbmcgbmFtZXNwYWNlIGpzOwotK3VzaW5nIG5hbWVzcGFjZSBqczo6aml0Owot KwotK3VzaW5nIEpTOjpHZW5lcmljTmFOOwotK3VzaW5nIG1vemlsbGE6Ok5lZ2F0aXZlSW5maW5p dHk7Ci0rCi0rbmFtZXNwYWNlIGpzIHsKLStuYW1lc3BhY2Ugaml0IHsKLSsKLStDb2RlR2VuZXJh dG9yUFBDNjQ6OkNvZGVHZW5lcmF0b3JQUEM2NChNSVJHZW5lcmF0b3IqIGdlbiwgTElSR3JhcGgq IGdyYXBoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz ZW1ibGVyKiBtYXNtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHdhc206OkNvZGVNZXRhZGF0YSogY29kZU1ldGEpCi0rICAgIDogQ29kZUdlbmVyYXRvclNo YXJlZChnZW4sIGdyYXBoLCBtYXNtLCBjb2RlTWV0YSkge30KLSsKLStPcGVyYW5kIENvZGVHZW5l cmF0b3JQUEM2NDo6VG9PcGVyYW5kKGNvbnN0IExBbGxvY2F0aW9uJiBhKSB7Ci0rICBpZiAoYS5p c0dlbmVyYWxSZWcoKSkgewotKyAgICByZXR1cm4gT3BlcmFuZChhLnRvR2VuZXJhbFJlZygpLT5y ZWcoKSk7Ci0rICB9Ci0rICBpZiAoYS5pc0Zsb2F0UmVnKCkpIHsKLSsgICAgcmV0dXJuIE9wZXJh bmQoYS50b0Zsb2F0UmVnKCktPnJlZygpKTsKLSsgIH0KLSsgIHJldHVybiBPcGVyYW5kKFRvQWRk cmVzcyhhKSk7Ci0rfQotKwotK09wZXJhbmQgQ29kZUdlbmVyYXRvclBQQzY0OjpUb09wZXJhbmQo Y29uc3QgTEFsbG9jYXRpb24qIGEpIHsKLSsgIHJldHVybiBUb09wZXJhbmQoKmEpOwotK30KLSsK LStNb3ZlT3BlcmFuZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OnRvTW92ZU9wZXJhbmQoTEFsbG9jYXRp b24gYSkgY29uc3QgewotKyAgaWYgKGEuaXNHZW5lcmFsUmVnKCkpIHsKLSsgICAgcmV0dXJuIE1v dmVPcGVyYW5kKFRvUmVnaXN0ZXIoYSkpOwotKyAgfQotKyAgaWYgKGEuaXNGbG9hdFJlZygpKSB7 Ci0rICAgIHJldHVybiBNb3ZlT3BlcmFuZChUb0Zsb2F0UmVnaXN0ZXIoYSkpOwotKyAgfQotKyAg TW92ZU9wZXJhbmQ6OktpbmQga2luZCA9IGEuaXNTdGFja0FyZWEoKSA/IE1vdmVPcGVyYW5kOjpL aW5kOjpFZmZlY3RpdmVBZGRyZXNzCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogTW92ZU9wZXJhbmQ6OktpbmQ6Ok1lbW9yeTsKLSsgIEFkZHJlc3MgYWRkcmVz cyA9IFRvQWRkcmVzcyhhKTsKLSsgIE1PWl9BU1NFUlQoKGFkZHJlc3Mub2Zmc2V0ICYgMykgPT0g MCk7Ci0rICByZXR1cm4gTW92ZU9wZXJhbmQoYWRkcmVzcywga2luZCk7Ci0rfQotKwotK3ZvaWQg Q29kZUdlbmVyYXRvclBQQzY0OjpiYWlsb3V0RnJvbShMYWJlbCogbGFiZWwsIExTbmFwc2hvdCog c25hcHNob3QpIHsKLSsgIE1PWl9BU1NFUlRfSUYoIW1hc20ub29tKCksIGxhYmVsLT51c2VkKCkp OwotKyAgTU9aX0FTU0VSVF9JRighbWFzbS5vb20oKSwgIWxhYmVsLT5ib3VuZCgpKTsKLSsKLSsg IGVuY29kZShzbmFwc2hvdCk7Ci0rCi0rICBJbmxpbmVTY3JpcHRUcmVlKiB0cmVlID0gc25hcHNo b3QtPm1pcigpLT5ibG9jaygpLT50cmFja2VkVHJlZSgpOwotKyAgYXV0byogb29sID0gbmV3IChh bGxvYygpKSBMYW1iZGFPdXRPZkxpbmVDb2RlKFs9LCB0aGlzXShPdXRPZkxpbmVDb2RlJiBvb2wp IHsKLSsgICAgLy8gUHVzaCBzbmFwc2hvdE9mZnNldCBhbmQgbWFrZSBzdXJlIHN0YWNrIGlzIGFs aWduZWQuCi0rICAgIG1hc20uc3ViUHRyKEltbTMyKHNpemVvZihWYWx1ZSkpLCBTdGFja1BvaW50 ZXIpOwotKyAgICBtYXNtLnN0b3JlUHRyKEltbVdvcmQoc25hcHNob3QtPnNuYXBzaG90T2Zmc2V0 KCkpLAotKyAgICAgICAgICAgICAgICAgIEFkZHJlc3MoU3RhY2tQb2ludGVyLCAwKSk7Ci0rICAg IG1hc20uanVtcCgmZGVvcHRMYWJlbF8pOwotKyAgfSk7Ci0rICBhZGRPdXRPZkxpbmVDb2RlKG9v bCwKLSsgICAgICAgICAgICAgICAgICAgbmV3IChhbGxvYygpKSBCeXRlY29kZVNpdGUodHJlZSwg dHJlZS0+c2NyaXB0KCktPmNvZGUoKSkpOwotKwotKyAgbWFzbS5yZXRhcmdldChsYWJlbCwgb29s LT5lbnRyeSgpKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmJhaWxvdXQoTFNu YXBzaG90KiBzbmFwc2hvdCkgewotKyAgTGFiZWwgbGFiZWw7Ci0rICBtYXNtLmp1bXAoJmxhYmVs KTsKLSsgIGJhaWxvdXRGcm9tKCZsYWJlbCwgc25hcHNob3QpOwotK30KLSsKLSt2b2lkIENvZGVH ZW5lcmF0b3JQUEM2NDo6YmFpbG91dElmRmFsc2VCb29sKFJlZ2lzdGVyIGxocywgTFNuYXBzaG90 KiBzbmFwc2hvdCkgewotKyAgTGFiZWwgYmFpbDsKLSsgIG1hc20uYnJhbmNoVGVzdDMyKEFzc2Vt Ymxlcjo6WmVybywgbGhzLCBJbW0zMigweEZGKSwgJmJhaWwpOwotKyAgYmFpbG91dEZyb20oJmJh aWwsIHNuYXBzaG90KTsKLSt9Ci0rCi0rYm9vbCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmdlbmVyYXRl T3V0T2ZMaW5lQ29kZSgpIHsKLSsgIGlmICghQ29kZUdlbmVyYXRvclNoYXJlZDo6Z2VuZXJhdGVP dXRPZkxpbmVDb2RlKCkpIHsKLSsgICAgcmV0dXJuIGZhbHNlOwotKyAgfQotKwotKyAgaWYgKGRl b3B0TGFiZWxfLnVzZWQoKSkgewotKyAgICBtYXNtLmJpbmQoJmRlb3B0TGFiZWxfKTsKLSsKLSsg ICAgLy8gRnJhbWUgc2l6ZSBpcyBzdG9yZWQgaW4gTFIgYW5kIHB1c2hlZCBieSBHZW5lcmF0ZUJh aWxvdXRUaHVuawotKyAgICAvLyAodmlhIFB1c2hCYWlsb3V0RnJhbWUgLT4gcHVzaFJldHVybkFk ZHJlc3MgLT4gbWZscikuCi0rICAgIHsKLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhtYXNtKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgICAgIG1hc20ubW92ZVB0cihJbW1Xb3JkKGZyYW1lU2l6ZSgpKSwgc2NyYXRjaCk7Ci0rICAg ICAgbWFzbS54c19tdGxyKHNjcmF0Y2gpOwotKyAgICB9Ci0rCi0rICAgIFRyYW1wb2xpbmVQdHIg aGFuZGxlciA9IGdlbi0+aml0UnVudGltZSgpLT5nZXRHZW5lcmljQmFpbG91dEhhbmRsZXIoKTsK LSsgICAgbWFzbS5qdW1wKGhhbmRsZXIpOwotKyAgfQotKwotKyAgcmV0dXJuICFtYXNtLm9vbSgp OwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3JQUEM2NDo6YnJhbmNoVG9CbG9jayhNQmFzaWNC bG9jayogYmxvY2spIHsKLSsgIExhYmVsKiBsYWJlbCA9IHNraXBUcml2aWFsQmxvY2tzKGJsb2Nr KS0+bGlyKCktPmxhYmVsKCk7Ci0rICBtYXNtLmp1bXAobGFiZWwpOwotK30KLSsKLSt2b2lkIENv ZGVHZW5lcmF0b3JQUEM2NDo6YnJhbmNoVG9CbG9jayhBc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlv biBjb25kLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNQmFzaWNCbG9jayogbWlyKSB7Ci0rICBMYWJlbCogbGFiZWwgPSBza2lw VHJpdmlhbEJsb2NrcyhtaXIpLT5saXIoKS0+bGFiZWwoKTsKLSsgIG1hc20uYnJhbmNoRG91Ymxl KGNvbmQsIGxocywgcmhzLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0 OjpicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6RmxvYXRGb3JtYXQgZm10LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNv bmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1CYXNpY0Jsb2NrKiBtaXIpIHsKLSsgIExhYmVsKiBsYWJlbCA9IHNraXBUcml2 aWFsQmxvY2tzKG1pciktPmxpcigpLT5sYWJlbCgpOwotKyAgaWYgKGZtdCA9PSBBc3NlbWJsZXI6 OkRvdWJsZUZsb2F0KSB7Ci0rICAgIG1hc20uYnJhbmNoRG91YmxlKGNvbmQsIGxocywgcmhzLCBs YWJlbCk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLmJyYW5jaEZsb2F0KGNvbmQsIGxocywgcmhz LCBsYWJlbCk7Ci0rICB9Ci0rfQotKwotK2NsYXNzIE91dE9mTGluZVRhYmxlU3dpdGNoIDogcHVi bGljIE91dE9mTGluZUNvZGVCYXNlPENvZGVHZW5lcmF0b3JQUEM2ND4gewotKyAgTVRhYmxlU3dp dGNoKiBtaXJfOwotKyAgQ29kZUxhYmVsIGp1bXBMYWJlbF87Ci0rCi0rICB2b2lkIGFjY2VwdChD b2RlR2VuZXJhdG9yUFBDNjQqIGNvZGVnZW4pIHsKLSsgICAgY29kZWdlbi0+dmlzaXRPdXRPZkxp bmVUYWJsZVN3aXRjaCh0aGlzKTsKLSsgIH0KLSsKLSsgcHVibGljOgotKyAgZXhwbGljaXQgT3V0 T2ZMaW5lVGFibGVTd2l0Y2goTVRhYmxlU3dpdGNoKiBtaXIpIDogbWlyXyhtaXIpIHt9Ci0rCi0r ICBNVGFibGVTd2l0Y2gqIG1pcigpIGNvbnN0IHsgcmV0dXJuIG1pcl87IH0KLSsgIENvZGVMYWJl bCoganVtcExhYmVsKCkgeyByZXR1cm4gJmp1bXBMYWJlbF87IH0KLSt9OwotKwotK3ZvaWQgQ29k ZUdlbmVyYXRvclBQQzY0OjplbWl0VGFibGVTd2l0Y2hEaXNwYXRjaChNVGFibGVTd2l0Y2gqIG1p ciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgaW5kZXgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIGJhc2UpIHsKLSsgIExhYmVsKiBkZWZhdWx0Y2FzZSA9IHNraXBUcml2 aWFsQmxvY2tzKG1pci0+Z2V0RGVmYXVsdCgpKS0+bGlyKCktPmxhYmVsKCk7Ci0rCi0rICBpZiAo bWlyLT5sb3coKSAhPSAwKSB7Ci0rICAgIG1hc20uc3ViUHRyKEltbTMyKG1pci0+bG93KCkpLCBp bmRleCk7Ci0rICB9Ci0rCi0rICBpbnQzMl90IGNhc2VzID0gbWlyLT5udW1DYXNlcygpOwotKyAg bWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4LCBJbW1Xb3JkKGNh c2VzKSwgZGVmYXVsdGNhc2UpOwotKwotKyAgT3V0T2ZMaW5lVGFibGVTd2l0Y2gqIG9vbCA9IG5l dyAoYWxsb2MoKSkgT3V0T2ZMaW5lVGFibGVTd2l0Y2gobWlyKTsKLSsgIGFkZE91dE9mTGluZUNv ZGUob29sLCBtaXIpOwotKwotKyAgbWFzbS5tb3Yob29sLT5qdW1wTGFiZWwoKSwgYmFzZSk7Ci0r Ci0rICBCYXNlSW5kZXggcG9pbnRlcihiYXNlLCBpbmRleCwgU2NhbGVQb2ludGVyKTsKLSsgIG1h c20uYnJhbmNoVG9Db21wdXRlZEFkZHJlc3MocG9pbnRlcik7Ci0rfQotKwotK3ZvaWQgQ29kZUdl bmVyYXRvclBQQzY0OjpnZW5lcmF0ZUludmFsaWRhdGVFcGlsb2d1ZSgpIHsKLSsgIC8vIFBhZCB3 aXRoIGVub3VnaCBub3BzIHNvIHRoYXQgUGF0Y2hXcml0ZV9OZWFyQ2FsbCBvbiB0aGUgbGFzdCBP U0kgcG9pbnQKLSsgIC8vIGNhbm5vdCBvdmVybGFwIHRoZSBpbnZhbGlkYXRpb24gZXBpbG9ndWUu IFRoZSBwYXRjaCBhcmVhIGlzCi0rICAvLyBQYXRjaFdyaXRlX05lYXJDYWxsU2l6ZSAoNDApIGJ5 dGVzOyB0aGUgbGFzdCBPU0kgcG9pbnQgY291bGQgYmUgcmlnaHQKLSsgIC8vIGJlZm9yZSB0aGlz IGVwaWxvZ3VlLgotKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBc3NlbWJsZXI6OlBhdGNoV3Jp dGVfTmVhckNhbGxTaXplKCk7Ci0rICAgICAgIGkgKz0gQXNzZW1ibGVyOjpOb3BTaXplKCkpIHsK LSsgICAgbWFzbS5ub3AoKTsKLSsgIH0KLSsKLSsgIG1hc20uYmluZCgmaW52YWxpZGF0ZV8pOwot KwotKyAgLy8gUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3MgKExSKSBvbnRvIHRoZSBzdGFjay4KLSsg IG1hc20ucHVzaFJldHVybkFkZHJlc3MoKTsKLSsKLSsgIGludmFsaWRhdGVFcGlsb2d1ZURhdGFf ID0gbWFzbS5wdXNoV2l0aFBhdGNoKEltbVdvcmQodWludHB0cl90KC0xKSkpOwotKwotKyAgVHJh bXBvbGluZVB0ciB0aHVuayA9IGdlbi0+aml0UnVudGltZSgpLT5nZXRJbnZhbGlkYXRpb25UaHVu aygpOwotKyAgbWFzbS5qdW1wKHRodW5rKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yUFBD NjQ6OnZpc2l0T3V0T2ZMaW5lVGFibGVTd2l0Y2goT3V0T2ZMaW5lVGFibGVTd2l0Y2gqIG9vbCkg ewotKyAgTVRhYmxlU3dpdGNoKiBtaXIgPSBvb2wtPm1pcigpOwotKwotKyAgbWFzbS5oYWx0aW5n QWxpZ24oc2l6ZW9mKHZvaWQqKSk7Ci0rICBtYXNtLmJpbmQob29sLT5qdW1wTGFiZWwoKSk7Ci0r ICBtYXNtLmFkZENvZGVMYWJlbCgqb29sLT5qdW1wTGFiZWwoKSk7Ci0rCi0rICBmb3IgKHNpemVf dCBpID0gMDsgaSA8IG1pci0+bnVtQ2FzZXMoKTsgaSsrKSB7Ci0rICAgIExCbG9jayogY2FzZWJs b2NrID0gc2tpcFRyaXZpYWxCbG9ja3MobWlyLT5nZXRDYXNlKGkpKS0+bGlyKCk7Ci0rICAgIExh YmVsKiBjYXNlaGVhZGVyID0gY2FzZWJsb2NrLT5sYWJlbCgpOwotKyAgICB1aW50MzJfdCBjYXNl b2Zmc2V0ID0gY2FzZWhlYWRlci0+b2Zmc2V0KCk7Ci0rCi0rICAgIENvZGVMYWJlbCBjbDsKLSsg ICAgbWFzbS53cml0ZUNvZGVQb2ludGVyKCZjbCk7Ci0rICAgIGNsLnRhcmdldCgpLT5iaW5kKGNh c2VvZmZzZXQpOwotKyAgICBtYXNtLmFkZENvZGVMYWJlbChjbCk7Ci0rICB9Ci0rfQotKwotK3Zv aWQgQ29kZUdlbmVyYXRvclBQQzY0Ojp2aXNpdE91dE9mTGluZVdhc21UcnVuY2F0ZUNoZWNrKAot KyAgICBPdXRPZkxpbmVXYXNtVHJ1bmNhdGVDaGVjayogb29sKSB7Ci0rICBpZiAob29sLT50b1R5 cGUoKSA9PSBNSVJUeXBlOjpJbnQzMikgewotKyAgICBtYXNtLm91dE9mTGluZVdhc21UcnVuY2F0 ZVRvSW50MzJDaGVjayhvb2wtPmlucHV0KCksIG9vbC0+b3V0cHV0KCksCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9vbC0+ZnJvbVR5cGUoKSwgb29sLT5mbGFn cygpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2wtPnJl am9pbigpLCBvb2wtPnRyYXBTaXRlRGVzYygpKTsKLSsgIH0gZWxzZSB7Ci0rICAgIE1PWl9BU1NF UlQob29sLT50b1R5cGUoKSA9PSBNSVJUeXBlOjpJbnQ2NCk7Ci0rICAgIG1hc20ub3V0T2ZMaW5l V2FzbVRydW5jYXRlVG9JbnQ2NENoZWNrKG9vbC0+aW5wdXQoKSwgb29sLT5vdXRwdXQ2NCgpLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2wtPmZyb21UeXBl KCksIG9vbC0+ZmxhZ3MoKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb29sLT5yZWpvaW4oKSwgb29sLT50cmFwU2l0ZURlc2MoKSk7Ci0rICB9Ci0rfQotKwot K3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjplbWl0QmlnSW50UHRyRGl2KExCaWdJbnRQdHJEaXYq IGlucywgUmVnaXN0ZXIgZGl2aWRlbmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgZGl2aXNvciwgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBtYXNt LmFzX2RpdmQob3V0cHV0LCBkaXZpZGVuZCwgZGl2aXNvcik7Ci0rfQotKwotK3ZvaWQgQ29kZUdl bmVyYXRvclBQQzY0OjplbWl0QmlnSW50UHRyTW9kKExCaWdJbnRQdHJNb2QqIGlucywgUmVnaXN0 ZXIgZGl2aWRlbmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgZGl2aXNvciwgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBpZiAoSGFzUE9XRVI5KCkp IHsKLSsgICAgbWFzbS5hc19tb2RzZChvdXRwdXQsIGRpdmlkZW5kLCBkaXZpc29yKTsKLSsgIH0g ZWxzZSB7Ci0rICAgIG1hc20uYXNfZGl2ZChvdXRwdXQsIGRpdmlkZW5kLCBkaXZpc29yKTsKLSsg ICAgbWFzbS5hc19tdWxsZChvdXRwdXQsIG91dHB1dCwgZGl2aXNvcik7Ci0rICAgIG1hc20uYXNf c3ViZihvdXRwdXQsIG91dHB1dCwgZGl2aWRlbmQpOwotKyAgfQotK30KLSsKLSsvLyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsvLyBWaXNpdG9yczogQm94L1VuYm94Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEJv eChMQm94KiBib3gpIHsKLSsgIGNvbnN0IExBbGxvY2F0aW9uKiBpbiA9IGJveC0+Z2V0T3BlcmFu ZCgwKTsKLSsgIFZhbHVlT3BlcmFuZCByZXN1bHQgPSBUb091dFZhbHVlKGJveCk7Ci0rCi0rICBt YXNtLm1vdmVWYWx1ZShUeXBlZE9yVmFsdWVSZWdpc3Rlcihib3gtPnR5cGUoKSwgVG9BbnlSZWdp c3RlcihpbikpLCByZXN1bHQpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0VW5i b3goTFVuYm94KiB1bmJveCkgewotKyAgTVVuYm94KiBtaXIgPSB1bmJveC0+bWlyKCk7Ci0rCi0r ICBSZWdpc3RlciByZXN1bHQgPSBUb1JlZ2lzdGVyKHVuYm94LT5vdXRwdXQoKSk7Ci0rCi0rICBp ZiAobWlyLT5mYWxsaWJsZSgpKSB7Ci0rICAgIFZhbHVlT3BlcmFuZCB2YWx1ZSA9IFRvVmFsdWUo dW5ib3gtPmlucHV0KCkpOwotKyAgICBMYWJlbCBiYWlsOwotKyAgICBzd2l0Y2ggKG1pci0+dHlw ZSgpKSB7Ci0rICAgICAgY2FzZSBNSVJUeXBlOjpJbnQzMjoKLSsgICAgICAgIG1hc20uZmFsbGli bGVVbmJveEludDMyKHZhbHVlLCByZXN1bHQsICZiYWlsKTsKLSsgICAgICAgIGJyZWFrOwotKyAg ICAgIGNhc2UgTUlSVHlwZTo6Qm9vbGVhbjoKLSsgICAgICAgIG1hc20uZmFsbGlibGVVbmJveEJv b2xlYW4odmFsdWUsIHJlc3VsdCwgJmJhaWwpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2Fz ZSBNSVJUeXBlOjpPYmplY3Q6Ci0rICAgICAgICBtYXNtLmZhbGxpYmxlVW5ib3hPYmplY3QodmFs dWUsIHJlc3VsdCwgJmJhaWwpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBNSVJUeXBl OjpTdHJpbmc6Ci0rICAgICAgICBtYXNtLmZhbGxpYmxlVW5ib3hTdHJpbmcodmFsdWUsIHJlc3Vs dCwgJmJhaWwpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBNSVJUeXBlOjpTeW1ib2w6 Ci0rICAgICAgICBtYXNtLmZhbGxpYmxlVW5ib3hTeW1ib2wodmFsdWUsIHJlc3VsdCwgJmJhaWwp OwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBNSVJUeXBlOjpCaWdJbnQ6Ci0rICAgICAg ICBtYXNtLmZhbGxpYmxlVW5ib3hCaWdJbnQodmFsdWUsIHJlc3VsdCwgJmJhaWwpOwotKyAgICAg ICAgYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIE1PWl9DUkFTSCgiR2l2ZW4gTUlS VHlwZSBjYW5ub3QgYmUgdW5ib3hlZC4iKTsKLSsgICAgfQotKyAgICBiYWlsb3V0RnJvbSgmYmFp bCwgdW5ib3gtPnNuYXBzaG90KCkpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBMQWxsb2Nh dGlvbiogaW5wdXQgPSB1bmJveC0+Z2V0T3BlcmFuZChMVW5ib3g6OklucHV0KTsKLSsgIGlmIChp bnB1dC0+aXNHZW5lcmFsUmVnKCkpIHsKLSsgICAgUmVnaXN0ZXIgaW5wdXRSZWcgPSBUb1JlZ2lz dGVyKGlucHV0KTsKLSsgICAgc3dpdGNoIChtaXItPnR5cGUoKSkgewotKyAgICAgIGNhc2UgTUlS VHlwZTo6SW50MzI6Ci0rICAgICAgICBtYXNtLnVuYm94SW50MzIoVmFsdWVPcGVyYW5kKGlucHV0 UmVnKSwgcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgTUlSVHlwZTo6Qm9v bGVhbjoKLSsgICAgICAgIG1hc20udW5ib3hCb29sZWFuKFZhbHVlT3BlcmFuZChpbnB1dFJlZyks IHJlc3VsdCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIE1JUlR5cGU6Ok9iamVjdDoK LSsgICAgICAgIG1hc20udW5ib3hPYmplY3QoVmFsdWVPcGVyYW5kKGlucHV0UmVnKSwgcmVzdWx0 KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgTUlSVHlwZTo6U3RyaW5nOgotKyAgICAg ICAgbWFzbS51bmJveFN0cmluZyhWYWx1ZU9wZXJhbmQoaW5wdXRSZWcpLCByZXN1bHQpOwotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBNSVJUeXBlOjpTeW1ib2w6Ci0rICAgICAgICBtYXNt LnVuYm94U3ltYm9sKFZhbHVlT3BlcmFuZChpbnB1dFJlZyksIHJlc3VsdCk7Ci0rICAgICAgICBi cmVhazsKLSsgICAgICBjYXNlIE1JUlR5cGU6OkJpZ0ludDoKLSsgICAgICAgIG1hc20udW5ib3hC aWdJbnQoVmFsdWVPcGVyYW5kKGlucHV0UmVnKSwgcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwot KyAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICBNT1pfQ1JBU0goIkdpdmVuIE1JUlR5cGUgY2Fubm90 IGJlIHVuYm94ZWQuIik7Ci0rICAgIH0KLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgQWRkcmVz cyBpbnB1dEFkZHIgPSBUb0FkZHJlc3MoaW5wdXQpOwotKyAgc3dpdGNoIChtaXItPnR5cGUoKSkg ewotKyAgICBjYXNlIE1JUlR5cGU6OkludDMyOgotKyAgICAgIG1hc20udW5ib3hJbnQzMihpbnB1 dEFkZHIsIHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgTUlSVHlwZTo6Qm9vbGVh bjoKLSsgICAgICBtYXNtLnVuYm94Qm9vbGVhbihpbnB1dEFkZHIsIHJlc3VsdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgTUlSVHlwZTo6T2JqZWN0OgotKyAgICAgIG1hc20udW5ib3hPYmpl Y3QoaW5wdXRBZGRyLCByZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIE1JUlR5cGU6 OlN0cmluZzoKLSsgICAgICBtYXNtLnVuYm94U3RyaW5nKGlucHV0QWRkciwgcmVzdWx0KTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSBNSVJUeXBlOjpTeW1ib2w6Ci0rICAgICAgbWFzbS51bmJv eFN5bWJvbChpbnB1dEFkZHIsIHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgTUlS VHlwZTo6QmlnSW50OgotKyAgICAgIG1hc20udW5ib3hCaWdJbnQoaW5wdXRBZGRyLCByZXN1bHQp OwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgiR2l2ZW4g TUlSVHlwZSBjYW5ub3QgYmUgdW5ib3hlZC4iKTsKLSsgIH0KLSt9Ci0rCi0rLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r Ly8gVmlzaXRvcnM6IEludGVnZXIgQXJpdGhtZXRpYwotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6 dmlzaXRBZGRJKExBZGRJKiBpbnMpIHsKLSsgIExBbGxvY2F0aW9uKiBsaHMgPSBpbnMtPmdldE9w ZXJhbmQoMCk7Ci0rICBMQWxsb2NhdGlvbiogcmhzID0gaW5zLT5nZXRPcGVyYW5kKDEpOwotKyAg UmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5nZXREZWYoMCkpOwotKwotKyAgaWYgKHJo cy0+aXNDb25zdGFudCgpKSB7Ci0rICAgIEltbTMyIGltbShUb0ludDMyKHJocykpOwotKyAgICBp ZiAoaW5zLT5zbmFwc2hvdCgpKSB7Ci0rICAgICAgbWFzbS5tb3ZlMzIoVG9SZWdpc3RlcihsaHMp LCBkZXN0KTsKLSsgICAgICBMYWJlbCBvdmVyZmxvdzsKLSsgICAgICBtYXNtLmJyYW5jaEFkZDMy KEFzc2VtYmxlcjo6T3ZlcmZsb3csIGltbSwgZGVzdCwgJm92ZXJmbG93KTsKLSsgICAgICBiYWls b3V0RnJvbSgmb3ZlcmZsb3csIGlucy0+c25hcHNob3QoKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAg ICAgbWFzbS5hZGQzMihpbW0sIFRvUmVnaXN0ZXIobGhzKSwgZGVzdCk7Ci0rICAgIH0KLSsgIH0g ZWxzZSB7Ci0rICAgIFJlZ2lzdGVyIHJoc1JlZyA9IFRvUmVnaXN0ZXIocmhzKTsKLSsgICAgaWYg KGlucy0+c25hcHNob3QoKSkgewotKyAgICAgIC8vIFVzZSAzLW9wZXJhbmQgYWRkIHRvIGF2b2lk IGNsb2JiZXJpbmcgcmhzIHdoZW4gcmhzID09IGRlc3QuCi0rICAgICAgbWFzbS5hc19hZGQoZGVz dCwgVG9SZWdpc3RlcihsaHMpLCByaHNSZWcpOwotKyAgICAgIC8vIENoZWNrIDMyLWJpdCBvdmVy Zmxvdzogc2lnbi1leHRlbmQgbG93ZXIgMzIgYW5kIGNvbXBhcmUuCi0rICAgICAgbWFzbS5hc19l eHRzdyhTZWNvbmRTY3JhdGNoUmVnLCBkZXN0KTsKLSsgICAgICBMYWJlbCBvdmVyZmxvdzsKLSsg ICAgICBtYXNtLmFzX2NtcGQoZGVzdCwgU2Vjb25kU2NyYXRjaFJlZyk7Ci0rICAgICAgbWFzbS5t YV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZvdmVyZmxvdyk7Ci0rICAgICAgbWFzbS5hc19leHRz dyhkZXN0LCBkZXN0KTsKLSsgICAgICBiYWlsb3V0RnJvbSgmb3ZlcmZsb3csIGlucy0+c25hcHNo b3QoKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgbWFzbS5hc19hZGQoZGVzdCwgVG9SZWdpc3Rl cihsaHMpLCByaHNSZWcpOwotKyAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rICAg IH0KLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEFkZEludFB0cihMQWRk SW50UHRyKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+Z2V0RGVm KDApKTsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5nZXRPcGVyYW5kKDApKTsK LSsgIGNvbnN0IExBbGxvY2F0aW9uKiByaHMgPSBpbnMtPmdldE9wZXJhbmQoMSk7Ci0rCi0rICBp ZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgaWYgKGxocyAhPSBkZXN0KSB7Ci0rICAgICAg bWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7Ci0rICAgIH0KLSsgICAgbWFzbS5hZGRQdHIoSW1tV29y ZChUb0ludFB0cihyaHMpKSwgZGVzdCk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLmFzX2FkZChk ZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVy YXRvcjo6dmlzaXRBZGRJNjQoTEFkZEk2NCogbGlyKSB7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9S ZWdpc3RlcihsaXItPmdldERlZigwKSk7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGxp ci0+Z2V0T3BlcmFuZCgwKSk7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiogcmhzID0gbGlyLT5nZXRP cGVyYW5kKDEpOwotKwotKyAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7Ci0rICAgIGlmIChsaHMg IT0gZGVzdCkgewotKyAgICAgIG1hc20ubW92ZVB0cihsaHMsIGRlc3QpOwotKyAgICB9Ci0rICAg IG1hc20uYWRkUHRyKEltbVdvcmQoVG9JbnQ2NChyaHMpKSwgZGVzdCk7Ci0rICB9IGVsc2Ugewot KyAgICBtYXNtLmFzX2FkZChkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7Ci0rICB9Ci0rfQot KwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRTdWJJKExTdWJJKiBpbnMpIHsKLSsgIExBbGxv Y2F0aW9uKiBsaHMgPSBpbnMtPmdldE9wZXJhbmQoMCk7Ci0rICBMQWxsb2NhdGlvbiogcmhzID0g aW5zLT5nZXRPcGVyYW5kKDEpOwotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5n ZXREZWYoMCkpOwotKwotKyAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7Ci0rICAgIEltbTMyIGlt bShUb0ludDMyKHJocykpOwotKyAgICBpZiAoaW5zLT5zbmFwc2hvdCgpKSB7Ci0rICAgICAgbWFz bS5tb3ZlMzIoVG9SZWdpc3RlcihsaHMpLCBkZXN0KTsKLSsgICAgICBMYWJlbCBvdmVyZmxvdzsK LSsgICAgICBtYXNtLmJyYW5jaFN1YjMyKEFzc2VtYmxlcjo6T3ZlcmZsb3csIGltbSwgZGVzdCwg Jm92ZXJmbG93KTsKLSsgICAgICBiYWlsb3V0RnJvbSgmb3ZlcmZsb3csIGlucy0+c25hcHNob3Qo KSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgbWFzbS5tb3ZlMzIoVG9SZWdpc3RlcihsaHMpLCBk ZXN0KTsKLSsgICAgICBtYXNtLnN1YjMyKGltbSwgZGVzdCk7Ci0rICAgIH0KLSsgIH0gZWxzZSB7 Ci0rICAgIFJlZ2lzdGVyIHJoc1JlZyA9IFRvUmVnaXN0ZXIocmhzKTsKLSsgICAgaWYgKGlucy0+ c25hcHNob3QoKSkgewotKyAgICAgIC8vIGFzX3N1YmYoZCwgYSwgYikgY29tcHV0ZXMgZCA9IGIg LSBhLCBzbyBzdWJmKGRlc3QsIHJocywgbGhzKSA9IGxocyAtCi0rICAgICAgLy8gcmhzCi0rICAg ICAgbWFzbS5hc19zdWJmKGRlc3QsIHJoc1JlZywgVG9SZWdpc3RlcihsaHMpKTsKLSsgICAgICBt YXNtLmFzX2V4dHN3KFNlY29uZFNjcmF0Y2hSZWcsIGRlc3QpOwotKyAgICAgIExhYmVsIG92ZXJm bG93OwotKyAgICAgIG1hc20uYXNfY21wZChkZXN0LCBTZWNvbmRTY3JhdGNoUmVnKTsKLSsgICAg ICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJm92ZXJmbG93KTsKLSsgICAgICBtYXNt LmFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKyAgICAgIGJhaWxvdXRGcm9tKCZvdmVyZmxvdywgaW5z LT5zbmFwc2hvdCgpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBtYXNtLmFzX3N1YmYoZGVzdCwg cmhzUmVnLCBUb1JlZ2lzdGVyKGxocykpOwotKyAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVz dCk7Ci0rICAgIH0KLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFN1Yklu dFB0cihMU3ViSW50UHRyKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlu cy0+Z2V0RGVmKDApKTsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5nZXRPcGVy YW5kKDApKTsKLSsgIGNvbnN0IExBbGxvY2F0aW9uKiByaHMgPSBpbnMtPmdldE9wZXJhbmQoMSk7 Ci0rCi0rICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgaWYgKGxocyAhPSBkZXN0KSB7 Ci0rICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7Ci0rICAgIH0KLSsgICAgbWFzbS5zdWJQ dHIoSW1tMzIoVG9JbnRQdHIocmhzKSksIGRlc3QpOwotKyAgfSBlbHNlIHsKLSsgICAgLy8gYXNf c3ViZihkLCBhLCBiKSA9IGIgLSBhCi0rICAgIG1hc20uYXNfc3ViZihkZXN0LCBUb1JlZ2lzdGVy KHJocyksIGxocyk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRTdWJJ NjQoTFN1Ykk2NCogbGlyKSB7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihsaXItPmdl dERlZigwKSk7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0T3BlcmFuZCgw KSk7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiogcmhzID0gbGlyLT5nZXRPcGVyYW5kKDEpOwotKwot KyAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7Ci0rICAgIGlmIChsaHMgIT0gZGVzdCkgewotKyAg ICAgIG1hc20ubW92ZVB0cihsaHMsIGRlc3QpOwotKyAgICB9Ci0rICAgIG1hc20uc3ViNjQoSW1t NjQoVG9JbnQ2NChyaHMpKSwgUmVnaXN0ZXI2NChkZXN0KSk7Ci0rICB9IGVsc2UgewotKyAgICAv LyBhc19zdWJmKGQsIGEsIGIpID0gYiAtIGEKLSsgICAgbWFzbS5hc19zdWJmKGRlc3QsIFRvUmVn aXN0ZXIocmhzKSwgbGhzKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNp dE11bEkoTE11bEkqIGlucykgewotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5n ZXREZWYoMCkpOwotKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmdldE9wZXJhbmQo MCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGlucy0+Z2V0T3BlcmFuZCgxKTsKLSsg IE1NdWwqIG11bCA9IGlucy0+bWlyKCk7Ci0rCi0rICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsK LSsgICAgaW50MzJfdCBjb25zdGFudCA9IFRvSW50MzIocmhzKTsKLSsgICAgUmVnaXN0ZXIgc3Jj ID0gbGhzOwotKwotKyAgICAvLyBCYWlsb3V0IG9uIC0wLjAgYmVmb3JlIHRoZSBzcGVjaWFsLWNh c2UgaGFuZGxpbmcgYmVsb3csIHNpbmNlIGNhc2VzCi0rICAgIC8vIGxpa2UgLTEgYW5kIDAgcmV0 dXJuIGVhcmx5IGFuZCB3b3VsZCBza2lwIHRoZSBjaGVjay4KLSsgICAgaWYgKG11bC0+Y2FuQmVO ZWdhdGl2ZVplcm8oKSAmJiBjb25zdGFudCA8PSAwKSB7Ci0rICAgICAgQXNzZW1ibGVyOjpDb25k aXRpb24gY29uZCA9Ci0rICAgICAgICAgIChjb25zdGFudCA9PSAwKSA/IEFzc2VtYmxlcjo6U2ln bmVkIDogQXNzZW1ibGVyOjpFcXVhbDsKLSsgICAgICBiYWlsb3V0Q21wMzIoY29uZCwgc3JjLCBJ bW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKLSsgICAgfQotKwotKyAgICBzd2l0Y2ggKGNvbnN0 YW50KSB7Ci0rICAgICAgY2FzZSAtMToKLSsgICAgICAgIGlmIChtdWwtPmNhbk92ZXJmbG93KCkp IHsKLSsgICAgICAgICAgTGFiZWwgb2s7Ci0rICAgICAgICAgIG1hc20uYnJhbmNoUHRyKEFzc2Vt Ymxlcjo6Tm90RXF1YWwsIGxocywgSW1tV29yZChJTlQzMl9NSU4pLCAmb2spOwotKyAgICAgICAg ICBiYWlsb3V0KGlucy0+c25hcHNob3QoKSk7Ci0rICAgICAgICAgIG1hc20uYmluZCgmb2spOwot KyAgICAgICAgfQotKyAgICAgICAgbWFzbS5hc19uZWcoZGVzdCwgc3JjKTsKLSsgICAgICAgIG1h c20uYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgY2FzZSAw OgotKyAgICAgICAgbWFzbS5tb3ZlMzIoSW1tMzIoMCksIGRlc3QpOwotKyAgICAgICAgcmV0dXJu OwotKyAgICAgIGNhc2UgMToKLSsgICAgICAgIG1hc20ubW92ZTMyKHNyYywgZGVzdCk7Ci0rICAg ICAgICByZXR1cm47Ci0rICAgICAgY2FzZSAyOgotKyAgICAgICAgaWYgKG11bC0+Y2FuT3ZlcmZs b3coKSkgewotKyAgICAgICAgICBtYXNtLm1vdmUzMihzcmMsIGRlc3QpOwotKyAgICAgICAgICBM YWJlbCBvdmVyZmxvdzsKLSsgICAgICAgICAgbWFzbS5icmFuY2hBZGQzMihBc3NlbWJsZXI6Ok92 ZXJmbG93LCBkZXN0LCBkZXN0LCAmb3ZlcmZsb3cpOwotKyAgICAgICAgICBiYWlsb3V0RnJvbSgm b3ZlcmZsb3csIGlucy0+c25hcHNob3QoKSk7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAg ICBtYXNtLm1vdmUzMihzcmMsIGRlc3QpOwotKyAgICAgICAgICBtYXNtLmFkZDMyKGRlc3QsIGRl c3QpOwotKyAgICAgICAgfQotKyAgICAgICAgcmV0dXJuOwotKyAgICAgIGRlZmF1bHQ6Ci0rICAg ICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyBDaGVjayBmb3IgcG93ZXIgb2YgMiAocG9z aXRpdmUpLgotKyAgICB1aW50MzJfdCBhYnNDc3QgPSBtb3ppbGxhOjpBYnMoY29uc3RhbnQpOwot KyAgICBpZiAoYWJzQ3N0ID4gMCAmJiAoYWJzQ3N0ICYgKGFic0NzdCAtIDEpKSA9PSAwICYmICFt dWwtPmNhbk92ZXJmbG93KCkpIHsKLSsgICAgICB1aW50MzJfdCBzaGlmdCA9IG1vemlsbGE6OkZs b29yTG9nMihhYnNDc3QpOwotKyAgICAgIG1hc20ueF9zbHdpKGRlc3QsIHNyYywgc2hpZnQpOwot KyAgICAgIGlmIChjb25zdGFudCA8IDApIHsKLSsgICAgICAgIG1hc20uYXNfbmVnKGRlc3QsIGRl c3QpOwotKyAgICAgIH0KLSsgICAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKyAgICAg IHJldHVybjsKLSsgICAgfQotKwotKyAgICAvLyBHZW5lcmFsIGNhc2UuCi0rICAgIGlmIChtdWwt PmNhbk92ZXJmbG93KCkpIHsKLSsgICAgICBtYXNtLm1vdmUzMihzcmMsIGRlc3QpOwotKyAgICAg IExhYmVsIG92ZXJmbG93OwotKyAgICAgIG1hc20uYnJhbmNoTXVsMzIoQXNzZW1ibGVyOjpPdmVy ZmxvdywgSW1tMzIoY29uc3RhbnQpLCBkZXN0LCAmb3ZlcmZsb3cpOwotKyAgICAgIGJhaWxvdXRG cm9tKCZvdmVyZmxvdywgaW5zLT5zbmFwc2hvdCgpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBt YXNtLm1vdmUzMihzcmMsIGRlc3QpOwotKyAgICAgIG1hc20ubXVsMzIoSW1tMzIoY29uc3RhbnQp LCBkZXN0KTsKLSsgICAgfQotKwotKyAgICAvLyBDaGVjayBmb3IgbmVnYXRpdmUgemVybyAoZm9y IGNvbnN0YW50cyBub3QgaGFuZGxlZCBhYm92ZSkuCi0rICAgIGlmIChtdWwtPmNhbkJlTmVnYXRp dmVaZXJvKCkgJiYgY29uc3RhbnQgPCAwKSB7Ci0rICAgICAgTGFiZWwgb2s7Ci0rICAgICAgbWFz bS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgZGVzdCwgSW1tV29yZCgwKSwgJm9rKTsK LSsgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpTaWduZWQsIHNyYywgc3JjLCBpbnMtPnNu YXBzaG90KCkpOwotKyAgICAgIG1hc20uYmluZCgmb2spOwotKyAgICB9Ci0rICAgIHJldHVybjsK LSsgIH0KLSsKLSsgIFJlZ2lzdGVyIHJoc1JlZyA9IFRvUmVnaXN0ZXIocmhzKTsKLSsKLSsgIGlm IChtdWwtPmNhbk92ZXJmbG93KCkpIHsKLSsgICAgLy8gVXNlIDY0LWJpdCBtdWx0aXBseSBzbyB0 aGUgZnVsbCByZXN1bHQgaXMgZGV0ZXJtaW5pc3RpYywgdGhlbiBjaGVjawotKyAgICAvLyB3aGV0 aGVyIHRydW5jYXRpbmcgdG8gMzIgYml0cyBjaGFuZ2VzIHRoZSB2YWx1ZS4gTWF0Y2ggdGhlCi0r ICAgIC8vIHZpc2l0QWRkSS92aXNpdFN1Ykkgb3JkZXJpbmc6IGJyYW5jaCBmaXJzdCwgdHJ1bmNh dGUgb25seSBvbiB0aGUKLSsgICAgLy8gc3VjY2VzcyBwYXRoICh0aGUgYmFpbG91dCBkaXNjYXJk cyBkZXN0IGFueXdheSkuIGV4dHN3IGlzCi0rICAgIC8vIG5vbi1yZWNvcmRpbmcgKElTQSB2My4w Qikgc28gaXQgZG9lc24ndCBkaXN0dXJiIENSMAotKyAgICAvLyBlaXRoZXIgd2F5OyB0aGUgY2hv aWNlIGlzIGZvciBjb25zaXN0ZW5jeS4KLSsgICAgbWFzbS5hc19tdWxsZChkZXN0LCBsaHMsIHJo c1JlZyk7Ci0rICAgIG1hc20uYXNfZXh0c3coU2Vjb25kU2NyYXRjaFJlZywgZGVzdCk7Ci0rICAg IExhYmVsIG92ZXJmbG93OwotKyAgICBtYXNtLmFzX2NtcGQoZGVzdCwgU2Vjb25kU2NyYXRjaFJl Zyk7Ci0rICAgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmb3ZlcmZsb3cpOwotKyAg ICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKyAgICBiYWlsb3V0RnJvbSgmb3ZlcmZsb3cs IGlucy0+c25hcHNob3QoKSk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLmFzX211bGx3KGRlc3Qs IGxocywgcmhzUmVnKTsKLSsgICAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKLSsgIH0KLSsK LSsgIGlmIChtdWwtPmNhbkJlTmVnYXRpdmVaZXJvKCkpIHsKLSsgICAgTGFiZWwgZG9uZTsKLSsg ICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgZGVzdCwgSW1tV29yZCgwKSwg JmRvbmUpOwotKyAgICAvLyBSZXN1bHQgaXMgMC4gQ2hlY2sgaWYgbGhzfHJocyB3YXMgbmVnYXRp dmUuCi0rICAgIHsKLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsK LSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAgIG1hc20u YXNfb3JfKHNjcmF0Y2gsIGxocywgcmhzUmVnKTsKLSsgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1i bGVyOjpTaWduZWQsIHNjcmF0Y2gsIHNjcmF0Y2gsIGlucy0+c25hcHNob3QoKSk7Ci0rICAgIH0K LSsgICAgbWFzbS5iaW5kKCZkb25lKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9y Ojp2aXNpdE11bEludFB0cihMTXVsSW50UHRyKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGRlc3QgPSBU b1JlZ2lzdGVyKGlucy0+Z2V0RGVmKDApKTsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIo aW5zLT5nZXRPcGVyYW5kKDApKTsKLSsgIGNvbnN0IExBbGxvY2F0aW9uKiByaHMgPSBpbnMtPmdl dE9wZXJhbmQoMSk7Ci0rCi0rICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgaWYgKGxo cyAhPSBkZXN0KSB7Ci0rICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7Ci0rICAgIH0KLSsg ICAgbWFzbS5tdWxQdHIoSW1tV29yZChUb0ludFB0cihyaHMpKSwgZGVzdCk7Ci0rICB9IGVsc2Ug ewotKyAgICBtYXNtLmFzX211bGxkKGRlc3QsIGxocywgVG9SZWdpc3RlcihyaHMpKTsKLSsgIH0K LSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE11bEk2NChMTXVsSTY0KiBsaXIpIHsK LSsgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0RGVmKDApKTsKLSsgIFJlZ2lz dGVyIGxocyA9IFRvUmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5kKDApKTsKLSsgIGNvbnN0IExBbGxv Y2F0aW9uKiByaHMgPSBsaXItPmdldE9wZXJhbmQoMSk7Ci0rCi0rICBpZiAocmhzLT5pc0NvbnN0 YW50KCkpIHsKLSsgICAgaWYgKGxocyAhPSBkZXN0KSB7Ci0rICAgICAgbWFzbS5tb3ZlUHRyKGxo cywgZGVzdCk7Ci0rICAgIH0KLSsgICAgbWFzbS5tdWxQdHIoSW1tV29yZChUb0ludDY0KHJocykp LCBkZXN0KTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20uYXNfbXVsbGQoZGVzdCwgbGhzLCBUb1Jl Z2lzdGVyKHJocykpOwotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0RGl2 SShMRGl2SSogaW5zKSB7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+bGhzKCkp OwotKyAgUmVnaXN0ZXIgcmhzID0gVG9SZWdpc3RlcihpbnMtPnJocygpKTsKLSsgIFJlZ2lzdGVy IGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKyAgUmVnaXN0ZXIgdGVtcCA9IFRv UmVnaXN0ZXIoaW5zLT50ZW1wMCgpKTsKLSsgIE1EaXYqIG1pciA9IGlucy0+bWlyKCk7Ci0rCi0r ICBMYWJlbCBkb25lOwotKwotKyAgLy8gSGFuZGxlIGRpdmlkZSBieSB6ZXJvLgotKyAgaWYgKG1p ci0+Y2FuQmVEaXZpZGVCeVplcm8oKSkgewotKyAgICBpZiAobWlyLT50cmFwT25FcnJvcigpKSB7 Ci0rICAgICAgTGFiZWwgbm9uWmVybzsKLSsgICAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6 Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoMCksICZub25aZXJvKTsKLSsgICAgICBtYXNtLndhc21U cmFwKHdhc206OlRyYXA6OkludGVnZXJEaXZpZGVCeVplcm8sIG1pci0+dHJhcFNpdGVEZXNjKCkp OwotKyAgICAgIG1hc20uYmluZCgmbm9uWmVybyk7Ci0rICAgIH0gZWxzZSBpZiAobWlyLT5jYW5U cnVuY2F0ZUluZmluaXRpZXMoKSkgewotKyAgICAgIExhYmVsIG5vblplcm87Ci0rICAgICAgbWFz bS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmhzLCBJbW1Xb3JkKDApLCAmbm9uWmVy byk7Ci0rICAgICAgbWFzbS5tb3ZlMzIoSW1tMzIoMCksIGRlc3QpOwotKyAgICAgIG1hc20uanVt cCgmZG9uZSk7Ci0rICAgICAgbWFzbS5iaW5kKCZub25aZXJvKTsKLSsgICAgfSBlbHNlIHsKLSsg ICAgICBNT1pfQVNTRVJUKG1pci0+ZmFsbGlibGUoKSk7Ci0rICAgICAgYmFpbG91dENtcDMyKEFz c2VtYmxlcjo6RXF1YWwsIHJocywgSW1tMzIoMCksIGlucy0+c25hcHNob3QoKSk7Ci0rICAgIH0K LSsgIH0KLSsKLSsgIC8vIEhhbmRsZSBJTlQzMl9NSU4gLyAtMSBvdmVyZmxvdy4KLSsgIGlmICht aXItPmNhbkJlTmVnYXRpdmVPdmVyZmxvdygpKSB7Ci0rICAgIExhYmVsIG5vdE1pbkludDsKLSsg ICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDMy X01JTiksICZub3RNaW5JbnQpOwotKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVx dWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluSW50KTsKLSsKLSsgICAgaWYgKG1pci0+dHJh cE9uRXJyb3IoKSkgewotKyAgICAgIG1hc20ud2FzbVRyYXAod2FzbTo6VHJhcDo6SW50ZWdlck92 ZXJmbG93LCBtaXItPnRyYXBTaXRlRGVzYygpKTsKLSsgICAgfSBlbHNlIGlmIChtaXItPmNhblRy dW5jYXRlT3ZlcmZsb3coKSkgewotKyAgICAgIG1hc20ubW92ZTMyKEltbTMyKElOVDMyX01JTiks IGRlc3QpOwotKyAgICAgIG1hc20uanVtcCgmZG9uZSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAg TU9aX0FTU0VSVChtaXItPmZhbGxpYmxlKCkpOwotKyAgICAgIGJhaWxvdXQoaW5zLT5zbmFwc2hv dCgpKTsKLSsgICAgfQotKyAgICBtYXNtLmJpbmQoJm5vdE1pbkludCk7Ci0rICB9Ci0rCi0rICAv LyBIYW5kbGUgbmVnYXRpdmUgemVyby4KLSsgIGlmICghbWlyLT5jYW5UcnVuY2F0ZU5lZ2F0aXZl WmVybygpICYmIG1pci0+Y2FuQmVOZWdhdGl2ZVplcm8oKSkgewotKyAgICBMYWJlbCBvazsKLSsg ICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKDApLCAm b2spOwotKyAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmhzLCBJbW0zMigw KSwgaW5zLT5zbmFwc2hvdCgpKTsKLSsgICAgbWFzbS5iaW5kKCZvayk7Ci0rICB9Ci0rCi0rICAv LyBQZXJmb3JtIHRoZSBkaXZpc2lvbi4KLSsgIG1hc20uYXNfZGl2dyhkZXN0LCBsaHMsIHJocyk7 Ci0rICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKwotKyAgLy8gQ2hlY2sgcmVtYWluZGVy IGlmIG5vdCB0cnVuY2F0YWJsZS4KLSsgIGlmICghbWlyLT5jYW5UcnVuY2F0ZVJlbWFpbmRlcigp KSB7Ci0rICAgIC8vIENvbXB1dGUgcmVtYWluZGVyOiB0ZW1wID0gbGhzIC0gKGRlc3QgKiByaHMp Ci0rICAgIG1hc20uYXNfbXVsbHcodGVtcCwgZGVzdCwgcmhzKTsKLSsgICAgbWFzbS5hc19zdWJm KHRlbXAsIHRlbXAsIGxocyk7ICAvLyB0ZW1wID0gbGhzIC0gdGVtcAotKyAgICBiYWlsb3V0Q21w MzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcCwgSW1tMzIoMCksIGlucy0+c25hcHNob3QoKSk7 Ci0rICB9Ci0rCi0rICBtYXNtLmJpbmQoJmRvbmUpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0RGl2UG93VHdvSShMRGl2UG93VHdvSSogaW5zKSB7Ci0rICBSZWdpc3RlciBsaHMg PSBUb1JlZ2lzdGVyKGlucy0+bnVtZXJhdG9yKCkpOwotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVn aXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyht YXNtKTsKLSsgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGludDMyX3Qgc2hp ZnQgPSBpbnMtPnNoaWZ0KCk7Ci0rCi0rICBpZiAoc2hpZnQgIT0gMCkgewotKyAgICBNRGl2KiBt aXIgPSBpbnMtPm1pcigpOwotKwotKyAgICBpZiAoIW1pci0+aXNUcnVuY2F0ZWQoKSkgewotKyAg ICAgIC8vIElmIHJlbWFpbmRlciAhPSAwLCBiYWlsb3V0IChjaGVjayBsb3dlciAnc2hpZnQnIGJp dHMpLgotKyAgICAgIG1hc20ueF9zbHdpKHRtcCwgbGhzLCAzMiAtIHNoaWZ0KTsKLSsgICAgICBi YWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgdG1wLCBJbW0zMigwKSwgaW5zLT5zbmFw c2hvdCgpKTsKLSsgICAgfQotKwotKyAgICBpZiAoIW1pci0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5k KCkpIHsKLSsgICAgICAvLyBOb24tbmVnYXRpdmUgZGl2aWRlbmQ6IHNpbXBsZSByaWdodCBzaGlm dC4KLSsgICAgICBtYXNtLmFzX3NyYXdpKGRlc3QsIGxocywgc2hpZnQpOwotKyAgICB9IGVsc2Ug ewotKyAgICAgIC8vIE5lZWQgcm91bmRpbmcgYWRqdXN0bWVudCBmb3IgbmVnYXRpdmUgbnVtYmVy cy4KLSsgICAgICAvLyBBZGQgKDEgPDwgc2hpZnQpIC0gMSBpZiBsaHMgaXMgbmVnYXRpdmUuCi0r ICAgICAgaWYgKHNoaWZ0ID4gMSkgewotKyAgICAgICAgbWFzbS5hc19zcmF3aSh0bXAsIGxocywg MzEpOwotKyAgICAgICAgbWFzbS5hc19ybHdpbm0odG1wLCB0bXAsIDAsIDMyIC0gc2hpZnQsIDMx KTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgLy8gc2hpZnQgPT0gMTogZXh0cmFjdCBzaWdu IGJpdCBpbnRvIGJpdCAzMQotKyAgICAgICAgbWFzbS5hc19ybHdpbm0odG1wLCBsaHMsIDEsIDMx LCAzMSk7Ci0rICAgICAgfQotKyAgICAgIG1hc20uYWRkMzIobGhzLCB0bXApOwotKyAgICAgIG1h c20uYXNfc3Jhd2koZGVzdCwgdG1wLCBzaGlmdCk7Ci0rICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAg IG1hc20ubW92ZTMyKGxocywgZGVzdCk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRv cjo6dmlzaXRNb2RJKExNb2RJKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIo aW5zLT5saHMoKSk7Ci0rICBSZWdpc3RlciByaHMgPSBUb1JlZ2lzdGVyKGlucy0+cmhzKCkpOwot KyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgIFJlZ2lzdGVyIHRlbXAgPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICBNTW9kKiBtaXIgPSBpbnMtPm1pcigpOwotKyAgTGFiZWwgZG9uZTsKLSsK LSsgIC8vIEhhbmRsZSBkaXZpZGUgYnkgemVyby4KLSsgIGlmIChtaXItPmNhbkJlRGl2aWRlQnla ZXJvKCkpIHsKLSsgICAgaWYgKG1pci0+aXNUcnVuY2F0ZWQoKSkgewotKyAgICAgIGlmIChtaXIt PnRyYXBPbkVycm9yKCkpIHsKLSsgICAgICAgIExhYmVsIG5vblplcm87Ci0rICAgICAgICBtYXNt LmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoMCksICZub25aZXJv KTsKLSsgICAgICAgIG1hc20ud2FzbVRyYXAod2FzbTo6VHJhcDo6SW50ZWdlckRpdmlkZUJ5WmVy bywgbWlyLT50cmFwU2l0ZURlc2MoKSk7Ci0rICAgICAgICBtYXNtLmJpbmQoJm5vblplcm8pOwot KyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAvLyBUcnVuY2F0ZWQgZGl2aXNpb24gYnkgemVybyB5 aWVsZHMgaW50ZWdlciB6ZXJvLgotKyAgICAgICAgbWFzbS5tb3ZlMzIocmhzLCBkZXN0KTsKLSsg ICAgICAgIExhYmVsIG5vblplcm87Ci0rICAgICAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6 Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoMCksICZub25aZXJvKTsKLSsgICAgICAgIG1hc20uanVt cCgmZG9uZSk7Ci0rICAgICAgICBtYXNtLmJpbmQoJm5vblplcm8pOwotKyAgICAgIH0KLSsgICAg fSBlbHNlIHsKLSsgICAgICBNT1pfQVNTRVJUKG1pci0+ZmFsbGlibGUoKSk7Ci0rICAgICAgYmFp bG91dENtcDMyKEFzc2VtYmxlcjo6RXF1YWwsIHJocywgSW1tMzIoMCksIGlucy0+c25hcHNob3Qo KSk7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIC8vIEhhbmRsZSBJTlQzMl9NSU4gJSAtMS4KLSsgIC8v IFBQQzY0IGRpdncgaXMgdW5kZWZpbmVkIGZvciBJTlQzMl9NSU4gLyAtMSAocXVvdGllbnQgb3Zl cmZsb3dzKSwgc28gd2UKLSsgIC8vIG11c3QgcmV0dXJuIDAgZXhwbGljaXRseS4gIFRoZSB3YXNt IHNwZWMgYWxzbyBkZWZpbmVzIHJlbV9zKE1JTiwgLTEpID0gMC4KLSsgIGlmICghbWlyLT5pc1Vu c2lnbmVkKCkpIHsKLSsgICAgTGFiZWwgbm90TWluT3ZlcmZsb3c7Ci0rICAgIG1hc20uYnJhbmNo UHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgSW1tV29yZChJTlQzMl9NSU4pLAotKyAgICAg ICAgICAgICAgICAgICAmbm90TWluT3ZlcmZsb3cpOwotKyAgICBtYXNtLmJyYW5jaFB0cihBc3Nl bWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluT3ZlcmZsb3cpOwotKyAg ICBtYXNtLm1vdmUzMihJbW0zMigwKSwgZGVzdCk7Ci0rICAgIG1hc20uanVtcCgmZG9uZSk7Ci0r ICAgIG1hc20uYmluZCgmbm90TWluT3ZlcmZsb3cpOwotKyAgfQotKwotKyAgaWYgKEhhc1BPV0VS OSgpKSB7Ci0rICAgIG1hc20uYXNfbW9kc3coZGVzdCwgbGhzLCByaHMpOwotKyAgfSBlbHNlIHsK LSsgICAgbWFzbS5hc19kaXZ3KHRlbXAsIGxocywgcmhzKTsKLSsgICAgbWFzbS5hc19tdWxsdyh0 ZW1wLCB0ZW1wLCByaHMpOwotKyAgICBtYXNtLmFzX3N1YmYoZGVzdCwgdGVtcCwgbGhzKTsKLSsg IH0KLSsgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rCi0rICAvLyBJZiBYJVkgPT0gMCBh bmQgWCA8IDAsIHRoZSByZXN1bHQgaXMgLTAsIGFuZCB3ZSBuZWVkIHRvIGJhaWwgb3V0LgotKyAg aWYgKG1pci0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5kKCkgJiYgIW1pci0+aXNUcnVuY2F0ZWQoKSkg ewotKyAgICBNT1pfQVNTRVJUKG1pci0+ZmFsbGlibGUoKSk7Ci0rICAgIExhYmVsIG9rOwotKyAg ICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBkZXN0LCBJbW1Xb3JkKDApLCAm b2spOwotKyAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpTaWduZWQsIGxocywgSW1tMzIoMCks IGlucy0+c25hcHNob3QoKSk7Ci0rICAgIG1hc20uYmluZCgmb2spOwotKyAgfQotKwotKyAgbWFz bS5iaW5kKCZkb25lKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE1vZFBvd1R3 b0koTE1vZFBvd1R3b0kqIGlucykgewotKyAgUmVnaXN0ZXIgaW4gPSBUb1JlZ2lzdGVyKGlucy0+ Z2V0T3BlcmFuZCgwKSk7Ci0rICBSZWdpc3RlciBvdXQgPSBUb1JlZ2lzdGVyKGlucy0+Z2V0RGVm KDApKTsKLSsgIE1Nb2QqIG1pciA9IGlucy0+bWlyKCk7Ci0rICBpbnQzMl90IHNoaWZ0ID0gaW5z LT5zaGlmdCgpOwotKyAgdWludDMyX3QgbWFzayA9ICh1aW50MzJfdCgxKSA8PCBzaGlmdCkgLSAx OwotKwotKyAgaWYgKG1pci0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5kKCkgJiYgIW1pci0+aXNUcnVu Y2F0ZWQoKSkgewotKyAgICBMYWJlbCBub25OZWc7Ci0rICAgIG1hc20uYnJhbmNoUHRyKEFzc2Vt Ymxlcjo6Tm90RXF1YWwsIGluLCBJbW1Xb3JkKDApLCAmbm9uTmVnKTsKLSsgICAgLy8gaW4gPT0g MDogbW9kIGlzIDAsIGNoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLgotKyAgICBiYWlsb3V0Q21wMzIo QXNzZW1ibGVyOjpTaWduZWQsIGluLCBpbiwgaW5zLT5zbmFwc2hvdCgpKTsKLSsgICAgbWFzbS5i aW5kKCZub25OZWcpOwotKyAgfQotKwotKyAgTGFiZWwgbmVnYXRpdmUsIGRvbmU7Ci0rICBtYXNt LmJyYW5jaDMyKEFzc2VtYmxlcjo6U2lnbmVkLCBpbiwgaW4sICZuZWdhdGl2ZSk7Ci0rCi0rICAv LyBQb3NpdGl2ZSBjYXNlOiBqdXN0IG1hc2suCi0rICBtYXNtLmFuZDMyKEltbTMyKG1hc2spLCBp biwgb3V0KTsKLSsgIG1hc20uanVtcCgmZG9uZSk7Ci0rCi0rICAvLyBOZWdhdGl2ZSBjYXNlOiBu ZWdhdGUsIG1hc2ssIG5lZ2F0ZSBiYWNrLgotKyAgbWFzbS5iaW5kKCZuZWdhdGl2ZSk7Ci0rICBt YXNtLmFzX25lZyhvdXQsIGluKTsKLSsgIG1hc20uYW5kMzIoSW1tMzIobWFzayksIG91dCk7Ci0r ICBtYXNtLmFzX25lZyhvdXQsIG91dCk7Ci0rICBtYXNtLmFzX2V4dHN3KG91dCwgb3V0KTsKLSsK LSsgIGlmICghbWlyLT5pc1RydW5jYXRlZCgpICYmIG1pci0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5k KCkpIHsKLSsgICAgTGFiZWwgb2s7Ci0rICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90 RXF1YWwsIG91dCwgSW1tV29yZCgwKSwgJm9rKTsKLSsgICAgYmFpbG91dChpbnMtPnNuYXBzaG90 KCkpOwotKyAgICBtYXNtLmJpbmQoJm9rKTsKLSsgIH0KLSsKLSsgIG1hc20uYmluZCgmZG9uZSk7 Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRNb2RNYXNrSShMTW9kTWFza0kqIGlu cykgewotKyAgUmVnaXN0ZXIgc3JjID0gVG9SZWdpc3RlcihpbnMtPmlucHV0KCkpOwotKyAgUmVn aXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBSZWdpc3RlciB0bXAw ID0gVG9SZWdpc3RlcihpbnMtPnRlbXAwKCkpOwotKyAgUmVnaXN0ZXIgdG1wMSA9IFRvUmVnaXN0 ZXIoaW5zLT50ZW1wMSgpKTsKLSsgIE1Nb2QqIG1pciA9IGlucy0+bWlyKCk7Ci0rCi0rICBpZiAo IW1pci0+aXNUcnVuY2F0ZWQoKSAmJiBtaXItPmNhbkJlTmVnYXRpdmVEaXZpZGVuZCgpKSB7Ci0r ICAgIE1PWl9BU1NFUlQobWlyLT5mYWxsaWJsZSgpKTsKLSsKLSsgICAgTGFiZWwgYmFpbDsKLSsg ICAgbWFzbS5tYV9tb2RfbWFzayhzcmMsIGRlc3QsIHRtcDAsIHRtcDEsIGlucy0+c2hpZnQoKSwg JmJhaWwpOwotKyAgICBiYWlsb3V0RnJvbSgmYmFpbCwgaW5zLT5zbmFwc2hvdCgpKTsKLSsgIH0g ZWxzZSB7Ci0rICAgIG1hc20ubWFfbW9kX21hc2soc3JjLCBkZXN0LCB0bXAwLCB0bXAxLCBpbnMt PnNoaWZ0KCksIG51bGxwdHIpOwotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZp c2l0TmVnSShMTmVnSSogaW5zKSB7Ci0rICBSZWdpc3RlciBpbnB1dCA9IFRvUmVnaXN0ZXIoaW5z LT5pbnB1dCgpKTsKLSsgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQo KSk7Ci0rICBtYXNtLmFzX25lZyhvdXRwdXQsIGlucHV0KTsKLSsgIG1hc20uYXNfZXh0c3cob3V0 cHV0LCBvdXRwdXQpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TmVnSTY0KExO ZWdJNjQqIGlucykgewotKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVyNjQoaW5zLT5pbnB1 dCgpKS5yZWc7Ci0rICBSZWdpc3RlciBvdXRwdXQgPSBUb091dFJlZ2lzdGVyNjQoaW5zKS5yZWc7 Ci0rICBtYXNtLmFzX25lZyhvdXRwdXQsIGlucHV0KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdFVEaXZPck1vZChMVURpdk9yTW9kKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGxocyA9 IFRvUmVnaXN0ZXIoaW5zLT5saHMoKSk7Ci0rICBSZWdpc3RlciByaHMgPSBUb1JlZ2lzdGVyKGlu cy0+cmhzKCkpOwotKyAgUmVnaXN0ZXIgb3V0cHV0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgp KTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgUmVnaXN0ZXIg dGVtcCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIExhYmVsIGRvbmU7Ci0rCi0rICAvLyBEaXZpc2lv biBieSB6ZXJvIGNoZWNrLgotKyAgaWYgKGlucy0+Y2FuQmVEaXZpZGVCeVplcm8oKSkgewotKyAg ICBpZiAoaW5zLT5taXIoKS0+aXNUcnVuY2F0ZWQoKSkgewotKyAgICAgIGlmIChpbnMtPnRyYXBP bkVycm9yKCkpIHsKLSsgICAgICAgIExhYmVsIG5vblplcm87Ci0rICAgICAgICBtYXNtLmJyYW5j aDMyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1tMzIoMCksICZub25aZXJvKTsKLSsgICAg ICAgIG1hc20ud2FzbVRyYXAod2FzbTo6VHJhcDo6SW50ZWdlckRpdmlkZUJ5WmVybywgaW5zLT50 cmFwU2l0ZURlc2MoKSk7Ci0rICAgICAgICBtYXNtLmJpbmQoJm5vblplcm8pOwotKyAgICAgIH0g ZWxzZSB7Ci0rICAgICAgICBMYWJlbCBub25aZXJvOwotKyAgICAgICAgbWFzbS5icmFuY2gzMihB c3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbTMyKDApLCAmbm9uWmVybyk7Ci0rICAgICAgICBt YXNtLm1vdmUzMihJbW0zMigwKSwgb3V0cHV0KTsKLSsgICAgICAgIG1hc20uanVtcCgmZG9uZSk7 Ci0rICAgICAgICBtYXNtLmJpbmQoJm5vblplcm8pOwotKyAgICAgIH0KLSsgICAgfSBlbHNlIHsK LSsgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpFcXVhbCwgcmhzLCBJbW0zMigwKSwgaW5z LT5zbmFwc2hvdCgpKTsKLSsgICAgfQotKyAgfQotKwotKyAgLy8gWmVyby1leHRlbmQgYm90aCBv cGVyYW5kcyB0byA2NCBiaXRzIGZvciB1bnNpZ25lZCBkaXZpZGUuCi0rICBtYXNtLm1vdmUzMlRv NjRaZXJvRXh0ZW5kKGxocywgUmVnaXN0ZXI2NChsaHMpKTsKLSsgIG1hc20ubW92ZTMyVG82NFpl cm9FeHRlbmQocmhzLCBSZWdpc3RlcjY0KHJocykpOwotKwotKyAgaWYgKGlucy0+bWlyKCktPmlz RGl2KCkpIHsKLSsgICAgLy8gRGl2aXNpb24gcGF0aDogY29tcHV0ZSBxdW90aWVudC4gQ2hlY2sg cmVtYWluZGVyIGlmIG5lZWRlZC4KLSsgICAgaWYgKCFpbnMtPm1pcigpLT50b0RpdigpLT5jYW5U cnVuY2F0ZVJlbWFpbmRlcigpKSB7Ci0rICAgICAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgICAg ICBtYXNtLmFzX21vZHV3KHRlbXAsIGxocywgcmhzKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAg ICAgbWFzbS5hc19kaXZ3dSh0ZW1wLCBsaHMsIHJocyk7Ci0rICAgICAgICBtYXNtLmFzX211bGx3 KHRlbXAsIHRlbXAsIHJocyk7Ci0rICAgICAgICBtYXNtLmFzX3N1YmYodGVtcCwgdGVtcCwgbGhz KTsKLSsgICAgICB9Ci0rICAgICAgYmFpbG91dENtcDMyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHRl bXAsIEltbTMyKDApLCBpbnMtPnNuYXBzaG90KCkpOwotKyAgICB9Ci0rICAgIG1hc20uYXNfZGl2 d3Uob3V0cHV0LCBsaHMsIHJocyk7Ci0rICB9IGVsc2UgewotKyAgICAvLyBNb2R1bG8gcGF0aC4K LSsgICAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgICAgbWFzbS5hc19tb2R1dyhvdXRwdXQsIGxo cywgcmhzKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBtYXNtLmFzX2Rpdnd1KHRlbXAsIGxocywg cmhzKTsKLSsgICAgICBtYXNtLmFzX211bGx3KHRlbXAsIHRlbXAsIHJocyk7Ci0rICAgICAgbWFz bS5hc19zdWJmKG91dHB1dCwgdGVtcCwgbGhzKTsKLSsgICAgfQotKyAgfQotKwotKyAgbWFzbS5h c19leHRzdyhvdXRwdXQsIG91dHB1dCk7Ci0rCi0rICBpZiAoIWlucy0+bWlyKCktPmlzVHJ1bmNh dGVkKCkpIHsKLSsgICAgYmFpbG91dENtcDMyKEFzc2VtYmxlcjo6TGVzc1RoYW4sIG91dHB1dCwg SW1tMzIoMCksIGlucy0+c25hcHNob3QoKSk7Ci0rICB9Ci0rCi0rICBtYXNtLmJpbmQoJmRvbmUp OwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0RGl2T3JNb2RJNjQoTERpdk9yTW9k STY0KiBsaXIpIHsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5k KDApKTsKLSsgIFJlZ2lzdGVyIHJocyA9IFRvUmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5kKDEpKTsK LSsgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7Ci0rCi0rICBM YWJlbCBkb25lOwotKwotKyAgLy8gRGl2aXNpb24gYnkgemVybyB0cmFwLgotKyAgaWYgKGxpci0+ Y2FuQmVEaXZpZGVCeVplcm8oKSkgewotKyAgICBMYWJlbCBub25aZXJvOwotKyAgICBtYXNtLmJy YW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoMCksICZub25aZXJvKTsK LSsgICAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnRlZ2VyRGl2aWRlQnlaZXJvLCBsaXIt PnRyYXBTaXRlRGVzYygpKTsKLSsgICAgbWFzbS5iaW5kKCZub25aZXJvKTsKLSsgIH0KLSsKLSsg IC8vIElOVDY0X01JTiAvIC0xIG92ZXJmbG93IHRyYXAgKGZvciBkaXYgb25seSkuCi0rICBpZiAo bGlyLT5jYW5CZU5lZ2F0aXZlT3ZlcmZsb3coKSkgewotKyAgICBMYWJlbCBub3RNaW5JbnQ7Ci0r ICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgSW1tV29yZChJTlQ2 NF9NSU4pLCAmbm90TWluSW50KTsKLSsgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RF cXVhbCwgcmhzLCBJbW1Xb3JkKC0xKSwgJm5vdE1pbkludCk7Ci0rICAgIGlmIChsaXItPm1pcigp LT5pc0RpdigpKSB7Ci0rICAgICAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnRlZ2VyT3Zl cmZsb3csIGxpci0+dHJhcFNpdGVEZXNjKCkpOwotKyAgICB9IGVsc2UgewotKyAgICAgIG1hc20u bW92ZVB0cihJbW1Xb3JkKDApLCBvdXRwdXQpOwotKyAgICAgIG1hc20uanVtcCgmZG9uZSk7Ci0r ICAgIH0KLSsgICAgbWFzbS5iaW5kKCZub3RNaW5JbnQpOwotKyAgfQotKwotKyAgaWYgKGxpci0+ bWlyKCktPmlzRGl2KCkpIHsKLSsgICAgbWFzbS5hc19kaXZkKG91dHB1dCwgbGhzLCByaHMpOwot KyAgfSBlbHNlIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICBtYXNtLmFzX21vZHNkKG91dHB1dCwg bGhzLCByaHMpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hc19kaXZkKG91dHB1dCwgbGhzLCBy aHMpOwotKyAgICBtYXNtLmFzX211bGxkKG91dHB1dCwgb3V0cHV0LCByaHMpOwotKyAgICBtYXNt LmFzX3N1YmYob3V0cHV0LCBvdXRwdXQsIGxocyk7Ci0rICB9Ci0rCi0rICBtYXNtLmJpbmQoJmRv bmUpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0VURpdk9yTW9kSTY0KExVRGl2 T3JNb2RJNjQqIGxpcikgewotKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihsaXItPmdldE9w ZXJhbmQoMCkpOwotKyAgUmVnaXN0ZXIgcmhzID0gVG9SZWdpc3RlcihsaXItPmdldE9wZXJhbmQo MSkpOwotKyAgUmVnaXN0ZXIgb3V0cHV0ID0gVG9SZWdpc3RlcihsaXItPm91dHB1dCgpKTsKLSsK LSsgIC8vIERpdmlzaW9uIGJ5IHplcm8gdHJhcC4KLSsgIGlmIChsaXItPmNhbkJlRGl2aWRlQnla ZXJvKCkpIHsKLSsgICAgTGFiZWwgbm9uWmVybzsKLSsgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1i bGVyOjpOb3RFcXVhbCwgcmhzLCBJbW1Xb3JkKDApLCAmbm9uWmVybyk7Ci0rICAgIG1hc20ud2Fz bVRyYXAod2FzbTo6VHJhcDo6SW50ZWdlckRpdmlkZUJ5WmVybywgbGlyLT50cmFwU2l0ZURlc2Mo KSk7Ci0rICAgIG1hc20uYmluZCgmbm9uWmVybyk7Ci0rICB9Ci0rCi0rICBpZiAobGlyLT5taXIo KS0+aXNEaXYoKSkgewotKyAgICBtYXNtLmFzX2RpdmR1KG91dHB1dCwgbGhzLCByaHMpOwotKyAg fSBlbHNlIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICBtYXNtLmFzX21vZHVkKG91dHB1dCwgbGhz LCByaHMpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hc19kaXZkdShvdXRwdXQsIGxocywgcmhz KTsKLSsgICAgbWFzbS5hc19tdWxsZChvdXRwdXQsIG91dHB1dCwgcmhzKTsKLSsgICAgbWFzbS5h c19zdWJmKG91dHB1dCwgb3V0cHV0LCBsaHMpOwotKyAgfQotK30KLSsKLSsvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsv LyBWaXNpdG9yczogQml0d2lzZQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRCaXROb3RJ KExCaXROb3RJKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGlucHV0ID0gVG9SZWdpc3RlcihpbnMtPmlu cHV0KCkpOwotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0r ICBtYXNtLmFzX25vcihkZXN0LCBpbnB1dCwgaW5wdXQpOwotKyAgbWFzbS5hc19leHRzdyhkZXN0 LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEJpdE5vdEk2NChMQml0 Tm90STY0KiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGlucHV0ID0gVG9SZWdpc3RlcjY0KGlucy0+aW5w dXQoKSkucmVnOwotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvT3V0UmVnaXN0ZXI2NChpbnMpLnJlZzsK LSsgIG1hc20uYXNfbm9yKGRlc3QsIGlucHV0LCBpbnB1dCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdl bmVyYXRvcjo6dmlzaXRCaXRPcEkoTEJpdE9wSSogaW5zKSB7Ci0rICBSZWdpc3RlciBkZXN0ID0g VG9SZWdpc3RlcihpbnMtPmdldERlZigwKSk7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVy KGlucy0+Z2V0T3BlcmFuZCgwKSk7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiogcmhzID0gaW5zLT5n ZXRPcGVyYW5kKDEpOwotKwotKyAgc3dpdGNoIChpbnMtPmJpdG9wKCkpIHsKLSsgICAgY2FzZSBK U09wOjpCaXRPcjoKLSsgICAgICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgICAgIG1h c20ub3IzMihJbW0zMihUb0ludDMyKHJocykpLCBsaHMsIGRlc3QpOwotKyAgICAgIH0gZWxzZSB7 Ci0rICAgICAgICBtYXNtLmFzX29yXyhkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7Ci0rICAg ICAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKyAgICAgIH0KLSsgICAgICBicmVhazsK LSsgICAgY2FzZSBKU09wOjpCaXRYb3I6Ci0rICAgICAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7 Ci0rICAgICAgICBtYXNtLnhvcjMyKEltbTMyKFRvSW50MzIocmhzKSksIGxocywgZGVzdCk7Ci0r ICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1hc20uYXNfeG9yXyhkZXN0LCBsaHMsIFRvUmVnaXN0 ZXIocmhzKSk7Ci0rICAgICAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKyAgICAgIH0K LSsgICAgICBicmVhazsKLSsgICAgY2FzZSBKU09wOjpCaXRBbmQ6Ci0rICAgICAgaWYgKHJocy0+ aXNDb25zdGFudCgpKSB7Ci0rICAgICAgICBtYXNtLmFuZDMyKEltbTMyKFRvSW50MzIocmhzKSks IGxocywgZGVzdCk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1hc20uYXNfYW5kXyhkZXN0 LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7Ci0rICAgICAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRl c3QpOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pf Q1JBU0goInVuZXhwZWN0ZWQgYmluYXJ5IG9wY29kZSIpOwotKyAgfQotK30KLSsKLSt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0Qml0T3BJNjQoTEJpdE9wSTY0KiBsaXIpIHsKLSsgIFJlZ2lzdGVy IGRlc3QgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0RGVmKDApKTsKLSsgIFJlZ2lzdGVyIGxocyA9IFRv UmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5kKDApKTsKLSsgIGNvbnN0IExBbGxvY2F0aW9uKiByaHMg PSBsaXItPmdldE9wZXJhbmQoMSk7Ci0rCi0rICBzd2l0Y2ggKGxpci0+Yml0b3AoKSkgewotKyAg ICBjYXNlIEpTT3A6OkJpdE9yOgotKyAgICAgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgewotKyAg ICAgICAgaWYgKGxocyAhPSBkZXN0KSB7Ci0rICAgICAgICAgIG1hc20ubW92ZVB0cihsaHMsIGRl c3QpOwotKyAgICAgICAgfQotKyAgICAgICAgbWFzbS5vcjY0KEltbTY0KFRvSW50NjQocmhzKSks IFJlZ2lzdGVyNjQoZGVzdCkpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBtYXNtLmFzX29y XyhkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIEpTT3A6OkJpdFhvcjoKLSsgICAgICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsK LSsgICAgICAgIGlmIChsaHMgIT0gZGVzdCkgewotKyAgICAgICAgICBtYXNtLm1vdmVQdHIobGhz LCBkZXN0KTsKLSsgICAgICAgIH0KLSsgICAgICAgIG1hc20ueG9yNjQoSW1tNjQoVG9JbnQ2NChy aHMpKSwgUmVnaXN0ZXI2NChkZXN0KSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1hc20u YXNfeG9yXyhkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7Ci0rICAgICAgfQotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIEpTT3A6OkJpdEFuZDoKLSsgICAgICBpZiAocmhzLT5pc0NvbnN0YW50 KCkpIHsKLSsgICAgICAgIGlmIChsaHMgIT0gZGVzdCkgewotKyAgICAgICAgICBtYXNtLm1vdmVQ dHIobGhzLCBkZXN0KTsKLSsgICAgICAgIH0KLSsgICAgICAgIG1hc20uYW5kNjQoSW1tNjQoVG9J bnQ2NChyaHMpKSwgUmVnaXN0ZXI2NChkZXN0KSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAg IG1hc20uYXNfYW5kXyhkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7Ci0rICAgICAgfQotKyAg ICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBi aW5hcnkgb3Bjb2RlIik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRT aGlmdEkoTFNoaWZ0SSogaW5zKSB7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+ bGhzKCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGlucy0+cmhzKCk7Ci0rICBSZWdp c3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsKLSsgIGlmIChyaHMtPmlz Q29uc3RhbnQoKSkgewotKyAgICBpbnQzMl90IHNoaWZ0ID0gVG9JbnQzMihyaHMpICYgMHgxZjsK LSsgICAgc3dpdGNoIChpbnMtPmJpdG9wKCkpIHsKLSsgICAgICBjYXNlIEpTT3A6OkxzaDoKLSsg ICAgICAgIGlmIChzaGlmdCkgewotKyAgICAgICAgICBtYXNtLmxzaGlmdDMyKEltbTMyKHNoaWZ0 KSwgbGhzLCBkZXN0KTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIG1hc20ubW92ZTMy KGxocywgZGVzdCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEpT T3A6OlJzaDoKLSsgICAgICAgIGlmIChzaGlmdCkgewotKyAgICAgICAgICBtYXNtLnJzaGlmdDMy QXJpdGhtZXRpYyhJbW0zMihzaGlmdCksIGxocywgZGVzdCk7Ci0rICAgICAgICB9IGVsc2Ugewot KyAgICAgICAgICBtYXNtLm1vdmUzMihsaHMsIGRlc3QpOwotKyAgICAgICAgfQotKyAgICAgICAg YnJlYWs7Ci0rICAgICAgY2FzZSBKU09wOjpVcnNoOgotKyAgICAgICAgaWYgKHNoaWZ0KSB7Ci0r ICAgICAgICAgIG1hc20ucnNoaWZ0MzIoSW1tMzIoc2hpZnQpLCBsaHMsIGRlc3QpOwotKyAgICAg ICAgfSBlbHNlIHsKLSsgICAgICAgICAgLy8geCA+Pj4gMCBjYW4gcHJvZHVjZSB2YWx1ZXMgdGhh dCBuZWVkIHRvIGJlIHRyZWF0ZWQgYXMgdW5zaWduZWQuCi0rICAgICAgICAgIG1hc20ubW92ZTMy KGxocywgZGVzdCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoaW5zLT5taXIoKS0+dG9VcnNo KCktPmZhbGxpYmxlKCkpIHsKLSsgICAgICAgICAgLy8geCA+Pj4gMCBjYW4gcHJvZHVjZSB2YWx1 ZXMgdGhhdCBkb24ndCBmaXQgaW4gc2lnbmVkIGludDMyLgotKyAgICAgICAgICBiYWlsb3V0Q21w MzIoQXNzZW1ibGVyOjpMZXNzVGhhbiwgZGVzdCwgSW1tMzIoMCksIGlucy0+c25hcHNob3QoKSk7 Ci0rICAgICAgICB9Ci0rICAgICAgICBicmVhazsKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAg TU9aX0NSQVNIKCJ1bmV4cGVjdGVkIHNoaWZ0IG9wY29kZSIpOwotKyAgICB9Ci0rICB9IGVsc2Ug ewotKyAgICBSZWdpc3RlciBzaGlmdFJlZyA9IFRvUmVnaXN0ZXIocmhzKTsKLSsgICAgLy8gUFBD IHNsdy9zcncvc3JhdyB1c2UgNiBiaXRzIG9mIHNoaWZ0IGFtb3VudDsgSlMgcmVxdWlyZXMgbW9k IDMyLgotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgICAgUmVn aXN0ZXIgbWFza2VkID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtYXNtLmFzX3Jsd2lubShtYXNr ZWQsIHNoaWZ0UmVnLCAwLCAyNywgMzEpOwotKyAgICBzd2l0Y2ggKGlucy0+Yml0b3AoKSkgewot KyAgICAgIGNhc2UgSlNPcDo6THNoOgotKyAgICAgICAgbWFzbS5hc19zbHcoZGVzdCwgbGhzLCBt YXNrZWQpOwotKyAgICAgICAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKLSsgICAgICAgIGJy ZWFrOwotKyAgICAgIGNhc2UgSlNPcDo6UnNoOgotKyAgICAgICAgbWFzbS5hc19zcmF3KGRlc3Qs IGxocywgbWFza2VkKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgSlNPcDo6VXJzaDoK LSsgICAgICAgIG1hc20uYXNfc3J3KGRlc3QsIGxocywgbWFza2VkKTsKLSsgICAgICAgIG1hc20u YXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rICAgICAgICBpZiAoaW5zLT5taXIoKS0+dG9VcnNoKCkt PmZhbGxpYmxlKCkpIHsKLSsgICAgICAgICAgYmFpbG91dENtcDMyKEFzc2VtYmxlcjo6TGVzc1Ro YW4sIGRlc3QsIEltbTMyKDApLCBpbnMtPnNuYXBzaG90KCkpOwotKyAgICAgICAgfQotKyAgICAg ICAgYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIE1PWl9DUkFTSCgidW5leHBlY3Rl ZCBzaGlmdCBvcGNvZGUiKTsKLSsgICAgfQotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0U2hpZnRJbnRQdHIoTFNoaWZ0SW50UHRyKiBpbnMpIHsKLSsgIFJlZ2lzdGVyIGxo cyA9IFRvUmVnaXN0ZXIoaW5zLT5saHMoKSk7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3Rl cihpbnMtPm91dHB1dCgpKTsKLSsKLSsgIGlmIChpbnMtPnJocygpLT5pc0NvbnN0YW50KCkpIHsK LSsgICAgLy8gU2hpZnRJbnRQdHIncyBSSFMgY29uc3RhbnQgaXMgSW50UHRyLSBvciBJbnQzMi10 eXBlZCwgbm90IEludDY0LiBVc2UKLSsgICAgLy8gVG9JbnRQdHIoKSB3aGljaCBkaXNwYXRjaGVz IG9uIHRoZSB1bmRlcmx5aW5nIE1JUlR5cGUgKHRoZSBwcmV2aW91cwotKyAgICAvLyBNQ29uc3Rh bnQ6OnRvSW50NjQoKSBjYWxsIGFzc2VydGVkIHdoZW4gdGhlIGNvbnN0YW50IHdhc24ndCBJbnQ2 NCkuCi0rICAgIGludDMyX3Qgc2hpZnQgPSBpbnQzMl90KFRvSW50UHRyKGlucy0+cmhzKCkpKSAm IDB4M2Y7Ci0rICAgIHN3aXRjaCAoaW5zLT5iaXRvcCgpKSB7Ci0rICAgICAgY2FzZSBKU09wOjpM c2g6Ci0rICAgICAgICBpZiAoc2hpZnQpIHsKLSsgICAgICAgICAgbWFzbS5sc2hpZnRQdHIoSW1t MzIoc2hpZnQpLCBsaHMsIGRlc3QpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgbWFz bS5tb3ZlUHRyKGxocywgZGVzdCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBicmVhazsKLSsgICAg ICBjYXNlIEpTT3A6OlJzaDoKLSsgICAgICAgIGlmIChzaGlmdCkgewotKyAgICAgICAgICBtYXNt LnJzaGlmdFB0ckFyaXRobWV0aWMoSW1tMzIoc2hpZnQpLCBsaHMsIGRlc3QpOwotKyAgICAgICAg fSBlbHNlIHsKLSsgICAgICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7Ci0rICAgICAgICB9 Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEpTT3A6OlVyc2g6Ci0rICAgICAgICBpZiAo c2hpZnQpIHsKLSsgICAgICAgICAgbWFzbS5yc2hpZnRQdHIoSW1tMzIoc2hpZnQpLCBsaHMsIGRl c3QpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVz dCk7Ci0rICAgICAgICB9Ci0rICAgICAgICBicmVhazsKLSsgICAgICBkZWZhdWx0OgotKyAgICAg ICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIHNoaWZ0IG9wY29kZSIpOwotKyAgICB9Ci0rICB9IGVs c2UgewotKyAgICBSZWdpc3RlciBzaGlmdFJlZyA9IFRvUmVnaXN0ZXIoaW5zLT5yaHMoKSk7Ci0r ICAgIC8vIHNsZC9zcmQvc3JhZCB1c2UgdGhlIGxvdyA3IGJpdHMgb2YgdGhlIHNoaWZ0IGNvdW50 OiBjb3VudHMgPj0gNjQKLSsgICAgLy8gcHJvZHVjZSAwIChzaWduLWZpbGwgZm9yIHNyYWQpLiBN YXNrIHRvIDYgYml0cyBmb3IgbW9kLTY0IHNlbWFudGljcy4KLSsgICAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICAgIFJlZ2lzdGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgICAgbWFzbS5hc19ybGRpY2wobWFza2VkLCBzaGlmdFJlZywgMCwgNTgpOwotKyAg ICBzd2l0Y2ggKGlucy0+Yml0b3AoKSkgewotKyAgICAgIGNhc2UgSlNPcDo6THNoOgotKyAgICAg ICAgbWFzbS5hc19zbGQoZGVzdCwgbGhzLCBtYXNrZWQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAg ICAgY2FzZSBKU09wOjpSc2g6Ci0rICAgICAgICBtYXNtLmFzX3NyYWQoZGVzdCwgbGhzLCBtYXNr ZWQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBKU09wOjpVcnNoOgotKyAgICAgICAg bWFzbS5hc19zcmQoZGVzdCwgbGhzLCBtYXNrZWQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAg ZGVmYXVsdDoKLSsgICAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBzaGlmdCBvcGNvZGUiKTsK LSsgICAgfQotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0U2hpZnRJNjQo TFNoaWZ0STY0KiBsaXIpIHsKLSsgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXI2NChsaXItPmxo cygpKS5yZWc7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcikucmVnOwot KyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGxpci0+cmhzKCk7Ci0rCi0rICBpZiAocmhzLT5p c0NvbnN0YW50KCkpIHsKLSsgICAgaW50MzJfdCBzaGlmdCA9IGludDMyX3QocmhzLT50b0NvbnN0 YW50KCktPnRvSW50NjQoKSkgJiAweDNmOwotKyAgICBzd2l0Y2ggKGxpci0+Yml0b3AoKSkgewot KyAgICAgIGNhc2UgSlNPcDo6THNoOgotKyAgICAgICAgaWYgKHNoaWZ0KSB7Ci0rICAgICAgICAg IG1hc20ubHNoaWZ0UHRyKEltbTMyKHNoaWZ0KSwgbGhzLCBkZXN0KTsKLSsgICAgICAgIH0gZWxz ZSB7Ci0rICAgICAgICAgIG1hc20ubW92ZVB0cihsaHMsIGRlc3QpOwotKyAgICAgICAgfQotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBKU09wOjpSc2g6Ci0rICAgICAgICBpZiAoc2hpZnQp IHsKLSsgICAgICAgICAgbWFzbS5yc2hpZnRQdHJBcml0aG1ldGljKEltbTMyKHNoaWZ0KSwgbGhz LCBkZXN0KTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIG1hc20ubW92ZVB0cihsaHMs IGRlc3QpOwotKyAgICAgICAgfQotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBKU09wOjpV cnNoOgotKyAgICAgICAgaWYgKHNoaWZ0KSB7Ci0rICAgICAgICAgIG1hc20ucnNoaWZ0UHRyKElt bTMyKHNoaWZ0KSwgbGhzLCBkZXN0KTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIG1h c20ubW92ZVB0cihsaHMsIGRlc3QpOwotKyAgICAgICAgfQotKyAgICAgICAgYnJlYWs7Ci0rICAg ICAgZGVmYXVsdDoKLSsgICAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBzaGlmdCBvcGNvZGUi KTsKLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgUmVnaXN0ZXIgc2hpZnRSZWcgPSBUb1JlZ2lz dGVyKHJocyk7Ci0rICAgIC8vIFdhc20gaTY0IHNoaWZ0cyByZXF1aXJlIHNoaWZ0IGNvdW50IG1v ZHVsbyA2NC4gUFBDNjQgc2xkL3NyZC9zcmFkCi0rICAgIC8vIHVzZSBhIDctYml0IHNoaWZ0IGZp ZWxkLCBzbyBzaGlmdHMgPj0gNjQgcHJvZHVjZSAwIChvciBzaWduLWZpbGwKLSsgICAgLy8gZm9y IHNyYWQpLiBNYXNrIHRvIDYgYml0cyBmaXJzdC4KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMobWFzbSk7Ci0rICAgIFJlZ2lzdGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsK LSsgICAgbWFzbS5hc19ybGRpY2wobWFza2VkLCBzaGlmdFJlZywgMCwgNTgpOyAgLy8gY2xybGRp OiBrZWVwIGxvdyA2IGJpdHMKLSsgICAgc3dpdGNoIChsaXItPmJpdG9wKCkpIHsKLSsgICAgICBj YXNlIEpTT3A6OkxzaDoKLSsgICAgICAgIG1hc20uYXNfc2xkKGRlc3QsIGxocywgbWFza2VkKTsK LSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgSlNPcDo6UnNoOgotKyAgICAgICAgbWFzbS5h c19zcmFkKGRlc3QsIGxocywgbWFza2VkKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2Ug SlNPcDo6VXJzaDoKLSsgICAgICAgIG1hc20uYXNfc3JkKGRlc3QsIGxocywgbWFza2VkKTsKLSsg ICAgICAgIGJyZWFrOwotKyAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICBNT1pfQ1JBU0goInVuZXhw ZWN0ZWQgc2hpZnQgb3Bjb2RlIik7Ci0rICAgIH0KLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2Vu ZXJhdG9yOjp2aXNpdFVyc2hEKExVcnNoRCogaW5zKSB7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1Jl Z2lzdGVyKGlucy0+bGhzKCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGlucy0+cmhz KCk7Ci0rICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQo KSk7Ci0rCi0rICBSZWdpc3RlciB0ZW1wID0gVG9SZWdpc3RlcihpbnMtPnRlbXAwKCkpOwotKwot KyAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7Ci0rICAgIGludDMyX3Qgc2hpZnQgPSBUb0ludDMy KHJocykgJiAweDFmOwotKyAgICBpZiAoc2hpZnQpIHsKLSsgICAgICBtYXNtLnJzaGlmdDMyKElt bTMyKHNoaWZ0KSwgbGhzLCB0ZW1wKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBtYXNtLm1vdmUz MihsaHMsIHRlbXApOwotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLm1vdmUzMihsaHMs IHRlbXApOwotKyAgICBtYXNtLnJzaGlmdDMyKFRvUmVnaXN0ZXIocmhzKSwgdGVtcCk7Ci0rICB9 Ci0rCi0rICBtYXNtLmNvbnZlcnRVSW50MzJUb0RvdWJsZSh0ZW1wLCBkZXN0KTsKLSt9Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rLy8gVmlzaXRvcnM6IEZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMKLSsKLSt2 b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TWF0aEQoTE1hdGhEKiBtYXRoKSB7Ci0rICBGbG9hdFJl Z2lzdGVyIGxocyA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5saHMoKSk7Ci0rICBGbG9hdFJlZ2lz dGVyIHJocyA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5yaHMoKSk7Ci0rICBGbG9hdFJlZ2lzdGVy IGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIobWF0aC0+b3V0cHV0KCkpOwotKwotKyAgc3dpdGNoICht YXRoLT5qc29wKCkpIHsKLSsgICAgY2FzZSBKU09wOjpBZGQ6Ci0rICAgICAgbWFzbS5hc19mYWRk KGRlc3QsIGxocywgcmhzKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBKU09wOjpTdWI6Ci0r ICAgICAgbWFzbS5hc19mc3ViKGRlc3QsIGxocywgcmhzKTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSBKU09wOjpNdWw6Ci0rICAgICAgbWFzbS5hc19mbXVsKGRlc3QsIGxocywgcmhzKTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSBKU09wOjpEaXY6Ci0rICAgICAgbWFzbS5hc19mZGl2KGRl c3QsIGxocywgcmhzKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pf Q1JBU0goInVuZXhwZWN0ZWQgZG91YmxlIG9wY29kZSIpOwotKyAgfQotK30KLSsKLSt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0TWF0aEYoTE1hdGhGKiBtYXRoKSB7Ci0rICBGbG9hdFJlZ2lzdGVy IGxocyA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5saHMoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIHJo cyA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5yaHMoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIGRlc3Qg PSBUb0Zsb2F0UmVnaXN0ZXIobWF0aC0+b3V0cHV0KCkpOwotKwotKyAgc3dpdGNoIChtYXRoLT5q c29wKCkpIHsKLSsgICAgY2FzZSBKU09wOjpBZGQ6Ci0rICAgICAgbWFzbS5hc19mYWRkcyhkZXN0 LCBsaHMsIHJocyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgSlNPcDo6U3ViOgotKyAgICAg IG1hc20uYXNfZnN1YnMoZGVzdCwgbGhzLCByaHMpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IEpTT3A6Ok11bDoKLSsgICAgICBtYXNtLmFzX2ZtdWxzKGRlc3QsIGxocywgcmhzKTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSBKU09wOjpEaXY6Ci0rICAgICAgbWFzbS5hc19mZGl2cyhkZXN0 LCBsaHMsIHJocyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NS QVNIKCJ1bmV4cGVjdGVkIGZsb2F0MzIgb3Bjb2RlIik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29k ZUdlbmVyYXRvcjo6dmlzaXRNaW5NYXhEKExNaW5NYXhEKiBpbnMpIHsKLSsgIEZsb2F0UmVnaXN0 ZXIgZmlyc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5maXJzdCgpKTsKLSsgIEZsb2F0UmVnaXN0 ZXIgc2Vjb25kID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+c2Vjb25kKCkpOwotKyAgbW96aWxsYTo6 RGVidWdPbmx5PEZsb2F0UmVnaXN0ZXI+IG91dHB1dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91 dHB1dCgpKTsKLSsKLSsgIE1PWl9BU1NFUlQoZmlyc3QgPT0gb3V0cHV0KTsKLSsgIGlmIChpbnMt Pm1pcigpLT5pc01heCgpKSB7Ci0rICAgIG1hc20ubWF4RG91YmxlKHNlY29uZCwgZmlyc3QsIC8q IGhhbmRsZU5hTiA9ICovIHRydWUpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5taW5Eb3VibGUo c2Vjb25kLCBmaXJzdCwgLyogaGFuZGxlTmFOID0gKi8gdHJ1ZSk7Ci0rICB9Ci0rfQotKwotK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRNaW5NYXhGKExNaW5NYXhGKiBpbnMpIHsKLSsgIEZsb2F0 UmVnaXN0ZXIgZmlyc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5maXJzdCgpKTsKLSsgIEZsb2F0 UmVnaXN0ZXIgc2Vjb25kID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+c2Vjb25kKCkpOwotKyAgbW96 aWxsYTo6RGVidWdPbmx5PEZsb2F0UmVnaXN0ZXI+IG91dHB1dCA9IFRvRmxvYXRSZWdpc3Rlcihp bnMtPm91dHB1dCgpKTsKLSsKLSsgIE1PWl9BU1NFUlQoZmlyc3QgPT0gb3V0cHV0KTsKLSsgIGlm IChpbnMtPm1pcigpLT5pc01heCgpKSB7Ci0rICAgIG1hc20ubWF4RmxvYXQzMihzZWNvbmQsIGZp cnN0LCAvKiBoYW5kbGVOYU4gPSAqLyB0cnVlKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20ubWlu RmxvYXQzMihzZWNvbmQsIGZpcnN0LCAvKiBoYW5kbGVOYU4gPSAqLyB0cnVlKTsKLSsgIH0KLSt9 Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE5lZ0QoTE5lZ0QqIGlucykgewotKyAgRmxv YXRSZWdpc3RlciBpbnB1dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPmlucHV0KCkpOwotKyAgRmxv YXRSZWdpc3RlciBvdXRwdXQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBt YXNtLmFzX2ZuZWcob3V0cHV0LCBpbnB1dCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6 dmlzaXROZWdGKExOZWdGKiBpbnMpIHsKLSsgIEZsb2F0UmVnaXN0ZXIgaW5wdXQgPSBUb0Zsb2F0 UmVnaXN0ZXIoaW5zLT5pbnB1dCgpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgb3V0cHV0ID0gVG9GbG9h dFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKyAgbWFzbS5hc19mbmVnKG91dHB1dCwgaW5wdXQp OwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0UG93SGFsZkQoTFBvd0hhbGZEKiBp bnMpIHsKLSsgIEZsb2F0UmVnaXN0ZXIgaW5wdXQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5pbnB1 dCgpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgb3V0cHV0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0 cHV0KCkpOwotKwotKyAgTGFiZWwgZG9uZSwgc2tpcDsKLSsKLSsgIC8vIENoZWNrIGZvciAtSW5m aW5pdHkuCi0rICBtYXNtLmxvYWRDb25zdGFudERvdWJsZShOZWdhdGl2ZUluZmluaXR5PGRvdWJs ZT4oKSwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICBtYXNtLmJyYW5jaERvdWJsZShBc3NlbWJsZXI6 OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGlucHV0LAotKyAgICAgICAgICAgICAgICAgICAg U2NyYXRjaERvdWJsZVJlZywgJnNraXApOwotKyAgbWFzbS5sb2FkQ29uc3RhbnREb3VibGUoc3Rk OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpLCBvdXRwdXQpOwotKyAgbWFzbS5q dW1wKCZkb25lKTsKLSsKLSsgIG1hc20uYmluZCgmc2tpcCk7Ci0rICAvLyBBZGQgMC4wIHRvIGhh bmRsZSAtMC4KLSsgIG1hc20ubG9hZENvbnN0YW50RG91YmxlKDAuMCwgU2NyYXRjaERvdWJsZVJl Zyk7Ci0rICBtYXNtLmFzX2ZhZGQob3V0cHV0LCBpbnB1dCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0r ICBtYXNtLmFzX2ZzcXJ0KG91dHB1dCwgb3V0cHV0KTsKLSsKLSsgIG1hc20uYmluZCgmZG9uZSk7 Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXROb3REKExOb3REKiBpbnMpIHsKLSsg IEZsb2F0UmVnaXN0ZXIgaW5wdXQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5pbnB1dCgpKTsKLSsg IFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKwotKyAgbWFzbS5s b2FkQ29uc3RhbnREb3VibGUoMC4wLCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgIG1hc20uYXNfZmNt cHUoaW5wdXQsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgbWFzbS5tYV9jbXBfc2V0X2RibChkZXN0 LCBBc3NlbWJsZXI6OkRvdWJsZUVxdWFsT3JVbm9yZGVyZWQpOwotK30KLSsKLSt2b2lkIENvZGVH ZW5lcmF0b3I6OnZpc2l0Tm90RihMTm90RiogaW5zKSB7Ci0rICBGbG9hdFJlZ2lzdGVyIGlucHV0 ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+aW5wdXQoKSk7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9S ZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsKLSsgIG1hc20ubG9hZENvbnN0YW50RmxvYXQzMigw LjBmLCBTY3JhdGNoRmxvYXQzMlJlZyk7Ci0rICBtYXNtLmFzX2ZjbXB1KGlucHV0LCBTY3JhdGNo RmxvYXQzMlJlZyk7Ci0rICBtYXNtLm1hX2NtcF9zZXRfZGJsKGRlc3QsIEFzc2VtYmxlcjo6RG91 YmxlRXF1YWxPclVub3JkZXJlZCk7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIFZpc2l0b3JzOiBG UCBjb21wYXJpc29ucyBhbmQgYnJhbmNoZXMKLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0 Q29tcGFyZUQoTENvbXBhcmVEKiBjb21wKSB7Ci0rICBGbG9hdFJlZ2lzdGVyIGxocyA9IFRvRmxv YXRSZWdpc3Rlcihjb21wLT5sZWZ0KCkpOwotKyAgRmxvYXRSZWdpc3RlciByaHMgPSBUb0Zsb2F0 UmVnaXN0ZXIoY29tcC0+cmlnaHQoKSk7Ci0rICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3Rlcihj b21wLT5vdXRwdXQoKSk7Ci0rICBBc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kID0KLSsg ICAgICBjb21wLT5taXIoKS0+anNvcCgpID09IEpTT3A6OlN0cmljdEVxID8gQXNzZW1ibGVyOjpE b3VibGVFcXVhbAotKyAgICAgIDogY29tcC0+bWlyKCktPmpzb3AoKSA9PSBKU09wOjpTdHJpY3RO ZQotKyAgICAgICAgICA/IEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZAotKyAg ICAgICAgICA6IEpTT3BUb0RvdWJsZUNvbmRpdGlvbihjb21wLT5taXIoKS0+anNvcCgpKTsKLSsK LSsgIG1hc20uYXNfZmNtcHUobGhzLCByaHMpOwotKyAgbWFzbS5tYV9jbXBfc2V0X2RibChkZXN0 LCBjb25kKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdENvbXBhcmVGKExDb21w YXJlRiogY29tcCkgewotKyAgRmxvYXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoY29t cC0+bGVmdCgpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgcmhzID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAt PnJpZ2h0KCkpOwotKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoY29tcC0+b3V0cHV0KCkp OwotKyAgQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZCA9Ci0rICAgICAgY29tcC0+bWly KCktPmpzb3AoKSA9PSBKU09wOjpTdHJpY3RFcSA/IEFzc2VtYmxlcjo6RG91YmxlRXF1YWwKLSsg ICAgICA6IGNvbXAtPm1pcigpLT5qc29wKCkgPT0gSlNPcDo6U3RyaWN0TmUKLSsgICAgICAgICAg PyBBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQKLSsgICAgICAgICAgOiBKU09w VG9Eb3VibGVDb25kaXRpb24oY29tcC0+bWlyKCktPmpzb3AoKSk7Ci0rCi0rICBtYXNtLmFzX2Zj bXB1KGxocywgcmhzKTsKLSsgIG1hc20ubWFfY21wX3NldF9kYmwoZGVzdCwgY29uZCk7Ci0rfQot KwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRDb21wYXJlREFuZEJyYW5jaChMQ29tcGFyZURB bmRCcmFuY2gqIGNvbXApIHsKLSsgIEZsb2F0UmVnaXN0ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVy KGNvbXAtPmxlZnQoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIHJocyA9IFRvRmxvYXRSZWdpc3Rlcihj b21wLT5yaWdodCgpKTsKLSsKLSsgIEFzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQgPQot KyAgICAgIEpTT3BUb0RvdWJsZUNvbmRpdGlvbihjb21wLT5jbXBNaXIoKS0+anNvcCgpKTsKLSsg IE1CYXNpY0Jsb2NrKiBpZlRydWUgPSBjb21wLT5pZlRydWUoKTsKLSsgIE1CYXNpY0Jsb2NrKiBp ZkZhbHNlID0gY29tcC0+aWZGYWxzZSgpOwotKwotKyAgaWYgKGlzTmV4dEJsb2NrKGlmRmFsc2Ut PmxpcigpKSkgewotKyAgICBicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6RG91YmxlRmxvYXQsIGNv bmQsIGxocywgcmhzLCBpZlRydWUpOwotKyAgfSBlbHNlIHsKLSsgICAgYnJhbmNoVG9CbG9jayhB c3NlbWJsZXI6OkRvdWJsZUZsb2F0LCBBc3NlbWJsZXI6OkludmVydENvbmRpdGlvbihjb25kKSwg bGhzLAotKyAgICAgICAgICAgICAgICAgIHJocywgaWZGYWxzZSk7Ci0rICAgIGp1bXBUb0Jsb2Nr KGlmVHJ1ZSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRDb21wYXJl RkFuZEJyYW5jaChMQ29tcGFyZUZBbmRCcmFuY2gqIGNvbXApIHsKLSsgIEZsb2F0UmVnaXN0ZXIg bGhzID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAtPmxlZnQoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIHJo cyA9IFRvRmxvYXRSZWdpc3Rlcihjb21wLT5yaWdodCgpKTsKLSsKLSsgIEFzc2VtYmxlcjo6RG91 YmxlQ29uZGl0aW9uIGNvbmQgPQotKyAgICAgIEpTT3BUb0RvdWJsZUNvbmRpdGlvbihjb21wLT5j bXBNaXIoKS0+anNvcCgpKTsKLSsgIE1CYXNpY0Jsb2NrKiBpZlRydWUgPSBjb21wLT5pZlRydWUo KTsKLSsgIE1CYXNpY0Jsb2NrKiBpZkZhbHNlID0gY29tcC0+aWZGYWxzZSgpOwotKwotKyAgaWYg KGlzTmV4dEJsb2NrKGlmRmFsc2UtPmxpcigpKSkgewotKyAgICBicmFuY2hUb0Jsb2NrKEFzc2Vt Ymxlcjo6U2luZ2xlRmxvYXQsIGNvbmQsIGxocywgcmhzLCBpZlRydWUpOwotKyAgfSBlbHNlIHsK LSsgICAgYnJhbmNoVG9CbG9jayhBc3NlbWJsZXI6OlNpbmdsZUZsb2F0LCBBc3NlbWJsZXI6Oklu dmVydENvbmRpdGlvbihjb25kKSwgbGhzLAotKyAgICAgICAgICAgICAgICAgIHJocywgaWZGYWxz ZSk7Ci0rICAgIGp1bXBUb0Jsb2NrKGlmVHJ1ZSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdl bmVyYXRvcjo6dmlzaXRUZXN0REFuZEJyYW5jaChMVGVzdERBbmRCcmFuY2gqIHRlc3QpIHsKLSsg IEZsb2F0UmVnaXN0ZXIgaW5wdXQgPSBUb0Zsb2F0UmVnaXN0ZXIodGVzdC0+aW5wdXQoKSk7Ci0r Ci0rICBNQmFzaWNCbG9jayogaWZUcnVlID0gdGVzdC0+aWZUcnVlKCk7Ci0rICBNQmFzaWNCbG9j ayogaWZGYWxzZSA9IHRlc3QtPmlmRmFsc2UoKTsKLSsKLSsgIG1hc20ubG9hZENvbnN0YW50RG91 YmxlKDAuMCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rCi0rICBpZiAoaXNOZXh0QmxvY2soaWZGYWxz ZS0+bGlyKCkpKSB7Ci0rICAgIGJyYW5jaFRvQmxvY2soQXNzZW1ibGVyOjpEb3VibGVGbG9hdCwg QXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbCwgaW5wdXQsCi0rICAgICAgICAgICAgICAgICAgU2Ny YXRjaERvdWJsZVJlZywgaWZUcnVlKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGJyYW5jaFRvQmxvY2so QXNzZW1ibGVyOjpEb3VibGVGbG9hdCwgQXNzZW1ibGVyOjpEb3VibGVFcXVhbE9yVW5vcmRlcmVk LAotKyAgICAgICAgICAgICAgICAgIGlucHV0LCBTY3JhdGNoRG91YmxlUmVnLCBpZkZhbHNlKTsK LSsgICAganVtcFRvQmxvY2soaWZUcnVlKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdFRlc3RGQW5kQnJhbmNoKExUZXN0RkFuZEJyYW5jaCogdGVzdCkgewotKyAgRmxv YXRSZWdpc3RlciBpbnB1dCA9IFRvRmxvYXRSZWdpc3Rlcih0ZXN0LT5pbnB1dCgpKTsKLSsKLSsg IE1CYXNpY0Jsb2NrKiBpZlRydWUgPSB0ZXN0LT5pZlRydWUoKTsKLSsgIE1CYXNpY0Jsb2NrKiBp ZkZhbHNlID0gdGVzdC0+aWZGYWxzZSgpOwotKwotKyAgbWFzbS5sb2FkQ29uc3RhbnRGbG9hdDMy KDAuMGYsIFNjcmF0Y2hGbG9hdDMyUmVnKTsKLSsKLSsgIGlmIChpc05leHRCbG9jayhpZkZhbHNl LT5saXIoKSkpIHsKLSsgICAgYnJhbmNoVG9CbG9jayhBc3NlbWJsZXI6OlNpbmdsZUZsb2F0LCBB c3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsLCBpbnB1dCwKLSsgICAgICAgICAgICAgICAgICBTY3Jh dGNoRmxvYXQzMlJlZywgaWZUcnVlKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGJyYW5jaFRvQmxvY2so QXNzZW1ibGVyOjpTaW5nbGVGbG9hdCwgQXNzZW1ibGVyOjpEb3VibGVFcXVhbE9yVW5vcmRlcmVk LAotKyAgICAgICAgICAgICAgICAgIGlucHV0LCBTY3JhdGNoRmxvYXQzMlJlZywgaWZGYWxzZSk7 Ci0rICAgIGp1bXBUb0Jsb2NrKGlmVHJ1ZSk7Ci0rICB9Ci0rfQotKwotKy8vID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8v IFZpc2l0b3JzOiBUcnVuY2F0aW9uCi0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFRydW5j YXRlRFRvSW50MzIoTFRydW5jYXRlRFRvSW50MzIqIGlucykgewotKyAgZW1pdFRydW5jYXRlRG91 YmxlKFRvRmxvYXRSZWdpc3RlcihpbnMtPmlucHV0KCkpLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0 KCkpLAotKyAgICAgICAgICAgICAgICAgICAgIGlucy0+bWlyKCkpOwotK30KLSsKLSt2b2lkIENv ZGVHZW5lcmF0b3I6OnZpc2l0VHJ1bmNhdGVGVG9JbnQzMihMVHJ1bmNhdGVGVG9JbnQzMiogaW5z KSB7Ci0rICBlbWl0VHJ1bmNhdGVGbG9hdDMyKFRvRmxvYXRSZWdpc3RlcihpbnMtPmlucHV0KCkp LCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpLAotKyAgICAgICAgICAgICAgICAgICAgICBpbnMt Pm1pcigpKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gVmlzaXRvcnM6IEludDY0IC8gV2FzbSB0 eXBlIGNvbnZlcnNpb25zCi0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEV4dGVuZEludDMy VG9JbnQ2NChMRXh0ZW5kSW50MzJUb0ludDY0KiBsaXIpIHsKLSsgIFJlZ2lzdGVyIGlucHV0ID0g VG9SZWdpc3RlcihsaXItPmlucHV0KCkpOwotKyAgUmVnaXN0ZXIgb3V0cHV0ID0gVG9SZWdpc3Rl cihsaXItPm91dHB1dCgpKTsKLSsKLSsgIGlmIChsaXItPm1pcigpLT5pc1Vuc2lnbmVkKCkpIHsK LSsgICAgbWFzbS5tb3ZlMzJUbzY0WmVyb0V4dGVuZChpbnB1dCwgUmVnaXN0ZXI2NChvdXRwdXQp KTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20uYXNfZXh0c3cob3V0cHV0LCBpbnB1dCk7Ci0rICB9 Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXcmFwSW50NjRUb0ludDMyKExXcmFw SW50NjRUb0ludDMyKiBsaXIpIHsKLSsgIGNvbnN0IExJbnQ2NEFsbG9jYXRpb24gaW5wdXQgPSBs aXItPmlucHV0KCk7Ci0rICBSZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0 KCkpOwotKwotKyAgaWYgKGxpci0+bWlyKCktPmJvdHRvbUhhbGYoKSkgewotKyAgICBpZiAoaW5w dXQudmFsdWUoKS5pc01lbW9yeSgpKSB7Ci0rICAgICAgbWFzbS5sb2FkMzIoVG9BZGRyZXNzKGlu cHV0KSwgb3V0cHV0KTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBtYXNtLm1vdmU2NFRvMzIoVG9S ZWdpc3RlcjY0KGlucHV0KSwgb3V0cHV0KTsKLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgLy8g VGhlIG9ubHkgcHJvZHVjZXIgb2YgYGJvdHRvbUhhbGY9ZmFsc2VgIE1XcmFwSW50NjRUb0ludDMy IGluIHRoZQotKyAgICAvLyBjdXJyZW50IE1JUiBwaXBlbGluZSBpcyB0aGUgR1BSLXBhaXIgYXJn dW1lbnQgc3BsaXR0ZXIgaW4KLSsgICAgLy8gV2FzbUlvbkNvbXBpbGUuY3BwLCB3aGljaCBpcyBn YXRlZCBvbiBKU19DT0RFR0VOX1JFR0lTVEVSX1BBSVIKLSsgICAgLy8gKDMyLWJpdCBBUk0gb25s eSkuIFBQQzY0IGlzIDY0LWJpdCBhbmQgbmV2ZXIgcmVhY2hlcyB0aGlzIHBhdGguCi0rICAgIC8v IE1hdGNoZXMgdGhlIHNhbWUgZGVmZW5zaXZlIGNyYXNoIGluIHg2NCAvIEFSTTY0IGJhY2tlbmRz LgotKyAgICBNT1pfQ1JBU0goIk5vdCBpbXBsZW1lbnRlZC4iKTsKLSsgIH0KLSt9Ci0rCi0rdm9p ZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFNpZ25FeHRlbmRJbnQ2NChMU2lnbkV4dGVuZEludDY0KiBs aXIpIHsKLSsgIFJlZ2lzdGVyNjQgaW5wdXQgPSBUb1JlZ2lzdGVyNjQobGlyLT5pbnB1dCgpKTsK LSsgIFJlZ2lzdGVyNjQgb3V0cHV0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7Ci0rCi0rICBzd2l0 Y2ggKGxpci0+bWlyKCktPm1vZGUoKSkgewotKyAgICBjYXNlIE1TaWduRXh0ZW5kSW50NjQ6OkJ5 dGU6Ci0rICAgICAgbWFzbS5hc19leHRzYihvdXRwdXQucmVnLCBpbnB1dC5yZWcpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIE1TaWduRXh0ZW5kSW50NjQ6OkhhbGY6Ci0rICAgICAgbWFzbS5h c19leHRzaChvdXRwdXQucmVnLCBpbnB1dC5yZWcpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IE1TaWduRXh0ZW5kSW50NjQ6OldvcmQ6Ci0rICAgICAgbWFzbS5hc19leHRzdyhvdXRwdXQucmVn LCBpbnB1dC5yZWcpOwotKyAgICAgIGJyZWFrOwotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5l cmF0b3I6OnZpc2l0V2FzbUV4dGVuZFUzMkluZGV4KExXYXNtRXh0ZW5kVTMySW5kZXgqIGxpcikg ewotKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVyKGxpci0+aW5wdXQoKSk7Ci0rICBSZWdp c3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOwotKyAgbWFzbS5tb3ZlMzJU bzY0WmVyb0V4dGVuZChpbnB1dCwgUmVnaXN0ZXI2NChvdXRwdXQpKTsKLSt9Ci0rCi0rdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdFdhc21XcmFwVTMySW5kZXgoTFdhc21XcmFwVTMySW5kZXgqIGxp cikgewotKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVyKGxpci0+aW5wdXQoKSk7Ci0rICBS ZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOwotKyAgbWFzbS5tb3Zl MzIoaW5wdXQsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNt VHJ1bmNhdGVUb0ludDMyKExXYXNtVHJ1bmNhdGVUb0ludDMyKiBsaXIpIHsKLSsgIGF1dG8gaW5w dXQgPSBUb0Zsb2F0UmVnaXN0ZXIobGlyLT5pbnB1dCgpKTsKLSsgIGF1dG8gb3V0cHV0ID0gVG9S ZWdpc3RlcihsaXItPm91dHB1dCgpKTsKLSsKLSsgIE1XYXNtVHJ1bmNhdGVUb0ludDMyKiBtaXIg PSBsaXItPm1pcigpOwotKyAgTUlSVHlwZSBmcm9tVHlwZSA9IG1pci0+aW5wdXQoKS0+dHlwZSgp OwotKwotKyAgTU9aX0FTU0VSVChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUgfHwgZnJvbVR5 cGUgPT0gTUlSVHlwZTo6RmxvYXQzMik7Ci0rCi0rICBhdXRvKiBvb2wgPSBuZXcgKGFsbG9jKCkp IE91dE9mTGluZVdhc21UcnVuY2F0ZUNoZWNrKG1pciwgaW5wdXQsIG91dHB1dCk7Ci0rICBhZGRP dXRPZkxpbmVDb2RlKG9vbCwgbWlyKTsKLSsKLSsgIExhYmVsKiBvb2xFbnRyeSA9IG9vbC0+ZW50 cnkoKTsKLSsgIGlmIChtaXItPmlzVW5zaWduZWQoKSkgewotKyAgICBpZiAoZnJvbVR5cGUgPT0g TUlSVHlwZTo6RG91YmxlKSB7Ci0rICAgICAgbWFzbS53YXNtVHJ1bmNhdGVEb3VibGVUb1VJbnQz MihpbnB1dCwgb3V0cHV0LCBtaXItPmlzU2F0dXJhdGluZygpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb29sRW50cnkpOwotKyAgICB9IGVsc2UgaWYgKGZyb21UeXBl ID09IE1JUlR5cGU6OkZsb2F0MzIpIHsKLSsgICAgICBtYXNtLndhc21UcnVuY2F0ZUZsb2F0MzJU b1VJbnQzMihpbnB1dCwgb3V0cHV0LCBtaXItPmlzU2F0dXJhdGluZygpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9vbEVudHJ5KTsKLSsgICAgfSBlbHNlIHsKLSsg ICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgdHlwZSIpOwotKyAgICB9Ci0rCi0rICAgIG1hc20u YmluZChvb2wtPnJlam9pbigpKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgaWYgKGZyb21U eXBlID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICBtYXNtLndhc21UcnVuY2F0ZURvdWJsZVRv SW50MzIoaW5wdXQsIG91dHB1dCwgbWlyLT5pc1NhdHVyYXRpbmcoKSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9vbEVudHJ5KTsKLSsgIH0gZWxzZSBpZiAoZnJvbVR5cGUg PT0gTUlSVHlwZTo6RmxvYXQzMikgewotKyAgICBtYXNtLndhc21UcnVuY2F0ZUZsb2F0MzJUb0lu dDMyKGlucHV0LCBvdXRwdXQsIG1pci0+aXNTYXR1cmF0aW5nKCksCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb29sRW50cnkpOwotKyAgfSBlbHNlIHsKLSsgICAgTU9aX0NS QVNIKCJ1bmV4cGVjdGVkIHR5cGUiKTsKLSsgIH0KLSsKLSsgIG1hc20uYmluZChvb2wtPnJlam9p bigpKTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21UcnVuY2F0ZVRvSW50 NjQoTFdhc21UcnVuY2F0ZVRvSW50NjQqIGxpcikgewotKyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9 IFRvRmxvYXRSZWdpc3RlcihsaXItPmlucHV0KCkpOwotKyAgUmVnaXN0ZXI2NCBvdXRwdXQgPSBU b091dFJlZ2lzdGVyNjQobGlyKTsKLSsKLSsgIE1XYXNtVHJ1bmNhdGVUb0ludDY0KiBtaXIgPSBs aXItPm1pcigpOwotKyAgTUlSVHlwZSBmcm9tVHlwZSA9IG1pci0+aW5wdXQoKS0+dHlwZSgpOwot KwotKyAgTU9aX0FTU0VSVChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUgfHwgZnJvbVR5cGUg PT0gTUlSVHlwZTo6RmxvYXQzMik7Ci0rCi0rICBhdXRvKiBvb2wgPSBuZXcgKGFsbG9jKCkpIE91 dE9mTGluZVdhc21UcnVuY2F0ZUNoZWNrKG1pciwgaW5wdXQsIG91dHB1dCk7Ci0rICBhZGRPdXRP ZkxpbmVDb2RlKG9vbCwgbWlyKTsKLSsKLSsgIExhYmVsKiBvb2xFbnRyeSA9IG9vbC0+ZW50cnko KTsKLSsgIExhYmVsKiBvb2xSZWpvaW4gPSBvb2wtPnJlam9pbigpOwotKyAgYm9vbCBpc1NhdHVy YXRpbmcgPSBtaXItPmlzU2F0dXJhdGluZygpOwotKwotKyAgaWYgKGZyb21UeXBlID09IE1JUlR5 cGU6OkRvdWJsZSkgewotKyAgICBpZiAobWlyLT5pc1Vuc2lnbmVkKCkpIHsKLSsgICAgICBtYXNt Lndhc21UcnVuY2F0ZURvdWJsZVRvVUludDY0KGlucHV0LCBvdXRwdXQsIGlzU2F0dXJhdGluZywg b29sRW50cnksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2xSZWpv aW4sIEludmFsaWRGbG9hdFJlZyk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgbWFzbS53YXNtVHJ1 bmNhdGVEb3VibGVUb0ludDY0KGlucHV0LCBvdXRwdXQsIGlzU2F0dXJhdGluZywgb29sRW50cnks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9vbFJlam9pbiwgSW52YWxp ZEZsb2F0UmVnKTsKLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgaWYgKG1pci0+aXNVbnNpZ25l ZCgpKSB7Ci0rICAgICAgbWFzbS53YXNtVHJ1bmNhdGVGbG9hdDMyVG9VSW50NjQoaW5wdXQsIG91 dHB1dCwgaXNTYXR1cmF0aW5nLCBvb2xFbnRyeSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvb2xSZWpvaW4sIEludmFsaWRGbG9hdFJlZyk7Ci0rICAgIH0gZWxzZSB7 Ci0rICAgICAgbWFzbS53YXNtVHJ1bmNhdGVGbG9hdDMyVG9JbnQ2NChpbnB1dCwgb3V0cHV0LCBp c1NhdHVyYXRpbmcsIG9vbEVudHJ5LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb29sUmVqb2luLCBJbnZhbGlkRmxvYXRSZWcpOwotKyAgICB9Ci0rICB9Ci0rfQotKwot K3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRJbnQ2NFRvRmxvYXRpbmdQb2ludChMSW50NjRUb0Zs b2F0aW5nUG9pbnQqIGxpcikgewotKyAgUmVnaXN0ZXI2NCBpbnB1dCA9IFRvUmVnaXN0ZXI2NChs aXItPmlucHV0KCkpOwotKyAgRmxvYXRSZWdpc3RlciBvdXRwdXQgPSBUb0Zsb2F0UmVnaXN0ZXIo bGlyLT5vdXRwdXQoKSk7Ci0rICBNSVJUeXBlIG91dHB1dFR5cGUgPSBsaXItPm1pcigpLT50eXBl KCk7Ci0rCi0rICBpZiAob3V0cHV0VHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKLSsgICAgaWYg KGxpci0+bWlyKCktPmlzVW5zaWduZWQoKSkgewotKyAgICAgIG1hc20uY29udmVydFVJbnQ2NFRv RG91YmxlKGlucHV0LCBvdXRwdXQsIFJlZ2lzdGVyOjpJbnZhbGlkKCkpOwotKyAgICB9IGVsc2Ug ewotKyAgICAgIG1hc20uY29udmVydEludDY0VG9Eb3VibGUoaW5wdXQsIG91dHB1dCk7Ci0rICAg IH0KLSsgIH0gZWxzZSB7Ci0rICAgIGlmIChsaXItPm1pcigpLT5pc1Vuc2lnbmVkKCkpIHsKLSsg ICAgICBtYXNtLmNvbnZlcnRVSW50NjRUb0Zsb2F0MzIoaW5wdXQsIG91dHB1dCwgUmVnaXN0ZXI6 OkludmFsaWQoKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgbWFzbS5jb252ZXJ0SW50NjRUb0Zs b2F0MzIoaW5wdXQsIG91dHB1dCk7Ci0rICAgIH0KLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2Vu ZXJhdG9yOjp2aXNpdFdhc21VaW50MzJUb0RvdWJsZShMV2FzbVVpbnQzMlRvRG91YmxlKiBsaXIp IHsKLSsgIFJlZ2lzdGVyIGlucHV0ID0gVG9SZWdpc3RlcihsaXItPmlucHV0KCkpOwotKyAgRmxv YXRSZWdpc3RlciBvdXRwdXQgPSBUb0Zsb2F0UmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7Ci0rICBt YXNtLmNvbnZlcnRVSW50MzJUb0RvdWJsZShpbnB1dCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdFdhc21VaW50MzJUb0Zsb2F0MzIoTFdhc21VaW50MzJUb0Zsb2F0 MzIqIGxpcikgewotKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVyKGxpci0+aW5wdXQoKSk7 Ci0rICBGbG9hdFJlZ2lzdGVyIG91dHB1dCA9IFRvRmxvYXRSZWdpc3RlcihsaXItPm91dHB1dCgp KTsKLSsgIG1hc20uY29udmVydFVJbnQzMlRvRmxvYXQzMihpbnB1dCwgb3V0cHV0KTsKLSt9Ci0r Ci0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21CdWlsdGluVHJ1bmNhdGVEVG9JbnQzMigK LSsgICAgTFdhc21CdWlsdGluVHJ1bmNhdGVEVG9JbnQzMiogbGlyKSB7Ci0rICBlbWl0VHJ1bmNh dGVEb3VibGUoVG9GbG9hdFJlZ2lzdGVyKGxpci0+Z2V0T3BlcmFuZCgwKSksCi0rICAgICAgICAg ICAgICAgICAgICAgVG9SZWdpc3RlcihsaXItPmdldERlZigwKSksIGxpci0+bWlyKCkpOwotK30K LSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUJ1aWx0aW5UcnVuY2F0ZUZUb0ludDMy KAotKyAgICBMV2FzbUJ1aWx0aW5UcnVuY2F0ZUZUb0ludDMyKiBsaXIpIHsKLSsgIGVtaXRUcnVu Y2F0ZUZsb2F0MzIoVG9GbG9hdFJlZ2lzdGVyKGxpci0+Z2V0T3BlcmFuZCgwKSksCi0rICAgICAg ICAgICAgICAgICAgICAgIFRvUmVnaXN0ZXIobGlyLT5nZXREZWYoMCkpLCBsaXItPm1pcigpKTsK LSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rLy8gVmlzaXRvcnM6IFdhc20gbG9hZC9zdG9yZQotKwotK3Rl bXBsYXRlIDx0eXBlbmFtZSBUPgotK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjplbWl0V2FzbUxv YWQoVCogbGlyKSB7Ci0rICBjb25zdCBNV2FzbUxvYWQqIG1pciA9IGxpci0+bWlyKCk7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rCi0rICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3Rl cihsaXItPm1lbW9yeUJhc2UoKSk7Ci0rICBSZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVyKGxpci0+ cHRyKCkpOwotKyAgUmVnaXN0ZXIgcHRyU2NyYXRjaCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlk KGxpci0+dGVtcDAoKSk7Ci0rCi0rICBpZiAobWlyLT5iYXNlKCktPnR5cGUoKSA9PSBNSVJUeXBl OjpJbnQzMikgewotKyAgICBtYXNtLm1vdmUzMlRvNjRaZXJvRXh0ZW5kKHB0ciwgUmVnaXN0ZXI2 NChzY3JhdGNoKSk7Ci0rICAgIHB0ciA9IHNjcmF0Y2g7Ci0rICAgIHB0clNjcmF0Y2ggPSBwdHJT Y3JhdGNoICE9IEludmFsaWRSZWcgPyBzY3JhdGNoIDogSW52YWxpZFJlZzsKLSsgIH0KLSsKLSsg IG1hc20ud2FzbUxvYWQobWlyLT5hY2Nlc3MoKSwgbWVtb3J5QmFzZSwgcHRyLCBwdHJTY3JhdGNo LAotKyAgICAgICAgICAgICAgICBUb0FueVJlZ2lzdGVyKGxpci0+b3V0cHV0KCkpKTsKLSt9Ci0r Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OmVtaXRX YXNtU3RvcmUoVCogbGlyKSB7Ci0rICBjb25zdCBNV2FzbVN0b3JlKiBtaXIgPSBsaXItPm1pcigp OwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKwotKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRv UmVnaXN0ZXIobGlyLT5tZW1vcnlCYXNlKCkpOwotKyAgUmVnaXN0ZXIgcHRyID0gVG9SZWdpc3Rl cihsaXItPnB0cigpKTsKLSsgIFJlZ2lzdGVyIHB0clNjcmF0Y2ggPSBUb1RlbXBSZWdpc3Rlck9y SW52YWxpZChsaXItPnRlbXAwKCkpOwotKwotKyAgaWYgKG1pci0+YmFzZSgpLT50eXBlKCkgPT0g TUlSVHlwZTo6SW50MzIpIHsKLSsgICAgbWFzbS5tb3ZlMzJUbzY0WmVyb0V4dGVuZChwdHIsIFJl Z2lzdGVyNjQoc2NyYXRjaCkpOwotKyAgICBwdHIgPSBzY3JhdGNoOwotKyAgICBwdHJTY3JhdGNo ID0gcHRyU2NyYXRjaCAhPSBJbnZhbGlkUmVnID8gc2NyYXRjaCA6IEludmFsaWRSZWc7Ci0rICB9 Ci0rCi0rICBtYXNtLndhc21TdG9yZShtaXItPmFjY2VzcygpLCBUb0FueVJlZ2lzdGVyKGxpci0+ dmFsdWUoKSksIG1lbW9yeUJhc2UsIHB0ciwKLSsgICAgICAgICAgICAgICAgIHB0clNjcmF0Y2gp OwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUxvYWQoTFdhc21Mb2FkKiBs aXIpIHsgZW1pdFdhc21Mb2FkKGxpcik7IH0KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0 V2FzbVN0b3JlKExXYXNtU3RvcmUqIGxpcikgeyBlbWl0V2FzbVN0b3JlKGxpcik7IH0KLSsKLSt2 b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUxvYWRJNjQoTFdhc21Mb2FkSTY0KiBsaXIpIHsK LSsgIGNvbnN0IE1XYXNtTG9hZCogbWlyID0gbGlyLT5taXIoKTsKLSsKLSsgIFJlZ2lzdGVyIG1l bW9yeUJhc2UgPSBUb1JlZ2lzdGVyKGxpci0+bWVtb3J5QmFzZSgpKTsKLSsgIFJlZ2lzdGVyIHB0 clNjcmF0Y2ggPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAwKCkpOwotKwotKyAg UmVnaXN0ZXIgcHRyUmVnID0gVG9SZWdpc3RlcihsaXItPnB0cigpKTsKLSsgIGlmIChtaXItPmJh c2UoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyKSB7Ci0rICAgIG1hc20ubW92ZTMyWmVyb0V4 dGVuZFRvUHRyKHB0clJlZywgcHRyUmVnKTsKLSsgIH0KLSsKLSsgIG1hc20ud2FzbUxvYWRJNjQo bWlyLT5hY2Nlc3MoKSwgbWVtb3J5QmFzZSwgcHRyUmVnLCBwdHJTY3JhdGNoLAotKyAgICAgICAg ICAgICAgICAgICBUb091dFJlZ2lzdGVyNjQobGlyKSk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVy YXRvcjo6dmlzaXRXYXNtU3RvcmVJNjQoTFdhc21TdG9yZUk2NCogbGlyKSB7Ci0rICBjb25zdCBN V2FzbVN0b3JlKiBtaXIgPSBsaXItPm1pcigpOwotKwotKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9 IFRvUmVnaXN0ZXIobGlyLT5tZW1vcnlCYXNlKCkpOwotKyAgUmVnaXN0ZXIgcHRyU2NyYXRjaCA9 IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDAoKSk7Ci0rCi0rICBSZWdpc3RlciBw dHJSZWcgPSBUb1JlZ2lzdGVyKGxpci0+cHRyKCkpOwotKyAgaWYgKG1pci0+YmFzZSgpLT50eXBl KCkgPT0gTUlSVHlwZTo6SW50MzIpIHsKLSsgICAgbWFzbS5tb3ZlMzJaZXJvRXh0ZW5kVG9QdHIo cHRyUmVnLCBwdHJSZWcpOwotKyAgfQotKwotKyAgbWFzbS53YXNtU3RvcmVJNjQobWlyLT5hY2Nl c3MoKSwgVG9SZWdpc3RlcjY0KGxpci0+dmFsdWUoKSksIG1lbW9yeUJhc2UsCi0rICAgICAgICAg ICAgICAgICAgICBwdHJSZWcsIHB0clNjcmF0Y2gpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0QXNtSlNMb2FkSGVhcChMQXNtSlNMb2FkSGVhcCogaW5zKSB7Ci0rICBjb25zdCBN QXNtSlNMb2FkSGVhcCogbWlyID0gaW5zLT5taXIoKTsKLSsgIE1PWl9BU1NFUlQoIW1pci0+aGFz TWVtb3J5QmFzZSgpKTsKLSsKLSsgIGNvbnN0IExBbGxvY2F0aW9uKiBwdHIgPSBpbnMtPnB0cigp OwotKyAgY29uc3QgTERlZmluaXRpb24qIG91dHB1dCA9IGlucy0+b3V0cHV0KCk7Ci0rICBjb25z dCBMQWxsb2NhdGlvbiogYm91bmRzQ2hlY2tMaW1pdCA9IGlucy0+Ym91bmRzQ2hlY2tMaW1pdCgp OwotKwotKyAgUmVnaXN0ZXIgcHRyUmVnID0gVG9SZWdpc3RlcihwdHIpOwotKyAgU2NhbGFyOjpU eXBlIGFjY2Vzc1R5cGUgPSBtaXItPmFjY2Vzc1R5cGUoKTsKLSsgIGJvb2wgaXNGbG9hdCA9IGFj Y2Vzc1R5cGUgPT0gU2NhbGFyOjpGbG9hdDMyIHx8IGFjY2Vzc1R5cGUgPT0gU2NhbGFyOjpGbG9h dDY0OwotKyAgTGFiZWwgZG9uZTsKLSsKLSsgIGlmIChtaXItPm5lZWRzQm91bmRzQ2hlY2soKSkg ewotKyAgICBMYWJlbCBib3VuZHNDaGVja1Bhc3NlZDsKLSsgICAgUmVnaXN0ZXIgYm91bmRzQ2hl Y2tMaW1pdFJlZyA9IFRvUmVnaXN0ZXIoYm91bmRzQ2hlY2tMaW1pdCk7Ci0rICAgIG1hc20ud2Fz bUJvdW5kc0NoZWNrMzIoQXNzZW1ibGVyOjpCZWxvdywgcHRyUmVnLCBib3VuZHNDaGVja0xpbWl0 UmVnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZib3VuZHNDaGVja1Bhc3NlZCk7Ci0r ICAgIGlmIChpc0Zsb2F0KSB7Ci0rICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gU2NhbGFyOjpGbG9h dDMyKSB7Ci0rICAgICAgICBtYXNtLmxvYWRDb25zdGFudEZsb2F0MzIoR2VuZXJpY05hTigpLCBU b0Zsb2F0UmVnaXN0ZXIob3V0cHV0KSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1hc20u bG9hZENvbnN0YW50RG91YmxlKEdlbmVyaWNOYU4oKSwgVG9GbG9hdFJlZ2lzdGVyKG91dHB1dCkp OwotKyAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICBtYXNtLm1vdmVQdHIoSW1tV29yZCgw KSwgVG9SZWdpc3RlcihvdXRwdXQpKTsKLSsgICAgfQotKyAgICBtYXNtLmp1bXAoJmRvbmUpOwot KyAgICBtYXNtLmJpbmQoJmJvdW5kc0NoZWNrUGFzc2VkKTsKLSsgIH0KLSsKLSsgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIG1hc20ubW92ZTMyVG82NFplcm9FeHRlbmQocHRyUmVnLCBSZWdpc3Rl cjY0KHNjcmF0Y2gpKTsKLSsKLSsgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewotKyAgICBjYXNlIFNj YWxhcjo6SW50ODoKLSsgICAgICBtYXNtLmFzX2xiengoVG9SZWdpc3RlcihvdXRwdXQpLCBIZWFw UmVnLCBzY3JhdGNoKTsKLSsgICAgICBtYXNtLmFzX2V4dHNiKFRvUmVnaXN0ZXIob3V0cHV0KSwg VG9SZWdpc3RlcihvdXRwdXQpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OlVp bnQ4OgotKyAgICAgIG1hc20uYXNfbGJ6eChUb1JlZ2lzdGVyKG91dHB1dCksIEhlYXBSZWcsIHNj cmF0Y2gpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6SW50MTY6Ci0rICAgICAg bWFzbS5hc19saGF4KFRvUmVnaXN0ZXIob3V0cHV0KSwgSGVhcFJlZywgc2NyYXRjaCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpVaW50MTY6Ci0rICAgICAgbWFzbS5hc19saHp4 KFRvUmVnaXN0ZXIob3V0cHV0KSwgSGVhcFJlZywgc2NyYXRjaCk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2UgU2NhbGFyOjpJbnQzMjoKLSsgICAgICBtYXNtLmFzX2x3engoVG9SZWdpc3Rlcihv dXRwdXQpLCBIZWFwUmVnLCBzY3JhdGNoKTsKLSsgICAgICBtYXNtLmFzX2V4dHN3KFRvUmVnaXN0 ZXIob3V0cHV0KSwgVG9SZWdpc3RlcihvdXRwdXQpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSBTY2FsYXI6OlVpbnQzMjoKLSsgICAgICBtYXNtLmFzX2x3engoVG9SZWdpc3RlcihvdXRwdXQp LCBIZWFwUmVnLCBzY3JhdGNoKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OkZs b2F0NjQ6Ci0rICAgICAgbWFzbS5hc19sZmR4KFRvRmxvYXRSZWdpc3RlcihvdXRwdXQpLCBIZWFw UmVnLCBzY3JhdGNoKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OkZsb2F0MzI6 Ci0rICAgICAgbWFzbS5hc19sZnN4KFRvRmxvYXRSZWdpc3RlcihvdXRwdXQpLCBIZWFwUmVnLCBz Y3JhdGNoKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0go InVuZXhwZWN0ZWQgYXJyYXkgdHlwZSIpOwotKyAgfQotKwotKyAgaWYgKGRvbmUudXNlZCgpKSB7 Ci0rICAgIG1hc20uYmluZCgmZG9uZSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRv cjo6dmlzaXRBc21KU1N0b3JlSGVhcChMQXNtSlNTdG9yZUhlYXAqIGlucykgewotKyAgY29uc3Qg TUFzbUpTU3RvcmVIZWFwKiBtaXIgPSBpbnMtPm1pcigpOwotKyAgTU9aX0FTU0VSVCghbWlyLT5o YXNNZW1vcnlCYXNlKCkpOwotKwotKyAgY29uc3QgTEFsbG9jYXRpb24qIHZhbHVlID0gaW5zLT52 YWx1ZSgpOwotKyAgY29uc3QgTEFsbG9jYXRpb24qIHB0ciA9IGlucy0+cHRyKCk7Ci0rICBjb25z dCBMQWxsb2NhdGlvbiogYm91bmRzQ2hlY2tMaW1pdCA9IGlucy0+Ym91bmRzQ2hlY2tMaW1pdCgp OwotKwotKyAgUmVnaXN0ZXIgcHRyUmVnID0gVG9SZWdpc3RlcihwdHIpOwotKwotKyAgTGFiZWwg ZG9uZTsKLSsgIGlmIChtaXItPm5lZWRzQm91bmRzQ2hlY2soKSkgewotKyAgICBSZWdpc3RlciBi b3VuZHNDaGVja0xpbWl0UmVnID0gVG9SZWdpc3Rlcihib3VuZHNDaGVja0xpbWl0KTsKLSsgICAg bWFzbS53YXNtQm91bmRzQ2hlY2szMihBc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHRyUmVnLCBi b3VuZHNDaGVja0xpbWl0UmVnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb25lKTsK LSsgIH0KLSsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1hc20ubW92ZTMyVG82NFplcm9F eHRlbmQocHRyUmVnLCBSZWdpc3RlcjY0KHNjcmF0Y2gpKTsKLSsKLSsgIHN3aXRjaCAobWlyLT5h Y2Nlc3NUeXBlKCkpIHsKLSsgICAgY2FzZSBTY2FsYXI6OkludDg6Ci0rICAgIGNhc2UgU2NhbGFy OjpVaW50ODoKLSsgICAgICBtYXNtLmFzX3N0YngoVG9SZWdpc3Rlcih2YWx1ZSksIEhlYXBSZWcs IHNjcmF0Y2gpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6SW50MTY6Ci0rICAg IGNhc2UgU2NhbGFyOjpVaW50MTY6Ci0rICAgICAgbWFzbS5hc19zdGh4KFRvUmVnaXN0ZXIodmFs dWUpLCBIZWFwUmVnLCBzY3JhdGNoKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6 OkludDMyOgotKyAgICBjYXNlIFNjYWxhcjo6VWludDMyOgotKyAgICAgIG1hc20uYXNfc3R3eChU b1JlZ2lzdGVyKHZhbHVlKSwgSGVhcFJlZywgc2NyYXRjaCk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGNhc2UgU2NhbGFyOjpGbG9hdDY0OgotKyAgICAgIG1hc20uYXNfc3RmZHgoVG9GbG9hdFJlZ2lz dGVyKHZhbHVlKSwgSGVhcFJlZywgc2NyYXRjaCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ug U2NhbGFyOjpGbG9hdDMyOgotKyAgICAgIG1hc20uYXNfc3Rmc3goVG9GbG9hdFJlZ2lzdGVyKHZh bHVlKSwgSGVhcFJlZywgc2NyYXRjaCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0r ICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIGFycmF5IHR5cGUiKTsKLSsgIH0KLSsKLSsgIGlm IChkb25lLnVzZWQoKSkgewotKyAgICBtYXNtLmJpbmQoJmRvbmUpOwotKyAgfQotK30KLSsKLSt2 b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVN0YWNrQXJnKExXYXNtU3RhY2tBcmcqIGlucykg ewotKyAgY29uc3QgTVdhc21TdGFja0FyZyogbWlyID0gaW5zLT5taXIoKTsKLSsgIGlmIChpbnMt PmFyZygpLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgbWFzbS5zdG9yZVB0cihJbW1Xb3JkKFRvSW50 MzIoaW5zLT5hcmcoKSkpLAotKyAgICAgICAgICAgICAgICAgIEFkZHJlc3MoU3RhY2tQb2ludGVy LCBtaXItPnNwT2Zmc2V0KCkpKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGlmIChpbnMtPmFyZygpLT5p c0dlbmVyYWxSZWcoKSkgewotKyAgICAgIG1hc20uc3RvcmVQdHIoVG9SZWdpc3RlcihpbnMtPmFy ZygpKSwKLSsgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBtaXItPnNw T2Zmc2V0KCkpKTsKLSsgICAgfSBlbHNlIGlmIChtaXItPmlucHV0KCktPnR5cGUoKSA9PSBNSVJU eXBlOjpEb3VibGUpIHsKLSsgICAgICBtYXNtLnN0b3JlRG91YmxlKFRvRmxvYXRSZWdpc3Rlcihp bnMtPmFyZygpKSwKLSsgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MoU3RhY2tQb2ludGVy LCBtaXItPnNwT2Zmc2V0KCkpKTsKLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotKyAgICB9IGVs c2UgaWYgKG1pci0+aW5wdXQoKS0+dHlwZSgpID09IE1JUlR5cGU6OlNpbWQxMjgpIHsKLSsgICAg ICBtYXNtLnN0b3JlVW5hbGlnbmVkU2ltZDEyOChUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5hcmcoKSks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyhTdGFja1BvaW50ZXIs IG1pci0+c3BPZmZzZXQoKSkpOwotKyNlbmRpZgotKyAgICB9IGVsc2UgewotKyAgICAgIG1hc20u c3RvcmVGbG9hdDMyKFRvRmxvYXRSZWdpc3RlcihpbnMtPmFyZygpKSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICBBZGRyZXNzKFN0YWNrUG9pbnRlciwgbWlyLT5zcE9mZnNldCgpKSk7Ci0rICAg IH0KLSsgIH0KLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21TdGFja0FyZ0k2 NChMV2FzbVN0YWNrQXJnSTY0KiBpbnMpIHsKLSsgIGNvbnN0IE1XYXNtU3RhY2tBcmcqIG1pciA9 IGlucy0+bWlyKCk7Ci0rICBBZGRyZXNzIGRzdChTdGFja1BvaW50ZXIsIG1pci0+c3BPZmZzZXQo KSk7Ci0rICBpZiAoSXNDb25zdGFudChpbnMtPmFyZygpKSkgewotKyAgICBtYXNtLnN0b3JlNjQo SW1tNjQoVG9JbnQ2NChpbnMtPmFyZygpKSksIGRzdCk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNt LnN0b3JlNjQoVG9SZWdpc3RlcjY0KGlucy0+YXJnKCkpLCBkc3QpOwotKyAgfQotK30KLSsKLSt2 b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVNlbGVjdChMV2FzbVNlbGVjdCogaW5zKSB7Ci0r ICBNSVJUeXBlIG1pclR5cGUgPSBpbnMtPm1pcigpLT50eXBlKCk7Ci0rCi0rICBSZWdpc3RlciBj b25kID0gVG9SZWdpc3RlcihpbnMtPmNvbmRFeHByKCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24q IGZhbHNlRXhwciA9IGlucy0+ZmFsc2VFeHByKCk7Ci0rCi0rICBpZiAobWlyVHlwZSA9PSBNSVJU eXBlOjpJbnQzMiB8fCBtaXJUeXBlID09IE1JUlR5cGU6Oldhc21BbnlSZWYpIHsKLSsgICAgUmVn aXN0ZXIgb3V0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgICAgTU9aX0FTU0VSVChU b1JlZ2lzdGVyKGlucy0+dHJ1ZUV4cHIoKSkgPT0gb3V0LAotKyAgICAgICAgICAgICAgICJ0cnVl IGV4cHIgaW5wdXQgaXMgcmV1c2VkIGZvciBvdXRwdXQiKTsKLSsgICAgaWYgKGZhbHNlRXhwci0+ aXNHZW5lcmFsUmVnKCkpIHsKLSsgICAgICBtYXNtLm1vdmVJZlplcm8ob3V0LCBUb1JlZ2lzdGVy KGZhbHNlRXhwciksIGNvbmQpOwotKyAgICB9IGVsc2UgewotKyAgICAgIG1hc20uY21wMzJMb2Fk MzIoQXNzZW1ibGVyOjpaZXJvLCBjb25kLCBjb25kLCBUb0FkZHJlc3MoZmFsc2VFeHByKSwgb3V0 KTsKLSsgICAgfQotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBGbG9hdFJlZ2lzdGVyIG91dCA9 IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIE1PWl9BU1NFUlQoVG9GbG9hdFJl Z2lzdGVyKGlucy0+dHJ1ZUV4cHIoKSkgPT0gb3V0LAotKyAgICAgICAgICAgICAidHJ1ZSBleHBy IGlucHV0IGlzIHJldXNlZCBmb3Igb3V0cHV0Iik7Ci0rCi0rICBpZiAoZmFsc2VFeHByLT5pc0Zs b2F0UmVnKCkpIHsKLSsgICAgTGFiZWwgZG9uZTsKLSsgICAgLy8gVGhlIHNlbGVjdCBjb25kaXRp b24gaXMgYSAzMi1iaXQgdmFsdWU7IHRlc3QgMzIgYml0cyBzbyBoaWdoLWJpdCBnYXJiYWdlCi0r ICAgIC8vIGRvZXMgbm90IG1ha2UgYSB6ZXJvIGNvbmRpdGlvbiByZWFkIGFzIG5vbi16ZXJvLgot KyAgICBtYXNtLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGNvbmQsIGNvbmQsICZk b25lKTsKLSsgICAgaWYgKG1pclR5cGUgPT0gTUlSVHlwZTo6RmxvYXQzMikgewotKyAgICAgIG1h c20ubW92ZUZsb2F0MzIoVG9GbG9hdFJlZ2lzdGVyKGZhbHNlRXhwciksIG91dCk7Ci0rICAgIH0g ZWxzZSBpZiAobWlyVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKLSsgICAgICBtYXNtLm1vdmVE b3VibGUoVG9GbG9hdFJlZ2lzdGVyKGZhbHNlRXhwciksIG91dCk7Ci0rICAgIH0gZWxzZSBpZiAo bWlyVHlwZSA9PSBNSVJUeXBlOjpTaW1kMTI4KSB7Ci0rICAgICAgbWFzbS5tb3ZlU2ltZDEyOChU b0Zsb2F0UmVnaXN0ZXIoZmFsc2VFeHByKSwgb3V0KTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBN T1pfQ1JBU0goInVuaGFuZGxlZCB0eXBlIGluIHZpc2l0V2FzbVNlbGVjdCEiKTsKLSsgICAgfQot KyAgICBtYXNtLmJpbmQoJmRvbmUpOwotKyAgfSBlbHNlIHsKLSsgICAgTGFiZWwgZG9uZTsKLSsg ICAgLy8gVGhlIHNlbGVjdCBjb25kaXRpb24gaXMgYSAzMi1iaXQgdmFsdWU7IHRlc3QgMzIgYml0 cyBzbyBoaWdoLWJpdCBnYXJiYWdlCi0rICAgIC8vIGRvZXMgbm90IG1ha2UgYSB6ZXJvIGNvbmRp dGlvbiByZWFkIGFzIG5vbi16ZXJvLgotKyAgICBtYXNtLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6 Ok5vblplcm8sIGNvbmQsIGNvbmQsICZkb25lKTsKLSsKLSsgICAgaWYgKG1pclR5cGUgPT0gTUlS VHlwZTo6RmxvYXQzMikgewotKyAgICAgIG1hc20ubG9hZEZsb2F0MzIoVG9BZGRyZXNzKGZhbHNl RXhwciksIG91dCk7Ci0rICAgIH0gZWxzZSBpZiAobWlyVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUp IHsKLSsgICAgICBtYXNtLmxvYWREb3VibGUoVG9BZGRyZXNzKGZhbHNlRXhwciksIG91dCk7Ci0r ICAgIH0gZWxzZSBpZiAobWlyVHlwZSA9PSBNSVJUeXBlOjpTaW1kMTI4KSB7Ci0rICAgICAgbWFz bS5sb2FkVW5hbGlnbmVkU2ltZDEyOChUb0FkZHJlc3MoZmFsc2VFeHByKSwgb3V0KTsKLSsgICAg fSBlbHNlIHsKLSsgICAgICBNT1pfQ1JBU0goInVuaGFuZGxlZCB0eXBlIGluIHZpc2l0V2FzbVNl bGVjdCEiKTsKLSsgICAgfQotKwotKyAgICBtYXNtLmJpbmQoJmRvbmUpOwotKyAgfQotK30KLSsK LSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVNlbGVjdEk2NChMV2FzbVNlbGVjdEk2NCog bGlyKSB7Ci0rICBNT1pfQVNTRVJUKGxpci0+bWlyKCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQ2 NCk7Ci0rCi0rICBSZWdpc3RlciBjb25kID0gVG9SZWdpc3RlcihsaXItPmNvbmRFeHByKCkpOwot KyAgTEludDY0QWxsb2NhdGlvbiBmYWxzZUV4cHIgPSBsaXItPmZhbHNlRXhwcigpOwotKwotKyAg UmVnaXN0ZXI2NCBvdXQgPSBUb091dFJlZ2lzdGVyNjQobGlyKTsKLSsgIE1PWl9BU1NFUlQoVG9S ZWdpc3RlcjY0KGxpci0+dHJ1ZUV4cHIoKSkgPT0gb3V0LAotKyAgICAgICAgICAgICAidHJ1ZSBl eHByIGlzIHJldXNlZCBmb3IgaW5wdXQiKTsKLSsKLSsgIGlmIChmYWxzZUV4cHIudmFsdWUoKS5p c0dlbmVyYWxSZWcoKSkgewotKyAgICBtYXNtLm1vdmVJZlplcm8ob3V0LnJlZywgVG9SZWdpc3Rl cihmYWxzZUV4cHIudmFsdWUoKSksIGNvbmQpOwotKyAgfSBlbHNlIHsKLSsgICAgTGFiZWwgZG9u ZTsKLSsgICAgLy8gVGhlIHNlbGVjdCBjb25kaXRpb24gaXMgYSAzMi1iaXQgdmFsdWU7IHRlc3Qg MzIgYml0cyBzbyBoaWdoLWJpdCBnYXJiYWdlCi0rICAgIC8vIGRvZXMgbm90IG1ha2UgYSB6ZXJv IGNvbmRpdGlvbiByZWFkIGFzIG5vbi16ZXJvLgotKyAgICBtYXNtLmJyYW5jaFRlc3QzMihBc3Nl bWJsZXI6Ok5vblplcm8sIGNvbmQsIGNvbmQsICZkb25lKTsKLSsgICAgbWFzbS5sb2FkUHRyKFRv QWRkcmVzcyhmYWxzZUV4cHIudmFsdWUoKSksIG91dC5yZWcpOwotKyAgICBtYXNtLmJpbmQoJmRv bmUpOwotKyAgfQotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUNvbXBhcmVB bmRTZWxlY3QoTFdhc21Db21wYXJlQW5kU2VsZWN0KiBpbnMpIHsKLSsgIE1Db21wYXJlOjpDb21w YXJlVHlwZSBjb21wVHkgPSBpbnMtPmNvbXBhcmVUeXBlKCk7Ci0rICBNSVJUeXBlIGluc1R5ID0g aW5zLT5taXIoKS0+dHlwZSgpOwotKyAgY29uc3QgYm9vbCBjbXBJczMyID0gY29tcFR5ID09IE1D b21wYXJlOjpDb21wYXJlX0ludDMyIHx8Ci0rICAgICAgICAgICAgICAgICAgICAgICBjb21wVHkg PT0gTUNvbXBhcmU6OkNvbXBhcmVfVUludDMyOwotKyAgY29uc3QgYm9vbCBjbXBJczY0ID0gY29t cFR5ID09IE1Db21wYXJlOjpDb21wYXJlX0ludDY0IHx8Ci0rICAgICAgICAgICAgICAgICAgICAg ICBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVfVUludDY0OwotKyAgY29uc3QgYm9vbCBzZWxJ c0ludCA9IGluc1R5ID09IE1JUlR5cGU6OkludDMyIHx8IGluc1R5ID09IE1JUlR5cGU6OkludDY0 OwotKwotKyAgTU9aX1JFTEVBU0VfQVNTRVJUKAotKyAgICAgIChjbXBJczMyIHx8IGNtcElzNjQp ICYmIHNlbElzSW50LAotKyAgICAgICJDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21Db21wYXJlQW5k U2VsZWN0OiB1bmV4cGVjdGVkIHR5cGVzIik7Ci0rCi0rICBSZWdpc3RlciB0cnVlRXhwckFuZERl c3QgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKyAgTU9aX0FTU0VSVChUb1JlZ2lzdGVy KGlucy0+aWZUcnVlRXhwcigpKSA9PSB0cnVlRXhwckFuZERlc3QsCi0rICAgICAgICAgICAgICJ0 cnVlIGV4cHIgaW5wdXQgaXMgcmV1c2VkIGZvciBvdXRwdXQiKTsKLSsKLSsgIEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGNvbmQgPQotKyAgICAgIEFzc2VtYmxlcjo6SW52ZXJ0Q29uZGl0aW9uKEpTT3BU b0NvbmRpdGlvbihjb21wVHksIGlucy0+anNvcCgpKSk7Ci0rICBSZWdpc3RlciBsaHMgPSBUb1Jl Z2lzdGVyKGlucy0+bGVmdEV4cHIoKSk7Ci0rICBSZWdpc3RlciByaHMgPSBUb1JlZ2lzdGVyKGlu cy0+cmlnaHRFeHByKCkpOwotKyAgUmVnaXN0ZXIgZmFsc2VFeHByID0gVG9SZWdpc3RlcihpbnMt PmlmRmFsc2VFeHByKCkpOwotKwotKyAgLy8gaXNlbCBvcGVyYXRlcyBvbiB0aGUgd2hvbGUgNjQt Yml0IEdQUiByZWdhcmRsZXNzIG9mIGNvbXBhcmUgd2lkdGg7IG9ubHkKLSsgIC8vIHRoZSBjb21w YXJlIGluc3RydWN0aW9uIGRpZmZlcnMgKGNtcHcvY21wbHcgdnMgY21wZC9jbXBsZCkuCi0rICBp ZiAoY21wSXMzMikgewotKyAgICBtYXNtLmNtcDMyTW92ZTMyKGNvbmQsIGxocywgcmhzLCBmYWxz ZUV4cHIsIHRydWVFeHByQW5kRGVzdCk7Ci0rICB9IGVsc2UgewotKyAgICBtYXNtLmNtcFB0ck1v dmVQdHIoY29uZCwgbGhzLCByaHMsIGZhbHNlRXhwciwgdHJ1ZUV4cHJBbmREZXN0KTsKLSsgIH0K LSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21BZGRPZmZzZXQoTFdhc21BZGRP ZmZzZXQqIGxpcikgewotKyAgTVdhc21BZGRPZmZzZXQqIG1pciA9IGxpci0+bWlyKCk7Ci0rICBS ZWdpc3RlciBiYXNlID0gVG9SZWdpc3RlcihsaXItPmJhc2UoKSk7Ci0rICBSZWdpc3RlciBvdXQg PSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOwotKwotKyAgTGFiZWwgb2s7Ci0rICBtYXNtLm1h X2FkZDMyVGVzdENhcnJ5KEFzc2VtYmxlcjo6Q2FycnlDbGVhciwgb3V0LCBiYXNlLCBJbW0zMiht aXItPm9mZnNldCgpKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgJm9rKTsKLSsgIG1hc20u d2FzbVRyYXAod2FzbTo6VHJhcDo6T3V0T2ZCb3VuZHMsIG1pci0+dHJhcFNpdGVEZXNjKCkpOwot KyAgbWFzbS5iaW5kKCZvayk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNt QWRkT2Zmc2V0NjQoTFdhc21BZGRPZmZzZXQ2NCogbGlyKSB7Ci0rICBNV2FzbUFkZE9mZnNldCog bWlyID0gbGlyLT5taXIoKTsKLSsgIFJlZ2lzdGVyNjQgYmFzZSA9IFRvUmVnaXN0ZXI2NChsaXIt PmJhc2UoKSk7Ci0rICBSZWdpc3RlcjY0IG91dCA9IFRvT3V0UmVnaXN0ZXI2NChsaXIpOwotKwot KyAgTGFiZWwgb2s7Ci0rICBtYXNtLm1hX2FkZFB0clRlc3RDYXJyeShBc3NlbWJsZXI6OkNhcnJ5 Q2xlYXIsIG91dC5yZWcsIGJhc2UucmVnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgSW1t V29yZChtaXItPm9mZnNldCgpKSwgJm9rKTsKLSsgIG1hc20ud2FzbVRyYXAod2FzbTo6VHJhcDo6 T3V0T2ZCb3VuZHMsIG1pci0+dHJhcFNpdGVEZXNjKCkpOwotKyAgbWFzbS5iaW5kKCZvayk7Ci0r fQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKy8vIFZpc2l0b3JzOiBFZmZlY3RpdmUgQWRkcmVzcwotKwotK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRFZmZlY3RpdmVBZGRyZXNzMihMRWZmZWN0aXZlQWRkcmVz czIqIGlucykgewotKyAgY29uc3QgTUVmZmVjdGl2ZUFkZHJlc3MyKiBtaXIgPSBpbnMtPm1pcigp OwotKyAgUmVnaXN0ZXIgb3V0cHV0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsKLSsg IC8vIEVBID0gaW5kZXggKiBzY2FsZSArIGRpc3BsYWNlbWVudCAobm8gYmFzZSByZWdpc3RlcikK LSsgIG1hc20ubW92ZVB0cihJbW1Xb3JkKDApLCBvdXRwdXQpOwotKyAgQmFzZUluZGV4IGFkZHIo b3V0cHV0LCBUb1JlZ2lzdGVyKGlucy0+aW5kZXgoKSksIG1pci0+c2NhbGUoKSwKLSsgICAgICAg ICAgICAgICAgIG1pci0+ZGlzcGxhY2VtZW50KCkpOwotKyAgbWFzbS5jb21wdXRlRWZmZWN0aXZl QWRkcmVzcyhhZGRyLCBvdXRwdXQpOwotKyAgLy8gU2lnbi1leHRlbmQgdG8gMzItYml0Ci0rICBt YXNtLmFzX2V4dHN3KG91dHB1dCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9y Ojp2aXNpdEVmZmVjdGl2ZUFkZHJlc3MzKExFZmZlY3RpdmVBZGRyZXNzMyogaW5zKSB7Ci0rICBj b25zdCBNRWZmZWN0aXZlQWRkcmVzczMqIG1pciA9IGlucy0+bWlyKCk7Ci0rICBSZWdpc3RlciBv dXRwdXQgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKwotKyAgQmFzZUluZGV4IGFkZHIo VG9SZWdpc3RlcihpbnMtPmJhc2UoKSksIFRvUmVnaXN0ZXIoaW5zLT5pbmRleCgpKSwKLSsgICAg ICAgICAgICAgICAgIG1pci0+c2NhbGUoKSwgbWlyLT5kaXNwbGFjZW1lbnQoKSk7Ci0rICBtYXNt LmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKGFkZHIsIG91dHB1dCk7Ci0rICAvLyBTaWduLWV4dGVu ZCB0byAzMi1iaXQKLSsgIG1hc20uYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOwotK30KLSsKLSt2 b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbU11bEk2NFdpZGVISTY0KExXYXNtTXVsSTY0V2lk ZUhJNjQqIGlucykgewotKyAgUmVnaXN0ZXIgbGhzID0gVG9SZWdpc3RlcihpbnMtPmxocygpKTsK LSsgIFJlZ2lzdGVyIHJocyA9IFRvUmVnaXN0ZXIoaW5zLT5yaHMoKSk7Ci0rICBSZWdpc3RlciBv dXRwdXQgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKwotKyAgaWYgKGlucy0+aXNTaWdu ZWQoKSkgewotKyAgICBtYXNtLmFzX211bGhkKG91dHB1dCwgbGhzLCByaHMpOwotKyAgfSBlbHNl IHsKLSsgICAgbWFzbS5hc19tdWxoZHUob3V0cHV0LCBsaHMsIHJocyk7Ci0rICB9Ci0rfQotKwot Ky8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKy8vIFZpc2l0b3JzOiBUeXBlZCBBcnJheSBBdG9taWNzCi0rCi0rdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdENvbXBhcmVFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KAotKyAg ICBMQ29tcGFyZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQqIGxpcikgewotKyAgUmVnaXN0ZXIg ZWxlbWVudHMgPSBUb1JlZ2lzdGVyKGxpci0+ZWxlbWVudHMoKSk7Ci0rICBBbnlSZWdpc3RlciBv dXRwdXQgPSBUb0FueVJlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOwotKyAgUmVnaXN0ZXIgb3V0VGVt cCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDAoKSk7Ci0rCi0rICBSZWdpc3Rl ciBvbGR2YWwgPSBUb1JlZ2lzdGVyKGxpci0+b2xkdmFsKCkpOwotKyAgUmVnaXN0ZXIgbmV3dmFs ID0gVG9SZWdpc3RlcihsaXItPm5ld3ZhbCgpKTsKLSsgIFJlZ2lzdGVyIHZhbHVlVGVtcCA9IFRv VGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDEoKSk7Ci0rICBSZWdpc3RlciBvZmZzZXRU ZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMigpKTsKLSsgIFJlZ2lzdGVy IG1hc2tUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMygpKTsKLSsgIFNj YWxhcjo6VHlwZSBhcnJheVR5cGUgPSBsaXItPm1pcigpLT5hcnJheVR5cGUoKTsKLSsKLSsgIGF1 dG8gZGVzdCA9IFRvQWRkcmVzc09yQmFzZUluZGV4KGVsZW1lbnRzLCBsaXItPmluZGV4KCksIGFy cmF5VHlwZSk7Ci0rCi0rICBkZXN0Lm1hdGNoKFsmXShjb25zdCBhdXRvJiBkZXN0KSB7Ci0rICAg IG1hc20uY29tcGFyZUV4Y2hhbmdlSlMoYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb246OkZ1bGwo KSwgZGVzdCwgb2xkdmFsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbCwgdmFs dWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0VGVtcCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICBvdXRwdXQpOwotKyAgfSk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6 dmlzaXRBdG9taWNFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KAotKyAgICBMQXRvbWljRXhjaGFu Z2VUeXBlZEFycmF5RWxlbWVudCogbGlyKSB7Ci0rICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVn aXN0ZXIobGlyLT5lbGVtZW50cygpKTsKLSsgIEFueVJlZ2lzdGVyIG91dHB1dCA9IFRvQW55UmVn aXN0ZXIobGlyLT5vdXRwdXQoKSk7Ci0rICBSZWdpc3RlciBvdXRUZW1wID0gVG9UZW1wUmVnaXN0 ZXJPckludmFsaWQobGlyLT50ZW1wMCgpKTsKLSsKLSsgIFJlZ2lzdGVyIHZhbHVlID0gVG9SZWdp c3RlcihsaXItPnZhbHVlKCkpOwotKyAgUmVnaXN0ZXIgdmFsdWVUZW1wID0gVG9UZW1wUmVnaXN0 ZXJPckludmFsaWQobGlyLT50ZW1wMSgpKTsKLSsgIFJlZ2lzdGVyIG9mZnNldFRlbXAgPSBUb1Rl bXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAyKCkpOwotKyAgUmVnaXN0ZXIgbWFza1RlbXAg PSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAzKCkpOwotKyAgU2NhbGFyOjpUeXBl IGFycmF5VHlwZSA9IGxpci0+bWlyKCktPmFycmF5VHlwZSgpOwotKwotKyAgYXV0byBkZXN0ID0g VG9BZGRyZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMsIGxpci0+aW5kZXgoKSwgYXJyYXlUeXBlKTsK LSsKLSsgIGRlc3QubWF0Y2goWyZdKGNvbnN0IGF1dG8mIGRlc3QpIHsKLSsgICAgbWFzbS5hdG9t aWNFeGNoYW5nZUpTKGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9uOjpGdWxsKCksIGRlc3QsIHZh bHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBt YXNrVGVtcCwgb3V0VGVtcCwgb3V0cHV0KTsKLSsgIH0pOwotK30KLSsKLSt2b2lkIENvZGVHZW5l cmF0b3I6OnZpc2l0QXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcCgKLSsgICAgTEF0b21pY1R5 cGVkQXJyYXlFbGVtZW50Qmlub3AqIGxpcikgewotKyAgTU9aX0FTU0VSVCghbGlyLT5taXIoKS0+ aXNGb3JFZmZlY3QoKSk7Ci0rCi0rICBBbnlSZWdpc3RlciBvdXRwdXQgPSBUb0FueVJlZ2lzdGVy KGxpci0+b3V0cHV0KCkpOwotKyAgUmVnaXN0ZXIgZWxlbWVudHMgPSBUb1JlZ2lzdGVyKGxpci0+ ZWxlbWVudHMoKSk7Ci0rICBSZWdpc3RlciBvdXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFs aWQobGlyLT50ZW1wMCgpKTsKLSsgIFJlZ2lzdGVyIHZhbHVlVGVtcCA9IFRvVGVtcFJlZ2lzdGVy T3JJbnZhbGlkKGxpci0+dGVtcDEoKSk7Ci0rICBSZWdpc3RlciBvZmZzZXRUZW1wID0gVG9UZW1w UmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMigpKTsKLSsgIFJlZ2lzdGVyIG1hc2tUZW1wID0g VG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMygpKTsKLSsgIFJlZ2lzdGVyIHZhbHVl ID0gVG9SZWdpc3RlcihsaXItPnZhbHVlKCkpOwotKyAgU2NhbGFyOjpUeXBlIGFycmF5VHlwZSA9 IGxpci0+bWlyKCktPmFycmF5VHlwZSgpOwotKwotKyAgYXV0byBtZW0gPSBUb0FkZHJlc3NPckJh c2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCBhcnJheVR5cGUpOwotKwotKyAgbWVtLm1h dGNoKFsmXShjb25zdCBhdXRvJiBtZW0pIHsKLSsgICAgbWFzbS5hdG9taWNGZXRjaE9wSlMoYXJy YXlUeXBlLCBTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgbGlyLT5taXIoKS0+b3BlcmF0aW9uKCksIHZhbHVlLCBtZW0sIHZhbHVlVGVtcCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91dFRlbXAsIG91dHB1 dCk7Ci0rICB9KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEF0b21pY1R5cGVk QXJyYXlFbGVtZW50Qmlub3BGb3JFZmZlY3QoCi0rICAgIExBdG9taWNUeXBlZEFycmF5RWxlbWVu dEJpbm9wRm9yRWZmZWN0KiBsaXIpIHsKLSsgIE1PWl9BU1NFUlQobGlyLT5taXIoKS0+aXNGb3JF ZmZlY3QoKSk7Ci0rCi0rICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVt ZW50cygpKTsKLSsgIFJlZ2lzdGVyIHZhbHVlVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlk KGxpci0+dGVtcDAoKSk7Ci0rICBSZWdpc3RlciBvZmZzZXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJP ckludmFsaWQobGlyLT50ZW1wMSgpKTsKLSsgIFJlZ2lzdGVyIG1hc2tUZW1wID0gVG9UZW1wUmVn aXN0ZXJPckludmFsaWQobGlyLT50ZW1wMigpKTsKLSsgIFJlZ2lzdGVyIHZhbHVlID0gVG9SZWdp c3RlcihsaXItPnZhbHVlKCkpOwotKyAgU2NhbGFyOjpUeXBlIGFycmF5VHlwZSA9IGxpci0+bWly KCktPmFycmF5VHlwZSgpOwotKwotKyAgYXV0byBtZW0gPSBUb0FkZHJlc3NPckJhc2VJbmRleChl bGVtZW50cywgbGlyLT5pbmRleCgpLCBhcnJheVR5cGUpOwotKwotKyAgbWVtLm1hdGNoKFsmXShj b25zdCBhdXRvJiBtZW0pIHsKLSsgICAgbWFzbS5hdG9taWNFZmZlY3RPcEpTKGFycmF5VHlwZSwg U3luY2hyb25pemF0aW9uOjpGdWxsKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBsaXIt Pm1pcigpLT5vcGVyYXRpb24oKSwgdmFsdWUsIG1lbSwgdmFsdWVUZW1wLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXApOwotKyAgfSk7Ci0rfQotKwotK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRDb21wYXJlRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudDY0 KAotKyAgICBMQ29tcGFyZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQ2NCogbGlyKSB7Ci0rICBS ZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVtZW50cygpKTsKLSsgIFJlZ2lz dGVyNjQgb2xkdmFsID0gVG9SZWdpc3RlcjY0KGxpci0+b2xkdmFsKCkpOwotKyAgUmVnaXN0ZXI2 NCBuZXd2YWwgPSBUb1JlZ2lzdGVyNjQobGlyLT5uZXd2YWwoKSk7Ci0rICBSZWdpc3RlcjY0IG91 dCA9IFRvT3V0UmVnaXN0ZXI2NChsaXIpOwotKyAgU2NhbGFyOjpUeXBlIGFycmF5VHlwZSA9IGxp ci0+bWlyKCktPmFycmF5VHlwZSgpOwotKwotKyAgYXV0byBkZXN0ID0gVG9BZGRyZXNzT3JCYXNl SW5kZXgoZWxlbWVudHMsIGxpci0+aW5kZXgoKSwgYXJyYXlUeXBlKTsKLSsKLSsgIGRlc3QubWF0 Y2goWyZdKGNvbnN0IGF1dG8mIGRlc3QpIHsKLSsgICAgbWFzbS5jb21wYXJlRXhjaGFuZ2U2NChT eW5jaHJvbml6YXRpb246OkZ1bGwoKSwgZGVzdCwgb2xkdmFsLCBuZXd2YWwsIG91dCk7Ci0rICB9 KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEF0b21pY0V4Y2hhbmdlVHlwZWRB cnJheUVsZW1lbnQ2NCgKLSsgICAgTEF0b21pY0V4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQ2NCog bGlyKSB7Ci0rICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVtZW50cygp KTsKLSsgIFJlZ2lzdGVyNjQgdmFsdWUgPSBUb1JlZ2lzdGVyNjQobGlyLT52YWx1ZSgpKTsKLSsg IFJlZ2lzdGVyNjQgb3V0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7Ci0rICBTY2FsYXI6OlR5cGUg YXJyYXlUeXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7Ci0rCi0rICBhdXRvIGRlc3QgPSBU b0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCBhcnJheVR5cGUpOwot KwotKyAgZGVzdC5tYXRjaChbJl0oY29uc3QgYXV0byYgZGVzdCkgewotKyAgICBtYXNtLmF0b21p Y0V4Y2hhbmdlNjQoU3luY2hyb25pemF0aW9uOjpGdWxsKCksIGRlc3QsIHZhbHVlLCBvdXQpOwot KyAgfSk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBdG9taWNUeXBlZEFycmF5 RWxlbWVudEJpbm9wNjQoCi0rICAgIExBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wNjQqIGxp cikgewotKyAgTU9aX0FTU0VSVChsaXItPm1pcigpLT5oYXNVc2VzKCkpOwotKwotKyAgUmVnaXN0 ZXIgZWxlbWVudHMgPSBUb1JlZ2lzdGVyKGxpci0+ZWxlbWVudHMoKSk7Ci0rICBSZWdpc3RlcjY0 IHZhbHVlID0gVG9SZWdpc3RlcjY0KGxpci0+dmFsdWUoKSk7Ci0rICBSZWdpc3RlcjY0IHRlbXAg PSBUb1JlZ2lzdGVyNjQobGlyLT50ZW1wMCgpKTsKLSsgIFJlZ2lzdGVyNjQgb3V0ID0gVG9PdXRS ZWdpc3RlcjY0KGxpcik7Ci0rCi0rICBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlID0gbGlyLT5taXIo KS0+YXJyYXlUeXBlKCk7Ci0rICBBdG9taWNPcCBhdG9taWNPcCA9IGxpci0+bWlyKCktPm9wZXJh dGlvbigpOwotKwotKyAgYXV0byBkZXN0ID0gVG9BZGRyZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMs IGxpci0+aW5kZXgoKSwgYXJyYXlUeXBlKTsKLSsKLSsgIGRlc3QubWF0Y2goWyZdKGNvbnN0IGF1 dG8mIGRlc3QpIHsKLSsgICAgbWFzbS5hdG9taWNGZXRjaE9wNjQoU3luY2hyb25pemF0aW9uOjpG dWxsKCksIGF0b21pY09wLCB2YWx1ZSwgZGVzdCwgdGVtcCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgb3V0KTsKLSsgIH0pOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0QXRv bWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcEZvckVmZmVjdDY0KAotKyAgICBMQXRvbWljVHlwZWRB cnJheUVsZW1lbnRCaW5vcEZvckVmZmVjdDY0KiBsaXIpIHsKLSsgIE1PWl9BU1NFUlQoIWxpci0+ bWlyKCktPmhhc1VzZXMoKSk7Ci0rCi0rICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIo bGlyLT5lbGVtZW50cygpKTsKLSsgIFJlZ2lzdGVyNjQgdmFsdWUgPSBUb1JlZ2lzdGVyNjQobGly LT52YWx1ZSgpKTsKLSsgIFJlZ2lzdGVyNjQgdGVtcCA9IFRvUmVnaXN0ZXI2NChsaXItPnRlbXAw KCkpOwotKwotKyAgU2NhbGFyOjpUeXBlIGFycmF5VHlwZSA9IGxpci0+bWlyKCktPmFycmF5VHlw ZSgpOwotKyAgQXRvbWljT3AgYXRvbWljT3AgPSBsaXItPm1pcigpLT5vcGVyYXRpb24oKTsKLSsK LSsgIGF1dG8gZGVzdCA9IFRvQWRkcmVzc09yQmFzZUluZGV4KGVsZW1lbnRzLCBsaXItPmluZGV4 KCksIGFycmF5VHlwZSk7Ci0rCi0rICBkZXN0Lm1hdGNoKFsmXShjb25zdCBhdXRvJiBkZXN0KSB7 Ci0rICAgIG1hc20uYXRvbWljRWZmZWN0T3A2NChTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwgYXRv bWljT3AsIHZhbHVlLCBkZXN0LCB0ZW1wKTsKLSsgIH0pOwotK30KLSsKLSt2b2lkIENvZGVHZW5l cmF0b3I6OnZpc2l0QXRvbWljTG9hZDY0KExBdG9taWNMb2FkNjQqIGxpcikgewotKyAgUmVnaXN0 ZXIgZWxlbWVudHMgPSBUb1JlZ2lzdGVyKGxpci0+ZWxlbWVudHMoKSk7Ci0rICBSZWdpc3RlcjY0 IG91dCA9IFRvT3V0UmVnaXN0ZXI2NChsaXIpOwotKyAgU2NhbGFyOjpUeXBlIHN0b3JhZ2VUeXBl ID0gbGlyLT5taXIoKS0+c3RvcmFnZVR5cGUoKTsKLSsKLSsgIGF1dG8gc291cmNlID0gVG9BZGRy ZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMsIGxpci0+aW5kZXgoKSwgc3RvcmFnZVR5cGUpOwotKwot KyAgYXV0byBzeW5jID0gU3luY2hyb25pemF0aW9uOjpMb2FkKCk7Ci0rICBtYXNtLm1lbW9yeUJh cnJpZXJCZWZvcmUoc3luYyk7Ci0rICBzb3VyY2UubWF0Y2goWyZdKGNvbnN0IGF1dG8mIHNvdXJj ZSkgeyBtYXNtLmxvYWQ2NChzb3VyY2UsIG91dCk7IH0pOwotKyAgbWFzbS5tZW1vcnlCYXJyaWVy QWZ0ZXIoc3luYyk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBdG9taWNTdG9y ZTY0KExBdG9taWNTdG9yZTY0KiBsaXIpIHsKLSsgIFJlZ2lzdGVyIGVsZW1lbnRzID0gVG9SZWdp c3RlcihsaXItPmVsZW1lbnRzKCkpOwotKyAgUmVnaXN0ZXI2NCB2YWx1ZSA9IFRvUmVnaXN0ZXI2 NChsaXItPnZhbHVlKCkpOwotKyAgU2NhbGFyOjpUeXBlIHdyaXRlVHlwZSA9IGxpci0+bWlyKCkt PndyaXRlVHlwZSgpOwotKwotKyAgYXV0byBkZXN0ID0gVG9BZGRyZXNzT3JCYXNlSW5kZXgoZWxl bWVudHMsIGxpci0+aW5kZXgoKSwgd3JpdGVUeXBlKTsKLSsKLSsgIGF1dG8gc3luYyA9IFN5bmNo cm9uaXphdGlvbjo6U3RvcmUoKTsKLSsgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsK LSsgIGRlc3QubWF0Y2goWyZdKGNvbnN0IGF1dG8mIGRlc3QpIHsgbWFzbS5zdG9yZTY0KHZhbHVl LCBkZXN0KTsgfSk7Ci0rICBtYXNtLm1lbW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKLSt9Ci0rCi0r Ly8gV2FzbSBBdG9taWNzCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21Db21wYXJlRXhj aGFuZ2VIZWFwKAotKyAgICBMV2FzbUNvbXBhcmVFeGNoYW5nZUhlYXAqIGlucykgewotKyAgTVdh c21Db21wYXJlRXhjaGFuZ2VIZWFwKiBtaXIgPSBpbnMtPm1pcigpOwotKyAgUmVnaXN0ZXIgbWVt b3J5QmFzZSA9IFRvUmVnaXN0ZXIoaW5zLT5tZW1vcnlCYXNlKCkpOwotKyAgUmVnaXN0ZXIgcHRy UmVnID0gVG9SZWdpc3RlcihpbnMtPnB0cigpKTsKLSsgIEJhc2VJbmRleCBzcmNBZGRyKG1lbW9y eUJhc2UsIHB0clJlZywgVGltZXNPbmUsIG1pci0+YWNjZXNzKCkub2Zmc2V0MzIoKSk7Ci0rCi0r ICBSZWdpc3RlciBvbGR2YWwgPSBUb1JlZ2lzdGVyKGlucy0+b2xkVmFsdWUoKSk7Ci0rICBSZWdp c3RlciBuZXd2YWwgPSBUb1JlZ2lzdGVyKGlucy0+bmV3VmFsdWUoKSk7Ci0rICBSZWdpc3RlciB2 YWx1ZVRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAwKCkpOwotKyAgUmVn aXN0ZXIgb2Zmc2V0VGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGlucy0+dGVtcDEoKSk7 Ci0rICBSZWdpc3RlciBtYXNrVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGlucy0+dGVt cDIoKSk7Ci0rCi0rICBtYXNtLndhc21Db21wYXJlRXhjaGFuZ2UobWlyLT5hY2Nlc3MoKSwgc3Jj QWRkciwgb2xkdmFsLCBuZXd2YWwsIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7Ci0r fQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQXRvbWljRXhjaGFuZ2VIZWFwKExX YXNtQXRvbWljRXhjaGFuZ2VIZWFwKiBpbnMpIHsKLSsgIE1XYXNtQXRvbWljRXhjaGFuZ2VIZWFw KiBtaXIgPSBpbnMtPm1pcigpOwotKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIo aW5zLT5tZW1vcnlCYXNlKCkpOwotKyAgUmVnaXN0ZXIgcHRyUmVnID0gVG9SZWdpc3RlcihpbnMt PnB0cigpKTsKLSsgIFJlZ2lzdGVyIHZhbHVlID0gVG9SZWdpc3RlcihpbnMtPnZhbHVlKCkpOwot KyAgQmFzZUluZGV4IHNyY0FkZHIobWVtb3J5QmFzZSwgcHRyUmVnLCBUaW1lc09uZSwgbWlyLT5h Y2Nlc3MoKS5vZmZzZXQzMigpKTsKLSsKLSsgIFJlZ2lzdGVyIHZhbHVlVGVtcCA9IFRvVGVtcFJl Z2lzdGVyT3JJbnZhbGlkKGlucy0+dGVtcDAoKSk7Ci0rICBSZWdpc3RlciBvZmZzZXRUZW1wID0g VG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMSgpKTsKLSsgIFJlZ2lzdGVyIG1hc2tU ZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMigpKTsKLSsKLSsgIG1hc20u d2FzbUF0b21pY0V4Y2hhbmdlKG1pci0+YWNjZXNzKCksIHNyY0FkZHIsIHZhbHVlLCB2YWx1ZVRl bXAsIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVGVtcCwgVG9S ZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7Ci0rfQotKwotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlz aXRXYXNtQXRvbWljQmlub3BIZWFwKExXYXNtQXRvbWljQmlub3BIZWFwKiBpbnMpIHsKLSsgIE1P Wl9BU1NFUlQoaW5zLT5taXIoKS0+aGFzVXNlcygpKTsKLSsKLSsgIE1XYXNtQXRvbWljQmlub3BI ZWFwKiBtaXIgPSBpbnMtPm1pcigpOwotKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0 ZXIoaW5zLT5tZW1vcnlCYXNlKCkpOwotKyAgUmVnaXN0ZXIgcHRyUmVnID0gVG9SZWdpc3Rlcihp bnMtPnB0cigpKTsKLSsgIFJlZ2lzdGVyIHZhbHVlVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZh bGlkKGlucy0+dGVtcDAoKSk7Ci0rICBSZWdpc3RlciBvZmZzZXRUZW1wID0gVG9UZW1wUmVnaXN0 ZXJPckludmFsaWQoaW5zLT50ZW1wMSgpKTsKLSsgIFJlZ2lzdGVyIG1hc2tUZW1wID0gVG9UZW1w UmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMigpKTsKLSsKLSsgIEJhc2VJbmRleCBzcmNBZGRy KG1lbW9yeUJhc2UsIHB0clJlZywgVGltZXNPbmUsIG1pci0+YWNjZXNzKCkub2Zmc2V0MzIoKSk7 Ci0rCi0rICBtYXNtLndhc21BdG9taWNGZXRjaE9wKG1pci0+YWNjZXNzKCksIG1pci0+b3BlcmF0 aW9uKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgIFRvUmVnaXN0ZXIoaW5zLT52YWx1ZSgp KSwgc3JjQWRkciwgdmFsdWVUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRU ZW1wLCBtYXNrVGVtcCwgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7Ci0rfQotKwotK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQXRvbWljQmlub3BIZWFwRm9yRWZmZWN0KAotKyAgICBM V2FzbUF0b21pY0Jpbm9wSGVhcEZvckVmZmVjdCogaW5zKSB7Ci0rICBNT1pfQVNTRVJUKCFpbnMt Pm1pcigpLT5oYXNVc2VzKCkpOwotKwotKyAgTVdhc21BdG9taWNCaW5vcEhlYXAqIG1pciA9IGlu cy0+bWlyKCk7Ci0rICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihpbnMtPm1lbW9y eUJhc2UoKSk7Ci0rICBSZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lzdGVyKGlucy0+cHRyKCkpOwot KyAgUmVnaXN0ZXIgdmFsdWVUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1w MCgpKTsKLSsgIFJlZ2lzdGVyIG9mZnNldFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChp bnMtPnRlbXAxKCkpOwotKyAgUmVnaXN0ZXIgbWFza1RlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52 YWxpZChpbnMtPnRlbXAyKCkpOwotKwotKyAgQmFzZUluZGV4IHNyY0FkZHIobWVtb3J5QmFzZSwg cHRyUmVnLCBUaW1lc09uZSwgbWlyLT5hY2Nlc3MoKS5vZmZzZXQzMigpKTsKLSsgIG1hc20ud2Fz bUF0b21pY0VmZmVjdE9wKG1pci0+YWNjZXNzKCksIG1pci0+b3BlcmF0aW9uKCksCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICBUb1JlZ2lzdGVyKGlucy0+dmFsdWUoKSksIHNyY0FkZHIsIHZh bHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1w KTsKLSt9Ci0rCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21Db21wYXJlRXhjaGFuZ2VJ NjQoTFdhc21Db21wYXJlRXhjaGFuZ2VJNjQqIGxpcikgewotKyAgUmVnaXN0ZXIgbWVtb3J5QmFz ZSA9IFRvUmVnaXN0ZXIobGlyLT5tZW1vcnlCYXNlKCkpOwotKyAgUmVnaXN0ZXIgcHRyID0gVG9S ZWdpc3RlcihsaXItPnB0cigpKTsKLSsgIFJlZ2lzdGVyNjQgb2xkVmFsdWUgPSBUb1JlZ2lzdGVy NjQobGlyLT5vbGRWYWx1ZSgpKTsKLSsgIFJlZ2lzdGVyNjQgbmV3VmFsdWUgPSBUb1JlZ2lzdGVy NjQobGlyLT5uZXdWYWx1ZSgpKTsKLSsgIFJlZ2lzdGVyNjQgb3V0cHV0ID0gVG9PdXRSZWdpc3Rl cjY0KGxpcik7Ci0rICB1aW50MzJfdCBvZmZzZXQgPSBsaXItPm1pcigpLT5hY2Nlc3MoKS5vZmZz ZXQzMigpOwotKwotKyAgQmFzZUluZGV4IGFkZHIobWVtb3J5QmFzZSwgcHRyLCBUaW1lc09uZSwg b2Zmc2V0KTsKLSsgIG1hc20ud2FzbUNvbXBhcmVFeGNoYW5nZTY0KGxpci0+bWlyKCktPmFjY2Vz cygpLCBhZGRyLCBvbGRWYWx1ZSwgbmV3VmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvdXRwdXQpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUF0b21p Y0V4Y2hhbmdlSTY0KExXYXNtQXRvbWljRXhjaGFuZ2VJNjQqIGxpcikgewotKyAgUmVnaXN0ZXIg bWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIobGlyLT5tZW1vcnlCYXNlKCkpOwotKyAgUmVnaXN0ZXIg cHRyID0gVG9SZWdpc3RlcihsaXItPnB0cigpKTsKLSsgIFJlZ2lzdGVyNjQgdmFsdWUgPSBUb1Jl Z2lzdGVyNjQobGlyLT52YWx1ZSgpKTsKLSsgIFJlZ2lzdGVyNjQgb3V0cHV0ID0gVG9PdXRSZWdp c3RlcjY0KGxpcik7Ci0rICB1aW50MzJfdCBvZmZzZXQgPSBsaXItPm1pcigpLT5hY2Nlc3MoKS5v ZmZzZXQzMigpOwotKwotKyAgQmFzZUluZGV4IGFkZHIobWVtb3J5QmFzZSwgcHRyLCBUaW1lc09u ZSwgb2Zmc2V0KTsKLSsgIG1hc20ud2FzbUF0b21pY0V4Y2hhbmdlNjQobGlyLT5taXIoKS0+YWNj ZXNzKCksIGFkZHIsIHZhbHVlLCBvdXRwdXQpOwotK30KLSsKLSt2b2lkIENvZGVHZW5lcmF0b3I6 OnZpc2l0V2FzbUF0b21pY0Jpbm9wSTY0KExXYXNtQXRvbWljQmlub3BJNjQqIGxpcikgewotKyAg UmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIobGlyLT5tZW1vcnlCYXNlKCkpOwotKyAg UmVnaXN0ZXIgcHRyID0gVG9SZWdpc3RlcihsaXItPnB0cigpKTsKLSsgIFJlZ2lzdGVyNjQgdmFs dWUgPSBUb1JlZ2lzdGVyNjQobGlyLT52YWx1ZSgpKTsKLSsgIFJlZ2lzdGVyNjQgb3V0cHV0ID0g VG9PdXRSZWdpc3RlcjY0KGxpcik7Ci0rICBSZWdpc3RlcjY0IHRlbXAgPSBUb1JlZ2lzdGVyNjQo bGlyLT50ZW1wMCgpKTsKLSsgIHVpbnQzMl90IG9mZnNldCA9IGxpci0+bWlyKCktPmFjY2Vzcygp Lm9mZnNldDMyKCk7Ci0rCi0rICBCYXNlSW5kZXggYWRkcihtZW1vcnlCYXNlLCBwdHIsIFRpbWVz T25lLCBvZmZzZXQpOwotKwotKyAgbWFzbS53YXNtQXRvbWljRmV0Y2hPcDY0KGxpci0+bWlyKCkt PmFjY2VzcygpLCBsaXItPm1pcigpLT5vcGVyYXRpb24oKSwgdmFsdWUsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWRkciwgdGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0rLy8gU0lNRCBjb2Rl IGdlbmVyYXRvcnMuCi0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFNpbWQxMjgoTFNpbWQxMjgq IGlucykgewotKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0 cHV0KCkpOwotKyAgbWFzbS5sb2FkQ29uc3RhbnRTaW1kMTI4KGlucy0+c2ltZDEyOCgpLCBkZXN0 KTsKLSt9Ci0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21UZXJuYXJ5U2ltZDEyOChMV2Fz bVRlcm5hcnlTaW1kMTI4KiBpbnMpIHsKLSsgIEZsb2F0UmVnaXN0ZXIgdjAgPSBUb0Zsb2F0UmVn aXN0ZXIoaW5zLT52MCgpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgdjEgPSBUb0Zsb2F0UmVnaXN0ZXIo aW5zLT52MSgpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgdjIgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT52 MigpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1 dCgpKTsKLSsgIHN3aXRjaCAoaW5zLT5zaW1kT3AoKSkgewotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6VjEyOEJpdHNlbGVjdDoKLSsgICAgICAvLyBiaXRzZWxlY3QodjAsIHYxLCB2Mik6IHJlc3Vs dCA9ICh2MCAmIHYyKSB8ICh2MSAmIH52MikKLSsgICAgICAvLyB4eHNlbDogWEM9MOKGklhBLCBY Qz0x4oaSWEIg4oaSIChYQSAmIH5YQykgfCAoWEIgJiBYQykKLSsgICAgICAvLyBOZWVkIFhBPXYx LCBYQj12MCwgWEM9djIuCi0rICAgICAgbWFzbS5hc194eHNlbChkZXN0LCB2MSwgdjAsIHYyKTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2UmVsYXhlZExhbmVT ZWxlY3Q6Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFJlbGF4ZWRMYW5lU2VsZWN0Ogot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRSZWxheGVkTGFuZVNlbGVjdDoKLSsgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6Okk2NHgyUmVsYXhlZExhbmVTZWxlY3Q6Ci0rICAgICAgLy8gcmVsYXhl ZCBsYW5lU2VsZWN0KHYwLCB2MSwgbWFzaz12Mik6IHNhbWUgYXMgYml0c2VsZWN0Ci0rICAgICAg bWFzbS5hc194eHNlbChkZXN0LCB2MSwgdjAsIHYyKTsKLSsgICAgICBicmVhazsKLSsgICAgLy8g TG93ZXJpbmcgdXNlcyBkZWZpbmVSZXVzZUlucHV0IG9uIFYySW5kZXggZm9yIHRlcm5hcnkgb3Bz IOKAlCB0aGUKLSsgICAgLy8gYWxsb2NhdG9yIGlzIHJlcXVpcmVkIHRvIHBsYWNlIGBkZXN0YCBp biB2MidzIHNsb3QuIEFzc2VydCB0aGF0Ci0rICAgIC8vIGhlcmU7IHRoZSBGTUEvZG90IGhlbHBl cnMgd3JpdGUgdGhlaXIgcmVzdWx0IHRocm91Z2ggdjIgaW4tcGxhY2UsCi0rICAgIC8vIHNvIGRl c3QgPT0gdjIgbWFrZXMgdGhlIHRyYWlsaW5nIG1vdmVTaW1kMTI4IHVubmVjZXNzYXJ5LgotKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRSZWxheGVkRG90STh4MTZJN3gxNkFkZFM6Ci0rICAg ICAgTU9aX0FTU0VSVChkZXN0ID09IHYyKTsKLSsgICAgICBtYXNtLmRvdEludDh4MTZJbnQ3eDE2 VGhlbkFkZCh2MCwgdjEsIHYyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFRvRmxvYXRSZWdpc3RlcihpbnMtPnRlbXAwKCkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6OkYzMng0UmVsYXhlZE1hZGQ6Ci0rICAgICAgTU9aX0FTU0VSVChkZXN0 ID09IHYyKTsKLSsgICAgICBtYXNtLmZtYUZsb2F0MzJ4NCh2MCwgdjEsIHYyKTsKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyUmVsYXhlZE1hZGQ6Ci0rICAgICAg TU9aX0FTU0VSVChkZXN0ID09IHYyKTsKLSsgICAgICBtYXNtLmZtYUZsb2F0NjR4Mih2MCwgdjEs IHYyKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0UmVsYXhl ZE5tYWRkOgotKyAgICAgIE1PWl9BU1NFUlQoZGVzdCA9PSB2Mik7Ci0rICAgICAgbWFzbS5mbm1h RmxvYXQzMng0KHYwLCB2MSwgdjIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNp bWRPcDo6RjY0eDJSZWxheGVkTm1hZGQ6Ci0rICAgICAgTU9aX0FTU0VSVChkZXN0ID09IHYyKTsK LSsgICAgICBtYXNtLmZubWFGbG9hdDY0eDIodjAsIHYxLCB2Mik7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgdGVybmFyeSBv cCIpOwotKyAgfQotK30KLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUJpbmFyeVNpbWQx MjgoTFdhc21CaW5hcnlTaW1kMTI4KiBpbnMpIHsKLSsgIEZsb2F0UmVnaXN0ZXIgbGhzID0gVG9G bG9hdFJlZ2lzdGVyKGlucy0+bGhzKCkpOwotKyAgRmxvYXRSZWdpc3RlciByaHMgPSBUb0Zsb2F0 UmVnaXN0ZXIoaW5zLT5yaHMoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVn aXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBzd2l0Y2ggKGlucy0+c2ltZE9wKCkpIHsKLSsgICAg Ly8gQml0d2lzZQotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOEFuZDoKLSsgICAgICBtYXNt LmJpdHdpc2VBbmRTaW1kMTI4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhPcjoKLSsgICAgICBtYXNtLmJpdHdpc2VPclNpbWQxMjgo bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 VjEyOFhvcjoKLSsgICAgICBtYXNtLmJpdHdpc2VYb3JTaW1kMTI4KGxocywgcmhzLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhBbmROb3Q6Ci0rICAg ICAgbWFzbS5iaXR3aXNlQW5kTm90U2ltZDEyOChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIC8vIEludGVnZXIgYWRkCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkFk ZDoKLSsgICAgICBtYXNtLmFkZEludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhBZGQ6Ci0rICAgICAgbWFzbS5hZGRJbnQx Nng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkzMng0QWRkOgotKyAgICAgIG1hc20uYWRkSW50MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkFkZDoKLSsgICAgICBt YXNtLmFkZEludDY0eDIobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBJ bnRlZ2VyIHN1YgotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTdWI6Ci0rICAgICAgbWFz bS5zdWJJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkxNng4U3ViOgotKyAgICAgIG1hc20uc3ViSW50MTZ4OChsaHMsIHJocywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFN1YjoK LSsgICAgICBtYXNtLnN1YkludDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTdWI6Ci0rICAgICAgbWFzbS5zdWJJbnQ2NHgy KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gU2F0dXJhdGluZyBhZGQK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2QWRkU2F0UzoKLSsgICAgICBtYXNtLmFkZFNh dEludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STh4MTZBZGRTYXRVOgotKyAgICAgIG1hc20udW5zaWduZWRBZGRTYXRJbnQ4eDE2 KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkxNng4QWRkU2F0UzoKLSsgICAgICBtYXNtLmFkZFNhdEludDE2eDgobGhzLCByaHMsIGRlc3Qp OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhBZGRTYXRVOgot KyAgICAgIG1hc20udW5zaWduZWRBZGRTYXRJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgLy8gU2F0dXJhdGluZyBzdWIKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 Okk4eDE2U3ViU2F0UzoKLSsgICAgICBtYXNtLnN1YlNhdEludDh4MTYobGhzLCByaHMsIGRlc3Qp OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTdWJTYXRVOgot KyAgICAgIG1hc20udW5zaWduZWRTdWJTYXRJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U3ViU2F0UzoKLSsgICAgICBt YXNtLnN1YlNhdEludDE2eDgobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STE2eDhTdWJTYXRVOgotKyAgICAgIG1hc20udW5zaWduZWRTdWJT YXRJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gSW50ZWdl ciBtdWx0aXBseQotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhNdWw6Ci0rICAgICAgbWFz bS5tdWxJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkzMng0TXVsOgotKyAgICAgIG1hc20ubXVsSW50MzJ4NChsaHMsIHJocywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIEludGVnZXIgbWluL21heCBzaWduZWQKLSsg ICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TWluUzoKLSsgICAgICBtYXNtLm1pbkludDh4MTYo bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STh4MTZNYXhTOgotKyAgICAgIG1hc20ubWF4SW50OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OE1pblM6Ci0rICAgICAgbWFz bS5taW5JbnQxNng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkxNng4TWF4UzoKLSsgICAgICBtYXNtLm1heEludDE2eDgobGhzLCByaHMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRNaW5T OgotKyAgICAgIG1hc20ubWluSW50MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NE1heFM6Ci0rICAgICAgbWFzbS5tYXhJbnQz Mng0KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gSW50ZWdlciBtaW4v bWF4IHVuc2lnbmVkCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNk1pblU6Ci0rICAgICAg bWFzbS51bnNpZ25lZE1pbkludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZNYXhVOgotKyAgICAgIG1hc20udW5zaWduZWRN YXhJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkkxNng4TWluVToKLSsgICAgICBtYXNtLnVuc2lnbmVkTWluSW50MTZ4OChsaHMs IHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4 OE1heFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZE1heEludDE2eDgobGhzLCByaHMsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRNaW5VOgotKyAgICAg IG1hc20udW5zaWduZWRNaW5JbnQzMng0KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0TWF4VToKLSsgICAgICBtYXNtLnVuc2lnbmVk TWF4SW50MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIEF2ZXJh Z2UgdW5zaWduZWQKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2QXZnclU6Ci0rICAgICAg bWFzbS51bnNpZ25lZEF2ZXJhZ2VJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4QXZnclU6Ci0rICAgICAgbWFzbS51bnNp Z25lZEF2ZXJhZ2VJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Ly8gUTE1IG11bHRpcGx5Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFExNU11bHJTYXRT OgotKyAgICAgIG1hc20ucTE1TXVsclNhdEludDE2eDgobGhzLCByaHMsIGRlc3QpOwotKyAgICAg IGJyZWFrOwotKyAgICAvLyBJbnRlZ2VyIGNvbXBhcmUKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 Okk4eDE2RXE6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6OkVxdWFsLCBs aHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ OHgxNk5lOgotKyAgICAgIG1hc20uY29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpOb3RFcXVhbCwg bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STh4MTZMdFM6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6Okxlc3NUaGFu LCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJOHgxNkd0UzoKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6R3JlYXRl clRoYW4sIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk4eDE2TGVTOgotKyAgICAgIG1hc20uY29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpM ZXNzVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6Okk4eDE2R2VTOgotKyAgICAgIG1hc20uY29tcGFyZUludDh4MTYoQXNz ZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2THRVOgotKyAgICAgIG1hc20uY29tcGFy ZUludDh4MTYoQXNzZW1ibGVyOjpCZWxvdywgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZHdFU6Ci0rICAgICAgbWFzbS5jb21wYXJl SW50OHgxNihBc3NlbWJsZXI6OkFib3ZlLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkxlVToKLSsgICAgICBtYXNtLmNvbXBhcmVJ bnQ4eDE2KEFzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkdlVToKLSsgICAgICBtYXNtLmNv bXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEVxOgotKyAgICAgIG1h c20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhOZToKLSsgICAgICBtYXNt LmNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4THRTOgotKyAgICAgIG1h c20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpMZXNzVGhhbiwgbGhzLCByaHMsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhHdFM6Ci0rICAgICAg bWFzbS5jb21wYXJlSW50MTZ4OChBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBsaHMsIHJocywgZGVz dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OExlUzoKLSsg ICAgICBtYXNtLmNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsLCBsaHMs IHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4 OEdlUzoKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6R3JlYXRlclRoYW5P ckVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMTZ4OEx0VToKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6 QmVsb3csIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkxNng4R3RVOgotKyAgICAgIG1hc20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpB Ym92ZSwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STE2eDhMZVU6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50MTZ4OChBc3NlbWJsZXI6OkJl bG93T3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STE2eDhHZVU6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50MTZ4OChBc3NlbWJs ZXI6OkFib3ZlT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STMyeDRFcToKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQzMng0KEFz c2VtYmxlcjo6RXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6OkkzMng0TmU6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50MzJ4NChBc3Nl bWJsZXI6Ok5vdEVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEx0UzoKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQzMng0KEFz c2VtYmxlcjo6TGVzc1RoYW4sIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0R3RTOgotKyAgICAgIG1hc20uY29tcGFyZUludDMyeDQo QXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRMZVM6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50 MzJ4NChBc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRHZVM6Ci0rICAgICAgbWFzbS5j b21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRMdFU6Ci0r ICAgICAgbWFzbS5jb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkJlbG93LCBsaHMsIHJocywgZGVz dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEd0VToKLSsg ICAgICBtYXNtLmNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6QWJvdmUsIGxocywgcmhzLCBkZXN0 KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0TGVVOgotKyAg ICAgIG1hc20uY29tcGFyZUludDMyeDQoQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIGxocywgcmhz LCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0R2VV OgotKyAgICAgIG1hc20uY29tcGFyZUludDMyeDQoQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGxo cywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2 NHgyRXE6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50NjR4MihBc3NlbWJsZXI6OkVxdWFsLCBsaHMs IHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4 Mk5lOgotKyAgICAgIG1hc20uY29tcGFyZUludDY0eDIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhz LCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0 eDJMdFM6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50NjR4MihBc3NlbWJsZXI6Okxlc3NUaGFuLCBs aHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ NjR4Mkd0UzoKLSsgICAgICBtYXNtLmNvbXBhcmVJbnQ2NHgyKEFzc2VtYmxlcjo6R3JlYXRlclRo YW4sIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6Okk2NHgyTGVTOgotKyAgICAgIG1hc20uY29tcGFyZUludDY0eDIoQXNzZW1ibGVyOjpMZXNz VGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk2NHgyR2VTOgotKyAgICAgIG1hc20uY29tcGFyZUludDY0eDIoQXNzZW1i bGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsK LSsgICAgLy8gRmxvYXQgY29tcGFyZQotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRFcToK LSsgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpFcXVhbCwgbGhzLCByaHMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDROZToK LSsgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBy aHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRM dDoKLSsgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpMZXNzVGhhbiwgbGhz LCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMy eDRHdDoKLSsgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpHcmVhdGVyVGhh biwgbGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6RjMyeDRMZToKLSsgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpMZXNz VGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkYzMng0R2U6Ci0rICAgICAgbWFzbS5jb21wYXJlRmxvYXQzMng0KEFzc2Vt Ymxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkVxOgotKyAgICAgIG1hc20uY29tcGFyZUZs b2F0NjR4MihBc3NlbWJsZXI6OkVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4Mk5lOgotKyAgICAgIG1hc20uY29tcGFyZUZs b2F0NjR4MihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4Mkx0OgotKyAgICAgIG1hc20uY29tcGFy ZUZsb2F0NjR4MihBc3NlbWJsZXI6Okxlc3NUaGFuLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4Mkd0OgotKyAgICAgIG1hc20uY29t cGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBsaHMsIHJocywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkxlOgotKyAgICAgIG1h c20uY29tcGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwgbGhzLCByaHMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJHZToK LSsgICAgICBtYXNtLmNvbXBhcmVGbG9hdDY0eDIoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1 YWwsIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gRmxvYXQgYXJpdGht ZXRpYwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRBZGQ6Ci0rICAgICAgbWFzbS5hZGRG bG9hdDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6RjMyeDRTdWI6Ci0rICAgICAgbWFzbS5zdWJGbG9hdDMyeDQobGhzLCByaHMsIGRl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRNdWw6Ci0r ICAgICAgbWFzbS5tdWxGbG9hdDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDREaXY6Ci0rICAgICAgbWFzbS5kaXZGbG9hdDMy eDQobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6RjMyeDRNaW46Ci0rICAgICAgbWFzbS5taW5GbG9hdDMyeDQobGhzLCByaHMsIGRlc3QsIFRv RmxvYXRSZWdpc3RlcihpbnMtPmdldFRlbXAoMCkpLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5nZXRUZW1wKDEpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NE1heDoKLSsgICAgICBtYXNtLm1heEZsb2F0MzJ4NChs aHMsIHJocywgZGVzdCwgVG9GbG9hdFJlZ2lzdGVyKGlucy0+Z2V0VGVtcCgwKSksCi0rICAgICAg ICAgICAgICAgICAgICAgICAgIFRvRmxvYXRSZWdpc3RlcihpbnMtPmdldFRlbXAoMSkpKTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0UE1pbjoKLSsgICAgICBt YXNtLnBzZXVkb01pbkZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFBNYXg6Ci0rICAgICAgbWFzbS5wc2V1ZG9NYXhG bG9hdDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6RjY0eDJBZGQ6Ci0rICAgICAgbWFzbS5hZGRGbG9hdDY0eDIobGhzLCByaHMsIGRl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJTdWI6Ci0r ICAgICAgbWFzbS5zdWJGbG9hdDY0eDIobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJNdWw6Ci0rICAgICAgbWFzbS5tdWxGbG9hdDY0 eDIobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6RjY0eDJEaXY6Ci0rICAgICAgbWFzbS5kaXZGbG9hdDY0eDIobGhzLCByaHMsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJNaW46Ci0rICAgICAg bWFzbS5taW5GbG9hdDY0eDIobGhzLCByaHMsIGRlc3QsIFRvRmxvYXRSZWdpc3RlcihpbnMtPmdl dFRlbXAoMCkpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBUb0Zsb2F0UmVnaXN0ZXIoaW5z LT5nZXRUZW1wKDEpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpG NjR4Mk1heDoKLSsgICAgICBtYXNtLm1heEZsb2F0NjR4MihsaHMsIHJocywgZGVzdCwgVG9GbG9h dFJlZ2lzdGVyKGlucy0+Z2V0VGVtcCgwKSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgIFRv RmxvYXRSZWdpc3RlcihpbnMtPmdldFRlbXAoMSkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6OkY2NHgyUE1pbjoKLSsgICAgICBtYXNtLnBzZXVkb01pbkZsb2F0NjR4 MihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpGNjR4MlBNYXg6Ci0rICAgICAgbWFzbS5wc2V1ZG9NYXhGbG9hdDY0eDIobGhzLCByaHMsIGRl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBOYXJyb3cKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6Okk4eDE2TmFycm93STE2eDhTOgotKyAgICAgIG1hc20ubmFycm93SW50MTZ4OChsaHMsIHJo cywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNk5h cnJvd0kxNng4VToKLSsgICAgICBtYXNtLnVuc2lnbmVkTmFycm93SW50MTZ4OChsaHMsIHJocywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OE5hcnJv d0kzMng0UzoKLSsgICAgICBtYXNtLm5hcnJvd0ludDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhOYXJyb3dJMzJ4NFU6Ci0r ICAgICAgbWFzbS51bnNpZ25lZE5hcnJvd0ludDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAgICAg IGJyZWFrOwotKyAgICAvLyBpNjQgbXVsdGlwbHkKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2 NHgyTXVsOiB7Ci0rICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMCA9IFRvVGVtcEZsb2F0UmVnaXN0 ZXJPckludmFsaWQoaW5zLT50ZW1wMCgpKTsKLSsgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAxZiA9 IFRvVGVtcEZsb2F0UmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMSgpKTsKLSsgICAgICBtYXNt Lm11bEludDY0eDIobGhzLCByaHMsIGRlc3QsIHRlbXAwLCB0ZW1wMWYpOwotKyAgICAgIGJyZWFr OwotKyAgICB9Ci0rICAgIC8vIEV4dGVuZGVkIG11bHRpcGx5Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJMTZ4OEV4dG11bExvd0k4eDE2UzoKLSsgICAgICBtYXNtLmV4dE11bExvd0ludDh4MTYo bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STE2eDhFeHRtdWxIaWdoSTh4MTZTOgotKyAgICAgIG1hc20uZXh0TXVsSGlnaEludDh4MTYobGhz LCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2 eDhFeHRtdWxMb3dJOHgxNlU6Ci0rICAgICAgbWFzbS51bnNpZ25lZEV4dE11bExvd0ludDh4MTYo bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STE2eDhFeHRtdWxIaWdoSTh4MTZVOgotKyAgICAgIG1hc20udW5zaWduZWRFeHRNdWxIaWdoSW50 OHgxNihsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJMzJ4NEV4dG11bExvd0kxNng4UzoKLSsgICAgICBtYXNtLmV4dE11bExvd0ludDE2eDgo bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STMyeDRFeHRtdWxIaWdoSTE2eDhTOgotKyAgICAgIG1hc20uZXh0TXVsSGlnaEludDE2eDgobGhz LCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMy eDRFeHRtdWxMb3dJMTZ4OFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZEV4dE11bExvd0ludDE2eDgo bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STMyeDRFeHRtdWxIaWdoSTE2eDhVOgotKyAgICAgIG1hc20udW5zaWduZWRFeHRNdWxIaWdoSW50 MTZ4OChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJNjR4MkV4dG11bExvd0kzMng0UzoKLSsgICAgICBtYXNtLmV4dE11bExvd0ludDMyeDQo bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STY0eDJFeHRtdWxIaWdoSTMyeDRTOgotKyAgICAgIG1hc20uZXh0TXVsSGlnaEludDMyeDQobGhz LCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0 eDJFeHRtdWxMb3dJMzJ4NFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZEV4dE11bExvd0ludDMyeDQo bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STY0eDJFeHRtdWxIaWdoSTMyeDRVOgotKyAgICAgIG1hc20udW5zaWduZWRFeHRNdWxIaWdoSW50 MzJ4NChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIERvdCBwcm9kdWN0 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NERvdEkxNng4UzoKLSsgICAgICBtYXNtLndp ZGVuRG90SW50MTZ4OChsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIFJl bGF4ZWQgYmluYXJ5IG9wcwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRSZWxheGVkTWlu OgotKyAgICAgIG1hc20ubWluRmxvYXQzMng0UmVsYXhlZChyaHMsIGxocyk7Ci0rICAgICAgaWYg KGRlc3QgIT0gbGhzKSBtYXNtLm1vdmVTaW1kMTI4KGxocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFJlbGF4ZWRNYXg6Ci0rICAgICAgbWFzbS5t YXhGbG9hdDMyeDRSZWxheGVkKHJocywgbGhzKTsKLSsgICAgICBpZiAoZGVzdCAhPSBsaHMpIG1h c20ubW92ZVNpbWQxMjgobGhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkY2NHgyUmVsYXhlZE1pbjoKLSsgICAgICBtYXNtLm1pbkZsb2F0NjR4MlJlbGF4 ZWQocmhzLCBsaHMpOwotKyAgICAgIGlmIChkZXN0ICE9IGxocykgbWFzbS5tb3ZlU2ltZDEyOChs aHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJS ZWxheGVkTWF4OgotKyAgICAgIG1hc20ubWF4RmxvYXQ2NHgyUmVsYXhlZChyaHMsIGxocyk7Ci0r ICAgICAgaWYgKGRlc3QgIT0gbGhzKSBtYXNtLm1vdmVTaW1kMTI4KGxocywgZGVzdCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlJlbGF4ZWRTd2l6emxlOgot KyAgICAgIG1hc20uc3dpenpsZUludDh4MTZSZWxheGVkKGxocywgcmhzLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4UmVsYXhlZFExNU11bHJTOgot KyAgICAgIG1hc20ucTE1TXVsckludDE2eDhSZWxheGVkKGxocywgcmhzLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgLy8gU3dpenpsZQotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZT d2l6emxlOgotKyAgICAgIG1hc20uc3dpenpsZUludDh4MTYobGhzLCByaHMsIGRlc3QpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhSZWxheGVkRG90STh4MTZJ N3gxNlM6Ci0rICAgICAgbWFzbS5kb3RJbnQ4eDE2SW50N3gxNihsaHMsIHJocywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJ IFNJTUQgYmluYXJ5IG9wIik7Ci0rICB9Ci0rfQotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRX YXNtQmluYXJ5U2ltZDEyOFdpdGhDb25zdGFudCgKLSsgICAgTFdhc21CaW5hcnlTaW1kMTI4V2l0 aENvbnN0YW50KiBpbnMpIHsKLSsgIEZsb2F0UmVnaXN0ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVy KGlucy0+bGhzKCkpOwotKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlu cy0+b3V0cHV0KCkpOwotKyAgU2ltZENvbnN0YW50IHJocyA9IGlucy0+cmhzKCk7Ci0rICAvLyBM b2FkIHRoZSBjb25zdGFudCBpbnRvIHNjcmF0Y2gsIHRoZW4gdXNlIHRoZSBiaW5hcnkgb3AuCi0r ICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gobWFzbSk7Ci0rICBtYXNtLmxvYWRDb25zdGFu dFNpbWQxMjgocmhzLCBzY3JhdGNoKTsKLSsgIHN3aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkp IHsKLSsgICAgLy8gQml0d2lzZQotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOEFuZDoKLSsg ICAgICBtYXNtLmJpdHdpc2VBbmRTaW1kMTI4KGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4T3I6Ci0rICAgICAgbWFzbS5iaXR3 aXNlT3JTaW1kMTI4KGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpWMTI4WG9yOgotKyAgICAgIG1hc20uYml0d2lzZVhvclNpbWQxMjgo bGhzLCBzY3JhdGNoLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6OlYxMjhBbmROb3Q6Ci0rICAgICAgbWFzbS5iaXR3aXNlQW5kTm90U2ltZDEyOChsaHMsIHNj cmF0Y2gsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBJbnRlZ2VyIGFkZAotKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STh4MTZBZGQ6Ci0rICAgICAgbWFzbS5hZGRJbnQ4eDE2KGxocywg c2NyYXRjaCwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MTZ4OEFkZDoKLSsgICAgICBtYXNtLmFkZEludDE2eDgobGhzLCBzY3JhdGNoLCBkZXN0KTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0QWRkOgotKyAgICAgIG1h c20uYWRkSW50MzJ4NChsaHMsIHNjcmF0Y2gsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STY0eDJBZGQ6Ci0rICAgICAgbWFzbS5hZGRJbnQ2NHgyKGxocywg c2NyYXRjaCwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIC8vIEludGVnZXIgc3ViCi0rICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlN1YjoKLSsgICAgICBtYXNtLnN1YkludDh4MTYobGhz LCBzY3JhdGNoLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkxNng4U3ViOgotKyAgICAgIG1hc20uc3ViSW50MTZ4OChsaHMsIHNjcmF0Y2gsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTdWI6Ci0rICAgICAg bWFzbS5zdWJJbnQzMng0KGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MlN1YjoKLSsgICAgICBtYXNtLnN1YkludDY0eDIobGhz LCBzY3JhdGNoLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gSW50ZWdlciBtdWx0aXBs eSAoMTYtLzMyLWJpdCBsYW5lczsgSTY0eDIgdW5yZWFjaGFibGUsIHNlZSBiZWxvdykKLSsgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4TXVsOgotKyAgICAgIG1hc20ubXVsSW50MTZ4OChsaHMs IHNjcmF0Y2gsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STMyeDRNdWw6Ci0rICAgICAgbWFzbS5tdWxJbnQzMng0KGxocywgc2NyYXRjaCwgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4Mk11bDoKLSsgICAgICAv LyBVbnJlYWNoYWJsZSBvbiBQUEM2NDogTVdhc21CaW5hcnlTaW1kMTI4OjpzcGVjaWFsaXplRm9y Q29uc3RhbnRSaHMKLSsgICAgICAvLyByZXR1cm5zIGZhbHNlIGluIExvd2VyaW5nLXBwYzY0LmNw cCwgc28gTUlSIHdpdGggYSBjb25zdGFudCByaHMKLSsgICAgICAvLyB0byBJNjR4Mk11bCBpcyBu ZXZlciBjcmVhdGVkIG9uIHRoaXMgYmFja2VuZC4KLSsgICAgICAvLwotKyAgICAgIC8vIFRoZSBw cmV2aW91cyBpbi1wbGFjZSBpbXBsZW1lbnRhdGlvbiB3YXMgYnJva2VuIGluIHRocmVlIHdheXM6 Ci0rICAgICAgLy8gaGFyZC1jb2RlZCBWUjAvVlIxIHN0YWdpbmcgYXNzdW1lZCBhbiBvcmRlcmlu ZyB0aGF0IGRpZG4ndCBtYXRjaAotKyAgICAgIC8vIHRoZSBzdXJyb3VuZGluZyBjb2RlOyBhIGRl YWQgYG1mdnNyZChhLCBmMClgIGNsb2JiZXJlZCBgYWAKLSsgICAgICAvLyBpbW1lZGlhdGVseSBi ZWZvcmUgdGhlIG5leHQgbWZ2c3JkOyBhbmQgdGhlIHRyYWlsaW5nCi0rICAgICAgLy8gYHh4cGVy bWRpKGRlc3QsIHNjcmF0Y2gsIGRlc3QsIDApYCB3aXRoIERNPTAgcGxhY2VkIGxhbmUtMCBpbiB0 aGUKLSsgICAgICAvLyB3cm9uZyBoYWxmLiBSYXRoZXIgdGhhbiBzaGlwIGRlYWQtYnV0LWJyb2tl biBjb2RlLCBjcmFzaCBsb3VkbHkKLSsgICAgICAvLyBpZiByZWFjaGFiaWxpdHkgZXZlciBjaGFu Z2VzIOKAlCB0aGUgZnV0dXJlIGVuYWJsZXIgbXVzdCB3cml0ZSBhCi0rICAgICAgLy8gY29ycmVj dCBsb3dlcmluZyAoZS5nLiB2aWEgbWFzbS5tdWxJbnQ2NHgyIHdpdGggZXhwbGljaXQgdGVtcHMp LgotKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IEk2NHgyTXVsIHdpdGggY29uc3RhbnQgcmhzIHVu aW1wbGVtZW50ZWQgIgotKyAgICAgICAgICAgICAgICAiKHNwZWNpYWxpemVGb3JDb25zdGFudFJo cyByZXR1cm5zIGZhbHNlKSIpOwotKyAgICAvLyBDb21wYXJlCi0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJOHgxNkVxOgotKyAgICAgIG1hc20uY29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpFcXVh bCwgbGhzLCBzY3JhdGNoLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk4eDE2TmU6Ci0rICAgICAgbWFzbS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6Ok5v dEVxdWFsLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0 OgotKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIGJpbmFyeS13aXRoLWNvbnN0YW50 IG9wIik7Ci0rICB9Ci0rfQotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtVmFyaWFibGVT aGlmdFNpbWQxMjgoCi0rICAgIExXYXNtVmFyaWFibGVTaGlmdFNpbWQxMjgqIGlucykgewotKyAg RmxvYXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5saHMoKSk7Ci0rICBSZWdp c3RlciByaHMgPSBUb1JlZ2lzdGVyKGlucy0+cmhzKCkpOwotKyAgRmxvYXRSZWdpc3RlciBkZXN0 ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKyAgc3dpdGNoIChpbnMtPm1pcigp LT5zaW1kT3AoKSkgewotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTaGw6Ci0rICAgICAg bWFzbS5sZWZ0U2hpZnRJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsg ICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U2hyUzoKLSsgICAgICBtYXNtLnJpZ2h0U2hpZnRJ bnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk4eDE2U2hyVToKLSsgICAgICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDh4MTYo bGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STE2eDhTaGw6Ci0rICAgICAgbWFzbS5sZWZ0U2hpZnRJbnQxNng4KGxocywgcmhzLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hyUzoKLSsgICAg ICBtYXNtLnJpZ2h0U2hpZnRJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hyVToKLSsgICAgICBtYXNtLnVuc2lnbmVk UmlnaHRTaGlmdEludDE2eDgobGhzLCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STMyeDRTaGw6Ci0rICAgICAgbWFzbS5sZWZ0U2hpZnRJbnQzMng0 KGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkzMng0U2hyUzoKLSsgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQzMng0KGxocywgcmhzLCBkZXN0 KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0U2hyVToKLSsg ICAgICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDMyeDQobGhzLCByaHMsIGRlc3QpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTaGw6Ci0rICAgICAgbWFz bS5sZWZ0U2hpZnRJbnQ2NHgyKGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hyUzoKLSsgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQ2 NHgyKGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6Okk2NHgyU2hyVToKLSsgICAgICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIobGhz LCByaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9D UkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIHZhcmlhYmxlIHNoaWZ0IG9wIik7Ci0rICB9Ci0rfQotK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQ29uc3RhbnRTaGlmdFNpbWQxMjgoCi0rICAgIExX YXNtQ29uc3RhbnRTaGlmdFNpbWQxMjgqIGlucykgewotKyAgRmxvYXRSZWdpc3RlciBzcmMgPSBU b0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7Ci0rICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zs b2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBpbnQzMl90IHNoaWZ0ID0gaW5zLT5zaGlm dCgpOwotKyAgc3dpdGNoIChpbnMtPm1pcigpLT5zaW1kT3AoKSkgewotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STh4MTZTaGw6Ci0rICAgICAgbWFzbS5sZWZ0U2hpZnRJbnQ4eDE2KEltbTMyKHNo aWZ0KSwgc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 Okk4eDE2U2hyUzoKLSsgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQ4eDE2KEltbTMyKHNoaWZ0KSwg c3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2 U2hyVToKLSsgICAgICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDh4MTYoSW1tMzIoc2hpZnQp LCBzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2 eDhTaGw6Ci0rICAgICAgbWFzbS5sZWZ0U2hpZnRJbnQxNng4KEltbTMyKHNoaWZ0KSwgc3JjLCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hyUzoK LSsgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQxNng4KEltbTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hyVToKLSsgICAg ICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDE2eDgoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3Qp OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTaGw6Ci0rICAg ICAgbWFzbS5sZWZ0U2hpZnRJbnQzMng0KEltbTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0U2hyUzoKLSsgICAgICBtYXNt LnJpZ2h0U2hpZnRJbnQzMng0KEltbTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0U2hyVToKLSsgICAgICBtYXNtLnVuc2ln bmVkUmlnaHRTaGlmdEludDMyeDQoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTaGw6Ci0rICAgICAgbWFzbS5sZWZ0 U2hpZnRJbnQ2NHgyKEltbTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsg ICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hyUzoKLSsgICAgICBtYXNtLnJpZ2h0U2hpZnRJ bnQ2NHgyKEltbTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hyVToKLSsgICAgICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlm dEludDY0eDIoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBk ZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIGNvbnN0YW50IHNoaWZ0 IG9wIik7Ci0rICB9Ci0rfQotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtU2lnblJlcGxp Y2F0aW9uU2ltZDEyOCgKLSsgICAgTFdhc21TaWduUmVwbGljYXRpb25TaW1kMTI4KiBpbnMpIHsK LSsgIEZsb2F0UmVnaXN0ZXIgc3JjID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+c3JjKCkpOwotKyAg RmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwotKyAg Ly8gU2lnbiByZXBsaWNhdGlvbiA9IGFyaXRobWV0aWMgcmlnaHQgc2hpZnQgYnkgbWF4IGFtb3Vu dCAoYWxsIHNpZ24gYml0cykuCi0rICBzd2l0Y2ggKGlucy0+bWlyKCktPnNpbWRPcCgpKSB7Ci0r ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlNoclM6Ci0rICAgICAgbWFzbS5yaWdodFNoaWZ0 SW50OHgxNihJbW0zMig3KSwgc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkxNng4U2hyUzoKLSsgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQxNng4KElt bTMyKDE1KSwgc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkzMng0U2hyUzoKLSsgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQzMng0KEltbTMyKDMxKSwg c3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgy U2hyUzoKLSsgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQ2NHgyKEltbTMyKDYzKSwgc3JjLCBkZXN0 KTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlVuZXhw ZWN0ZWQgc2lnbiByZXBsaWNhdGlvbiBvcCIpOwotKyAgfQotK30KLSt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0V2FzbVNodWZmbGVTaW1kMTI4KExXYXNtU2h1ZmZsZVNpbWQxMjgqIGlucykgewot KyAgRmxvYXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5saHMoKSk7Ci0rICBG bG9hdFJlZ2lzdGVyIHJocyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnJocygpKTsKLSsgIEZsb2F0 UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIFNpbWRD b25zdGFudCBjdHJsID0gaW5zLT5jb250cm9sKCk7Ci0rICBjb25zdCB1aW50OF90KiBsYW5lcyA9 IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGN0cmwuYnl0ZXMoKSk7Ci0rICBtYXNt LnNodWZmbGVJbnQ4eDE2KGxhbmVzLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotK3ZvaWQgQ29kZUdl bmVyYXRvcjo6dmlzaXRXYXNtUGVybXV0ZVNpbWQxMjgoTFdhc21QZXJtdXRlU2ltZDEyOCogaW5z KSB7Ci0rICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnNyYygpKTsK LSsgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsK LSsgIC8vIFBQQzY0OiB0aGUgc2h1ZmZsZSBhbmFseXNpcyB0cmFuc2Zvcm1zIGNvbnRyb2wgYnl0 ZXMgaW50byBzcGVjaWFsaXplZAotKyAgLy8gZm9ybWF0cy4gUmVjb25zdHJ1Y3QgcmF3IFdhc20g Ynl0ZSBpbmRpY2VzIGZvciBvdXIgdnBlcm0gaW1wbGVtZW50YXRpb24uCi0rICBTaW1kQ29uc3Rh bnQgY3RybCA9IGlucy0+Y29udHJvbCgpOwotKyAgdWludDhfdCByYXdMYW5lc1sxNl07Ci0rICBz d2l0Y2ggKGlucy0+b3AoKSkgewotKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6Ok1PVkU6Ci0rICAg ICAgbWFzbS5tb3ZlU2ltZDEyOChzcmMsIGRlc3QpOwotKyAgICAgIHJldHVybjsKLSsgICAgY2Fz ZSBTaW1kUGVybXV0ZU9wOjpQRVJNVVRFXzMyeDQ6IHsKLSsgICAgICBjb25zdCBpbnQzMl90KiB3 b3JkcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MzJfdCo+KGN0cmwuYnl0ZXMoKSk7Ci0r ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCi0rICAgICAgICBmb3IgKGludCBqID0g MDsgaiA8IDQ7IGorKykKLSsgICAgICAgICAgcmF3TGFuZXNbaSAqIDQgKyBqXSA9IHdvcmRzW2ld ICogNCArIGo7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSBTaW1kUGVybXV0ZU9w OjpQRVJNVVRFXzE2eDg6IHsKLSsgICAgICAvLyBjb250cm9sIGhhcyBpbnQxNiBoYWxmd29yZCBp bmRpY2VzLiBIaWdoIGJ5dGUgb2YgaGFsZnNbMF0gbWF5IGhhdmUKLSsgICAgICAvLyBwbGF0Zm9y bS1zcGVjaWZpYyBmbGFncyAoUGVybTE2eDhBY3Rpb24pLiBNYXNrIHRvIGdldCB0aGUgaW5kZXgg b25seS4KLSsgICAgICBjb25zdCBpbnQxNl90KiBoYWxmcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u c3QgaW50MTZfdCo+KGN0cmwuYnl0ZXMoKSk7Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4 OyBpKyspIHsKLSsgICAgICAgIGludCBod0lkeCA9IGhhbGZzW2ldICYgMHg3OwotKyAgICAgICAg cmF3TGFuZXNbaSAqIDJdID0gaHdJZHggKiAyOwotKyAgICAgICAgcmF3TGFuZXNbaSAqIDIgKyAx XSA9IGh3SWR4ICogMiArIDE7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGNhc2UgU2ltZFBlcm11dGVPcDo6QlJPQURDQVNUXzh4MTY6IHsKLSsgICAgICB1aW50OF90IGxh bmUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KGN0cmwuYnl0ZXMoKSlbMF07Ci0r ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSByYXdMYW5lc1tpXSA9IGxhbmU7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpCUk9BRENBU1Rf MTZ4ODogewotKyAgICAgIHVpbnQ4X3QgbGFuZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50 OF90Kj4oY3RybC5ieXRlcygpKVswXTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkr KykgewotKyAgICAgICAgcmF3TGFuZXNbaSAqIDJdID0gbGFuZSAqIDI7Ci0rICAgICAgICByYXdM YW5lc1tpICogMiArIDFdID0gbGFuZSAqIDIgKyAxOwotKyAgICAgIH0KLSsgICAgICBicmVhazsK LSsgICAgfQotKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlJPVEFURV9SSUdIVF84eDE2OiB7Ci0r ICAgICAgdWludDhfdCBzaGlmdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4oY3Ry bC5ieXRlcygpKVswXTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHJhd0xh bmVzW2ldID0gKGkgKyBzaGlmdCkgJSAxNjsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBj YXNlIFNpbWRQZXJtdXRlT3A6OlNISUZUX0xFRlRfOHgxNjogewotKyAgICAgIC8vIFNoaWZ0ZWQt b3V0IHBvc2l0aW9ucyBtdXN0IGJlIHplcm8uIFVzZSBpbmRleCAxNisgdG8gcGljayBmcm9tIHpl cm8uCi0rICAgICAgdWludDhfdCBzaGlmdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90 Kj4oY3RybC5ieXRlcygpKVswXTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKysp Ci0rICAgICAgICByYXdMYW5lc1tpXSA9IChpID49IHNoaWZ0KSA/IChpIC0gc2hpZnQpIDogKDE2 ICsgaSk7Ci0rICAgICAgZ290byBuZWVkc1plcm9SaHM7Ci0rICAgIH0KLSsgICAgY2FzZSBTaW1k UGVybXV0ZU9wOjpTSElGVF9SSUdIVF84eDE2OiB7Ci0rICAgICAgdWludDhfdCBzaGlmdCA9IHJl aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4oY3RybC5ieXRlcygpKVswXTsKLSsgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspCi0rICAgICAgICByYXdMYW5lc1tpXSA9IChpICsg c2hpZnQgPCAxNikgPyAoaSArIHNoaWZ0KSA6ICgxNiArIGkpOwotKyAgICAgIGdvdG8gbmVlZHNa ZXJvUmhzOwotKyAgICB9Ci0rICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6UkVWRVJTRV8xNng4OiB7 Ci0rICAgICAgLy8gUmV2ZXJzZSBieXRlcyB3aXRoaW4gZWFjaCAxNi1iaXQgbGFuZTogWzEsMCwz LDIsNSw0LC4uLl0KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAg ICAgcmF3TGFuZXNbaSAqIDJdID0gaSAqIDIgKyAxOwotKyAgICAgICAgcmF3TGFuZXNbaSAqIDIg KyAxXSA9IGkgKiAyOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNl IFNpbWRQZXJtdXRlT3A6OlJFVkVSU0VfMzJ4NDogewotKyAgICAgIC8vIFJldmVyc2UgYnl0ZXMg d2l0aGluIGVhY2ggMzItYml0IGxhbmU6IFszLDIsMSwwLDcsNiw1LDQsLi4uXQotKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQotKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0 OyBqKyspCi0rICAgICAgICAgIHJhd0xhbmVzW2kgKiA0ICsgal0gPSBpICogNCArICgzIC0gaik7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpSRVZFUlNF XzY0eDI6IHsKLSsgICAgICAvLyBSZXZlcnNlIGJ5dGVzIHdpdGhpbiBlYWNoIDY0LWJpdCBsYW5l OiBbNyw2LDUsNCwzLDIsMSwwLDE1LC4uLl0KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7 IGkrKykKLSsgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKQotKyAgICAgICAgICBy YXdMYW5lc1tpICogOCArIGpdID0gaSAqIDggKyAoNyAtIGopOwotKyAgICAgIGJyZWFrOwotKyAg ICB9Ci0rICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6WkVST19FWFRFTkRfOHgxNl9UT18xNng4Ogot KyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlpFUk9fRVhURU5EXzh4MTZfVE9fMzJ4NDoKLSsgICAg Y2FzZSBTaW1kUGVybXV0ZU9wOjpaRVJPX0VYVEVORF84eDE2X1RPXzY0eDI6Ci0rICAgIGNhc2Ug U2ltZFBlcm11dGVPcDo6WkVST19FWFRFTkRfMTZ4OF9UT18zMng0OgotKyAgICBjYXNlIFNpbWRQ ZXJtdXRlT3A6OlpFUk9fRVhURU5EXzE2eDhfVE9fNjR4MjoKLSsgICAgY2FzZSBTaW1kUGVybXV0 ZU9wOjpaRVJPX0VYVEVORF8zMng0X1RPXzY0eDI6IHsKLSsgICAgICBjb25zdCBpbnQ4X3QqIGJ5 dGVzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihjdHJsLmJ5dGVzKCkpOwotKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgcmF3TGFuZXNbaV0gPSBieXRlc1tpXTsK LSsgICAgICBnb3RvIG5lZWRzWmVyb1JoczsKLSsgICAgfQotKyAgICBkZWZhdWx0OiB7Ci0rICAg ICAgLy8gUEVSTVVURV84eDE2IGFuZCBvdGhlcnM6IGNvbnRyb2wgaGFzIHJhdyBieXRlIGluZGlj ZXMuCi0rICAgICAgY29uc3QgaW50OF90KiBieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg aW50OF90Kj4oY3RybC5ieXRlcygpKTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBp KyspIHJhd0xhbmVzW2ldID0gYnl0ZXNbaV07Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgIH0K LSsgIG1hc20uc2h1ZmZsZUludDh4MTYocmF3TGFuZXMsIHNyYywgc3JjLCBkZXN0KTsKLSsgIHJl dHVybjsKLSsKLSsgIG5lZWRzWmVyb1JoczogewotKyAgICAvLyBXYXNtIGNvbnZlbnRpb246IHJh d0xhbmVzW2ldIGluIDAuLjE1IHNlbGVjdHMgc3JjLkxFX2J5dGVbaWR4XSwgYW5kCi0rICAgIC8v IHJhd0xhbmVzW2ldID49IDE2IG1lYW5zICJ6ZXJvIi4gV2l0aG91dCBzcGlsbGluZywgd2UgY2Fu J3Qgc2F0aXNmeQotKyAgICAvLyB2cGVybSdzIHRocmVlLWlucHV0IGNvbnN0cmFpbnQgQU5EIGtl ZXAgc3JjIGFsaXZlIHdoZW4gZGVzdCA9PSBzcmMuCi0rICAgIC8vIFN0cmF0ZWd5OiB2cGVybSBz cmMgd2l0aCBpdHNlbGYgKGFueSB2YWxpZCBieXRlIGZvciB0aGUgInplcm8iCi0rICAgIC8vIHBv c2l0aW9ucywgYnl0ZXMgZ2V0IG1hc2tlZCBvdXQgYmVsb3cpLCB0aGVuIEFORCB3aXRoIGEgbWFz ayB0aGF0Ci0rICAgIC8vIHplcm9zIHRob3NlIHBvc2l0aW9ucy4KLSsgICAgaW50OF90IGN0cmxb MTZdLCBtYXNrWzE2XTsKLSsgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDE2OyBpKyspIHsK LSsgICAgICB1aW50OF90IGlkeCA9IHJhd0xhbmVzW2ldOwotKyAgICAgIGlmIChpZHggPCAxNikg ewotKyAgICAgICAgY3RybFtpXSA9IDE1IC0gaWR4OwotKyAgICAgICAgbWFza1tpXSA9IC0xOwot KyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBjdHJsW2ldID0gMDsKLSsgICAgICAgIG1hc2tbaV0g PSAwOwotKyAgICAgIH0KLSsgICAgfQotKyAgICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go bWFzbSk7Ci0rICAgIG1hc20ubG9hZENvbnN0YW50U2ltZDEyOChTaW1kQ29uc3RhbnQ6OkNyZWF0 ZVgxNihjdHJsKSwgc2NyYXRjaCk7Ci0rICAgIG1hc20uYXNfdnBlcm0oZGVzdC5lbmNvZGluZygp ICYgMzEsCi0rICAgICAgICAgICAgICAgICAgc3JjLmVuY29kaW5nKCkgJiAzMSwKLSsgICAgICAg ICAgICAgICAgICBzcmMuZW5jb2RpbmcoKSAmIDMxLAotKyAgICAgICAgICAgICAgICAgIHNjcmF0 Y2guZW5jb2RpbmcoKSAmIDMxKTsKLSsgICAgbWFzbS5sb2FkQ29uc3RhbnRTaW1kMTI4KFNpbWRD b25zdGFudDo6Q3JlYXRlWDE2KG1hc2spLCBzY3JhdGNoKTsKLSsgICAgbWFzbS5hc194eGxhbmQo ZGVzdCwgZGVzdCwgc2NyYXRjaCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSt9Ci0rdm9pZCBDb2Rl R2VuZXJhdG9yOjp2aXNpdFdhc21SZXBsYWNlTGFuZVNpbWQxMjgoTFdhc21SZXBsYWNlTGFuZVNp bWQxMjgqIGlucykgewotKyAgRmxvYXRSZWdpc3RlciBsaHNEZXN0ID0gVG9GbG9hdFJlZ2lzdGVy KGlucy0+b3V0cHV0KCkpOwotKyAgTU9aX0FTU0VSVChUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5saHMo KSkgPT0gbGhzRGVzdCk7Ci0rICB1aW50MzJfdCBsYW5lID0gaW5zLT5taXIoKS0+bGFuZUluZGV4 KCk7Ci0rICBzd2l0Y2ggKGlucy0+bWlyKCktPnNpbWRPcCgpKSB7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJOHgxNlJlcGxhY2VMYW5lOgotKyAgICAgIG1hc20ucmVwbGFjZUxhbmVJbnQ4eDE2 KGxhbmUsIFRvUmVnaXN0ZXIoaW5zLT5yaHMoKSksIGxoc0Rlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhSZXBsYWNlTGFuZToKLSsgICAgICBtYXNtLnJl cGxhY2VMYW5lSW50MTZ4OChsYW5lLCBUb1JlZ2lzdGVyKGlucy0+cmhzKCkpLCBsaHNEZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0UmVwbGFjZUxhbmU6 Ci0rICAgICAgbWFzbS5yZXBsYWNlTGFuZUludDMyeDQobGFuZSwgVG9SZWdpc3RlcihpbnMtPnJo cygpKSwgbGhzRGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpG MzJ4NFJlcGxhY2VMYW5lOgotKyAgICAgIG1hc20ucmVwbGFjZUxhbmVGbG9hdDMyeDQobGFuZSwg VG9GbG9hdFJlZ2lzdGVyKGlucy0+cmhzKCkpLCBsaHNEZXN0KTsKLSsgICAgICBicmVhazsKLSsg ICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyUmVwbGFjZUxhbmU6Ci0rICAgICAgbWFzbS5yZXBs YWNlTGFuZUZsb2F0NjR4MihsYW5lLCBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5yaHMoKSksIGxoc0Rl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgiUFBD NjQ6IE5ZSSBTSU1EIHJlcGxhY2UgbGFuZSBvcCIpOwotKyAgfQotK30KLSt2b2lkIENvZGVHZW5l cmF0b3I6OnZpc2l0V2FzbVJlcGxhY2VJbnQ2NExhbmVTaW1kMTI4KAotKyAgICBMV2FzbVJlcGxh Y2VJbnQ2NExhbmVTaW1kMTI4KiBpbnMpIHsKLSsgIE1PWl9BU1NFUlQoaW5zLT5taXIoKS0+c2lt ZE9wKCkgPT0gd2FzbTo6U2ltZE9wOjpJNjR4MlJlcGxhY2VMYW5lKTsKLSsgIEZsb2F0UmVnaXN0 ZXIgbGhzRGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIE1PWl9BU1NF UlQoVG9GbG9hdFJlZ2lzdGVyKGlucy0+bGhzKCkpID09IGxoc0Rlc3QpOwotKyAgbWFzbS5yZXBs YWNlTGFuZUludDY0eDIoaW5zLT5taXIoKS0+bGFuZUluZGV4KCksCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICBUb1JlZ2lzdGVyNjQoaW5zLT5yaHMoKSksIGxoc0Rlc3QpOwotK30KLSt2b2lk IENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVNjYWxhclRvU2ltZDEyOChMV2FzbVNjYWxhclRvU2lt ZDEyOCogaW5zKSB7Ci0rICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5z LT5vdXRwdXQoKSk7Ci0rICBzd2l0Y2ggKGlucy0+bWlyKCktPnNpbWRPcCgpKSB7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlNwbGF0OgotKyAgICAgIG1hc20uc3BsYXRYMTYoVG9SZWdp c3RlcihpbnMtPnNyYygpKSwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMTZ4OFNwbGF0OgotKyAgICAgIG1hc20uc3BsYXRYOChUb1JlZ2lzdGVyKGlucy0+ c3JjKCkpLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okkz Mng0U3BsYXQ6Ci0rICAgICAgbWFzbS5zcGxhdFg0KFRvUmVnaXN0ZXIoaW5zLT5zcmMoKSksIGRl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRTcGxhdDoK LSsgICAgICBtYXNtLnNwbGF0WDQoVG9GbG9hdFJlZ2lzdGVyKGlucy0+c3JjKCkpLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyU3BsYXQ6Ci0rICAg ICAgbWFzbS5zcGxhdFgyKFRvRmxvYXRSZWdpc3RlcihpbnMtPnNyYygpKSwgZGVzdCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJ TUQgc2NhbGFyLXRvLXNpbWQgb3AiKTsKLSsgIH0KLSt9Ci0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2 aXNpdFdhc21JbnQ2NFRvU2ltZDEyOChMV2FzbUludDY0VG9TaW1kMTI4KiBpbnMpIHsKLSsgIEZs b2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsgIHN3 aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2 NHgyU3BsYXQ6Ci0rICAgICAgbWFzbS5zcGxhdFgyKFRvUmVnaXN0ZXI2NChpbnMtPnNyYygpKSwg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJQ UEM2NDogTllJIFNJTUQgaW50NjQtdG8tc2ltZCBvcCIpOwotKyAgfQotK30KLSt2b2lkIENvZGVH ZW5lcmF0b3I6OnZpc2l0V2FzbVVuYXJ5U2ltZDEyOChMV2FzbVVuYXJ5U2ltZDEyOCogaW5zKSB7 Ci0rICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPnNyYygpKTsKLSsg IEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKLSsg IHN3aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6 Okk4eDE2TmVnOgotKyAgICAgIG1hc20ubmVnSW50OHgxNihzcmMsIGRlc3QpOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhOZWc6Ci0rICAgICAgbWFzbS5uZWdJ bnQxNng4KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJMzJ4NE5lZzoKLSsgICAgICBtYXNtLm5lZ0ludDMyeDQoc3JjLCBkZXN0KTsKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyTmVnOgotKyAgICAgIG1hc20ubmVn SW50NjR4MihzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STh4MTZBYnM6Ci0rICAgICAgbWFzbS5hYnNJbnQ4eDE2KHNyYywgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEFiczoKLSsgICAgICBtYXNtLmFi c0ludDE2eDgoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkzMng0QWJzOgotKyAgICAgIG1hc20uYWJzSW50MzJ4NChzcmMsIGRlc3QpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJBYnM6Ci0rICAgICAgbWFzbS5h YnNJbnQ2NHgyKHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpWMTI4Tm90OgotKyAgICAgIG1hc20uYml0d2lzZU5vdFNpbWQxMjgoc3JjLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0TmVnOgotKyAgICAg IG1hc20ubmVnRmxvYXQzMng0KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpGNjR4Mk5lZzoKLSsgICAgICBtYXNtLm5lZ0Zsb2F0NjR4MihzcmMsIGRl c3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRBYnM6Ci0r ICAgICAgbWFzbS5hYnNGbG9hdDMyeDQoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyQWJzOgotKyAgICAgIG1hc20uYWJzRmxvYXQ2NHgyKHNy YywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFNx cnQ6Ci0rICAgICAgbWFzbS5zcXJ0RmxvYXQzMng0KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MlNxcnQ6Ci0rICAgICAgbWFzbS5zcXJ0Rmxv YXQ2NHgyKHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpGMzJ4NENlaWw6Ci0rICAgICAgbWFzbS5jZWlsRmxvYXQzMng0KHNyYywgZGVzdCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkNlaWw6Ci0rICAgICAgbWFz bS5jZWlsRmxvYXQ2NHgyKHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpGMzJ4NEZsb29yOgotKyAgICAgIG1hc20uZmxvb3JGbG9hdDMyeDQoc3JjLCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyRmxvb3I6 Ci0rICAgICAgbWFzbS5mbG9vckZsb2F0NjR4MihzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRUcnVuYzoKLSsgICAgICBtYXNtLnRydW5jRmxv YXQzMng0KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpGNjR4MlRydW5jOgotKyAgICAgIG1hc20udHJ1bmNGbG9hdDY0eDIoc3JjLCBkZXN0KTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0TmVhcmVzdDoKLSsgICAg ICBtYXNtLm5lYXJlc3RGbG9hdDMyeDQoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyTmVhcmVzdDoKLSsgICAgICBtYXNtLm5lYXJlc3RGbG9h dDY0eDIoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgLy8gQ29udmVyc2lvbnMKLSsg ICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0Q29udmVydEkzMng0UzoKLSsgICAgICBtYXNtLmNv bnZlcnRJbnQzMng0VG9GbG9hdDMyeDQoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0Q29udmVydEkzMng0VToKLSsgICAgICBtYXNtLnVuc2ln bmVkQ29udmVydEludDMyeDRUb0Zsb2F0MzJ4NChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRUcnVuY1NhdEYzMng0UzoKLSsgICAgICBtYXNt LnRydW5jU2F0RmxvYXQzMng0VG9JbnQzMng0KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFRydW5jU2F0RjMyeDRVOgotKyAgICAgIG1hc20u dW5zaWduZWRUcnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChzcmMsIGRlc3QpOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJDb252ZXJ0TG93STMyeDRTOgotKyAg ICAgIG1hc20uY29udmVydEludDMyeDRUb0Zsb2F0NjR4MihzcmMsIGRlc3QpOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJDb252ZXJ0TG93STMyeDRVOgotKyAg ICAgIG1hc20udW5zaWduZWRDb252ZXJ0SW50MzJ4NFRvRmxvYXQ2NHgyKHNyYywgZGVzdCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NERlbW90ZUY2NHgyWmVy bzoKLSsgICAgICBtYXNtLmNvbnZlcnRGbG9hdDY0eDJUb0Zsb2F0MzJ4NChzcmMsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJQcm9tb3RlTG93RjMy eDQ6Ci0rICAgICAgbWFzbS5jb252ZXJ0RmxvYXQzMng0VG9GbG9hdDY0eDIoc3JjLCBkZXN0KTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0VHJ1bmNTYXRGNjR4 MlNaZXJvOgotKyAgICAgIG1hc20udHJ1bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoc3JjLCBkZXN0 LCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJMzJ4NFRydW5jU2F0RjY0eDJVWmVybzoKLSsgICAgICBtYXNtLnVuc2lnbmVkVHJ1bmNT YXRGbG9hdDY0eDJUb0ludDMyeDQoc3JjLCBkZXN0LCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIC8vIFdpZGVuCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4 dGVuZExvd0k4eDE2UzoKLSsgICAgICBtYXNtLndpZGVuTG93SW50OHgxNihzcmMsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRlbmRIaWdoSTh4 MTZTOgotKyAgICAgIG1hc20ud2lkZW5IaWdoSW50OHgxNihzcmMsIGRlc3QpOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRlbmRMb3dJOHgxNlU6Ci0rICAg ICAgbWFzbS51bnNpZ25lZFdpZGVuTG93SW50OHgxNihzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRlbmRIaWdoSTh4MTZVOgotKyAgICAg IG1hc20udW5zaWduZWRXaWRlbkhpZ2hJbnQ4eDE2KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGVuZExvd0kxNng4UzoKLSsgICAgICBt YXNtLndpZGVuTG93SW50MTZ4OChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STMyeDRFeHRlbmRIaWdoSTE2eDhTOgotKyAgICAgIG1hc20ud2lkZW5I aWdoSW50MTZ4OChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STMyeDRFeHRlbmRMb3dJMTZ4OFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZFdpZGVuTG93 SW50MTZ4OChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STMyeDRFeHRlbmRIaWdoSTE2eDhVOgotKyAgICAgIG1hc20udW5zaWduZWRXaWRlbkhpZ2hJ bnQxNng4KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJNjR4MkV4dGVuZExvd0kzMng0UzoKLSsgICAgICBtYXNtLndpZGVuTG93SW50MzJ4NChzcmMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJFeHRl bmRIaWdoSTMyeDRTOgotKyAgICAgIG1hc20ud2lkZW5IaWdoSW50MzJ4NChzcmMsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJFeHRlbmRMb3dJMzJ4 NFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZFdpZGVuTG93SW50MzJ4NChzcmMsIGRlc3QpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJFeHRlbmRIaWdoSTMyeDRV OgotKyAgICAgIG1hc20udW5zaWduZWRXaWRlbkhpZ2hJbnQzMng0KHNyYywgZGVzdCk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIC8vIEV4dGVuZGVkIGFkZCBwYWlyd2lzZQotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STE2eDhFeHRhZGRQYWlyd2lzZUk4eDE2UzoKLSsgICAgICBtYXNtLmV4dEFkZFBh aXJ3aXNlSW50OHgxNihzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STE2eDhFeHRhZGRQYWlyd2lzZUk4eDE2VToKLSsgICAgICBtYXNtLnVuc2lnbmVk RXh0QWRkUGFpcndpc2VJbnQ4eDE2KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGFkZFBhaXJ3aXNlSTE2eDhTOgotKyAgICAgIG1hc20u ZXh0QWRkUGFpcndpc2VJbnQxNng4KHNyYywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGFkZFBhaXJ3aXNlSTE2eDhVOgotKyAgICAgIG1hc20u dW5zaWduZWRFeHRBZGRQYWlyd2lzZUludDE2eDgoc3JjLCBkZXN0KTsKLSsgICAgICBicmVhazsK LSsgICAgLy8gUmVsYXhlZCB0cnVuY2F0aW9uCi0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4 NFJlbGF4ZWRUcnVuY0YzMng0UzoKLSsgICAgICBtYXNtLnRydW5jRmxvYXQzMng0VG9JbnQzMng0 UmVsYXhlZChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STMyeDRSZWxheGVkVHJ1bmNGMzJ4NFU6Ci0rICAgICAgbWFzbS51bnNpZ25lZFRydW5jRmxv YXQzMng0VG9JbnQzMng0UmVsYXhlZChzcmMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STMyeDRSZWxheGVkVHJ1bmNGNjR4MlNaZXJvOgotKyAgICAgIG1h c20udHJ1bmNGbG9hdDY0eDJUb0ludDMyeDRSZWxheGVkKHNyYywgZGVzdCk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFJlbGF4ZWRUcnVuY0Y2NHgyVVplcm86 Ci0rICAgICAgbWFzbS51bnNpZ25lZFRydW5jRmxvYXQ2NHgyVG9JbnQzMng0UmVsYXhlZChzcmMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICAvLyBQb3BjbnQKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk4eDE2UG9wY250OgotKyAgICAgIG1hc20ucG9wY250SW50OHgxNihzcmMsIGRlc3Qp OwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6 IE5ZSSBTSU1EIHVuYXJ5IG9wIik7Ci0rICB9Ci0rfQotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlz aXRXYXNtUmVkdWNlU2ltZDEyOChMV2FzbVJlZHVjZVNpbWQxMjgqIGlucykgewotKyAgRmxvYXRS ZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7Ci0rICB1aW50MzJfdCBp bW0gPSBpbnMtPm1pcigpLT5pbW0oKTsKLSsgIHN3aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkp IHsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2RXh0cmFjdExhbmVTOgotKyAgICAgIG1h c20uZXh0cmFjdExhbmVJbnQ4eDE2KGltbSwgc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkp KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2RXh0cmFjdExh bmVVOgotKyAgICAgIG1hc20udW5zaWduZWRFeHRyYWN0TGFuZUludDh4MTYoaW1tLCBzcmMsIFRv UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STE2eDhFeHRyYWN0TGFuZVM6Ci0rICAgICAgbWFzbS5leHRyYWN0TGFuZUludDE2 eDgoaW1tLCBzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRyYWN0TGFuZVU6Ci0rICAgICAgbWFzbS51 bnNpZ25lZEV4dHJhY3RMYW5lSW50MTZ4OChpbW0sIHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1 dCgpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dHJh Y3RMYW5lOgotKyAgICAgIG1hc20uZXh0cmFjdExhbmVJbnQzMng0KGltbSwgc3JjLCBUb1JlZ2lz dGVyKGlucy0+b3V0cHV0KCkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkYzMng0RXh0cmFjdExhbmU6Ci0rICAgICAgbWFzbS5leHRyYWN0TGFuZUZsb2F0MzJ4NChp bW0sIHNyYywgVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyRXh0cmFjdExhbmU6Ci0rICAgICAgbWFzbS5l eHRyYWN0TGFuZUZsb2F0NjR4MihpbW0sIHNyYywgVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0 KCkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhBbnlUcnVl OgotKyAgICAgIG1hc20uYW55VHJ1ZVNpbWQxMjgoc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0 KCkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2QWxsVHJ1 ZToKLSsgICAgICBtYXNtLmFsbFRydWVJbnQ4eDE2KHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1 dCgpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEFsbFRy dWU6Ci0rICAgICAgbWFzbS5hbGxUcnVlSW50MTZ4OChzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRw dXQoKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRBbGxU cnVlOgotKyAgICAgIG1hc20uYWxsVHJ1ZUludDMyeDQoc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0 cHV0KCkpKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyQWxs VHJ1ZToKLSsgICAgICBtYXNtLmFsbFRydWVJbnQ2NHgyKHNyYywgVG9SZWdpc3RlcihpbnMtPm91 dHB1dCgpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkJp dG1hc2s6Ci0rICAgICAgbWFzbS5iaXRtYXNrSW50OHgxNihzcmMsIFRvUmVnaXN0ZXIoaW5zLT5v dXRwdXQoKSksIFNjcmF0Y2hTaW1kMTI4UmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkxNng4Qml0bWFzazoKLSsgICAgICBtYXNtLmJpdG1hc2tJbnQxNng4KHNy YywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSwgU2NyYXRjaFNpbWQxMjhSZWcpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRCaXRtYXNrOgotKyAgICAgIG1h c20uYml0bWFza0ludDMyeDQoc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpLCBTY3JhdGNo U2ltZDEyOFJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4 MkJpdG1hc2s6Ci0rICAgICAgbWFzbS5iaXRtYXNrSW50NjR4MihzcmMsIFRvUmVnaXN0ZXIoaW5z LT5vdXRwdXQoKSksIFNjcmF0Y2hTaW1kMTI4UmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVm YXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlBQQzY0OiBOWUkgU0lNRCByZWR1Y2Ugb3AiKTsKLSsg IH0KLSt9Ci0rdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21SZWR1Y2VBbmRCcmFuY2hTaW1k MTI4KAotKyAgICBMV2FzbVJlZHVjZUFuZEJyYW5jaFNpbWQxMjgqIGlucykgewotKyAgRmxvYXRS ZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7Ci0rICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgIHN3aXRjaCAoaW5zLT5zaW1kT3AoKSkgewotKyAgICBjYXNlIHdhc206OlNpbWRP cDo6VjEyOEFueVRydWU6Ci0rICAgICAgbWFzbS5hbnlUcnVlU2ltZDEyOChzcmMsIHRtcCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkFsbFRydWU6Ci0rICAg ICAgbWFzbS5hbGxUcnVlSW50OHgxNihzcmMsIHRtcCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEFsbFRydWU6Ci0rICAgICAgbWFzbS5hbGxUcnVlSW50MTZ4 OChzcmMsIHRtcCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4 NEFsbFRydWU6Ci0rICAgICAgbWFzbS5hbGxUcnVlSW50MzJ4NChzcmMsIHRtcCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkFsbFRydWU6Ci0rICAgICAgbWFz bS5hbGxUcnVlSW50NjR4MihzcmMsIHRtcCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJOHgxNkJpdG1hc2s6Ci0rICAgICAgbWFzbS5iaXRtYXNrSW50OHgxNihzcmMs IHRtcCwgU2NyYXRjaFNpbWQxMjhSZWcpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STE2eDhCaXRtYXNrOgotKyAgICAgIG1hc20uYml0bWFza0ludDE2eDgoc3JjLCB0 bXAsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkzMng0Qml0bWFzazoKLSsgICAgICBtYXNtLmJpdG1hc2tJbnQzMng0KHNyYywgdG1w LCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJNjR4MkJpdG1hc2s6Ci0rICAgICAgbWFzbS5iaXRtYXNrSW50NjR4MihzcmMsIHRtcCwg U2NyYXRjaFNpbWQxMjhSZWcpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAg IE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIHJlZHVjZS1hbmQtYnJhbmNoIG9wIik7Ci0rICB9 Ci0rICBtYXNtLmFzX2NtcGRpKHRtcCwgMCk7Ci0rICAvLyBCcmFuY2ggdG8gaWZUcnVlIGlmIG5v bnplcm8sIGZhbGwgdGhyb3VnaCB0byBpZkZhbHNlLgotKyAgTGFiZWwqIGlmVHJ1ZSA9IHNraXBU cml2aWFsQmxvY2tzKGlucy0+aWZUcnVlKCkpLT5saXIoKS0+bGFiZWwoKTsKLSsgIExhYmVsKiBp ZkZhbHNlID0gc2tpcFRyaXZpYWxCbG9ja3MoaW5zLT5pZkZhbHNlKCkpLT5saXIoKS0+bGFiZWwo KTsKLSsgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBpZlRydWUpOwotKyAgbWFzbS5q dW1wKGlmRmFsc2UpOwotK30KLSt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVJlZHVjZVNp bWQxMjhUb0ludDY0KAotKyAgICBMV2FzbVJlZHVjZVNpbWQxMjhUb0ludDY0KiBpbnMpIHsKLSsg IEZsb2F0UmVnaXN0ZXIgc3JjID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+c3JjKCkpOwotKyAgUmVn aXN0ZXI2NCBkZXN0ID0gVG9PdXRSZWdpc3RlcjY0KGlucyk7Ci0rICBzd2l0Y2ggKGlucy0+bWly KCktPnNpbWRPcCgpKSB7Ci0rICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkV4dHJhY3RMYW5l OgotKyAgICAgIG1hc20uZXh0cmFjdExhbmVJbnQ2NHgyKGlucy0+bWlyKCktPmltbSgpLCBzcmMs IGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgi UFBDNjQ6IE5ZSSBTSU1EIHJlZHVjZS10by1pbnQ2NCBvcCIpOwotKyAgfQotK30KLStzdGF0aWMg aW5saW5lIHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MgRGVyaXZlTWVtb3J5QWNjZXNzRGVzYygKLSsg ICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBTY2FsYXI6OlR5cGUgdHlw ZSkgewotKyAgcmV0dXJuIHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MoYWNjZXNzLm1lbW9yeUluZGV4 KCksIHR5cGUsIGFjY2Vzcy5hbGlnbigpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYWNjZXNzLm9mZnNldDMyKCksIGFjY2Vzcy50cmFwRGVzYygpLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWNjZXNzLmlzSHVnZU1lbW9yeSgpKTsKLSt9Ci0rCi0rdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdFdhc21Mb2FkTGFuZVNpbWQxMjgoTFdhc21Mb2FkTGFuZVNpbWQx MjgqIGlucykgewotKyAgY29uc3QgTVdhc21Mb2FkTGFuZVNpbWQxMjgqIG1pciA9IGlucy0+bWly KCk7Ci0rICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihpbnMtPm1lbW9yeUJhc2Uo KSk7Ci0rICBSZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVyKGlucy0+cHRyKCkpOwotKyAgRmxvYXRS ZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7Ci0rICBGbG9hdFJlZ2lz dGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7Ci0rICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgIG1hc20ubW92ZVNpbWQxMjgoc3JjLCBkZXN0KTsKLSsgIHN3aXRjaCAobWlyLT5s YW5lU2l6ZSgpKSB7Ci0rICAgIGNhc2UgMToKLSsgICAgICBtYXNtLndhc21Mb2FkKERlcml2ZU1l bW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwgU2NhbGFyOjpJbnQ4KSwKLSsgICAgICAgICAg ICAgICAgICAgIG1lbW9yeUJhc2UsIHB0ciwgcHRyLCBBbnlSZWdpc3Rlcih0bXApKTsKLSsgICAg ICBtYXNtLnJlcGxhY2VMYW5lSW50OHgxNihtaXItPmxhbmVJbmRleCgpLCB0bXAsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDI6Ci0rICAgICAgbWFzbS53YXNtTG9hZChEZXJpdmVN ZW1vcnlBY2Nlc3NEZXNjKG1pci0+YWNjZXNzKCksIFNjYWxhcjo6SW50MTYpLAotKyAgICAgICAg ICAgICAgICAgICAgbWVtb3J5QmFzZSwgcHRyLCBwdHIsIEFueVJlZ2lzdGVyKHRtcCkpOwotKyAg ICAgIG1hc20ucmVwbGFjZUxhbmVJbnQxNng4KG1pci0+bGFuZUluZGV4KCksIHRtcCwgZGVzdCk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgNDoKLSsgICAgICBtYXNtLndhc21Mb2FkKERlcml2 ZU1lbW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwgU2NhbGFyOjpJbnQzMiksCi0rICAgICAg ICAgICAgICAgICAgICBtZW1vcnlCYXNlLCBwdHIsIHB0ciwgQW55UmVnaXN0ZXIodG1wKSk7Ci0r ICAgICAgbWFzbS5yZXBsYWNlTGFuZUludDMyeDQobWlyLT5sYW5lSW5kZXgoKSwgdG1wLCBkZXN0 KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSA4OiB7Ci0rICAgICAgbWFzbS53YXNtTG9hZEk2 NChEZXJpdmVNZW1vcnlBY2Nlc3NEZXNjKG1pci0+YWNjZXNzKCksIFNjYWxhcjo6SW50NjQpLAot KyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5QmFzZSwgcHRyLCBwdHIsCi0rICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlcjY0KHRtcCkpOwotKyAgICAgIG1hc20ucmVwbGFjZUxhbmVJ bnQ2NHgyKG1pci0+bGFuZUluZGV4KCksIFJlZ2lzdGVyNjQodG1wKSwgZGVzdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIH0KLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0 ZWQgbGFuZSBzaXplIik7Ci0rICB9Ci0rfQotK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNt U3RvcmVMYW5lU2ltZDEyOChMV2FzbVN0b3JlTGFuZVNpbWQxMjgqIGlucykgewotKyAgY29uc3Qg TVdhc21TdG9yZUxhbmVTaW1kMTI4KiBtaXIgPSBpbnMtPm1pcigpOwotKyAgUmVnaXN0ZXIgbWVt b3J5QmFzZSA9IFRvUmVnaXN0ZXIoaW5zLT5tZW1vcnlCYXNlKCkpOwotKyAgUmVnaXN0ZXIgcHRy ID0gVG9SZWdpc3RlcihpbnMtPnB0cigpKTsKLSsgIEZsb2F0UmVnaXN0ZXIgc3JjID0gVG9GbG9h dFJlZ2lzdGVyKGlucy0+c3JjKCkpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo bWFzbSk7Ci0rICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBzd2l0Y2ggKG1p ci0+bGFuZVNpemUoKSkgewotKyAgICBjYXNlIDE6Ci0rICAgICAgbWFzbS51bnNpZ25lZEV4dHJh Y3RMYW5lSW50OHgxNihtaXItPmxhbmVJbmRleCgpLCBzcmMsIHRtcCk7Ci0rICAgICAgbWFzbS53 YXNtU3RvcmUoRGVyaXZlTWVtb3J5QWNjZXNzRGVzYyhtaXItPmFjY2VzcygpLCBTY2FsYXI6Oklu dDgpLAotKyAgICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyKHRtcCksIG1lbW9yeUJhc2Us IHB0ciwgcHRyKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSAyOgotKyAgICAgIG1hc20udW5z aWduZWRFeHRyYWN0TGFuZUludDE2eDgobWlyLT5sYW5lSW5kZXgoKSwgc3JjLCB0bXApOwotKyAg ICAgIG1hc20ud2FzbVN0b3JlKERlcml2ZU1lbW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwg U2NhbGFyOjpJbnQxNiksCi0rICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIodG1wKSwg bWVtb3J5QmFzZSwgcHRyLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDQ6Ci0rICAg ICAgbWFzbS5leHRyYWN0TGFuZUludDMyeDQobWlyLT5sYW5lSW5kZXgoKSwgc3JjLCB0bXApOwot KyAgICAgIG1hc20ud2FzbVN0b3JlKERlcml2ZU1lbW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3Mo KSwgU2NhbGFyOjpJbnQzMiksCi0rICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIodG1w KSwgbWVtb3J5QmFzZSwgcHRyLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDg6Ci0r ICAgICAgbWFzbS5leHRyYWN0TGFuZUludDY0eDIobWlyLT5sYW5lSW5kZXgoKSwgc3JjLCBSZWdp c3RlcjY0KHRtcCkpOwotKyAgICAgIG1hc20ud2FzbVN0b3JlSTY0KERlcml2ZU1lbW9yeUFjY2Vz c0Rlc2MobWlyLT5hY2Nlc3MoKSwgU2NhbGFyOjpJbnQ2NCksCi0rICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXI2NCh0bXApLCBtZW1vcnlCYXNlLCBwdHIsIHB0cik7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIGxhbmUgc2l6 ZSIpOwotKyAgfQotK30KLSsKLSt9ICAvLyBuYW1lc3BhY2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNl IGpzCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0Lmgg Yi9qcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuaAotbmV3IGZpbGUgbW9kZSAx MDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uMzQxNGVjZWI1YWM0Ci0tLS0gL2Rldi9udWxsCi0r KysgYi9qcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuaAotQEAgLTAsMCArMSwx MDEgQEAKLSsvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6 IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0rICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBz dz0yIHR3PTgwOgotKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0 ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKLSsgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29w eSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCi0rICogZmlsZSwgWW91 IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsj aWZuZGVmIGppdF9wcGM2NF9Db2RlR2VuZXJhdG9yX3BwYzY0X2gKLSsjZGVmaW5lIGppdF9wcGM2 NF9Db2RlR2VuZXJhdG9yX3BwYzY0X2gKLSsKLSsjaW5jbHVkZSAiaml0L3BwYzY0L0Fzc2VtYmxl ci1wcGM2NC5oIgotKyNpbmNsdWRlICJqaXQvc2hhcmVkL0NvZGVHZW5lcmF0b3Itc2hhcmVkLmgi Ci0rCi0rbmFtZXNwYWNlIGpzIHsKLStuYW1lc3BhY2Ugaml0IHsKLSsKLStjbGFzcyBDb2RlR2Vu ZXJhdG9yUFBDNjQ7Ci0rY2xhc3MgT3V0T2ZMaW5lVGFibGVTd2l0Y2g7Ci0rCi0rdXNpbmcgT3V0 T2ZMaW5lV2FzbVRydW5jYXRlQ2hlY2sgPQotKyAgICBPdXRPZkxpbmVXYXNtVHJ1bmNhdGVDaGVj a0Jhc2U8Q29kZUdlbmVyYXRvclBQQzY0PjsKLSsKLStjbGFzcyBDb2RlR2VuZXJhdG9yUFBDNjQg OiBwdWJsaWMgQ29kZUdlbmVyYXRvclNoYXJlZCB7Ci0rICBmcmllbmQgY2xhc3MgTW92ZVJlc29s dmVyUFBDNjQ7Ci0rCi0rIHByb3RlY3RlZDoKLSsgIENvZGVHZW5lcmF0b3JQUEM2NChNSVJHZW5l cmF0b3IqIGdlbiwgTElSR3JhcGgqIGdyYXBoLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwKLSsgICAg ICAgICAgICAgICAgICAgICBjb25zdCB3YXNtOjpDb2RlTWV0YWRhdGEqIGNvZGVNZXRhKTsKLSsK LSsgIE5vbkFzc2VydGluZ0xhYmVsIGRlb3B0TGFiZWxfOwotKwotKyAgT3BlcmFuZCBUb09wZXJh bmQoY29uc3QgTEFsbG9jYXRpb24mIGEpOwotKyAgT3BlcmFuZCBUb09wZXJhbmQoY29uc3QgTEFs bG9jYXRpb24qIGEpOwotKyAgTW92ZU9wZXJhbmQgdG9Nb3ZlT3BlcmFuZChMQWxsb2NhdGlvbiBh KSBjb25zdDsKLSsKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci0rICB2 b2lkIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjLCBUMSBsaHMsIFQyIHJocywK LSsgICAgICAgICAgICAgICAgICAgIExTbmFwc2hvdCogc25hcHNob3QpIHsKLSsgICAgTGFiZWwg YmFpbDsKLSsgICAgbWFzbS5icmFuY2gzMihjLCBsaHMsIHJocywgJmJhaWwpOwotKyAgICBiYWls b3V0RnJvbSgmYmFpbCwgc25hcHNob3QpOwotKyAgfQotKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQx LCB0eXBlbmFtZSBUMj4KLSsgIHZvaWQgYmFpbG91dENtcFB0cihBc3NlbWJsZXI6OkNvbmRpdGlv biBjLCBUMSBsaHMsIFQyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICBMU25hcHNob3QqIHNu YXBzaG90KSB7Ci0rICAgIExhYmVsIGJhaWw7Ci0rICAgIG1hc20uYnJhbmNoUHRyKGMsIGxocywg cmhzLCAmYmFpbCk7Ci0rICAgIGJhaWxvdXRGcm9tKCZiYWlsLCBzbmFwc2hvdCk7Ci0rICB9Ci0r ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgotKyAgdm9pZCBiYWlsb3V0VGVz dDMyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMsIFQxIGxocywgVDIgcmhzLAotKyAgICAgICAgICAg ICAgICAgICAgIExTbmFwc2hvdCogc25hcHNob3QpIHsKLSsgICAgTGFiZWwgYmFpbDsKLSsgICAg bWFzbS5icmFuY2hUZXN0MzIoYywgbGhzLCByaHMsICZiYWlsKTsKLSsgICAgYmFpbG91dEZyb20o JmJhaWwsIHNuYXBzaG90KTsKLSsgIH0KLSsgIHZvaWQgYmFpbG91dElmRmFsc2VCb29sKFJlZ2lz dGVyIGxocywgTFNuYXBzaG90KiBzbmFwc2hvdCk7Ci0rICB2b2lkIGJhaWxvdXRGcm9tKExhYmVs KiBsYWJlbCwgTFNuYXBzaG90KiBzbmFwc2hvdCk7Ci0rICB2b2lkIGJhaWxvdXQoTFNuYXBzaG90 KiBzbmFwc2hvdCk7Ci0rCi0rIHByb3RlY3RlZDoKLSsgIGJvb2wgZ2VuZXJhdGVPdXRPZkxpbmVD b2RlKCk7Ci0rICB2b2lkIGJyYW5jaFRvQmxvY2soTUJhc2ljQmxvY2sqIGJsb2NrKTsKLSsKLSsg IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9pZCBicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgVCByaHMsCi0rICAgICAgICAgICAgICAgICAg ICAgTUJhc2ljQmxvY2sqIG1pcikgewotKyAgICBMYWJlbCogbGFiZWwgPSBza2lwVHJpdmlhbEJs b2NrcyhtaXIpLT5saXIoKS0+bGFiZWwoKTsKLSsgICAgbWFzbS5icmFuY2gzMihjb25kLCBsaHMs IHJocywgbGFiZWwpOwotKyAgfQotKyAgdm9pZCBicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6RG91 YmxlQ29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAotKyAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBNQmFzaWNCbG9jayogbWlyKTsKLSsgIHZvaWQgYnJhbmNo VG9CbG9jayhBc3NlbWJsZXI6OkZsb2F0Rm9ybWF0IGZtdCwKLSsgICAgICAgICAgICAgICAgICAg ICBBc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKLSsg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgTUJhc2ljQmxvY2sqIG1pcik7 Ci0rCi0rICB2b2lkIGVtaXRUYWJsZVN3aXRjaERpc3BhdGNoKE1UYWJsZVN3aXRjaCogbWlyLCBS ZWdpc3RlciBpbmRleCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg YmFzZSk7Ci0rCi0rICB2b2lkIGVtaXRCaWdJbnRQdHJEaXYoTEJpZ0ludFB0ckRpdiogaW5zLCBS ZWdpc3RlciBkaXZpZGVuZCwgUmVnaXN0ZXIgZGl2aXNvciwKLSsgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBvdXRwdXQpOwotKyAgdm9pZCBlbWl0QmlnSW50UHRyTW9kKExCaWdJbnRQ dHJNb2QqIGlucywgUmVnaXN0ZXIgZGl2aWRlbmQsIFJlZ2lzdGVyIGRpdmlzb3IsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KTsKLSsKLSsgIHZvaWQgZ2VuZXJhdGVJ bnZhbGlkYXRlRXBpbG9ndWUoKTsKLSsKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9p ZCBlbWl0V2FzbUxvYWQoVCogbGlyKTsKLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9p ZCBlbWl0V2FzbVN0b3JlKFQqIGxpcik7Ci0rCi0rIHB1YmxpYzoKLSsgIHZvaWQgdmlzaXRPdXRP ZkxpbmVUYWJsZVN3aXRjaChPdXRPZkxpbmVUYWJsZVN3aXRjaCogb29sKTsKLSsgIHZvaWQgdmlz aXRPdXRPZkxpbmVXYXNtVHJ1bmNhdGVDaGVjayhPdXRPZkxpbmVXYXNtVHJ1bmNhdGVDaGVjayog b29sKTsKLSt9OwotKwotK3R5cGVkZWYgQ29kZUdlbmVyYXRvclBQQzY0IENvZGVHZW5lcmF0b3JT cGVjaWZpYzsKLSsKLSt9ICAvLyBuYW1lc3BhY2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi0r Ci0rI2VuZGlmIC8qIGppdF9wcGM2NF9Db2RlR2VuZXJhdG9yX3BwYzY0X2ggKi8KLWRpZmYgLS1n aXQgYS9qcy9zcmMvaml0L3BwYzY0L0xJUi1wcGM2NC5oIGIvanMvc3JjL2ppdC9wcGM2NC9MSVIt cHBjNjQuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uNjg2ODc1 MDU2MTI3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3BwYzY0L0xJUi1wcGM2NC5o Ci1AQCAtMCwwICsxLDEzNSBAQAotKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5k ZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KLSsgKiB2aW06IHNldCB0 cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6Ci0rICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1 YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwotKyAqIExpY2Vuc2UsIHYu IDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMK LSsgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8y LjAvLiAqLwotKwotKyNpZm5kZWYgaml0X3BwYzY0X0xJUl9wcGM2NF9oCi0rI2RlZmluZSBqaXRf cHBjNjRfTElSX3BwYzY0X2gKLSsKLStuYW1lc3BhY2UganMgewotK25hbWVzcGFjZSBqaXQgewot KwotK2NsYXNzIExVbmJveCA6IHB1YmxpYyBMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgQk9YX1BJRUNF UywgMD4gewotKyBwdWJsaWM6Ci0rICBMSVJfSEVBREVSKFVuYm94KTsKLSsKLSsgIGV4cGxpY2l0 IExVbmJveChjb25zdCBMQWxsb2NhdGlvbiYgaW5wdXQpIDogTEluc3RydWN0aW9uSGVscGVyKGNs YXNzT3Bjb2RlKSB7Ci0rICAgIHNldE9wZXJhbmQoMCwgaW5wdXQpOwotKyAgfQotKwotKyAgc3Rh dGljIGNvbnN0IHNpemVfdCBJbnB1dCA9IDA7Ci0rCi0rICBMQm94QWxsb2NhdGlvbiBpbnB1dCgp IGNvbnN0IHsgcmV0dXJuIGdldEJveE9wZXJhbmQoSW5wdXQpOyB9Ci0rCi0rICBNVW5ib3gqIG1p cigpIGNvbnN0IHsgcmV0dXJuIG1pcl8tPnRvVW5ib3goKTsgfQotKyAgY29uc3QgY2hhciogZXh0 cmFOYW1lKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nRnJvbU1JUlR5cGUobWlyKCktPnR5cGUoKSk7 IH0KLSt9OwotKwotK2NsYXNzIExVRGl2T3JNb2QgOiBwdWJsaWMgTEJpbmFyeU1hdGg8MD4gewot KyBwdWJsaWM6Ci0rICBMSVJfSEVBREVSKFVEaXZPck1vZCk7Ci0rCi0rICBMVURpdk9yTW9kKCkg OiBMQmluYXJ5TWF0aChjbGFzc09wY29kZSkge30KLSsKLSsgIE1CaW5hcnlBcml0aEluc3RydWN0 aW9uKiBtaXIoKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQobWlyXy0+aXNEaXYoKSB8fCBtaXJf LT5pc01vZCgpKTsKLSsgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1CaW5hcnlBcml0aEluc3RydWN0 aW9uKj4obWlyXyk7Ci0rICB9Ci0rCi0rICBib29sIGNhbkJlRGl2aWRlQnlaZXJvKCkgY29uc3Qg ewotKyAgICBpZiAobWlyXy0+aXNNb2QoKSkgewotKyAgICAgIHJldHVybiBtaXJfLT50b01vZCgp LT5jYW5CZURpdmlkZUJ5WmVybygpOwotKyAgICB9Ci0rICAgIHJldHVybiBtaXJfLT50b0Rpdigp LT5jYW5CZURpdmlkZUJ5WmVybygpOwotKyAgfQotKwotKyAgYm9vbCB0cmFwT25FcnJvcigpIGNv bnN0IHsKLSsgICAgaWYgKG1pcl8tPmlzTW9kKCkpIHsKLSsgICAgICByZXR1cm4gbWlyXy0+dG9N b2QoKS0+dHJhcE9uRXJyb3IoKTsKLSsgICAgfQotKyAgICByZXR1cm4gbWlyXy0+dG9EaXYoKS0+ dHJhcE9uRXJyb3IoKTsKLSsgIH0KLSsKLSsgIHdhc206OlRyYXBTaXRlRGVzYyB0cmFwU2l0ZURl c2MoKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQobWlyXy0+aXNEaXYoKSB8fCBtaXJfLT5pc01v ZCgpKTsKLSsgICAgaWYgKG1pcl8tPmlzTW9kKCkpIHsKLSsgICAgICByZXR1cm4gbWlyXy0+dG9N b2QoKS0+dHJhcFNpdGVEZXNjKCk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIG1pcl8tPnRvRGl2KCkt PnRyYXBTaXRlRGVzYygpOwotKyAgfQotK307Ci0rCi0rY2xhc3MgTERpdk9yTW9kSTY0IDogcHVi bGljIExCaW5hcnlNYXRoPDA+IHsKLSsgcHVibGljOgotKyAgTElSX0hFQURFUihEaXZPck1vZEk2 NCk7Ci0rCi0rICBMRGl2T3JNb2RJNjQoY29uc3QgTEFsbG9jYXRpb24mIGxocywgY29uc3QgTEFs bG9jYXRpb24mIHJocykKLSsgICAgICA6IExCaW5hcnlNYXRoKGNsYXNzT3Bjb2RlKSB7Ci0rICAg IHNldE9wZXJhbmQoMCwgbGhzKTsKLSsgICAgc2V0T3BlcmFuZCgxLCByaHMpOwotKyAgfQotKwot KyAgTUJpbmFyeUFyaXRoSW5zdHJ1Y3Rpb24qIG1pcigpIGNvbnN0IHsKLSsgICAgTU9aX0FTU0VS VChtaXJfLT5pc0RpdigpIHx8IG1pcl8tPmlzTW9kKCkpOwotKyAgICByZXR1cm4gc3RhdGljX2Nh c3Q8TUJpbmFyeUFyaXRoSW5zdHJ1Y3Rpb24qPihtaXJfKTsKLSsgIH0KLSsKLSsgIGJvb2wgY2Fu QmVEaXZpZGVCeVplcm8oKSBjb25zdCB7Ci0rICAgIGlmIChtaXJfLT5pc01vZCgpKSB7Ci0rICAg ICAgcmV0dXJuIG1pcl8tPnRvTW9kKCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7Ci0rICAgIH0KLSsg ICAgcmV0dXJuIG1pcl8tPnRvRGl2KCktPmNhbkJlRGl2aWRlQnlaZXJvKCk7Ci0rICB9Ci0rICBi b29sIGNhbkJlTmVnYXRpdmVPdmVyZmxvdygpIGNvbnN0IHsKLSsgICAgaWYgKG1pcl8tPmlzTW9k KCkpIHsKLSsgICAgICByZXR1cm4gbWlyXy0+dG9Nb2QoKS0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5k KCk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIG1pcl8tPnRvRGl2KCktPmNhbkJlTmVnYXRpdmVPdmVy ZmxvdygpOwotKyAgfQotKyAgd2FzbTo6VHJhcFNpdGVEZXNjIHRyYXBTaXRlRGVzYygpIGNvbnN0 IHsKLSsgICAgTU9aX0FTU0VSVChtaXJfLT5pc0RpdigpIHx8IG1pcl8tPmlzTW9kKCkpOwotKyAg ICBpZiAobWlyXy0+aXNNb2QoKSkgewotKyAgICAgIHJldHVybiBtaXJfLT50b01vZCgpLT50cmFw U2l0ZURlc2MoKTsKLSsgICAgfQotKyAgICByZXR1cm4gbWlyXy0+dG9EaXYoKS0+dHJhcFNpdGVE ZXNjKCk7Ci0rICB9Ci0rfTsKLSsKLStjbGFzcyBMVURpdk9yTW9kSTY0IDogcHVibGljIExCaW5h cnlNYXRoPDA+IHsKLSsgcHVibGljOgotKyAgTElSX0hFQURFUihVRGl2T3JNb2RJNjQpOwotKwot KyAgTFVEaXZPck1vZEk2NChjb25zdCBMQWxsb2NhdGlvbiYgbGhzLCBjb25zdCBMQWxsb2NhdGlv biYgcmhzKQotKyAgICAgIDogTEJpbmFyeU1hdGgoY2xhc3NPcGNvZGUpIHsKLSsgICAgc2V0T3Bl cmFuZCgwLCBsaHMpOwotKyAgICBzZXRPcGVyYW5kKDEsIHJocyk7Ci0rICB9Ci0rCi0rICBjb25z dCBjaGFyKiBleHRyYU5hbWUoKSBjb25zdCB7Ci0rICAgIHJldHVybiBtaXIoKS0+aXNUcnVuY2F0 ZWQoKSA/ICJUcnVuY2F0ZWQiIDogbnVsbHB0cjsKLSsgIH0KLSsKLSsgIE1CaW5hcnlBcml0aElu c3RydWN0aW9uKiBtaXIoKSBjb25zdCB7Ci0rICAgIE1PWl9BU1NFUlQobWlyXy0+aXNEaXYoKSB8 fCBtaXJfLT5pc01vZCgpKTsKLSsgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1CaW5hcnlBcml0aElu c3RydWN0aW9uKj4obWlyXyk7Ci0rICB9Ci0rICBib29sIGNhbkJlRGl2aWRlQnlaZXJvKCkgY29u c3QgewotKyAgICBpZiAobWlyXy0+aXNNb2QoKSkgewotKyAgICAgIHJldHVybiBtaXJfLT50b01v ZCgpLT5jYW5CZURpdmlkZUJ5WmVybygpOwotKyAgICB9Ci0rICAgIHJldHVybiBtaXJfLT50b0Rp digpLT5jYW5CZURpdmlkZUJ5WmVybygpOwotKyAgfQotKyAgd2FzbTo6VHJhcFNpdGVEZXNjIHRy YXBTaXRlRGVzYygpIGNvbnN0IHsKLSsgICAgTU9aX0FTU0VSVChtaXJfLT5pc0RpdigpIHx8IG1p cl8tPmlzTW9kKCkpOwotKyAgICBpZiAobWlyXy0+aXNNb2QoKSkgewotKyAgICAgIHJldHVybiBt aXJfLT50b01vZCgpLT50cmFwU2l0ZURlc2MoKTsKLSsgICAgfQotKyAgICByZXR1cm4gbWlyXy0+ dG9EaXYoKS0+dHJhcFNpdGVEZXNjKCk7Ci0rICB9Ci0rfTsKLSsKLSt9ICAvLyBuYW1lc3BhY2Ug aml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi0rCi0rI2VuZGlmIC8qIGppdF9wcGM2NF9MSVJfcHBj NjRfaCAqLwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuY3Bw IGIvanMvc3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1wcGM2NC5jcHAKLW5ldyBmaWxlIG1vZGUgMTAw NjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLmJlMGVhZDE5ZDI3MwotLS0tIC9kZXYvbnVsbAotKysr IGIvanMvc3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1wcGM2NC5jcHAKLUBAIC0wLDAgKzEsMTMyNCBA QAotKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmls OyBjLWJhc2ljLW9mZnNldDogMiAtKi0KLSsgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIg dHc9ODA6Ci0rICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1z IG9mIHRoZSBNb3ppbGxhIFB1YmxpYwotKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9m IHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2Fu IG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwotKwotKyNpbmNs dWRlICJqaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuaCIKLSsKLSsjaW5jbHVkZSAibW96aWxsYS9N YXRoQWxnb3JpdGhtcy5oIgotKwotKyNpbmNsdWRlICJqaXQvTG93ZXJpbmcuaCIKLSsjaW5jbHVk ZSAiaml0L01JUi13YXNtLmgiCi0rI2luY2x1ZGUgImppdC9NSVIuaCIKLSsjaW5jbHVkZSAiaml0 L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oIgotKyNpbmNsdWRlICJ3YXNtL1dhc21GZWF0dXJlcy5o IiAgLy8gZm9yIHdhc206OlJlcG9ydFNpbWRBbmFseXNpcwotKwotKyNpbmNsdWRlICJqaXQvc2hh cmVkL0xvd2VyaW5nLXNoYXJlZC1pbmwuaCIKLSsKLSt1c2luZyBuYW1lc3BhY2UganM7Ci0rdXNp bmcgbmFtZXNwYWNlIGpzOjpqaXQ7Ci0rCi0rdXNpbmcgbW96aWxsYTo6Rmxvb3JMb2cyOwotKwot K25hbWVzcGFjZSBqcyB7Ci0rbmFtZXNwYWNlIGppdCB7Ci0rCi0rTFRhYmxlU3dpdGNoKiBMSVJH ZW5lcmF0b3JQUEM2NDo6bmV3TFRhYmxlU3dpdGNoKGNvbnN0IExBbGxvY2F0aW9uJiBpbiwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTERl ZmluaXRpb24mIGlucHV0Q29weSkgewotKyAgcmV0dXJuIG5ldyAoYWxsb2MoKSkgTFRhYmxlU3dp dGNoKGluLCBpbnB1dENvcHksIHRlbXAoKSk7Ci0rfQotKwotK0xUYWJsZVN3aXRjaFYqIExJUkdl bmVyYXRvclBQQzY0OjpuZXdMVGFibGVTd2l0Y2hWKGNvbnN0IExCb3hBbGxvY2F0aW9uJiBpbikg ewotKyAgcmV0dXJuIG5ldyAoYWxsb2MoKSkgTFRhYmxlU3dpdGNoVihpbiwgdGVtcCgpLCB0ZW1w RG91YmxlKCksIHRlbXAoKSk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2Vy Rm9yU2hpZnQoTEluc3RydWN0aW9uSGVscGVyPDEsIDIsIDA+KiBpbnMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogbWlyLCBNRGVmaW5pdGlvbiog bGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24q IHJocykgewotKyAgbG93ZXJGb3JBTFUoaW5zLCBtaXIsIGxocywgcmhzKTsKLSt9Ci0rCi0rdGVt cGxhdGUgPGNsYXNzIExJbnN0cj4KLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvclNo aWZ0SW50NjQoTEluc3RyKiBpbnMsIE1EZWZpbml0aW9uKiBtaXIsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0aW9u KiByaHMpIHsKLSsgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8TEluc3RyLCBMU2hpZnRJ NjQ+KSB7Ci0rICAgIGlucy0+c2V0TGhzKHVzZUludDY0UmVnaXN0ZXJBdFN0YXJ0KGxocykpOwot KyAgICBpbnMtPnNldFJocyh1c2VSZWdpc3Rlck9yQ29uc3RhbnRBdFN0YXJ0KHJocykpOwotKyAg fSBlbHNlIHsKLSsgICAgaW5zLT5zZXRJbnB1dCh1c2VJbnQ2NFJlZ2lzdGVyQXRTdGFydChsaHMp KTsKLSsgICAgaW5zLT5zZXRDb3VudCh1c2VSZWdpc3Rlck9yQ29uc3RhbnRBdFN0YXJ0KHJocykp OwotKyAgfQotKyAgZGVmaW5lSW50NjQoaW5zLCBtaXIpOwotK30KLSsKLSt0ZW1wbGF0ZSB2b2lk IExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvclNoaWZ0SW50NjQoTFNoaWZ0STY0KiBpbnMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZp bml0aW9uKiBtaXIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiByaHMpOwotK3RlbXBsYXRlIHZv aWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yU2hpZnRJbnQ2NChMUm90YXRlSTY0KiBpbnMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1E ZWZpbml0aW9uKiBtaXIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiByaHMpOwotKwotK3ZvaWQg TElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yQUxVKExJbnN0cnVjdGlvbkhlbHBlcjwxLCAxLCAw PiogaW5zLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9u KiBtaXIsIE1EZWZpbml0aW9uKiBpbnB1dCkgewotKyAgaW5zLT5zZXRPcGVyYW5kKDAsIHVzZVJl Z2lzdGVyQXRTdGFydChpbnB1dCkpOwotKyAgZGVmaW5lKGlucywgbWlyKTsKLSt9Ci0rCi0rdm9p ZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJGb3JBTFUoTEluc3RydWN0aW9uSGVscGVyPDEsIDIs IDA+KiBpbnMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRp b24qIG1pciwgTURlZmluaXRpb24qIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNRGVmaW5pdGlvbiogcmhzKSB7Ci0rICBpbnMtPnNldE9wZXJhbmQoMCwgdXNlUmVn aXN0ZXJBdFN0YXJ0KGxocykpOwotKyAgaW5zLT5zZXRPcGVyYW5kKDEsIHVzZVJlZ2lzdGVyT3JD b25zdGFudEF0U3RhcnQocmhzKSk7Ci0rICBkZWZpbmUoaW5zLCBtaXIpOwotK30KLSsKLSt2b2lk IExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvckFMVUludDY0KAotKyAgICBMSW5zdHJ1Y3Rpb25I ZWxwZXI8SU5UNjRfUElFQ0VTLCBJTlQ2NF9QSUVDRVMsIDA+KiBpbnMsIE1EZWZpbml0aW9uKiBt aXIsCi0rICAgIE1EZWZpbml0aW9uKiBpbnB1dCkgewotKyAgaW5zLT5zZXRJbnQ2NE9wZXJhbmQo MCwgdXNlSW50NjRSZWdpc3RlckF0U3RhcnQoaW5wdXQpKTsKLSsgIGRlZmluZUludDY0KGlucywg bWlyKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJGb3JBTFVJbnQ2NCgK LSsgICAgTEluc3RydWN0aW9uSGVscGVyPElOVDY0X1BJRUNFUywgMiAqIElOVDY0X1BJRUNFUywg MD4qIGlucywKLSsgICAgTURlZmluaXRpb24qIG1pciwgTURlZmluaXRpb24qIGxocywgTURlZmlu aXRpb24qIHJocykgewotKyAgaW5zLT5zZXRJbnQ2NE9wZXJhbmQoMCwgdXNlSW50NjRSZWdpc3Rl ckF0U3RhcnQobGhzKSk7Ci0rICBpbnMtPnNldEludDY0T3BlcmFuZChJTlQ2NF9QSUVDRVMsIHVz ZUludDY0UmVnaXN0ZXJPckNvbnN0YW50QXRTdGFydChyaHMpKTsKLSsgIGRlZmluZUludDY0KGlu cywgbWlyKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJGb3JNdWxJbnQ2 NChMTXVsSTY0KiBpbnMsIE1NdWwqIG1pciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0aW9uKiByaHMpIHsKLSsgIGxv d2VyRm9yQUxVSW50NjQoaW5zLCBtaXIsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5l cmF0b3JQUEM2NDo6bG93ZXJGb3JGUFUoTEluc3RydWN0aW9uSGVscGVyPDEsIDEsIDA+KiBpbnMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIG1pciwg TURlZmluaXRpb24qIGlucHV0KSB7Ci0rICBpbnMtPnNldE9wZXJhbmQoMCwgdXNlUmVnaXN0ZXJB dFN0YXJ0KGlucHV0KSk7Ci0rICBkZWZpbmUoaW5zLCBtaXIpOwotK30KLSsKLSt2b2lkIExJUkdl bmVyYXRvclBQQzY0Ojpsb3dlckZvckZQVShMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMiwgMD4qIGlu cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogbWly LCBNRGVmaW5pdGlvbiogbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1EZWZpbml0aW9uKiByaHMpIHsKLSsgIGlucy0+c2V0T3BlcmFuZCgwLCB1c2VSZWdpc3RlckF0 U3RhcnQobGhzKSk7Ci0rICBpbnMtPnNldE9wZXJhbmQoMSwgdXNlUmVnaXN0ZXJBdFN0YXJ0KHJo cykpOwotKyAgZGVmaW5lKGlucywgbWlyKTsKLSt9Ci0rCi0rTEJveEFsbG9jYXRpb24gTElSR2Vu ZXJhdG9yUFBDNjQ6OnVzZUJveEZpeGVkKE1EZWZpbml0aW9uKiBtaXIsIFJlZ2lzdGVyIHJlZzEs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IHJlZzIsIGJvb2wgdXNlQXRTdGFydCkgewotKyAgTU9aX0FTU0VSVChtaXItPnR5cGUoKSA9PSBN SVJUeXBlOjpWYWx1ZSk7Ci0rCi0rICBlbnN1cmVEZWZpbmVkKG1pcik7Ci0rICByZXR1cm4gTEJv eEFsbG9jYXRpb24oTFVzZShyZWcxLCBtaXItPnZpcnR1YWxSZWdpc3RlcigpLCB1c2VBdFN0YXJ0 KSk7Ci0rfQotKwotK0xBbGxvY2F0aW9uIExJUkdlbmVyYXRvclBQQzY0Ojp1c2VCeXRlT3BSZWdp c3RlcihNRGVmaW5pdGlvbiogbWlyKSB7Ci0rICByZXR1cm4gdXNlUmVnaXN0ZXIobWlyKTsKLSt9 Ci0rCi0rTEFsbG9jYXRpb24gTElSR2VuZXJhdG9yUFBDNjQ6OnVzZUJ5dGVPcFJlZ2lzdGVyQXRT dGFydChNRGVmaW5pdGlvbiogbWlyKSB7Ci0rICByZXR1cm4gdXNlUmVnaXN0ZXJBdFN0YXJ0KG1p cik7Ci0rfQotKwotK0xBbGxvY2F0aW9uIExJUkdlbmVyYXRvclBQQzY0Ojp1c2VCeXRlT3BSZWdp c3Rlck9yTm9uRG91YmxlQ29uc3RhbnQoCi0rICAgIE1EZWZpbml0aW9uKiBtaXIpIHsKLSsgIHJl dHVybiB1c2VSZWdpc3Rlck9yTm9uRG91YmxlQ29uc3RhbnQobWlyKTsKLSt9Ci0rCi0rTERlZmlu aXRpb24gTElSR2VuZXJhdG9yUFBDNjQ6OnRlbXBCeXRlT3BSZWdpc3RlcigpIHsgcmV0dXJuIHRl bXAoKTsgfQotKwotK0xEZWZpbml0aW9uIExJUkdlbmVyYXRvclBQQzY0Ojp0ZW1wVG9VbmJveCgp IHsgcmV0dXJuIHRlbXAoKTsgfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyVW50 eXBlZFBoaUlucHV0KE1QaGkqIHBoaSwgdWludDMyX3QgaW5wdXRQb3NpdGlvbiwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmxvY2sqIGJsb2NrLCBzaXpl X3QgbGlySW5kZXgpIHsKLSsgIGxvd2VyVHlwZWRQaGlJbnB1dChwaGksIGlucHV0UG9zaXRpb24s IGJsb2NrLCBsaXJJbmRleCk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2Vy SW50NjRQaGlJbnB1dChNUGhpKiBwaGksIHVpbnQzMl90IGlucHV0UG9zaXRpb24sCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCbG9jayogYmxvY2ssIHNpemVf dCBsaXJJbmRleCkgewotKyAgbG93ZXJUeXBlZFBoaUlucHV0KHBoaSwgaW5wdXRQb3NpdGlvbiwg YmxvY2ssIGxpckluZGV4KTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6ZGVmaW5l SW50NjRQaGkoTVBoaSogcGhpLCBzaXplX3QgbGlySW5kZXgpIHsKLSsgIGRlZmluZVR5cGVkUGhp KHBoaSwgbGlySW5kZXgpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlck11 bEkoTU11bCogbXVsLCBNRGVmaW5pdGlvbiogbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBNRGVmaW5pdGlvbiogcmhzKSB7Ci0rICBMTXVsSSogbGlyID0gbmV3IChhbGxv YygpKSBMTXVsSTsKLSsgIGlmIChtdWwtPmZhbGxpYmxlKCkpIHsKLSsgICAgYXNzaWduU25hcHNo b3QobGlyLCBtdWwtPmJhaWxvdXRLaW5kKCkpOwotKyAgfQotKyAgaWYgKG11bC0+Y2FuQmVOZWdh dGl2ZVplcm8oKSAmJiAhcmhzLT5pc0NvbnN0YW50KCkpIHsKLSsgICAgbGlyLT5zZXRPcGVyYW5k KDAsIHVzZVJlZ2lzdGVyKGxocykpOwotKyAgICBsaXItPnNldE9wZXJhbmQoMSwgdXNlUmVnaXN0 ZXIocmhzKSk7Ci0rICAgIGRlZmluZShsaXIsIG11bCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsg IGxvd2VyRm9yQUxVKGxpciwgbXVsLCBsaHMsIHJocyk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJh dG9yUFBDNjQ6Omxvd2VyRGl2SShNRGl2KiBkaXYpIHsKLSsgIGlmIChkaXYtPnJocygpLT5pc0Nv bnN0YW50KCkpIHsKLSsgICAgaW50MzJfdCByaHMgPSBkaXYtPnJocygpLT50b0NvbnN0YW50KCkt PnRvSW50MzIoKTsKLSsgICAgaW50MzJfdCBzaGlmdCA9IEZsb29yTG9nMih1aW50MzJfdChyaHMp KTsKLSsgICAgaWYgKHJocyA+IDAgJiYgMSA8PCBzaGlmdCA9PSByaHMpIHsKLSsgICAgICBMRGl2 UG93VHdvSSogbGlyID0KLSsgICAgICAgICAgbmV3IChhbGxvYygpKSBMRGl2UG93VHdvSSh1c2VS ZWdpc3RlcihkaXYtPmxocygpKSwgc2hpZnQpOwotKyAgICAgIGlmIChkaXYtPmZhbGxpYmxlKCkp IHsKLSsgICAgICAgIGFzc2lnblNuYXBzaG90KGxpciwgZGl2LT5iYWlsb3V0S2luZCgpKTsKLSsg ICAgICB9Ci0rICAgICAgZGVmaW5lKGxpciwgZGl2KTsKLSsgICAgICByZXR1cm47Ci0rICAgIH0K LSsgIH0KLSsgIExEaXZJKiBsaXIgPSBuZXcgKGFsbG9jKCkpCi0rICAgICAgTERpdkkodXNlUmVn aXN0ZXIoZGl2LT5saHMoKSksIHVzZVJlZ2lzdGVyKGRpdi0+cmhzKCkpLCB0ZW1wKCkpOwotKyAg aWYgKGRpdi0+ZmFsbGlibGUoKSkgewotKyAgICBhc3NpZ25TbmFwc2hvdChsaXIsIGRpdi0+YmFp bG91dEtpbmQoKSk7Ci0rICB9Ci0rICBkZWZpbmUobGlyLCBkaXYpOwotK30KLSsKLSt2b2lkIExJ UkdlbmVyYXRvclBQQzY0Ojpsb3dlckRpdkk2NChNRGl2KiBkaXYpIHsKLSsgIGF1dG8qIGxpciA9 IG5ldyAoYWxsb2MoKSkKLSsgICAgICBMRGl2T3JNb2RJNjQodXNlUmVnaXN0ZXIoZGl2LT5saHMo KSksIHVzZVJlZ2lzdGVyKGRpdi0+cmhzKCkpKTsKLSsgIGRlZmluZUludDY0KGxpciwgZGl2KTsK LSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJNb2RJKE1Nb2QqIG1vZCkgewot KyAgaWYgKG1vZC0+cmhzKCktPmlzQ29uc3RhbnQoKSkgewotKyAgICBpbnQzMl90IHJocyA9IG1v ZC0+cmhzKCktPnRvQ29uc3RhbnQoKS0+dG9JbnQzMigpOwotKyAgICBpbnQzMl90IHNoaWZ0ID0g Rmxvb3JMb2cyKHVpbnQzMl90KHJocykpOwotKyAgICBpZiAocmhzID4gMCAmJiAxIDw8IHNoaWZ0 ID09IHJocykgewotKyAgICAgIExNb2RQb3dUd29JKiBsaXIgPQotKyAgICAgICAgICBuZXcgKGFs bG9jKCkpIExNb2RQb3dUd29JKHVzZVJlZ2lzdGVyKG1vZC0+bGhzKCkpLCBzaGlmdCk7Ci0rICAg ICAgaWYgKG1vZC0+ZmFsbGlibGUoKSkgewotKyAgICAgICAgYXNzaWduU25hcHNob3QobGlyLCBt b2QtPmJhaWxvdXRLaW5kKCkpOwotKyAgICAgIH0KLSsgICAgICBkZWZpbmUobGlyLCBtb2QpOwot KyAgICAgIHJldHVybjsKLSsgICAgfSBlbHNlIGlmIChzaGlmdCA8IDMxICYmICgxIDw8IChzaGlm dCArIDEpKSAtIDEgPT0gcmhzKSB7Ci0rICAgICAgTE1vZE1hc2tJKiBsaXIgPSBuZXcgKGFsbG9j KCkpCi0rICAgICAgICAgIExNb2RNYXNrSSh1c2VSZWdpc3Rlcihtb2QtPmxocygpKSwgdGVtcCgp LCB0ZW1wKCksIHNoaWZ0ICsgMSk7Ci0rICAgICAgaWYgKG1vZC0+ZmFsbGlibGUoKSkgewotKyAg ICAgICAgYXNzaWduU25hcHNob3QobGlyLCBtb2QtPmJhaWxvdXRLaW5kKCkpOwotKyAgICAgIH0K LSsgICAgICBkZWZpbmUobGlyLCBtb2QpOwotKyAgICAgIHJldHVybjsKLSsgICAgfQotKyAgfQot KyAgYXV0byogbGlyID0KLSsgICAgICBuZXcgKGFsbG9jKCkpIExNb2RJKHVzZVJlZ2lzdGVyKG1v ZC0+bGhzKCkpLCB1c2VSZWdpc3Rlcihtb2QtPnJocygpKSk7Ci0rICBpZiAobW9kLT5mYWxsaWJs ZSgpKSB7Ci0rICAgIGFzc2lnblNuYXBzaG90KGxpciwgbW9kLT5iYWlsb3V0S2luZCgpKTsKLSsg IH0KLSsgIGRlZmluZShsaXIsIG1vZCk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6 Omxvd2VyTW9kSTY0KE1Nb2QqIG1vZCkgewotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQot KyAgICAgIExEaXZPck1vZEk2NCh1c2VSZWdpc3Rlcihtb2QtPmxocygpKSwgdXNlUmVnaXN0ZXIo bW9kLT5yaHMoKSkpOwotKyAgZGVmaW5lSW50NjQobGlyLCBtb2QpOwotK30KLSsKLSt2b2lkIExJ UkdlbmVyYXRvclBQQzY0Ojpsb3dlclVEaXYoTURpdiogZGl2KSB7Ci0rICBNRGVmaW5pdGlvbiog bGhzID0gZGl2LT5nZXRPcGVyYW5kKDApOwotKyAgTURlZmluaXRpb24qIHJocyA9IGRpdi0+Z2V0 T3BlcmFuZCgxKTsKLSsgIExVRGl2T3JNb2QqIGxpciA9IG5ldyAoYWxsb2MoKSkgTFVEaXZPck1v ZDsKLSsgIC8vIHVzZVJlZ2lzdGVyQXRTdGFydDogQ29kZUdlbmVyYXRvci1wcGM2NCdzIHZpc2l0 VURpdk9yTW9kIHplcm8tZXh0ZW5kcwotKyAgLy8gbGhzL3JocyBpbnRvIHRoZWlyIG93biBzbG90 cyBpbiBwbGFjZSBiZWZvcmUgdGhlIDMyLWJpdCBkaXZ3dSwgc28gdGhlCi0rICAvLyBpbnB1dHMg bXVzdCBub3QgYmUgcmVxdWlyZWQgbGl2ZSBhZnRlciB0aGUgTElSIG9wIGJlZ2lucy4KLSsgIGxp ci0+c2V0T3BlcmFuZCgwLCB1c2VSZWdpc3RlckF0U3RhcnQobGhzKSk7Ci0rICBsaXItPnNldE9w ZXJhbmQoMSwgdXNlUmVnaXN0ZXJBdFN0YXJ0KHJocykpOwotKyAgaWYgKGRpdi0+ZmFsbGlibGUo KSkgewotKyAgICBhc3NpZ25TbmFwc2hvdChsaXIsIGRpdi0+YmFpbG91dEtpbmQoKSk7Ci0rICB9 Ci0rICBkZWZpbmUobGlyLCBkaXYpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojps b3dlclVEaXZJNjQoTURpdiogZGl2KSB7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCi0r ICAgICAgTFVEaXZPck1vZEk2NCh1c2VSZWdpc3RlcihkaXYtPmxocygpKSwgdXNlUmVnaXN0ZXIo ZGl2LT5yaHMoKSkpOwotKyAgZGVmaW5lSW50NjQobGlyLCBkaXYpOwotK30KLSsKLSt2b2lkIExJ UkdlbmVyYXRvclBQQzY0Ojpsb3dlclVNb2QoTU1vZCogbW9kKSB7Ci0rICBNRGVmaW5pdGlvbiog bGhzID0gbW9kLT5nZXRPcGVyYW5kKDApOwotKyAgTURlZmluaXRpb24qIHJocyA9IG1vZC0+Z2V0 T3BlcmFuZCgxKTsKLSsgIExVRGl2T3JNb2QqIGxpciA9IG5ldyAoYWxsb2MoKSkgTFVEaXZPck1v ZDsKLSsgIC8vIFNlZSBsb3dlclVEaXYgYWJvdmUgZm9yIHdoeSB1c2VSZWdpc3RlckF0U3RhcnQg aXMgcmVxdWlyZWQgaGVyZS4KLSsgIGxpci0+c2V0T3BlcmFuZCgwLCB1c2VSZWdpc3RlckF0U3Rh cnQobGhzKSk7Ci0rICBsaXItPnNldE9wZXJhbmQoMSwgdXNlUmVnaXN0ZXJBdFN0YXJ0KHJocykp OwotKyAgaWYgKG1vZC0+ZmFsbGlibGUoKSkgewotKyAgICBhc3NpZ25TbmFwc2hvdChsaXIsIG1v ZC0+YmFpbG91dEtpbmQoKSk7Ci0rICB9Ci0rICBkZWZpbmUobGlyLCBtb2QpOwotK30KLSsKLSt2 b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclVNb2RJNjQoTU1vZCogbW9kKSB7Ci0rICBhdXRv KiBsaXIgPSBuZXcgKGFsbG9jKCkpCi0rICAgICAgTFVEaXZPck1vZEk2NCh1c2VSZWdpc3Rlciht b2QtPmxocygpKSwgdXNlUmVnaXN0ZXIobW9kLT5yaHMoKSkpOwotKyAgZGVmaW5lSW50NjQobGly LCBtb2QpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclVyc2hEKE1VcnNo KiBtaXIpIHsKLSsgIE1EZWZpbml0aW9uKiBsaHMgPSBtaXItPmxocygpOwotKyAgTURlZmluaXRp b24qIHJocyA9IG1pci0+cmhzKCk7Ci0rICBNT1pfQVNTRVJUKGxocy0+dHlwZSgpID09IE1JUlR5 cGU6OkludDMyKTsKLSsgIE1PWl9BU1NFUlQocmhzLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIp OwotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMVXJzaEQodXNlUmVnaXN0ZXJBdFN0YXJ0 KGxocyksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZWdpc3Rlck9y Q29uc3RhbnRBdFN0YXJ0KHJocyksIHRlbXAoKSk7Ci0rICBkZWZpbmUobGlyLCBtaXIpOwotK30K LSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclBvd09mVHdvSShNUG93KiBtaXIpIHsK LSsgIGludDMyX3QgYmFzZSA9IG1pci0+aW5wdXQoKS0+dG9Db25zdGFudCgpLT50b0ludDMyKCk7 Ci0rICBNRGVmaW5pdGlvbiogcG93ZXIgPSBtaXItPnBvd2VyKCk7Ci0rICBhdXRvKiBsaXIgPSBu ZXcgKGFsbG9jKCkpIExQb3dPZlR3b0kodXNlUmVnaXN0ZXIocG93ZXIpLCBiYXNlKTsKLSsgIGFz c2lnblNuYXBzaG90KGxpciwgbWlyLT5iYWlsb3V0S2luZCgpKTsKLSsgIGRlZmluZShsaXIsIG1p cik7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyQmlnSW50UHRyRGl2KE1C aWdJbnRQdHJEaXYqIGlucykgewotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQotKyAgICAg IExCaWdJbnRQdHJEaXYodXNlUmVnaXN0ZXIoaW5zLT5saHMoKSksIHVzZVJlZ2lzdGVyKGlucy0+ cmhzKCkpLAotKyAgICAgICAgICAgICAgICAgICAgTERlZmluaXRpb246OkJvZ3VzVGVtcCgpLCBM RGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCkpOwotKyAgYXNzaWduU25hcHNob3QobGlyLCBpbnMtPmJh aWxvdXRLaW5kKCkpOwotKyAgZGVmaW5lKGxpciwgaW5zKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5l cmF0b3JQUEM2NDo6bG93ZXJCaWdJbnRQdHJNb2QoTUJpZ0ludFB0ck1vZCogaW5zKSB7Ci0rICBh dXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCi0rICAgICAgTEJpZ0ludFB0ck1vZCh1c2VSZWdpc3Rl cihpbnMtPmxocygpKSwgdXNlUmVnaXN0ZXIoaW5zLT5yaHMoKSksIHRlbXAoKSwKLSsgICAgICAg ICAgICAgICAgICAgIExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKSk7Ci0rICBpZiAoaW5zLT5jYW5C ZURpdmlkZUJ5WmVybygpKSB7Ci0rICAgIGFzc2lnblNuYXBzaG90KGxpciwgaW5zLT5iYWlsb3V0 S2luZCgpKTsKLSsgIH0KLSsgIGRlZmluZShsaXIsIGlucyk7Ci0rfQotKwotK3ZvaWQgTElSR2Vu ZXJhdG9yUFBDNjQ6Omxvd2VyQmlnSW50UHRyTHNoKE1CaWdJbnRQdHJMc2gqIGlucykgewotKyAg YXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMQmlnSW50UHRyTHNoKAotKyAgICAgIHVzZVJlZ2lz dGVyKGlucy0+bGhzKCkpLCB1c2VSZWdpc3RlcihpbnMtPnJocygpKSwgdGVtcCgpLCB0ZW1wKCkp OwotKyAgYXNzaWduU25hcHNob3QobGlyLCBpbnMtPmJhaWxvdXRLaW5kKCkpOwotKyAgZGVmaW5l KGxpciwgaW5zKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJCaWdJbnRQ dHJSc2goTUJpZ0ludFB0clJzaCogaW5zKSB7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkp IExCaWdJbnRQdHJSc2goCi0rICAgICAgdXNlUmVnaXN0ZXIoaW5zLT5saHMoKSksIHVzZVJlZ2lz dGVyKGlucy0+cmhzKCkpLCB0ZW1wKCksIHRlbXAoKSk7Ci0rICBhc3NpZ25TbmFwc2hvdChsaXIs IGlucy0+YmFpbG91dEtpbmQoKSk7Ci0rICBkZWZpbmUobGlyLCBpbnMpOwotK30KLSsKLSt2b2lk IExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclRydW5jYXRlRFRvSW50MzIoTVRydW5jYXRlVG9JbnQz MiogaW5zKSB7Ci0rICBNRGVmaW5pdGlvbiogb3BkID0gaW5zLT5pbnB1dCgpOwotKyAgTU9aX0FT U0VSVChvcGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3VibGUpOwotKyAgZGVmaW5lKG5ldyAoYWxs b2MoKSkgTFRydW5jYXRlRFRvSW50MzIodXNlUmVnaXN0ZXIob3BkKSwgdGVtcERvdWJsZSgpKSwg aW5zKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJUcnVuY2F0ZUZUb0lu dDMyKE1UcnVuY2F0ZVRvSW50MzIqIGlucykgewotKyAgTURlZmluaXRpb24qIG9wZCA9IGlucy0+ aW5wdXQoKTsKLSsgIE1PWl9BU1NFUlQob3BkLT50eXBlKCkgPT0gTUlSVHlwZTo6RmxvYXQzMik7 Ci0rICBkZWZpbmUobmV3IChhbGxvYygpKSBMVHJ1bmNhdGVGVG9JbnQzMih1c2VSZWdpc3Rlcihv cGQpLCB0ZW1wRmxvYXQzMigpKSwgaW5zKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2 NDo6bG93ZXJCdWlsdGluSW50NjRUb0Zsb2F0aW5nUG9pbnQoCi0rICAgIE1CdWlsdGluSW50NjRU b0Zsb2F0aW5nUG9pbnQqIGlucykgewotKyAgTU9aX0NSQVNIKCJXZSBkb24ndCB1c2UgaXQgZm9y IHRoaXMgYXJjaGl0ZWN0dXJlIik7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxv d2VyV2FzbVNlbGVjdEkoTVdhc21TZWxlY3QqIHNlbGVjdCkgewotKyAgYXV0byogbGlyID0gbmV3 IChhbGxvYygpKQotKyAgICAgIExXYXNtU2VsZWN0KHVzZVJlZ2lzdGVyQXRTdGFydChzZWxlY3Qt PnRydWVFeHByKCkpLAotKyAgICAgICAgICAgICAgICAgIHVzZUFueShzZWxlY3QtPmZhbHNlRXhw cigpKSwgdXNlUmVnaXN0ZXIoc2VsZWN0LT5jb25kRXhwcigpKSk7Ci0rICBkZWZpbmVSZXVzZUlu cHV0KGxpciwgc2VsZWN0LCBMV2FzbVNlbGVjdDo6VHJ1ZUV4cHJJbmRleCk7Ci0rfQotKwotK3Zv aWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyV2FzbVNlbGVjdEk2NChNV2FzbVNlbGVjdCogc2Vs ZWN0KSB7Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExXYXNtU2VsZWN0STY0KAotKyAg ICAgIHVzZUludDY0UmVnaXN0ZXJBdFN0YXJ0KHNlbGVjdC0+dHJ1ZUV4cHIoKSksCi0rICAgICAg dXNlSW50NjQoc2VsZWN0LT5mYWxzZUV4cHIoKSksIHVzZVJlZ2lzdGVyKHNlbGVjdC0+Y29uZEV4 cHIoKSkpOwotKyAgZGVmaW5lSW50NjRSZXVzZUlucHV0KGxpciwgc2VsZWN0LCBMV2FzbVNlbGVj dEk2NDo6VHJ1ZUV4cHJJbmRleCk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxv d2VyV2FzbUJ1aWx0aW5UcnVuY2F0ZVRvSW50MzIoCi0rICAgIE1XYXNtQnVpbHRpblRydW5jYXRl VG9JbnQzMiogaW5zKSB7Ci0rICBNRGVmaW5pdGlvbiogb3BkID0gaW5zLT5pbnB1dCgpOwotKyAg TU9aX0FTU0VSVChvcGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3VibGUgfHwgb3BkLT50eXBlKCkg PT0gTUlSVHlwZTo6RmxvYXQzMik7Ci0rCi0rICBpZiAob3BkLT50eXBlKCkgPT0gTUlSVHlwZTo6 RG91YmxlKSB7Ci0rICAgIGRlZmluZShuZXcgKGFsbG9jKCkpIExXYXNtQnVpbHRpblRydW5jYXRl RFRvSW50MzIoCi0rICAgICAgICAgICAgICAgdXNlUmVnaXN0ZXIob3BkKSwgdXNlRml4ZWQoaW5z LT5pbnN0YW5jZSgpLCBJbnN0YW5jZVJlZyksCi0rICAgICAgICAgICAgICAgTERlZmluaXRpb246 OkJvZ3VzVGVtcCgpKSwKLSsgICAgICAgICAgIGlucyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsK LSsgIGRlZmluZShuZXcgKGFsbG9jKCkpIExXYXNtQnVpbHRpblRydW5jYXRlRlRvSW50MzIoCi0r ICAgICAgICAgICAgIHVzZVJlZ2lzdGVyKG9wZCksIHVzZUZpeGVkKGlucy0+aW5zdGFuY2UoKSwg SW5zdGFuY2VSZWcpLAotKyAgICAgICAgICAgICBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCkpLAot KyAgICAgICAgIGlucyk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyV2Fz bUJ1aWx0aW5UcnVuY2F0ZVRvSW50NjQoCi0rICAgIE1XYXNtQnVpbHRpblRydW5jYXRlVG9JbnQ2 NCogaW5zKSB7Ci0rICBNT1pfQ1JBU0goIldlIGRvbid0IHVzZSBpdCBmb3IgdGhpcyBhcmNoaXRl Y3R1cmUiKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJXYXNtQnVpbHRp bkRpdkk2NChNV2FzbUJ1aWx0aW5EaXZJNjQqIGRpdikgewotKyAgTU9aX0NSQVNIKCJXZSBkb24n dCB1c2UgcnVudGltZSBkaXYgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlIik7Ci0rfQotKwotK3ZvaWQg TElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyV2FzbUJ1aWx0aW5Nb2RJNjQoTVdhc21CdWlsdGluTW9k STY0KiBtb2QpIHsKLSsgIE1PWl9DUkFTSCgiV2UgZG9uJ3QgdXNlIHJ1bnRpbWUgbW9kIGZvciB0 aGlzIGFyY2hpdGVjdHVyZSIpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dl ckF0b21pY0xvYWQ2NChNTG9hZFVuYm94ZWRTY2FsYXIqIGlucykgewotKyAgY29uc3QgTFVzZSBl bGVtZW50cyA9IHVzZVJlZ2lzdGVyKGlucy0+ZWxlbWVudHMoKSk7Ci0rICBjb25zdCBMQWxsb2Nh dGlvbiBpbmRleCA9Ci0rICAgICAgdXNlUmVnaXN0ZXJPckluZGV4Q29uc3RhbnQoaW5zLT5pbmRl eCgpLCBpbnMtPnN0b3JhZ2VUeXBlKCkpOwotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBM QXRvbWljTG9hZDY0KGVsZW1lbnRzLCBpbmRleCk7Ci0rICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7 Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyQXRvbWljU3RvcmU2NChNU3Rv cmVVbmJveGVkU2NhbGFyKiBpbnMpIHsKLSsgIExVc2UgZWxlbWVudHMgPSB1c2VSZWdpc3Rlcihp bnMtPmVsZW1lbnRzKCkpOwotKyAgTEFsbG9jYXRpb24gaW5kZXggPQotKyAgICAgIHVzZVJlZ2lz dGVyT3JJbmRleENvbnN0YW50KGlucy0+aW5kZXgoKSwgaW5zLT53cml0ZVR5cGUoKSk7Ci0rICBM SW50NjRBbGxvY2F0aW9uIHZhbHVlID0gdXNlSW50NjRSZWdpc3RlcihpbnMtPnZhbHVlKCkpOwot KyAgYWRkKG5ldyAoYWxsb2MoKSkgTEF0b21pY1N0b3JlNjQoZWxlbWVudHMsIGluZGV4LCB2YWx1 ZSksIGlucyk7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIExJUkdlbmVyYXRvcjo6dmlzaXQqIGlt cGxlbWVudGF0aW9ucwotKwotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdEJveChNQm94KiBib3gp IHsKLSsgIE1EZWZpbml0aW9uKiBvcGQgPSBib3gtPmdldE9wZXJhbmQoMCk7Ci0rCi0rICBpZiAo b3BkLT5pc0NvbnN0YW50KCkgJiYgYm94LT5jYW5FbWl0QXRVc2VzKCkpIHsKLSsgICAgZW1pdEF0 VXNlcyhib3gpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBpZiAob3BkLT5pc0NvbnN0YW50 KCkpIHsKLSsgICAgZGVmaW5lKG5ldyAoYWxsb2MoKSkgTFZhbHVlKG9wZC0+dG9Db25zdGFudCgp LT50b0pTVmFsdWUoKSksIGJveCwKLSsgICAgICAgICAgIExEZWZpbml0aW9uKExEZWZpbml0aW9u OjpCT1gpKTsKLSsgIH0gZWxzZSB7Ci0rICAgIExCb3gqIGlucyA9IG5ldyAoYWxsb2MoKSkgTEJv eCh1c2VSZWdpc3RlckF0U3RhcnQob3BkKSwgb3BkLT50eXBlKCkpOwotKyAgICBkZWZpbmUoaW5z LCBib3gsIExEZWZpbml0aW9uKExEZWZpbml0aW9uOjpCT1gpKTsKLSsgIH0KLSt9Ci0rCi0rdm9p ZCBMSVJHZW5lcmF0b3I6OnZpc2l0VW5ib3goTVVuYm94KiB1bmJveCkgewotKyAgTURlZmluaXRp b24qIGJveCA9IHVuYm94LT5nZXRPcGVyYW5kKDApOwotKyAgTU9aX0FTU0VSVChib3gtPnR5cGUo KSA9PSBNSVJUeXBlOjpWYWx1ZSk7Ci0rCi0rICBMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgQk9YX1BJ RUNFUywgMD4qIGxpcjsKLSsgIGlmIChJc0Zsb2F0aW5nUG9pbnRUeXBlKHVuYm94LT50eXBlKCkp KSB7Ci0rICAgIE1PWl9BU1NFUlQodW5ib3gtPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3VibGUpOwot KyAgICBsaXIgPSBuZXcgKGFsbG9jKCkpIExVbmJveEZsb2F0aW5nUG9pbnQodXNlQm94QXRTdGFy dChib3gpKTsKLSsgIH0gZWxzZSBpZiAodW5ib3gtPmZhbGxpYmxlKCkpIHsKLSsgICAgbGlyID0g bmV3IChhbGxvYygpKSBMVW5ib3godXNlUmVnaXN0ZXJBdFN0YXJ0KGJveCkpOwotKyAgfSBlbHNl IHsKLSsgICAgbGlyID0gbmV3IChhbGxvYygpKSBMVW5ib3godXNlQXRTdGFydChib3gpKTsKLSsg IH0KLSsKLSsgIGlmICh1bmJveC0+ZmFsbGlibGUoKSkgewotKyAgICBhc3NpZ25TbmFwc2hvdChs aXIsIHVuYm94LT5iYWlsb3V0S2luZCgpKTsKLSsgIH0KLSsKLSsgIGRlZmluZShsaXIsIHVuYm94 KTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0Q29weVNpZ24oTUNvcHlTaWduKiBp bnMpIHsKLSsgIE1EZWZpbml0aW9uKiBsaHMgPSBpbnMtPmxocygpOwotKyAgTURlZmluaXRpb24q IHJocyA9IGlucy0+cmhzKCk7Ci0rCi0rICBNT1pfQVNTRVJUKElzRmxvYXRpbmdQb2ludFR5cGUo bGhzLT50eXBlKCkpKTsKLSsgIE1PWl9BU1NFUlQobGhzLT50eXBlKCkgPT0gcmhzLT50eXBlKCkp OwotKyAgTU9aX0FTU0VSVChsaHMtPnR5cGUoKSA9PSBpbnMtPnR5cGUoKSk7Ci0rCi0rICBMSW5z dHJ1Y3Rpb25IZWxwZXI8MSwgMiwgMD4qIGxpcjsKLSsgIGlmIChsaHMtPnR5cGUoKSA9PSBNSVJU eXBlOjpEb3VibGUpIHsKLSsgICAgbGlyID0gbmV3IChhbGxvYygpKSBMQ29weVNpZ25EKCk7Ci0r ICB9IGVsc2UgewotKyAgICBsaXIgPSBuZXcgKGFsbG9jKCkpIExDb3B5U2lnbkYoKTsKLSsgIH0K LSsKLSsgIGxvd2VyRm9yRlBVKGxpciwgaW5zLCBsaHMsIHJocyk7Ci0rfQotKwotK3ZvaWQgTElS R2VuZXJhdG9yOjp2aXNpdEV4dGVuZEludDMyVG9JbnQ2NChNRXh0ZW5kSW50MzJUb0ludDY0KiBp bnMpIHsKLSsgIGRlZmluZUludDY0KAotKyAgICAgIG5ldyAoYWxsb2MoKSkgTEV4dGVuZEludDMy VG9JbnQ2NCh1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSksIGlucyk7Ci0rfQotKwot K3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFNpZ25FeHRlbmRJbnQ2NChNU2lnbkV4dGVuZEludDY0 KiBpbnMpIHsKLSsgIGRlZmluZUludDY0KG5ldyAoYWxsb2MoKSkKLSsgICAgICAgICAgICAgICAg ICBMU2lnbkV4dGVuZEludDY0KHVzZUludDY0UmVnaXN0ZXJBdFN0YXJ0KGlucy0+aW5wdXQoKSkp LAotKyAgICAgICAgICAgICAgaW5zKTsKLSt9Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0 SW50NjRUb0Zsb2F0aW5nUG9pbnQoTUludDY0VG9GbG9hdGluZ1BvaW50KiBpbnMpIHsKLSsgIE1E ZWZpbml0aW9uKiBvcGQgPSBpbnMtPmlucHV0KCk7Ci0rICBNT1pfQVNTRVJUKG9wZC0+dHlwZSgp ID09IE1JUlR5cGU6OkludDY0KTsKLSsgIE1PWl9BU1NFUlQoSXNGbG9hdGluZ1BvaW50VHlwZShp bnMtPnR5cGUoKSkpOwotKyAgZGVmaW5lKG5ldyAoYWxsb2MoKSkgTEludDY0VG9GbG9hdGluZ1Bv aW50KHVzZUludDY0UmVnaXN0ZXIob3BkKSksIGlucyk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJh dG9yOjp2aXNpdFN1YnN0cihNU3Vic3RyKiBpbnMpIHsKLSsgIExTdWJzdHIqIGxpciA9IG5ldyAo YWxsb2MoKSkKLSsgICAgICBMU3Vic3RyKHVzZVJlZ2lzdGVyKGlucy0+c3RyaW5nKCkpLCB1c2VS ZWdpc3RlcihpbnMtPmJlZ2luKCkpLAotKyAgICAgICAgICAgICAgdXNlUmVnaXN0ZXIoaW5zLT5s ZW5ndGgoKSksIHRlbXAoKSwgdGVtcCgpLCB0ZW1wKCkpOwotKyAgZGVmaW5lKGxpciwgaW5zKTsK LSsgIGFzc2lnblNhZmVwb2ludChsaXIsIGlucyk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9y Ojp2aXNpdFJldHVybkltcGwoTURlZmluaXRpb24qIG9wZCwgYm9vbCBpc0dlbmVyYXRvcikgewot KyAgTU9aX0FTU0VSVChvcGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpWYWx1ZSk7Ci0rICBMUmV0dXJu KiBpbnMgPSBuZXcgKGFsbG9jKCkpIExSZXR1cm4oaXNHZW5lcmF0b3IpOwotKyAgaW5zLT5zZXRP cGVyYW5kKDAsIHVzZUZpeGVkKG9wZCwgSlNSZXR1cm5SZWcpKTsKLSsgIGFkZChpbnMpOwotK30K LSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRDb21wYXJlRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVu dCgKLSsgICAgTUNvbXBhcmVFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KiBpbnMpIHsKLSsgIE1P Wl9BU1NFUlQoIVNjYWxhcjo6aXNGbG9hdGluZ1R5cGUoaW5zLT5hcnJheVR5cGUoKSkpOwotKyAg TU9aX0FTU0VSVChpbnMtPmVsZW1lbnRzKCktPnR5cGUoKSA9PSBNSVJUeXBlOjpFbGVtZW50cyk7 Ci0rICBNT1pfQVNTRVJUKGlucy0+aW5kZXgoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludFB0cik7 Ci0rCi0rICBjb25zdCBMVXNlIGVsZW1lbnRzID0gdXNlUmVnaXN0ZXIoaW5zLT5lbGVtZW50cygp KTsKLSsgIGNvbnN0IExBbGxvY2F0aW9uIGluZGV4ID0KLSsgICAgICB1c2VSZWdpc3Rlck9ySW5k ZXhDb25zdGFudChpbnMtPmluZGV4KCksIGlucy0+YXJyYXlUeXBlKCkpOwotKwotKyAgaWYgKFNj YWxhcjo6aXNCaWdJbnRUeXBlKGlucy0+YXJyYXlUeXBlKCkpKSB7Ci0rICAgIExJbnQ2NEFsbG9j YXRpb24gb2xkdmFsID0gdXNlSW50NjRSZWdpc3RlcihpbnMtPm9sZHZhbCgpKTsKLSsgICAgTElu dDY0QWxsb2NhdGlvbiBuZXd2YWwgPSB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+bmV3dmFsKCkpOwot KwotKyAgICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCi0rICAgICAgICBMQ29tcGFyZUV4Y2hh bmdlVHlwZWRBcnJheUVsZW1lbnQ2NChlbGVtZW50cywgaW5kZXgsIG9sZHZhbCwgbmV3dmFsKTsK LSsgICAgZGVmaW5lSW50NjQobGlyLCBpbnMpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBj b25zdCBMQWxsb2NhdGlvbiBvbGR2YWwgPSB1c2VSZWdpc3RlcihpbnMtPm9sZHZhbCgpKTsKLSsg IGNvbnN0IExBbGxvY2F0aW9uIG5ld3ZhbCA9IHVzZVJlZ2lzdGVyKGlucy0+bmV3dmFsKCkpOwot KwotKyAgTERlZmluaXRpb24gb3V0VGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsg IExEZWZpbml0aW9uIHZhbHVlVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsgIExE ZWZpbml0aW9uIG9mZnNldFRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7Ci0rICBMRGVm aW5pdGlvbiBtYXNrVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsKLSsgIGlmIChp bnMtPmFycmF5VHlwZSgpID09IFNjYWxhcjo6VWludDMyICYmIElzRmxvYXRpbmdQb2ludFR5cGUo aW5zLT50eXBlKCkpKSB7Ci0rICAgIG91dFRlbXAgPSB0ZW1wKCk7Ci0rICB9Ci0rCi0rICBpZiAo U2NhbGFyOjpieXRlU2l6ZShpbnMtPmFycmF5VHlwZSgpKSA8IDQpIHsKLSsgICAgLy8gUFBDNjQg c3ViLXdvcmQgQ0FTIHVzZXMgbGJhcngvbGhhcnggKyBzdGJjeC4vc3RoY3guIChQT1dFUjcrKTsg b25seQotKyAgICAvLyB2YWx1ZVRlbXAgaXMgbmVlZGVkLCB0byBob2xkIHRoZSBleHRzYi9leHRz aC1jYW5vbmljYWxpc2VkIG9sZHZhbAotKyAgICAvLyBmb3IgdGhlIDMyLWJpdCBjbXB3LiBvZmZz ZXRUZW1wL21hc2tUZW1wIGFyZSB1bnVzZWQgKG5vIHJvdW5kLWRvd24KLSsgICAgLy8gKyBiaXQt aXNvbGF0ZSBkYW5jZSksIGFuZCByZW1haW4gQm9ndXNUZW1wLgotKyAgICB2YWx1ZVRlbXAgPSB0 ZW1wKCk7Ci0rICB9Ci0rCi0rICBMQ29tcGFyZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQqIGxp ciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICBMQ29tcGFyZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1l bnQoZWxlbWVudHMsIGluZGV4LCBvbGR2YWwsIG5ld3ZhbCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3V0VGVtcCwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVGVtcCk7Ci0rCi0rICBk ZWZpbmUobGlyLCBpbnMpOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRBdG9taWNF eGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KAotKyAgICBNQXRvbWljRXhjaGFuZ2VUeXBlZEFycmF5 RWxlbWVudCogaW5zKSB7Ci0rICBNT1pfQVNTRVJUKGlucy0+ZWxlbWVudHMoKS0+dHlwZSgpID09 IE1JUlR5cGU6OkVsZW1lbnRzKTsKLSsgIE1PWl9BU1NFUlQoaW5zLT5pbmRleCgpLT50eXBlKCkg PT0gTUlSVHlwZTo6SW50UHRyKTsKLSsKLSsgIGNvbnN0IExVc2UgZWxlbWVudHMgPSB1c2VSZWdp c3RlcihpbnMtPmVsZW1lbnRzKCkpOwotKyAgY29uc3QgTEFsbG9jYXRpb24gaW5kZXggPQotKyAg ICAgIHVzZVJlZ2lzdGVyT3JJbmRleENvbnN0YW50KGlucy0+aW5kZXgoKSwgaW5zLT5hcnJheVR5 cGUoKSk7Ci0rCi0rICBpZiAoU2NhbGFyOjppc0JpZ0ludFR5cGUoaW5zLT5hcnJheVR5cGUoKSkp IHsKLSsgICAgTEludDY0QWxsb2NhdGlvbiB2YWx1ZSA9IHVzZUludDY0UmVnaXN0ZXIoaW5zLT52 YWx1ZSgpKTsKLSsKLSsgICAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQotKyAgICAgICAgTEF0 b21pY0V4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQ2NChlbGVtZW50cywgaW5kZXgsIHZhbHVlKTsK LSsgICAgZGVmaW5lSW50NjQobGlyLCBpbnMpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBN T1pfQVNTRVJUKGlucy0+YXJyYXlUeXBlKCkgPD0gU2NhbGFyOjpVaW50MzIpOwotKwotKyAgY29u c3QgTEFsbG9jYXRpb24gdmFsdWUgPSB1c2VSZWdpc3RlcihpbnMtPnZhbHVlKCkpOwotKwotKyAg TERlZmluaXRpb24gb3V0VGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsgIExEZWZp bml0aW9uIHZhbHVlVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsgIExEZWZpbml0 aW9uIG9mZnNldFRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7Ci0rICBMRGVmaW5pdGlv biBtYXNrVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsKLSsgIGlmIChpbnMtPmFy cmF5VHlwZSgpID09IFNjYWxhcjo6VWludDMyKSB7Ci0rICAgIE1PWl9BU1NFUlQoaW5zLT50eXBl KCkgPT0gTUlSVHlwZTo6RG91YmxlKTsKLSsgICAgb3V0VGVtcCA9IHRlbXAoKTsKLSsgIH0KLSsK LSsgIC8vIFBQQzY0IHN1Yi13b3JkIGF0b21pYyBleGNoYW5nZSB1c2VzIGxiYXJ4L2xoYXJ4ICsg c3RiY3guL3N0aGN4LiBkaXJlY3RseQotKyAgLy8gKFBPV0VSNyspOyB2YWx1ZVRlbXAvb2Zmc2V0 VGVtcC9tYXNrVGVtcCBhcmUgbmV2ZXIgcmVhZCBieSB0aGUKLSsgIC8vIGltcGxlbWVudGF0aW9u IChzZWUgTWFjcm9Bc3NlbWJsZXItcHBjNjQuY3BwJ3MgQXRvbWljRXhjaGFuZ2UgdGVtcGxhdGUp LgotKyAgLy8gTGVhdmUgdGhlbSBhcyBCb2d1c1RlbXAuCi0rCi0rICBMQXRvbWljRXhjaGFuZ2VU eXBlZEFycmF5RWxlbWVudCogbGlyID0KLSsgICAgICBuZXcgKGFsbG9jKCkpIExBdG9taWNFeGNo YW5nZVR5cGVkQXJyYXlFbGVtZW50KAotKyAgICAgICAgICBlbGVtZW50cywgaW5kZXgsIHZhbHVl LCBvdXRUZW1wLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKLSsKLSsgIGRlZmlu ZShsaXIsIGlucyk7Ci0rfQotKwotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdEF0b21pY1R5cGVk QXJyYXlFbGVtZW50Qmlub3AoCi0rICAgIE1BdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wKiBp bnMpIHsKLSsgIE1PWl9BU1NFUlQoaW5zLT5hcnJheVR5cGUoKSAhPSBTY2FsYXI6OlVpbnQ4Q2xh bXBlZCk7Ci0rICBNT1pfQVNTRVJUKCFTY2FsYXI6OmlzRmxvYXRpbmdUeXBlKGlucy0+YXJyYXlU eXBlKCkpKTsKLSsgIE1PWl9BU1NFUlQoaW5zLT5lbGVtZW50cygpLT50eXBlKCkgPT0gTUlSVHlw ZTo6RWxlbWVudHMpOwotKyAgTU9aX0FTU0VSVChpbnMtPmluZGV4KCktPnR5cGUoKSA9PSBNSVJU eXBlOjpJbnRQdHIpOwotKwotKyAgY29uc3QgTFVzZSBlbGVtZW50cyA9IHVzZVJlZ2lzdGVyKGlu cy0+ZWxlbWVudHMoKSk7Ci0rICBjb25zdCBMQWxsb2NhdGlvbiBpbmRleCA9Ci0rICAgICAgdXNl UmVnaXN0ZXJPckluZGV4Q29uc3RhbnQoaW5zLT5pbmRleCgpLCBpbnMtPmFycmF5VHlwZSgpKTsK LSsKLSsgIGlmIChTY2FsYXI6OmlzQmlnSW50VHlwZShpbnMtPmFycmF5VHlwZSgpKSkgewotKyAg ICBMSW50NjRBbGxvY2F0aW9uIHZhbHVlID0gdXNlSW50NjRSZWdpc3RlcihpbnMtPnZhbHVlKCkp OwotKyAgICBMSW50NjREZWZpbml0aW9uIHRlbXAgPSB0ZW1wSW50NjQoKTsKLSsKLSsgICAgaWYg KGlucy0+aXNGb3JFZmZlY3QoKSkgewotKyAgICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkg TEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3BGb3JFZmZlY3Q2NCgKLSsgICAgICAgICAgZWxl bWVudHMsIGluZGV4LCB2YWx1ZSwgdGVtcCk7Ci0rICAgICAgYWRkKGxpciwgaW5zKTsKLSsgICAg ICByZXR1cm47Ci0rICAgIH0KLSsKLSsgICAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQotKyAg ICAgICAgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3A2NChlbGVtZW50cywgaW5kZXgsIHZh bHVlLCB0ZW1wKTsKLSsgICAgZGVmaW5lSW50NjQobGlyLCBpbnMpOwotKyAgICByZXR1cm47Ci0r ICB9Ci0rCi0rICBMQWxsb2NhdGlvbiB2YWx1ZSA9IHVzZVJlZ2lzdGVyKGlucy0+dmFsdWUoKSk7 Ci0rICBMRGVmaW5pdGlvbiB2YWx1ZVRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7Ci0r ICBMRGVmaW5pdGlvbiBvZmZzZXRUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwotKyAg TERlZmluaXRpb24gbWFza1RlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7Ci0rCi0rICAv LyBQUEM2NCBzdWItd29yZCBhdG9taWMtYmlub3AgdXNlcyBsYmFyeC9saGFyeCArIHN0YmN4Li9z dGhjeC4gKFBPV0VSNyspLgotKyAgLy8gVGhlIGZldGNoLW9wIHZhcmlhbnQgbmVlZHMgdmFsdWVU ZW1wIHRvIGhvbGQgdGhlIHBvc3Qtb3AgdmFsdWUgYmVpbmcKLSsgIC8vIGNvbmRpdGlvbi1zdG9y ZWQgKE1hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcCdzIEF0b21pY0ZldGNoT3ApOyB0aGUKLSsgIC8v IGZvci1lZmZlY3QgdmFyaWFudCB1c2VzIGFuIGludGVybmFsIHNjcmF0Y2ggYW5kIG5lZWRzIG5v IHRlbXBzIGF0Ci0rICAvLyBhbGwuIG9mZnNldFRlbXAvbWFza1RlbXAgYXJlIHVudXNlZCBpbiBl aXRoZXIgcGF0aC4KLSsgIGlmIChTY2FsYXI6OmJ5dGVTaXplKGlucy0+YXJyYXlUeXBlKCkpIDwg NCAmJiAhaW5zLT5pc0ZvckVmZmVjdCgpKSB7Ci0rICAgIHZhbHVlVGVtcCA9IHRlbXAoKTsKLSsg IH0KLSsKLSsgIGlmIChpbnMtPmlzRm9yRWZmZWN0KCkpIHsKLSsgICAgTEF0b21pY1R5cGVkQXJy YXlFbGVtZW50Qmlub3BGb3JFZmZlY3QqIGxpciA9Ci0rICAgICAgICBuZXcgKGFsbG9jKCkpIExB dG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wRm9yRWZmZWN0KAotKyAgICAgICAgICAgIGVsZW1l bnRzLCBpbmRleCwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOwotKyAg ICBhZGQobGlyLCBpbnMpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBMRGVmaW5pdGlvbiBv dXRUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwotKwotKyAgaWYgKGlucy0+YXJyYXlU eXBlKCkgPT0gU2NhbGFyOjpVaW50MzIgJiYgSXNGbG9hdGluZ1BvaW50VHlwZShpbnMtPnR5cGUo KSkpIHsKLSsgICAgb3V0VGVtcCA9IHRlbXAoKTsKLSsgIH0KLSsKLSsgIExBdG9taWNUeXBlZEFy cmF5RWxlbWVudEJpbm9wKiBsaXIgPQotKyAgICAgIG5ldyAoYWxsb2MoKSkgTEF0b21pY1R5cGVk QXJyYXlFbGVtZW50Qmlub3AoCi0rICAgICAgICAgIGVsZW1lbnRzLCBpbmRleCwgdmFsdWUsIG91 dFRlbXAsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOwotKyAgZGVmaW5lKGxpciwg aW5zKTsKLSt9Ci0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0QXNtSlNMb2FkSGVhcChNQXNtSlNM b2FkSGVhcCogaW5zKSB7Ci0rICBNRGVmaW5pdGlvbiogYmFzZSA9IGlucy0+YmFzZSgpOwotKyAg TU9aX0FTU0VSVChiYXNlLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpOwotKwotKyAgTURlZmlu aXRpb24qIGJvdW5kc0NoZWNrTGltaXQgPSBpbnMtPmJvdW5kc0NoZWNrTGltaXQoKTsKLSsgIE1P Wl9BU1NFUlRfSUYoaW5zLT5uZWVkc0JvdW5kc0NoZWNrKCksCi0rICAgICAgICAgICAgICAgIGJv dW5kc0NoZWNrTGltaXQtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMik7Ci0rCi0rICBMQWxsb2Nh dGlvbiBiYXNlQWxsb2MgPSB1c2VSZWdpc3RlckF0U3RhcnQoYmFzZSk7Ci0rCi0rICBMQWxsb2Nh dGlvbiBsaW1pdEFsbG9jID0gaW5zLT5uZWVkc0JvdW5kc0NoZWNrKCkKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPyB1c2VSZWdpc3RlckF0U3RhcnQoYm91bmRzQ2hlY2tMaW1pdCkK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBMQWxsb2NhdGlvbigpOwotKwotKyAg TU9aX0FTU0VSVCghaW5zLT5oYXNNZW1vcnlCYXNlKCkpOwotKyAgYXV0byogbGlyID0KLSsgICAg ICBuZXcgKGFsbG9jKCkpIExBc21KU0xvYWRIZWFwKGJhc2VBbGxvYywgbGltaXRBbGxvYywgTEFs bG9jYXRpb24oKSk7Ci0rICBkZWZpbmUobGlyLCBpbnMpOwotK30KLSt2b2lkIExJUkdlbmVyYXRv cjo6dmlzaXRBc21KU1N0b3JlSGVhcChNQXNtSlNTdG9yZUhlYXAqIGlucykgewotKyAgTURlZmlu aXRpb24qIGJhc2UgPSBpbnMtPmJhc2UoKTsKLSsgIE1PWl9BU1NFUlQoYmFzZS0+dHlwZSgpID09 IE1JUlR5cGU6OkludDMyKTsKLSsKLSsgIE1EZWZpbml0aW9uKiBib3VuZHNDaGVja0xpbWl0ID0g aW5zLT5ib3VuZHNDaGVja0xpbWl0KCk7Ci0rICBNT1pfQVNTRVJUX0lGKGlucy0+bmVlZHNCb3Vu ZHNDaGVjaygpLAotKyAgICAgICAgICAgICAgICBib3VuZHNDaGVja0xpbWl0LT50eXBlKCkgPT0g TUlSVHlwZTo6SW50MzIpOwotKwotKyAgTEFsbG9jYXRpb24gYmFzZUFsbG9jID0gdXNlUmVnaXN0 ZXJBdFN0YXJ0KGJhc2UpOwotKwotKyAgTEFsbG9jYXRpb24gbGltaXRBbGxvYyA9IGlucy0+bmVl ZHNCb3VuZHNDaGVjaygpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdXNlUmVn aXN0ZXJBdFN0YXJ0KGJvdW5kc0NoZWNrTGltaXQpCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogTEFsbG9jYXRpb24oKTsKLSsKLSsgIE1PWl9BU1NFUlQoIWlucy0+aGFzTWVtb3J5 QmFzZSgpKTsKLSsgIGFkZChuZXcgKGFsbG9jKCkpIExBc21KU1N0b3JlSGVhcChiYXNlQWxsb2Ms IHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPnZhbHVlKCkpLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpbWl0QWxsb2MsIExBbGxvY2F0aW9uKCkpLAotKyAgICAgIGlucyk7 Ci0rfQotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21Mb2FkKE1XYXNtTG9hZCogaW5zKSB7 Ci0rICBNRGVmaW5pdGlvbiogYmFzZSA9IGlucy0+YmFzZSgpOwotKyAgTU9aX0FTU0VSVChiYXNl LT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIgfHwgYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6Oklu dDY0KTsKLSsKLSsgIExBbGxvY2F0aW9uIG1lbW9yeUJhc2UgPQotKyAgICAgIGlucy0+aGFzTWVt b3J5QmFzZSgpID8gTEFsbG9jYXRpb24odXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+bWVtb3J5QmFz ZSgpKSkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICA6IExHZW5lcmFsUmVnKEhlYXBSZWcp OwotKwotKyAgTEFsbG9jYXRpb24gcHRyID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGJhc2UpOwotKwot KyAgTERlZmluaXRpb24gcHRyQ29weSA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsgIGlm IChpbnMtPmFjY2VzcygpLm9mZnNldDMyKCkpIHsKLSsgICAgcHRyQ29weSA9IHRlbXBDb3B5KGJh c2UsIDApOwotKyAgfQotKwotKyAgaWYgKGlucy0+dHlwZSgpID09IE1JUlR5cGU6OkludDY0KSB7 Ci0rICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21Mb2FkSTY0KHB0ciwgbWVtb3J5 QmFzZSwgcHRyQ29weSk7Ci0rICAgIGRlZmluZUludDY0KGxpciwgaW5zKTsKLSsgICAgcmV0dXJu OwotKyAgfQotKwotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbUxvYWQocHRyLCBt ZW1vcnlCYXNlLCBwdHJDb3B5KTsKLSsgIGRlZmluZShsaXIsIGlucyk7Ci0rfQotK3ZvaWQgTElS R2VuZXJhdG9yOjp2aXNpdFdhc21TdG9yZShNV2FzbVN0b3JlKiBpbnMpIHsKLSsgIE1EZWZpbml0 aW9uKiBiYXNlID0gaW5zLT5iYXNlKCk7Ci0rICBNT1pfQVNTRVJUKGJhc2UtPnR5cGUoKSA9PSBN SVJUeXBlOjpJbnQzMiB8fCBiYXNlLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50NjQpOwotKwotKyAg TURlZmluaXRpb24qIHZhbHVlID0gaW5zLT52YWx1ZSgpOwotKyAgTEFsbG9jYXRpb24gbWVtb3J5 QmFzZSA9Ci0rICAgICAgaW5zLT5oYXNNZW1vcnlCYXNlKCkgPyBMQWxsb2NhdGlvbih1c2VSZWdp c3RlckF0U3RhcnQoaW5zLT5tZW1vcnlCYXNlKCkpKQotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogTEdlbmVyYWxSZWcoSGVhcFJlZyk7Ci0rCi0rICBMQWxsb2NhdGlvbiBiYXNlQWxsb2Mg PSB1c2VSZWdpc3RlckF0U3RhcnQoYmFzZSk7Ci0rCi0rICBMRGVmaW5pdGlvbiBwdHJDb3B5ID0g TERlZmluaXRpb246OkJvZ3VzVGVtcCgpOwotKyAgaWYgKGlucy0+YWNjZXNzKCkub2Zmc2V0MzIo KSkgewotKyAgICBwdHJDb3B5ID0gdGVtcENvcHkoYmFzZSwgMCk7Ci0rICB9Ci0rCi0rICBpZiAo aW5zLT5hY2Nlc3MoKS50eXBlKCkgPT0gU2NhbGFyOjpJbnQ2NCkgewotKyAgICBMSW50NjRBbGxv Y2F0aW9uIHZhbHVlQWxsb2MgPSB1c2VJbnQ2NFJlZ2lzdGVyQXRTdGFydCh2YWx1ZSk7Ci0rICAg IGF1dG8qIGxpciA9Ci0rICAgICAgICBuZXcgKGFsbG9jKCkpIExXYXNtU3RvcmVJNjQoYmFzZUFs bG9jLCB2YWx1ZUFsbG9jLCBtZW1vcnlCYXNlLCBwdHJDb3B5KTsKLSsgICAgYWRkKGxpciwgaW5z KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgTEFsbG9jYXRpb24gdmFsdWVBbGxvYyA9IHVz ZVJlZ2lzdGVyQXRTdGFydCh2YWx1ZSk7Ci0rICBhdXRvKiBsaXIgPQotKyAgICAgIG5ldyAoYWxs b2MoKSkgTFdhc21TdG9yZShiYXNlQWxsb2MsIHZhbHVlQWxsb2MsIG1lbW9yeUJhc2UsIHB0ckNv cHkpOwotKyAgYWRkKGxpciwgaW5zKTsKLSt9Ci0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2Fz bVRydW5jYXRlVG9JbnQ2NChNV2FzbVRydW5jYXRlVG9JbnQ2NCogaW5zKSB7Ci0rICBNRGVmaW5p dGlvbiogb3BkID0gaW5zLT5pbnB1dCgpOwotKyAgTU9aX0FTU0VSVChvcGQtPnR5cGUoKSA9PSBN SVJUeXBlOjpEb3VibGUgfHwgb3BkLT50eXBlKCkgPT0gTUlSVHlwZTo6RmxvYXQzMik7Ci0rCi0r ICBkZWZpbmVJbnQ2NChuZXcgKGFsbG9jKCkpIExXYXNtVHJ1bmNhdGVUb0ludDY0KHVzZVJlZ2lz dGVyKG9wZCkpLCBpbnMpOwotK30KLSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtVW5zaWdu ZWRUb0RvdWJsZShNV2FzbVVuc2lnbmVkVG9Eb3VibGUqIGlucykgewotKyAgTU9aX0FTU0VSVChp bnMtPmlucHV0KCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMik7Ci0rICBMV2FzbVVpbnQzMlRv RG91YmxlKiBsaXIgPQotKyAgICAgIG5ldyAoYWxsb2MoKSkgTFdhc21VaW50MzJUb0RvdWJsZSh1 c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7Ci0rICBkZWZpbmUobGlyLCBpbnMpOwot K30KLSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtVW5zaWduZWRUb0Zsb2F0MzIoTVdhc21V bnNpZ25lZFRvRmxvYXQzMiogaW5zKSB7Ci0rICBNT1pfQVNTRVJUKGlucy0+aW5wdXQoKS0+dHlw ZSgpID09IE1JUlR5cGU6OkludDMyKTsKLSsgIExXYXNtVWludDMyVG9GbG9hdDMyKiBsaXIgPQot KyAgICAgIG5ldyAoYWxsb2MoKSkgTFdhc21VaW50MzJUb0Zsb2F0MzIodXNlUmVnaXN0ZXJBdFN0 YXJ0KGlucy0+aW5wdXQoKSkpOwotKyAgZGVmaW5lKGxpciwgaW5zKTsKLSt9Ci0rdm9pZCBMSVJH ZW5lcmF0b3I6OnZpc2l0V2FzbUNvbXBhcmVFeGNoYW5nZUhlYXAoTVdhc21Db21wYXJlRXhjaGFu Z2VIZWFwKiBpbnMpIHsKLSsgIE1EZWZpbml0aW9uKiBiYXNlID0gaW5zLT5iYXNlKCk7Ci0rICBN T1pfQVNTRVJUKGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMiB8fCBiYXNlLT50eXBlKCkg PT0gTUlSVHlwZTo6SW50NjQpOwotKyAgTEFsbG9jYXRpb24gbWVtb3J5QmFzZSA9IGlucy0+aGFz TWVtb3J5QmFzZSgpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTEFsbG9jYXRp b24odXNlUmVnaXN0ZXIoaW5zLT5tZW1vcnlCYXNlKCkpKQotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6IExHZW5lcmFsUmVnKEhlYXBSZWcpOwotKwotKyAgaWYgKGlucy0+YWNjZXNz KCkudHlwZSgpID09IFNjYWxhcjo6SW50NjQpIHsKLSsgICAgYXV0byogbGlyID0gbmV3IChhbGxv YygpKSBMV2FzbUNvbXBhcmVFeGNoYW5nZUk2NCgKLSsgICAgICAgIHVzZVJlZ2lzdGVyKGJhc2Up LCB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+b2xkVmFsdWUoKSksCi0rICAgICAgICB1c2VJbnQ2NFJl Z2lzdGVyKGlucy0+bmV3VmFsdWUoKSksIG1lbW9yeUJhc2UpOwotKyAgICBkZWZpbmVJbnQ2NChs aXIsIGlucyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIExEZWZpbml0aW9uIHZhbHVlVGVt cCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsgIExEZWZpbml0aW9uIG9mZnNldFRlbXAg PSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7Ci0rICBMRGVmaW5pdGlvbiBtYXNrVGVtcCA9IExE ZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsKLSsgIC8vIFBQQzY0IHN1Yi13b3JkIHdhc20gQ0FT IHVzZXMgbGJhcngvbGhhcnggKyBzdGJjeC4vc3RoY3guIChQT1dFUjcrKTsKLSsgIC8vIHZhbHVl VGVtcCBob2xkcyB0aGUgZXh0c2IvZXh0c2gtY2Fub25pY2FsaXNlZCBvbGR2YWwgZm9yIGNtcHcs IHdoaWxlCi0rICAvLyBvZmZzZXRUZW1wL21hc2tUZW1wIGFyZSB1bnVzZWQgKG5vIHJvdW5kLWRv d24gKyBiaXQtaXNvbGF0ZSBkYW5jZSkuCi0rICBpZiAoaW5zLT5hY2Nlc3MoKS5ieXRlU2l6ZSgp IDwgNCkgewotKyAgICB2YWx1ZVRlbXAgPSB0ZW1wKCk7Ci0rICB9Ci0rCi0rICBhdXRvKiBsaXIg PSBuZXcgKGFsbG9jKCkpCi0rICAgICAgTFdhc21Db21wYXJlRXhjaGFuZ2VIZWFwKHVzZVJlZ2lz dGVyKGJhc2UpLCB1c2VSZWdpc3RlcihpbnMtPm9sZFZhbHVlKCkpLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1c2VSZWdpc3RlcihpbnMtPm5ld1ZhbHVlKCkpLCBtZW1vcnlCYXNl LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAs IG1hc2tUZW1wKTsKLSsKLSsgIGRlZmluZShsaXIsIGlucyk7Ci0rfQotK3ZvaWQgTElSR2VuZXJh dG9yOjp2aXNpdFdhc21BdG9taWNFeGNoYW5nZUhlYXAoTVdhc21BdG9taWNFeGNoYW5nZUhlYXAq IGlucykgewotKyAgTURlZmluaXRpb24qIGJhc2UgPSBpbnMtPmJhc2UoKTsKLSsgIE1PWl9BU1NF UlQoYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyIHx8IGJhc2UtPnR5cGUoKSA9PSBNSVJU eXBlOjpJbnQ2NCk7Ci0rICBMQWxsb2NhdGlvbiBtZW1vcnlCYXNlID0gaW5zLT5oYXNNZW1vcnlC YXNlKCkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBMQWxsb2NhdGlvbih1c2VS ZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogTEdlbmVyYWxSZWcoSGVhcFJlZyk7Ci0rCi0rICBpZiAoaW5zLT5hY2Nlc3MoKS50eXBl KCkgPT0gU2NhbGFyOjpJbnQ2NCkgewotKyAgICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExX YXNtQXRvbWljRXhjaGFuZ2VJNjQoCi0rICAgICAgICB1c2VSZWdpc3RlcihiYXNlKSwgdXNlSW50 NjRSZWdpc3RlcihpbnMtPnZhbHVlKCkpLCBtZW1vcnlCYXNlKTsKLSsgICAgZGVmaW5lSW50NjQo bGlyLCBpbnMpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICAvLyBQUEM2NCBzdWItd29yZCB3 YXNtIGF0b21pYyBleGNoYW5nZSB1c2VzIGxiYXJ4L2xoYXJ4ICsgc3RiY3guL3N0aGN4LgotKyAg Ly8gKFBPV0VSNyspOyB2YWx1ZVRlbXAvb2Zmc2V0VGVtcC9tYXNrVGVtcCBhcmUgbmV2ZXIgcmVh ZCBieSB0aGUKLSsgIC8vIGltcGxlbWVudGF0aW9uIChzZWUgTWFjcm9Bc3NlbWJsZXItcHBjNjQu Y3BwJ3MgQXRvbWljRXhjaGFuZ2UgdGVtcGxhdGUpLgotKyAgLy8gUGFzcyBCb2d1c1RlbXAgZm9y IGFsbCB0aHJlZS4KLSsgIExEZWZpbml0aW9uIHZhbHVlVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1 c1RlbXAoKTsKLSsgIExEZWZpbml0aW9uIG9mZnNldFRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNU ZW1wKCk7Ci0rICBMRGVmaW5pdGlvbiBtYXNrVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAo KTsKLSsKLSsgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICBMV2FzbUF0b21pY0V4 Y2hhbmdlSGVhcCh1c2VSZWdpc3RlcihiYXNlKSwgdXNlUmVnaXN0ZXIoaW5zLT52YWx1ZSgpKSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlCYXNlLCB2YWx1ZVRlbXAsIG9m ZnNldFRlbXAsIG1hc2tUZW1wKTsKLSsgIGRlZmluZShsaXIsIGlucyk7Ci0rfQotK3ZvaWQgTElS R2VuZXJhdG9yOjp2aXNpdFdhc21BdG9taWNCaW5vcEhlYXAoTVdhc21BdG9taWNCaW5vcEhlYXAq IGlucykgewotKyAgTURlZmluaXRpb24qIGJhc2UgPSBpbnMtPmJhc2UoKTsKLSsgIE1PWl9BU1NF UlQoYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyIHx8IGJhc2UtPnR5cGUoKSA9PSBNSVJU eXBlOjpJbnQ2NCk7Ci0rICBMQWxsb2NhdGlvbiBtZW1vcnlCYXNlID0gaW5zLT5oYXNNZW1vcnlC YXNlKCkKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBMQWxsb2NhdGlvbih1c2VS ZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogTEdlbmVyYWxSZWcoSGVhcFJlZyk7Ci0rCi0rICBpZiAoaW5zLT5hY2Nlc3MoKS50eXBl KCkgPT0gU2NhbGFyOjpJbnQ2NCkgewotKyAgICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCi0r ICAgICAgICBMV2FzbUF0b21pY0Jpbm9wSTY0KHVzZVJlZ2lzdGVyKGJhc2UpLCB1c2VJbnQ2NFJl Z2lzdGVyKGlucy0+dmFsdWUoKSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9y eUJhc2UsIHRlbXBJbnQ2NCgpKTsKLSsgICAgZGVmaW5lSW50NjQobGlyLCBpbnMpOwotKyAgICBy ZXR1cm47Ci0rICB9Ci0rCi0rICBMRGVmaW5pdGlvbiB2YWx1ZVRlbXAgPSBMRGVmaW5pdGlvbjo6 Qm9ndXNUZW1wKCk7Ci0rICBMRGVmaW5pdGlvbiBvZmZzZXRUZW1wID0gTERlZmluaXRpb246OkJv Z3VzVGVtcCgpOwotKyAgTERlZmluaXRpb24gbWFza1RlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNU ZW1wKCk7Ci0rCi0rICAvLyBQUEM2NCBzdWItd29yZCB3YXNtIGF0b21pYy1iaW5vcCB1c2VzIGxi YXJ4L2xoYXJ4ICsgc3RiY3guL3N0aGN4LgotKyAgLy8gKFBPV0VSNyspLiBUaGUgZmV0Y2gtb3Ag dmFyaWFudCBuZWVkcyB2YWx1ZVRlbXAgZm9yIHRoZSBwb3N0LW9wIHZhbHVlCi0rICAvLyBiZWlu ZyBjb25kaXRpb24tc3RvcmVkOyB0aGUgZm9yLWVmZmVjdCB2YXJpYW50IHVzZXMgYW4gaW50ZXJu YWwKLSsgIC8vIHNjcmF0Y2ggYW5kIG5lZWRzIG5vIHRlbXBzIGF0IGFsbC4gb2Zmc2V0VGVtcC9t YXNrVGVtcCBhcmUgdW51c2VkCi0rICAvLyBpbiBlaXRoZXIgcGF0aC4KLSsgIGlmIChpbnMtPmFj Y2VzcygpLmJ5dGVTaXplKCkgPCA0ICYmIGlucy0+aGFzVXNlcygpKSB7Ci0rICAgIHZhbHVlVGVt cCA9IHRlbXAoKTsKLSsgIH0KLSsKLSsgIGlmICghaW5zLT5oYXNVc2VzKCkpIHsKLSsgICAgTFdh c21BdG9taWNCaW5vcEhlYXBGb3JFZmZlY3QqIGxpciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICAg IExXYXNtQXRvbWljQmlub3BIZWFwRm9yRWZmZWN0KHVzZVJlZ2lzdGVyKGJhc2UpLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVnaXN0ZXIoaW5zLT52YWx1ZSgp KSwgbWVtb3J5QmFzZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh bHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOwotKyAgICBhZGQobGlyLCBpbnMpOwotKyAg ICByZXR1cm47Ci0rICB9Ci0rCi0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCi0rICAgICAg TFdhc21BdG9taWNCaW5vcEhlYXAodXNlUmVnaXN0ZXIoYmFzZSksIHVzZVJlZ2lzdGVyKGlucy0+ dmFsdWUoKSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5QmFzZSwgdmFsdWVU ZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCk7Ci0rCi0rICBkZWZpbmUobGlyLCBpbnMpOwotK30K LSsKLSsvLyBTSU1EIGxvd2VyaW5nCi0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVRlcm5h cnlTaW1kMTI4KE1XYXNtVGVybmFyeVNpbWQxMjgqIGlucykgewotKyNpZmRlZiBFTkFCTEVfV0FT TV9TSU1ECi0rICBNT1pfQVNTRVJUKGlucy0+dHlwZSgpID09IE1JUlR5cGU6OlNpbWQxMjgpOwot KyAgLy8gdXNlUmVnaXN0ZXIgZm9yIHYwL3YxIGFuZCB1c2VSZWdpc3RlckF0U3RhcnQgb25seSBm b3IgdjIg4oCUIG1hdGNoZXMKLSsgIC8vIEFSTTY0J3MgVjEyOEJpdHNlbGVjdCBwb2xpY3kuIGRl ZmluZVJldXNlSW5wdXQgcmVxdWlyZXMgdGhlIHJldXNlZAotKyAgLy8gaW5wdXQgdG8gYmUgdXNl UmVnaXN0ZXJBdFN0YXJ0IGFuZCB0aGUgb3RoZXJzIHRvIHJlbWFpbiBhbGl2ZQotKyAgLy8gKHVz ZVJlZ2lzdGVyKTsgcmV1c2luZyBhbGwgdGhyZWUgcG9saWNpZXMgYXMgdXNlUmVnaXN0ZXJBdFN0 YXJ0Ci0rICAvLyB0cmlwcyB0aGUgYWxsb2NhdG9yJ3MgIipkZWYtPm91dHB1dCgpICE9IGFsbG9j IiBhc3NlcnRpb24gYmVjYXVzZQotKyAgLy8gdjAvdjEgbWF5IHRoZW4gc2hhcmUgdGhlIHNsb3Qg d2l0aCB0aGUgb3V0cHV0LgotKyAgTERlZmluaXRpb24gdGVtcDAgPSBMRGVmaW5pdGlvbjo6Qm9n dXNUZW1wKCk7Ci0rICBpZiAoaW5zLT5zaW1kT3AoKSA9PSB3YXNtOjpTaW1kT3A6OkkzMng0UmVs YXhlZERvdEk4eDE2STd4MTZBZGRTKSB7Ci0rICAgIHRlbXAwID0gdGVtcFNpbWQxMjgoKTsKLSsg IH0KLSsgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21UZXJuYXJ5U2ltZDEyOCgKLSsg ICAgICB1c2VSZWdpc3RlcihpbnMtPnYwKCkpLCB1c2VSZWdpc3RlcihpbnMtPnYxKCkpLAotKyAg ICAgIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPnYyKCkpLCB0ZW1wMCwKLSsgICAgICBpbnMtPnNp bWRPcCgpKTsKLSsgIC8vIFRoZSBQUEM2NCB2aXNpdG9yIChDb2RlR2VuZXJhdG9yLXBwYzY0LmNw cDp2aXNpdFdhc21UZXJuYXJ5U2ltZDEyOCkKLSsgIC8vIGVtaXRzIHRoZSBGTUEgLyBET1RfVEhF Tl9BREQgY2hhaW4gd2l0aCB2MiBhcyB0aGUgaW1wbGljaXQKLSsgIC8vIGFjY3VtdWxhdG9yLiBk ZWZpbmVSZXVzZUlucHV0IHRlbGxzIHRoZSBhbGxvY2F0b3IgdG8gcHV0IGBkZXN0YAotKyAgLy8g aW4gdjIncyBzbG90LCBlbGltaW5hdGluZyB0aGUgcHJldmlvdXMgY29uZGl0aW9uYWwgbW92ZVNp bWQxMjguCi0rICBkZWZpbmVSZXVzZUlucHV0KGxpciwgaW5zLCBMV2FzbVRlcm5hcnlTaW1kMTI4 OjpWMkluZGV4KTsKLSsjZWxzZQotKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7Ci0rI2VuZGlmCi0r fQotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21CaW5hcnlTaW1kMTI4KE1XYXNtQmluYXJ5 U2ltZDEyOCogaW5zKSB7Ci0rI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSsgIE1PWl9BU1NFUlQo aW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCk7Ci0rICBMRGVmaW5pdGlvbiB0ZW1wMCA9 IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKLSsgIExEZWZpbml0aW9uIHRlbXAxID0gTERlZmlu aXRpb246OkJvZ3VzVGVtcCgpOwotKyAgLy8gbXVsSW50NjR4MiAoaTY0eDIubXVsKSByb3V0ZXMg dGhyb3VnaCBHUFJzIChtZnZzcmQvbXVsbGQvbXR2c3JkKSBhbmQKLSsgIC8vIHVzZXMgYW4gaW50 ZXJuYWwgU2NyYXRjaFNpbWQxMjggKyBHUFIgc2NyYXRjaGVzOyBpdHMgRmxvYXRSZWdpc3Rlcgot KyAgLy8gdGVtcDEvdGVtcDIgcGFyYW1ldGVycyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIHNoYXJl ZCBBUk02NCtQUEM2NAotKyAgLy8gc2lnbmF0dXJlIGJ1dCB1bnVzZWQgb24gUFBDNjQuIE9ubHkg RlAgbWluL21heCBuZWVkIFNJTUQgdGVtcHMgZm9yCi0rICAvLyB0aGUgd2FzbSBOYU4tY2Fub25p Y2FsaXNhdGlvbiBkYW5jZS4KLSsgIGlmIChpbnMtPnNpbWRPcCgpID09IHdhc206OlNpbWRPcDo6 RjMyeDRNaW4gfHwKLSsgICAgICBpbnMtPnNpbWRPcCgpID09IHdhc206OlNpbWRPcDo6RjMyeDRN YXggfHwKLSsgICAgICBpbnMtPnNpbWRPcCgpID09IHdhc206OlNpbWRPcDo6RjY0eDJNaW4gfHwK LSsgICAgICBpbnMtPnNpbWRPcCgpID09IHdhc206OlNpbWRPcDo6RjY0eDJNYXgpIHsKLSsgICAg dGVtcDAgPSB0ZW1wU2ltZDEyOCgpOwotKyAgICB0ZW1wMSA9IHRlbXBTaW1kMTI4KCk7Ci0rICB9 Ci0rICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExXYXNtQmluYXJ5U2ltZDEyOCgKLSsgICAg ICB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5saHMoKSksIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMt PnJocygpKSwKLSsgICAgICB0ZW1wMCwgdGVtcDEsIGlucy0+c2ltZE9wKCkpOwotKyAgZGVmaW5l KGxpciwgaW5zKTsKLSsjZWxzZQotKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7Ci0rI2VuZGlmCi0r fQotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21CaW5hcnlTaW1kMTI4V2l0aENvbnN0YW50 KAotKyAgICBNV2FzbUJpbmFyeVNpbWQxMjhXaXRoQ29uc3RhbnQqIGlucykgewotKyNpZmRlZiBF TkFCTEVfV0FTTV9TSU1ECi0rICBNT1pfQVNTRVJUKGlucy0+dHlwZSgpID09IE1JUlR5cGU6OlNp bWQxMjgpOwotKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbUJpbmFyeVNpbWQxMjhX aXRoQ29uc3RhbnQoCi0rICAgICAgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+bGhzKCkpLCBMRGVm aW5pdGlvbjo6Qm9ndXNUZW1wKCksIGlucy0+cmhzKCkpOwotKyAgZGVmaW5lKGxpciwgaW5zKTsK LSsjZWxzZQotKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7Ci0rI2VuZGlmCi0rfQotK3ZvaWQgTElS R2VuZXJhdG9yOjp2aXNpdFdhc21TaGlmdFNpbWQxMjgoTVdhc21TaGlmdFNpbWQxMjgqIGlucykg ewotKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECi0rICBNT1pfQVNTRVJUKGlucy0+dHlwZSgpID09 IE1JUlR5cGU6OlNpbWQxMjgpOwotKyAgTU9aX0FTU0VSVChpbnMtPnJocygpLT50eXBlKCkgPT0g TUlSVHlwZTo6SW50MzIpOwotKwotKyAgaWYgKGlucy0+cmhzKCktPmlzQ29uc3RhbnQoKSkgewot KyAgICBpbnQzMl90IHNoaWZ0Q291bnRNYXNrOwotKyAgICBzd2l0Y2ggKGlucy0+c2ltZE9wKCkp IHsKLSsgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTaGw6Ci0rICAgICAgY2FzZSB3YXNt OjpTaW1kT3A6Okk4eDE2U2hyVToKLSsgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTaHJT OgotKyAgICAgICAgc2hpZnRDb3VudE1hc2sgPSA3OwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAg Y2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hsOgotKyAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MTZ4OFNoclU6Ci0rICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hyUzoKLSsgICAgICAg IHNoaWZ0Q291bnRNYXNrID0gMTU7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIHdhc206 OlNpbWRPcDo6STMyeDRTaGw6Ci0rICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0U2hyVToK LSsgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTaHJTOgotKyAgICAgICAgc2hpZnRDb3Vu dE1hc2sgPSAzMTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ NjR4MlNobDoKLSsgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTaHJVOgotKyAgICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJNjR4MlNoclM6Ci0rICAgICAgICBzaGlmdENvdW50TWFzayA9IDYz OwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIE1PWl9DUkFTSCgi VW5leHBlY3RlZCBzaGlmdCBvcGVyYXRpb24iKTsKLSsgICAgfQotKyAgICBpbnQzMl90IHNoaWZ0 Q291bnQgPSBpbnMtPnJocygpLT50b0NvbnN0YW50KCktPnRvSW50MzIoKSAmIHNoaWZ0Q291bnRN YXNrOwotKyNpZmRlZiBERUJVRwotKyAgICBqczo6d2FzbTo6UmVwb3J0U2ltZEFuYWx5c2lzKCJz aGlmdCAtPiBjb25zdGFudCBzaGlmdCIpOwotKyNlbmRpZgotKyAgICBhdXRvKiBsaXIgPSBuZXcg KGFsbG9jKCkpCi0rICAgICAgICBMV2FzbUNvbnN0YW50U2hpZnRTaW1kMTI4KHVzZVJlZ2lzdGVy QXRTdGFydChpbnMtPmxocygpKSwgc2hpZnRDb3VudCk7Ci0rICAgIGRlZmluZShsaXIsIGlucyk7 Ci0rICB9IGVsc2UgewotKyNpZmRlZiBERUJVRwotKyAgICBqczo6d2FzbTo6UmVwb3J0U2ltZEFu YWx5c2lzKCJzaGlmdCAtPiB2YXJpYWJsZSBzaGlmdCIpOwotKyNlbmRpZgotKyAgICBhdXRvKiBs aXIgPSBuZXcgKGFsbG9jKCkpIExXYXNtVmFyaWFibGVTaGlmdFNpbWQxMjgoCi0rICAgICAgICB1 c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5saHMoKSksIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPnJo cygpKSk7Ci0rICAgIGRlZmluZShsaXIsIGlucyk7Ci0rICB9Ci0rI2Vsc2UKLSsgIE1PWl9DUkFT SCgiTm8gU0lNRCIpOwotKyNlbmRpZgotK30KLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotKy8v IEhlbHBlcjogcmVjb25zdHJ1Y3QgcmF3IFdhc20gYnl0ZSBsYW5lIGluZGljZXMgZnJvbSBhbmFs eXplZCBTaW1kU2h1ZmZsZS4KLStzdGF0aWMgU2ltZENvbnN0YW50IFJlY29uc3RydWN0U2h1ZmZs ZUJ5dGVzKGNvbnN0IFNpbWRTaHVmZmxlJiBzKSB7Ci0rICBpbnQ4X3QgYnl0ZXNbMTZdOwotKyAg aWYgKHMucGVybXV0ZU9wKSB7Ci0rICAgIHN3aXRjaCAoKnMucGVybXV0ZU9wKSB7Ci0rICAgICAg Y2FzZSBTaW1kUGVybXV0ZU9wOjpNT1ZFOgotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAx NjsgaSsrKSBieXRlc1tpXSA9IGk7Ci0rICAgICAgICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVh dGVYMTYoYnl0ZXMpOwotKyAgICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6UEVSTVVURV8zMng0OiB7 Ci0rICAgICAgICBjb25zdCBpbnQzMl90KiB3ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQz Ml90Kj4ocy5jb250cm9sLmJ5dGVzKCkpOwotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0 OyBpKyspCi0rICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKSBieXRlc1tpKjQr al0gPSB3W2ldKjQrajsKLSsgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihi eXRlcyk7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6UEVSTVVURV8xNng4 OiB7Ci0rICAgICAgICBjb25zdCBpbnQxNl90KiBoID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBp bnQxNl90Kj4ocy5jb250cm9sLmJ5dGVzKCkpOwotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA4OyBpKyspIHsKLSsgICAgICAgICAgaW50IGlkeCA9IGhbaV0gJiAweDc7Ci0rICAgICAgICAg IGJ5dGVzW2kqMl0gPSBpZHgqMjsKLSsgICAgICAgICAgYnl0ZXNbaSoyKzFdID0gaWR4KjIrMTsK LSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRl cyk7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6QlJPQURDQVNUXzh4MTY6 IHsKLSsgICAgICAgIGludDhfdCBsYW5lID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3Qq PihzLmNvbnRyb2wuYnl0ZXMoKSlbMF07Ci0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2 OyBpKyspIGJ5dGVzW2ldID0gbGFuZTsKLSsgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNy ZWF0ZVgxNihieXRlcyk7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6QlJP QURDQVNUXzE2eDg6IHsKLSsgICAgICAgIGludDhfdCBsYW5lID0gcmVpbnRlcnByZXRfY2FzdDxj b25zdCBpbnQ4X3QqPihzLmNvbnRyb2wuYnl0ZXMoKSlbMF07Ci0rICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgICBieXRlc1tpKjJdID0gbGFuZSoyOyBieXRl c1tpKjIrMV0gPSBsYW5lKjIrMTsKLSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiBTaW1kQ29u c3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgU2ltZFBlcm11 dGVPcDo6Uk9UQVRFX1JJR0hUXzh4MTY6IHsKLSsgICAgICAgIHVpbnQ4X3Qgc2hpZnQgPSByZWlu dGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KHMuY29udHJvbC5ieXRlcygpKVswXTsKLSsgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgYnl0ZXNbaV0gPSAoaSArIHNoaWZ0KSAl IDE2OwotKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKLSsg ICAgICB9Ci0rICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpTSElGVF9SSUdIVF84eDE2OiB7Ci0r ICAgICAgICB1aW50OF90IHNoaWZ0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihz LmNvbnRyb2wuYnl0ZXMoKSlbMF07Ci0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBp KyspIGJ5dGVzW2ldID0gKGkrc2hpZnQgPCAxNikgPyAoaStzaGlmdCkgOiAwOwotKyAgICAgICAg cmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKLSsgICAgICB9Ci0rICAgICAg Y2FzZSBTaW1kUGVybXV0ZU9wOjpTSElGVF9MRUZUXzh4MTY6IHsKLSsgICAgICAgIHVpbnQ4X3Qg c2hpZnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KHMuY29udHJvbC5ieXRlcygp KVswXTsKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgYnl0ZXNbaV0gPSAo aSA+PSBzaGlmdCkgPyAoaS1zaGlmdCkgOiAwOwotKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFu dDo6Q3JlYXRlWDE2KGJ5dGVzKTsKLSsgICAgICB9Ci0rICAgICAgY2FzZSBTaW1kUGVybXV0ZU9w OjpSRVZFUlNFXzE2eDg6Ci0rICAgICAgICAvLyBSZXZlcnNlIGJ5dGVzIHdpdGhpbiBlYWNoIDE2 LWJpdCBsYW5lOiBbMSwwLDMsMiw1LDQsLi4uXQotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA4OyBpKyspIHsKLSsgICAgICAgICAgYnl0ZXNbaSoyXSA9IGkqMisxOyBieXRlc1tpKjIrMV0g PSBpKjI7Ci0rICAgICAgICB9Ci0rICAgICAgICByZXR1cm4gU2ltZENvbnN0YW50OjpDcmVhdGVY MTYoYnl0ZXMpOwotKyAgICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6UkVWRVJTRV8zMng0OgotKyAg ICAgICAgLy8gUmV2ZXJzZSBieXRlcyB3aXRoaW4gZWFjaCAzMi1iaXQgbGFuZTogWzMsMiwxLDAs Nyw2LDUsNCwuLi5dCi0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKLSsgICAg ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspIGJ5dGVzW2kqNCtqXSA9IGkqNCsoMy1q KTsKLSsgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7Ci0rICAg ICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpSRVZFUlNFXzY0eDI6Ci0rICAgICAgICAvLyBSZXZlcnNl IGJ5dGVzIHdpdGhpbiBlYWNoIDY0LWJpdCBsYW5lOiBbNyw2LDUsNCwzLDIsMSwwLDE1LC4uLl0K LSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQotKyAgICAgICAgICBmb3IgKGlu dCBqID0gMDsgaiA8IDg7IGorKykgYnl0ZXNbaSo4K2pdID0gaSo4Kyg3LWopOwotKyAgICAgICAg cmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKLSsgICAgICBkZWZhdWx0Ogot KyAgICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgIH0KLSsgIC8vIEhhbmRsZSBTaW1kU2h1ZmZsZU9w ICh0d28tb3BlcmFuZCBwYXR0ZXJucykuCi0rICBpZiAocy5zaHVmZmxlT3ApIHsKLSsgICAgc3dp dGNoICgqcy5zaHVmZmxlT3ApIHsKLSsgICAgICBjYXNlIFNpbWRTaHVmZmxlT3A6OkNPTkNBVF9S SUdIVF9TSElGVF84eDE2OiB7Ci0rICAgICAgICAvLyBjb250cm9sWzBdID0gc3VmZml4IGxlbmd0 aC4gQVJNNjQgdXNlcyAxNi1jb3VudCBhcyB0aGUgRVhUIHNoaWZ0LgotKyAgICAgICAgLy8gUmVj b25zdHJ1Y3QgcmF3IGJ5dGUgaW5kaWNlczogRVhUKHJocywgbGhzLCAxNi1jb3VudCkgPQotKyAg ICAgICAgLy8gdGFrZSAoMTYtY291bnQpIGJ5dGVzIGZyb20gcmhzIGVuZCwgdGhlbiBjb3VudCBi eXRlcyBmcm9tIGxocyBzdGFydC4KLSsgICAgICAgIHVpbnQ4X3QgY291bnQgPSAxNiAtIHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4ocy5jb250cm9sLmJ5dGVzKCkpWzBdOwotKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICAgIGludCBpZHggPSBp ICsgY291bnQ7Ci0rICAgICAgICAgIGJ5dGVzW2ldID0gKGlkeCA8IDE2KSA/IChpZHggKyAxNikg OiAoaWR4IC0gMTYpOwotKyAgICAgICAgfQotKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6 Q3JlYXRlWDE2KGJ5dGVzKTsKLSsgICAgICB9Ci0rICAgICAgY2FzZSBTaW1kU2h1ZmZsZU9wOjpC TEVORF84eDE2OiB7Ci0rICAgICAgICAvLyBjb250cm9sIGhhcyAwIChsaHMpIG9yIC0xIChyaHMp IHBlciBieXRlLgotKyAgICAgICAgY29uc3QgaW50OF90KiBtYXNrID0gcmVpbnRlcnByZXRfY2Fz dDxjb25zdCBpbnQ4X3QqPihzLmNvbnRyb2wuYnl0ZXMoKSk7Ci0rICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDE2OyBpKyspCi0rICAgICAgICAgIGJ5dGVzW2ldID0gbWFza1tpXSA/IChpICsg MTYpIDogaTsKLSsgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7 Ci0rICAgICAgfQotKyAgICAgIGNhc2UgU2ltZFNodWZmbGVPcDo6QkxFTkRfMTZ4ODogewotKyAg ICAgICAgY29uc3QgaW50MTZfdCogbWFzayA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MTZf dCo+KHMuY29udHJvbC5ieXRlcygpKTsKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsg aSsrKSB7Ci0rICAgICAgICAgIGludCBiYXNlID0gbWFza1tpXSA/IChpICogMiArIDE2KSA6IChp ICogMik7Ci0rICAgICAgICAgIGJ5dGVzW2kgKiAyXSA9IGJhc2U7Ci0rICAgICAgICAgIGJ5dGVz W2kgKiAyICsgMV0gPSBiYXNlICsgMTsKLSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiBTaW1k Q29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7Ci0rICAgICAgfQotKyNkZWZpbmUgSU5URVJMRUFW RShuYW1lLCB3aWR0aCwgbG93X3N0YXJ0LCBjb3VudCkgXAotKyAgICAgIGNhc2UgU2ltZFNodWZm bGVPcDo6bmFtZTogeyBcCi0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp IHsgXAotKyAgICAgICAgICBpbnQgbGhzSWR4ID0gbG93X3N0YXJ0ICsgaSAqIHdpZHRoOyBcCi0r ICAgICAgICAgIGludCByaHNJZHggPSBsaHNJZHggKyAxNjsgXAotKyAgICAgICAgICBmb3IgKGlu dCBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsgXAotKyAgICAgICAgICAgIGJ5dGVzWyhpICogMikg KiB3aWR0aCArIGpdID0gbGhzSWR4ICsgajsgXAotKyAgICAgICAgICAgIGJ5dGVzWyhpICogMiAr IDEpICogd2lkdGggKyBqXSA9IHJoc0lkeCArIGo7IFwKLSsgICAgICAgICAgfSBcCi0rICAgICAg ICB9IFwKLSsgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7IFwK LSsgICAgICB9Ci0rICAgICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0xPV184eDE2LCAxLCAwLCA4 KQotKyAgICAgIElOVEVSTEVBVkUoSU5URVJMRUFWRV9ISUdIXzh4MTYsIDEsIDgsIDgpCi0rICAg ICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0xPV18xNng4LCAyLCAwLCA0KQotKyAgICAgIElOVEVS TEVBVkUoSU5URVJMRUFWRV9ISUdIXzE2eDgsIDIsIDgsIDQpCi0rICAgICAgSU5URVJMRUFWRShJ TlRFUkxFQVZFX0xPV18zMng0LCA0LCAwLCAyKQotKyAgICAgIElOVEVSTEVBVkUoSU5URVJMRUFW RV9ISUdIXzMyeDQsIDQsIDgsIDIpCi0rICAgICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0xPV182 NHgyLCA4LCAwLCAxKQotKyAgICAgIElOVEVSTEVBVkUoSU5URVJMRUFWRV9ISUdIXzY0eDIsIDgs IDgsIDEpCi0rI3VuZGVmIElOVEVSTEVBVkUKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgIH0KLSsgIC8vIFBFUk1VVEVfOHgxNiwgU0hVRkZMRV9CTEVORF84eDE2 LCBldGM6IGNvbnRyb2wgc2hvdWxkIGhhdmUgcmF3IGJ5dGUgaW5kaWNlcy4KLSsgIC8vIEZvcmNl IHRvIEludDh4MTYgdHlwZSB0byBhdm9pZCBhc3NlcnRpb25zIGZyb20gbWlzbWF0Y2hlZCB0eXBl cy4KLSsgIGlmIChzLmNvbnRyb2wudHlwZSgpID09IFNpbWRDb25zdGFudDo6SW50OHgxNikgewot KyAgICByZXR1cm4gcy5jb250cm9sOwotKyAgfQotKyAgLy8gRmFsbGJhY2s6IHJlLWNyZWF0ZSBh cyBJbnQ4eDE2IGZyb20gcmF3IGJ5dGVzLgotKyAgbWVtY3B5KGJ5dGVzLCBzLmNvbnRyb2wuYnl0 ZXMoKSwgMTYpOwotKyAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKLSt9 Ci0rCi0rI2VuZGlmICAvLyBFTkFCTEVfV0FTTV9TSU1ECi0rCi0rdm9pZCBMSVJHZW5lcmF0b3I6 OnZpc2l0V2FzbVNodWZmbGVTaW1kMTI4KE1XYXNtU2h1ZmZsZVNpbWQxMjgqIGlucykgewotKyNp ZmRlZiBFTkFCTEVfV0FTTV9TSU1ECi0rICBNT1pfQVNTRVJUKGlucy0+dHlwZSgpID09IE1JUlR5 cGU6OlNpbWQxMjgpOwotKyAgU2ltZFNodWZmbGUgcyA9IGlucy0+c2h1ZmZsZSgpOwotKyAgc3dp dGNoIChzLm9wZCkgewotKyAgICBjYXNlIFNpbWRTaHVmZmxlOjpPcGVyYW5kOjpMRUZUOgotKyAg ICBjYXNlIFNpbWRTaHVmZmxlOjpPcGVyYW5kOjpSSUdIVDogewotKyAgICAgIC8vIFNpbmdsZS1v cGVyYW5kIHBlcm11dGU6IHRoZSBhbmFseXNpcyBoYXMgaWRlbnRpZmllZCB0aGF0IG9ubHkgb25l Ci0rICAgICAgLy8gaW5wdXQgbWF0dGVycyAodGhlIG90aGVyIGlzIHplcm8gb3IgdW51c2VkKS4K LSsgICAgICBMQWxsb2NhdGlvbiBzcmM7Ci0rICAgICAgaWYgKHMub3BkID09IFNpbWRTaHVmZmxl OjpPcGVyYW5kOjpMRUZUKSB7Ci0rICAgICAgICBzcmMgPSB1c2VSZWdpc3RlckF0U3RhcnQoaW5z LT5saHMoKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHNyYyA9IHVzZVJlZ2lzdGVyQXRT dGFydChpbnMtPnJocygpKTsKLSsgICAgICB9Ci0rICAgICAgYXV0byogbGlyID0KLSsgICAgICAg ICAgbmV3IChhbGxvYygpKSBMV2FzbVBlcm11dGVTaW1kMTI4KHNyYywgKnMucGVybXV0ZU9wLCBz LmNvbnRyb2wpOwotKyAgICAgIGRlZmluZShsaXIsIGlucyk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IH0KLSsgICAgY2FzZSBTaW1kU2h1ZmZsZTo6T3BlcmFuZDo6Qk9USDoKLSsgICAgY2FzZSBTaW1k U2h1ZmZsZTo6T3BlcmFuZDo6Qk9USF9TV0FQUEVEOiB7Ci0rICAgICAgU2ltZENvbnN0YW50IGN0 cmwgPSBSZWNvbnN0cnVjdFNodWZmbGVCeXRlcyhzKTsKLSsgICAgICBMQWxsb2NhdGlvbiBsaHMs IHJoczsKLSsgICAgICBpZiAocy5vcGQgPT0gU2ltZFNodWZmbGU6Ok9wZXJhbmQ6OkJPVEhfU1dB UFBFRCkgewotKyAgICAgICAgbGhzID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+cmhzKCkpOwot KyAgICAgICAgcmhzID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+bGhzKCkpOwotKyAgICAgIH0g ZWxzZSB7Ci0rICAgICAgICBsaHMgPSB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5saHMoKSk7Ci0r ICAgICAgICByaHMgPSB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5yaHMoKSk7Ci0rICAgICAgfQot KyAgICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21TaHVmZmxlU2ltZDEyOCgKLSsg ICAgICAgICAgbGhzLCByaHMsICpzLnNodWZmbGVPcCwgY3RybCk7Ci0rICAgICAgZGVmaW5lKGxp ciwgaW5zKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgfQotKyNlbHNlCi0rICBNT1pfQ1JB U0goIk5vIFNJTUQiKTsKLSsjZW5kaWYKLSt9Ci0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2Fz bVJlcGxhY2VMYW5lU2ltZDEyOChNV2FzbVJlcGxhY2VMYW5lU2ltZDEyOCogaW5zKSB7Ci0rI2lm ZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSsgIE1PWl9BU1NFUlQoaW5zLT50eXBlKCkgPT0gTUlSVHlw ZTo6U2ltZDEyOCk7Ci0rICBpZiAoaW5zLT5yaHMoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludDY0 KSB7Ci0rICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21SZXBsYWNlSW50NjRMYW5l U2ltZDEyOCgKLSsgICAgICAgIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmxocygpKSwgdXNlSW50 NjRSZWdpc3RlcihpbnMtPnJocygpKSk7Ci0rICAgIGRlZmluZVJldXNlSW5wdXQobGlyLCBpbnMs IExXYXNtUmVwbGFjZUludDY0TGFuZVNpbWQxMjg6Okxoc0luZGV4KTsKLSsgIH0gZWxzZSB7Ci0r ICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21SZXBsYWNlTGFuZVNpbWQxMjgoCi0r ICAgICAgICB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5saHMoKSksIHVzZVJlZ2lzdGVyKGlucy0+ cmhzKCkpKTsKLSsgICAgZGVmaW5lUmV1c2VJbnB1dChsaXIsIGlucywgTFdhc21SZXBsYWNlTGFu ZVNpbWQxMjg6Okxoc0luZGV4KTsKLSsgIH0KLSsjZWxzZQotKyAgTU9aX0NSQVNIKCJObyBTSU1E Iik7Ci0rI2VuZGlmCi0rfQotK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21TY2FsYXJUb1Np bWQxMjgoTVdhc21TY2FsYXJUb1NpbWQxMjgqIGlucykgewotKyNpZmRlZiBFTkFCTEVfV0FTTV9T SU1ECi0rICBNT1pfQVNTRVJUKGlucy0+dHlwZSgpID09IE1JUlR5cGU6OlNpbWQxMjgpOwotKyAg aWYgKGlucy0+aW5wdXQoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludDY0KSB7Ci0rICAgIGF1dG8q IGxpciA9Ci0rICAgICAgICBuZXcgKGFsbG9jKCkpIExXYXNtSW50NjRUb1NpbWQxMjgodXNlSW50 NjRSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7Ci0rICAgIGRlZmluZShsaXIsIGlucyk7 Ci0rICB9IGVsc2UgewotKyAgICBhdXRvKiBsaXIgPQotKyAgICAgICAgbmV3IChhbGxvYygpKSBM V2FzbVNjYWxhclRvU2ltZDEyOCh1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7Ci0r ICAgIGRlZmluZShsaXIsIGlucyk7Ci0rICB9Ci0rI2Vsc2UKLSsgIE1PWl9DUkFTSCgiTm8gU0lN RCIpOwotKyNlbmRpZgotK30KLSt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNtVW5hcnlTaW1k MTI4KE1XYXNtVW5hcnlTaW1kMTI4KiBpbnMpIHsKLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAot KyAgTU9aX0FTU0VSVChpbnMtPnR5cGUoKSA9PSBNSVJUeXBlOjpTaW1kMTI4KTsKLSsgIGF1dG8q IGxpciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICBMV2FzbVVuYXJ5U2ltZDEyOCh1c2VSZWdpc3Rl ckF0U3RhcnQoaW5zLT5pbnB1dCgpKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICBMRGVmaW5p dGlvbjo6Qm9ndXNUZW1wKCkpOwotKyAgZGVmaW5lKGxpciwgaW5zKTsKLSsjZWxzZQotKyAgTU9a X0NSQVNIKCJObyBTSU1EIik7Ci0rI2VuZGlmCi0rfQotKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1E Ci0rYm9vbCBMSVJHZW5lcmF0b3JQUEM2NDo6Y2FuRm9sZFJlZHVjZVNpbWQxMjhBbmRCcmFuY2go d2FzbTo6U2ltZE9wIG9wKSB7Ci0rICBzd2l0Y2ggKG9wKSB7Ci0rICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpWMTI4QW55VHJ1ZToKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2QWxsVHJ1ZToK LSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4QWxsVHJ1ZToKLSsgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkzMng0QWxsVHJ1ZToKLSsgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyQWxsVHJ1 ZToKLSsgICAgICByZXR1cm4gdHJ1ZTsKLSsgICAgZGVmYXVsdDoKLSsgICAgICByZXR1cm4gZmFs c2U7Ci0rICB9Ci0rfQotKwotK2Jvb2wgTElSR2VuZXJhdG9yUFBDNjQ6OmNhbkVtaXRXYXNtUmVk dWNlU2ltZDEyOEF0VXNlcygKLSsgICAgTVdhc21SZWR1Y2VTaW1kMTI4KiBpbnMpIHsKLSsgIGlm ICghaW5zLT5jYW5FbWl0QXRVc2VzKCkpIHsKLSsgICAgcmV0dXJuIGZhbHNlOwotKyAgfQotKyAg aWYgKGlucy0+dHlwZSgpICE9IE1JUlR5cGU6OkludDMyKSB7Ci0rICAgIHJldHVybiBmYWxzZTsK LSsgIH0KLSsgIGlmICghY2FuRm9sZFJlZHVjZVNpbWQxMjhBbmRCcmFuY2goaW5zLT5zaW1kT3Ao KSkpIHsKLSsgICAgcmV0dXJuIGZhbHNlOwotKyAgfQotKyAgTVVzZUl0ZXJhdG9yIGl0ZXIoaW5z LT51c2VzQmVnaW4oKSk7Ci0rICBpZiAoaXRlciA9PSBpbnMtPnVzZXNFbmQoKSkgewotKyAgICBy ZXR1cm4gdHJ1ZTsKLSsgIH0KLSsgIE1Ob2RlKiBub2RlID0gaXRlci0+Y29uc3VtZXIoKTsKLSsg IGlmICghbm9kZS0+aXNEZWZpbml0aW9uKCkgfHwgIW5vZGUtPnRvRGVmaW5pdGlvbigpLT5pc1Rl c3QoKSkgewotKyAgICByZXR1cm4gZmFsc2U7Ci0rICB9Ci0rICBpdGVyKys7Ci0rICByZXR1cm4g aXRlciA9PSBpbnMtPnVzZXNFbmQoKTsKLSt9Ci0rI2VuZGlmICAvLyBFTkFCTEVfV0FTTV9TSU1E Ci0rCi0rdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVJlZHVjZVNpbWQxMjgoTVdhc21SZWR1 Y2VTaW1kMTI4KiBpbnMpIHsKLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotKyAgaWYgKGNhbkVt aXRXYXNtUmVkdWNlU2ltZDEyOEF0VXNlcyhpbnMpKSB7Ci0rICAgIGVtaXRBdFVzZXMoaW5zKTsK LSsgICAgcmV0dXJuOwotKyAgfQotKyAgaWYgKGlucy0+dHlwZSgpID09IE1JUlR5cGU6OkludDY0 KSB7Ci0rICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKLSsgICAgICAgIExXYXNtUmVkdWNl U2ltZDEyOFRvSW50NjQodXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+aW5wdXQoKSkpOwotKyAgICBk ZWZpbmVJbnQ2NChsaXIsIGlucyk7Ci0rICB9IGVsc2UgewotKyAgICBhdXRvKiBsaXIgPQotKyAg ICAgICAgbmV3IChhbGxvYygpKSBMV2FzbVJlZHVjZVNpbWQxMjgodXNlUmVnaXN0ZXJBdFN0YXJ0 KGlucy0+aW5wdXQoKSkpOwotKyAgICBkZWZpbmUobGlyLCBpbnMpOwotKyAgfQotKyNlbHNlCi0r ICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKLSsjZW5kaWYKLSt9Ci0rdm9pZCBMSVJHZW5lcmF0b3I6 OnZpc2l0V2FzbUxvYWRMYW5lU2ltZDEyOChNV2FzbUxvYWRMYW5lU2ltZDEyOCogaW5zKSB7Ci0r I2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSsgIExVc2UgYmFzZSA9IHVzZVJlZ2lzdGVyQXRTdGFy dChpbnMtPmJhc2UoKSk7Ci0rICBMVXNlIGlucHV0VXNlID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGlu cy0+dmFsdWUoKSk7Ci0rICBMQWxsb2NhdGlvbiBtZW1vcnlCYXNlID0KLSsgICAgICBpbnMtPmhh c01lbW9yeUJhc2UoKSA/IExBbGxvY2F0aW9uKHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPm1lbW9y eUJhc2UoKSkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBMR2VuZXJhbFJlZyhIZWFw UmVnKTsKLSsgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21Mb2FkTGFuZVNpbWQxMjgo YmFzZSwgaW5wdXRVc2UsIG1lbW9yeUJhc2UpOwotKyAgZGVmaW5lKGxpciwgaW5zKTsKLSsjZWxz ZQotKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7Ci0rI2VuZGlmCi0rfQotK3ZvaWQgTElSR2VuZXJh dG9yOjp2aXNpdFdhc21TdG9yZUxhbmVTaW1kMTI4KE1XYXNtU3RvcmVMYW5lU2ltZDEyOCogaW5z KSB7Ci0rI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSsgIExVc2UgYmFzZSA9IHVzZVJlZ2lzdGVy QXRTdGFydChpbnMtPmJhc2UoKSk7Ci0rICBMVXNlIGlucHV0ID0gdXNlUmVnaXN0ZXJBdFN0YXJ0 KGlucy0+dmFsdWUoKSk7Ci0rICBMQWxsb2NhdGlvbiBtZW1vcnlCYXNlID0KLSsgICAgICBpbnMt Pmhhc01lbW9yeUJhc2UoKSA/IExBbGxvY2F0aW9uKHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPm1l bW9yeUJhc2UoKSkpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBMR2VuZXJhbFJlZyhI ZWFwUmVnKTsKLSsgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdhc21TdG9yZUxhbmVTaW1k MTI4KGJhc2UsIGlucHV0LCBtZW1vcnlCYXNlKTsKLSsgIGFkZChsaXIsIGlucyk7Ci0rI2Vsc2UK LSsgIE1PWl9DUkFTSCgiTm8gU0lNRCIpOwotKyNlbmRpZgotK30KLSsKLSsvLyBQUEM2NCBzcGVj aWFsaXplcyBjb21wYXJlK3NlbGVjdCBmb3Ige1UsfUludDMyIC8ge1UsfUludDY0IGNvbXBhcmUg d2l0aAotKy8vIEludDMyIC8gSW50NjQgcmVzdWx0LiBUaGUgQ29kZUdlbiB2aXNpdG9yCi0rLy8g KENvZGVHZW5lcmF0b3ItcHBjNjQuY3BwOnZpc2l0V2FzbUNvbXBhcmVBbmRTZWxlY3QpIGVtaXRz Ci0rLy8gY21wdy9jbXBsdy9jbXBkL2NtcGxkICsgaXNlbCA9IDIgaW5zbnMsIHJlcGxhY2luZyB0 aGUgfjUtNyBpbnNucyB0aGUKLSsvLyBnZW5lcmljIHBhdGggd291bGQgZW1pdCAoYm9vbGVhbiBt YXRlcmlhbGl6YXRpb24gKyB0ZXN0ICsgaXNlbCkuIEZQCi0rLy8gc3BlY2lhbGl6YXRpb24gaXMg bm90IHdvcnRod2hpbGUg4oCUIHRoZSBnZW5lcmljIEZQIHNlbGVjdCBwYXRoIGFscmVhZHkKLSsv LyBydW5zIGZhc3RlciB0aGFuIHRoZSBzcGVjaWFsaXplZCBpbnRlZ2VyIG9uZSBhbmQgUFBDNjQg bGFja3MgYSB0cnVlCi0rLy8gZmNzZWwgZXF1aXZhbGVudCAoZnNlbCBvbmx5IGNvbXBhcmVzIGFn YWluc3QgemVybykuCi0rYm9vbCBMSVJHZW5lcmF0b3JTaGFyZWQ6OmNhblNwZWNpYWxpemVXYXNt Q29tcGFyZUFuZFNlbGVjdCgKLSsgICAgTUNvbXBhcmU6OkNvbXBhcmVUeXBlIGNvbXBUeSwgTUlS VHlwZSBpbnNUeSkgewotKyAgY29uc3QgYm9vbCBpbnNPayA9IGluc1R5ID09IE1JUlR5cGU6Oklu dDMyIHx8IGluc1R5ID09IE1JUlR5cGU6OkludDY0OwotKyAgY29uc3QgYm9vbCBjbXBPayA9IGNv bXBUeSA9PSBNQ29tcGFyZTo6Q29tcGFyZV9JbnQzMiB8fAotKyAgICAgICAgICAgICAgICAgICAg IGNvbXBUeSA9PSBNQ29tcGFyZTo6Q29tcGFyZV9VSW50MzIgfHwKLSsgICAgICAgICAgICAgICAg ICAgICBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVfSW50NjQgfHwKLSsgICAgICAgICAgICAg ICAgICAgICBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVfVUludDY0OwotKyAgcmV0dXJuIGlu c09rICYmIGNtcE9rOwotK30KLSsKLSt2b2lkIExJUkdlbmVyYXRvclNoYXJlZDo6bG93ZXJXYXNt Q29tcGFyZUFuZFNlbGVjdChNV2FzbVNlbGVjdCogaW5zLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24q IHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBNQ29tcGFyZTo6Q29tcGFyZVR5cGUgY29tcFR5LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT3AganNvcCkgewotKyAgTU9aX0FTU0VSVChj YW5TcGVjaWFsaXplV2FzbUNvbXBhcmVBbmRTZWxlY3QoY29tcFR5LCBpbnMtPnR5cGUoKSkpOwot KyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbUNvbXBhcmVBbmRTZWxlY3QoCi0rICAg ICAgdXNlUmVnaXN0ZXIobGhzKSwgdXNlUmVnaXN0ZXIocmhzKSwgdXNlUmVnaXN0ZXJBdFN0YXJ0 KGlucy0+dHJ1ZUV4cHIoKSksCi0rICAgICAgdXNlUmVnaXN0ZXIoaW5zLT5mYWxzZUV4cHIoKSks IGNvbXBUeSwganNvcCk7Ci0rICBkZWZpbmVSZXVzZUlucHV0KGxpciwgaW5zLCBMV2FzbUNvbXBh cmVBbmRTZWxlY3Q6OklmVHJ1ZUV4cHJJbmRleCk7Ci0rfQotKwotKy8vIE1JUiBoZWxwZXJzIG5l ZWRlZCBieSB0aGUgbGlua2VyCi0rI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLStib29sIE1XYXNt VGVybmFyeVNpbWQxMjg6OnNwZWNpYWxpemVCaXRzZWxlY3RDb25zdGFudE1hc2tBc1NodWZmbGUo Ci0rICAgIGludDhfdCBzaHVmZmxlWzE2XSkgewotKyAgcmV0dXJuIGZhbHNlOwotK30KLSsjZW5k aWYKLSsKLStib29sIE1XYXNtQmluYXJ5U2ltZDEyODo6c3BlY2lhbGl6ZUZvckNvbnN0YW50Umhz KCkgeyByZXR1cm4gZmFsc2U7IH0KLSsKLSsjaWZkZWYgRU5BQkxFX1dBU01fU0lNRAotK2Jvb2wg TVdhc21UZXJuYXJ5U2ltZDEyODo6Y2FuUmVsYXhCaXRzZWxlY3QoKSB7IHJldHVybiBmYWxzZTsg fQotKyNlbmRpZgotKwotKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECi0rYm9vbCBNV2FzbUJpbmFy eVNpbWQxMjg6OmNhblBtYWRkdWJzdygpIHsgcmV0dXJuIGZhbHNlOyB9Ci0rI2VuZGlmCi0rCi0r fSAgLy8gbmFtZXNwYWNlIGppdAotK30gIC8vIG5hbWVzcGFjZSBqcwotZGlmZiAtLWdpdCBhL2pz L3NyYy9qaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuaCBiL2pzL3NyYy9qaXQvcHBjNjQvTG93ZXJp bmctcHBjNjQuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uOWMz NTE5YTdiYjIzCi0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3BwYzY0L0xvd2VyaW5n LXBwYzY0LmgKLUBAIC0wLDAgKzEsMTA1IEBACi0rLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRo OiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotKyAqIHZp bTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKLSsgKiBUaGlzIFNvdXJjZSBDb2RlIEZv cm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCi0rICogTGlj ZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdp dGggdGhpcwotKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5v cmcvTVBMLzIuMC8uICovCi0rCi0rI2lmbmRlZiBqaXRfcHBjNjRfTG93ZXJpbmdfcHBjNjRfaAot KyNkZWZpbmUgaml0X3BwYzY0X0xvd2VyaW5nX3BwYzY0X2gKLSsKLSsjaW5jbHVkZSAiaml0L3No YXJlZC9Mb3dlcmluZy1zaGFyZWQuaCIKLSsKLStuYW1lc3BhY2UganMgewotK25hbWVzcGFjZSBq aXQgewotKwotK2NsYXNzIExJUkdlbmVyYXRvclBQQzY0IDogcHVibGljIExJUkdlbmVyYXRvclNo YXJlZCB7Ci0rIHByb3RlY3RlZDoKLSsgIExJUkdlbmVyYXRvclBQQzY0KE1JUkdlbmVyYXRvciog Z2VuLCBNSVJHcmFwaCYgZ3JhcGgsIExJUkdyYXBoJiBsaXJHcmFwaCkKLSsgICAgICA6IExJUkdl bmVyYXRvclNoYXJlZChnZW4sIGdyYXBoLCBsaXJHcmFwaCkge30KLSsKLSsgIExUYWJsZVN3aXRj aCogbmV3TFRhYmxlU3dpdGNoKGNvbnN0IExBbGxvY2F0aW9uJiBpbiwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IExEZWZpbml0aW9uJiBpbnB1dENvcHkpOwotKyAgTFRh YmxlU3dpdGNoViogbmV3TFRhYmxlU3dpdGNoVihjb25zdCBMQm94QWxsb2NhdGlvbiYgaW4pOwot KwotKyAgdm9pZCBsb3dlckZvclNoaWZ0KExJbnN0cnVjdGlvbkhlbHBlcjwxLCAyLCAwPiogaW5z LCBNRGVmaW5pdGlvbiogbWlyLAotKyAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBs aHMsIE1EZWZpbml0aW9uKiByaHMpOwotKyAgdGVtcGxhdGUgPGNsYXNzIExJbnN0cj4KLSsgIHZv aWQgbG93ZXJGb3JTaGlmdEludDY0KExJbnN0ciogaW5zLCBNRGVmaW5pdGlvbiogbWlyLCBNRGVm aW5pdGlvbiogbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIHJo cyk7Ci0rICB2b2lkIGxvd2VyRm9yQUxVKExJbnN0cnVjdGlvbkhlbHBlcjwxLCAxLCAwPiogaW5z LCBNRGVmaW5pdGlvbiogbWlyLAotKyAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogaW5w dXQpOwotKyAgdm9pZCBsb3dlckZvckFMVShMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMiwgMD4qIGlu cywgTURlZmluaXRpb24qIG1pciwKLSsgICAgICAgICAgICAgICAgICAgTURlZmluaXRpb24qIGxo cywgTURlZmluaXRpb24qIHJocyk7Ci0rICB2b2lkIGxvd2VyRm9yQUxVSW50NjQoTEluc3RydWN0 aW9uSGVscGVyPElOVDY0X1BJRUNFUywgSU5UNjRfUElFQ0VTLCAwPiogaW5zLAotKyAgICAgICAg ICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBtaXIsIE1EZWZpbml0aW9uKiBpbnB1dCk7Ci0r ICB2b2lkIGxvd2VyRm9yQUxVSW50NjQoCi0rICAgICAgTEluc3RydWN0aW9uSGVscGVyPElOVDY0 X1BJRUNFUywgMiAqIElOVDY0X1BJRUNFUywgMD4qIGlucywKLSsgICAgICBNRGVmaW5pdGlvbiog bWlyLCBNRGVmaW5pdGlvbiogbGhzLCBNRGVmaW5pdGlvbiogcmhzKTsKLSsgIHZvaWQgbG93ZXJG b3JNdWxJbnQ2NChMTXVsSTY0KiBpbnMsIE1NdWwqIG1pciwgTURlZmluaXRpb24qIGxocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogcmhzKTsKLSsgIHZvaWQgbG93ZXJG b3JGUFUoTEluc3RydWN0aW9uSGVscGVyPDEsIDEsIDA+KiBpbnMsIE1EZWZpbml0aW9uKiBtaXIs Ci0rICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBpbnB1dCk7Ci0rICB2b2lkIGxvd2Vy Rm9yRlBVKExJbnN0cnVjdGlvbkhlbHBlcjwxLCAyLCAwPiogaW5zLCBNRGVmaW5pdGlvbiogbWly LAotKyAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogbGhzLCBNRGVmaW5pdGlvbiogcmhz KTsKLSsKLSsgIHRlbXBsYXRlIDxzaXplX3QgVGVtcHM+Ci0rICB2b2lkIGxvd2VyRm9yQ29tcGFy ZUk2NChMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMiAqIElOVDY0X1BJRUNFUywgVGVtcHM+KiBsaXIs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogbWlyLCBNRGVmaW5pdGlv biogbGhzLCBNRGVmaW5pdGlvbiogcmhzKTsKLSsKLSsgIExCb3hBbGxvY2F0aW9uIHVzZUJveEZp eGVkKE1EZWZpbml0aW9uKiBtaXIsIFJlZ2lzdGVyIHJlZzEsIFJlZ2lzdGVyIHJlZzIsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZUF0U3RhcnQgPSBmYWxzZSk7Ci0rCi0r ICBMQWxsb2NhdGlvbiB1c2VCeXRlT3BSZWdpc3RlcihNRGVmaW5pdGlvbiogbWlyKTsKLSsgIExB bGxvY2F0aW9uIHVzZUJ5dGVPcFJlZ2lzdGVyQXRTdGFydChNRGVmaW5pdGlvbiogbWlyKTsKLSsg IExBbGxvY2F0aW9uIHVzZUJ5dGVPcFJlZ2lzdGVyT3JOb25Eb3VibGVDb25zdGFudChNRGVmaW5p dGlvbiogbWlyKTsKLSsgIExEZWZpbml0aW9uIHRlbXBCeXRlT3BSZWdpc3RlcigpOwotKwotKyAg TERlZmluaXRpb24gdGVtcFRvVW5ib3goKTsKLSsKLSsgIGJvb2wgbmVlZFRlbXBGb3JQb3N0QmFy cmllcigpIHsgcmV0dXJuIHRydWU7IH0KLSsKLSsgIHZvaWQgbG93ZXJVbnR5cGVkUGhpSW5wdXQo TVBoaSogcGhpLCB1aW50MzJfdCBpbnB1dFBvc2l0aW9uLCBMQmxvY2sqIGJsb2NrLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGlySW5kZXgpOwotKyAgdm9pZCBsb3dlcklu dDY0UGhpSW5wdXQoTVBoaSogcGhpLCB1aW50MzJfdCBpbnB1dFBvc2l0aW9uLCBMQmxvY2sqIGJs b2NrLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxpckluZGV4KTsKLSsgIHZv aWQgZGVmaW5lSW50NjRQaGkoTVBoaSogcGhpLCBzaXplX3QgbGlySW5kZXgpOwotKwotKyAgdm9p ZCBsb3dlck11bEkoTU11bCogbXVsLCBNRGVmaW5pdGlvbiogbGhzLCBNRGVmaW5pdGlvbiogcmhz KTsKLSsgIHZvaWQgbG93ZXJEaXZJKE1EaXYqIGRpdik7Ci0rICB2b2lkIGxvd2VyRGl2STY0KE1E aXYqIGRpdik7Ci0rICB2b2lkIGxvd2VyTW9kSShNTW9kKiBtb2QpOwotKyAgdm9pZCBsb3dlck1v ZEk2NChNTW9kKiBtb2QpOwotKyAgdm9pZCBsb3dlclVEaXYoTURpdiogZGl2KTsKLSsgIHZvaWQg bG93ZXJVRGl2STY0KE1EaXYqIGRpdik7Ci0rICB2b2lkIGxvd2VyVU1vZChNTW9kKiBtb2QpOwot KyAgdm9pZCBsb3dlclVNb2RJNjQoTU1vZCogbW9kKTsKLSsgIHZvaWQgbG93ZXJVcnNoRChNVXJz aCogbWlyKTsKLSsgIHZvaWQgbG93ZXJQb3dPZlR3b0koTVBvdyogbWlyKTsKLSsgIHZvaWQgbG93 ZXJCaWdJbnRQdHJEaXYoTUJpZ0ludFB0ckRpdiogaW5zKTsKLSsgIHZvaWQgbG93ZXJCaWdJbnRQ dHJNb2QoTUJpZ0ludFB0ck1vZCogaW5zKTsKLSsgIHZvaWQgbG93ZXJCaWdJbnRQdHJMc2goTUJp Z0ludFB0ckxzaCogaW5zKTsKLSsgIHZvaWQgbG93ZXJCaWdJbnRQdHJSc2goTUJpZ0ludFB0clJz aCogaW5zKTsKLSsgIHZvaWQgbG93ZXJUcnVuY2F0ZURUb0ludDMyKE1UcnVuY2F0ZVRvSW50MzIq IGlucyk7Ci0rICB2b2lkIGxvd2VyVHJ1bmNhdGVGVG9JbnQzMihNVHJ1bmNhdGVUb0ludDMyKiBp bnMpOwotKyAgdm9pZCBsb3dlckJ1aWx0aW5JbnQ2NFRvRmxvYXRpbmdQb2ludChNQnVpbHRpbklu dDY0VG9GbG9hdGluZ1BvaW50KiBpbnMpOwotKyAgdm9pZCBsb3dlcldhc21TZWxlY3RJKE1XYXNt U2VsZWN0KiBzZWxlY3QpOwotKyAgdm9pZCBsb3dlcldhc21TZWxlY3RJNjQoTVdhc21TZWxlY3Qq IHNlbGVjdCk7Ci0rICB2b2lkIGxvd2VyV2FzbUJ1aWx0aW5UcnVuY2F0ZVRvSW50NjQoTVdhc21C dWlsdGluVHJ1bmNhdGVUb0ludDY0KiBpbnMpOwotKyAgdm9pZCBsb3dlcldhc21CdWlsdGluVHJ1 bmNhdGVUb0ludDMyKE1XYXNtQnVpbHRpblRydW5jYXRlVG9JbnQzMiogaW5zKTsKLSsgIHZvaWQg bG93ZXJXYXNtQnVpbHRpbkRpdkk2NChNV2FzbUJ1aWx0aW5EaXZJNjQqIGRpdik7Ci0rICB2b2lk IGxvd2VyV2FzbUJ1aWx0aW5Nb2RJNjQoTVdhc21CdWlsdGluTW9kSTY0KiBtb2QpOwotKyAgdm9p ZCBsb3dlckF0b21pY0xvYWQ2NChNTG9hZFVuYm94ZWRTY2FsYXIqIGlucyk7Ci0rICB2b2lkIGxv d2VyQXRvbWljU3RvcmU2NChNU3RvcmVVbmJveGVkU2NhbGFyKiBpbnMpOwotKwotKyNpZmRlZiBF TkFCTEVfV0FTTV9TSU1ECi0rICBib29sIGNhbkZvbGRSZWR1Y2VTaW1kMTI4QW5kQnJhbmNoKHdh c206OlNpbWRPcCBvcCk7Ci0rICBib29sIGNhbkVtaXRXYXNtUmVkdWNlU2ltZDEyOEF0VXNlcyhN V2FzbVJlZHVjZVNpbWQxMjgqIGlucyk7Ci0rI2VuZGlmCi0rfTsKLSsKLSt0eXBlZGVmIExJUkdl bmVyYXRvclBQQzY0IExJUkdlbmVyYXRvclNwZWNpZmljOwotKwotK30gIC8vIG5hbWVzcGFjZSBq aXQKLSt9ICAvLyBuYW1lc3BhY2UganMKLSsKLSsjZW5kaWYgLyogaml0X3BwYzY0X0xvd2VyaW5n X3BwYzY0X2ggKi8KLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVy LXBwYzY0LWlubC5oIGIvanMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC1pbmwu aAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uZjgyY2EzNmI0ZTQw Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBw YzY0LWlubC5oCi1AQCAtMCwwICsxLDYxNDIgQEAKLSsvKiAtKi0gTW9kZTogQysrOyB0YWItd2lk dGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0rICog dmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgotKyAqIFRoaXMgU291cmNlIENvZGUg Rm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKLSsgKiBM aWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQg d2l0aCB0aGlzCi0rICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxh Lm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsjaWZuZGVmIGppdF9wcGM2NF9NYWNyb0Fzc2VtYmxlcl9w cGM2NF9pbmxfaAotKyNkZWZpbmUgaml0X3BwYzY0X01hY3JvQXNzZW1ibGVyX3BwYzY0X2lubF9o Ci0rCi0rI2luY2x1ZGUgImppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5oIgotKwotK25h bWVzcGFjZSBqcyB7Ci0rbmFtZXNwYWNlIGppdCB7Ci0rCi0rLy97e3sgY2hlY2tfbWFjcm9hc3Nl bWJsZXJfc3R5bGUKLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBNb3ZlIGluc3RydWN0aW9ucwotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU2NChSZWdpc3RlcjY0IHNyYywgUmVnaXN0ZXI2NCBkZXN0 KSB7Ci0rICBtb3ZlUHRyKHNyYy5yZWcsIGRlc3QucmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bW92ZTY0KEltbTY0IGltbSwgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBtb3ZlUHRy KEltbVdvcmQoaW1tLnZhbHVlKSwgZGVzdC5yZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjptb3ZlRG91YmxlVG9HUFI2NChGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXI2NCBkZXN0 KSB7Ci0rICBhc19tZnZzcmQoZGVzdC5yZWcsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6Om1vdmVHUFI2NFRvRG91YmxlKFJlZ2lzdGVyNjQgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKLSsgIGFzX210dnNyZChkZXN0LCBzcmMucmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bW92ZUxvd0RvdWJsZVRvR1BSKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBk ZXN0KSB7Ci0rICBNT1pfQ1JBU0goIk5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgdGFyZ2V0Iik7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU2NFRvMzIoUmVnaXN0ZXI2NCBzcmMsIFJl Z2lzdGVyIGRlc3QpIHsKLSsgIGFzX2V4dHN3KGRlc3QsIHNyYy5yZWcpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjptb3ZlMzJUbzY0WmVyb0V4dGVuZChSZWdpc3RlciBzcmMsIFJlZ2lz dGVyNjQgZGVzdCkgewotKyAgLy8gY2xybGRpIGRlc3QsIHNyYywgMzIg4oCUIGNsZWFyIHVwcGVy IDMyIGJpdHMuCi0rICBhc19ybGRpY2woZGVzdC5yZWcsIHNyYywgMCwgMzIpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlOFRvNjRTaWduRXh0ZW5kKFJlZ2lzdGVyIHNyYywgUmVn aXN0ZXI2NCBkZXN0KSB7Ci0rICBhc19leHRzYihkZXN0LnJlZywgc3JjKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTE2VG82NFNpZ25FeHRlbmQoUmVnaXN0ZXIgc3JjLCBSZWdp c3RlcjY0IGRlc3QpIHsKLSsgIGFzX2V4dHNoKGRlc3QucmVnLCBzcmMpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjptb3ZlMzJUbzY0U2lnbkV4dGVuZChSZWdpc3RlciBzcmMsIFJlZ2lz dGVyNjQgZGVzdCkgewotKyAgYXNfZXh0c3coZGVzdC5yZWcsIHNyYyk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6Om1vdmVGbG9hdDMyVG9HUFIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lz dGVyIGRlc3QpIHsKLSsgIC8vIEZQUiBob2xkcyBkb3VibGUtZm9ybWF0IHZhbHVlIChQUEMgY29u dmVudGlvbikuIENvbnZlcnQgdG8KLSsgIC8vIHNpbmdsZS1wcmVjaXNpb24gYml0cyBpbiBiaXRz IDA6MzEgb2YgdGhlIFZTUiwgdGhlbiBleHRyYWN0LgotKyAgYXNfeHNjdmRwc3BuKFNjcmF0Y2hE b3VibGVSZWcsIHNyYyk7Ci0rICBhc19tZnZzcmQoZGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0r ICB4X3NyZGkoZGVzdCwgZGVzdCwgMzIpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpt b3ZlR1BSVG9GbG9hdDMyKFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAv LyBQbGFjZSByYXcgc2luZ2xlLXByZWNpc2lvbiBiaXRzIGluIFZTUiBiaXRzIDA6MzEsIHRoZW4g Y29udmVydAotKyAgLy8gdG8gZG91YmxlLXByZWNpc2lvbiBmb3JtYXQgKG1hdGNoaW5nIFBQQydz IEZQUiBjb252ZW50aW9uLCBsaWtlIGxmcykuCi0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAg Ly8gbXR2c3J3cyBzcGxhdHMgdGhlIDMyLWJpdCB3b3JkIHRvIGJvdGggaGFsdmVzIG9mIHRoZSBW U1IuCi0rICAgIGFzX210dnNyd3MoZGVzdCwgc3JjKTsKLSsgIH0gZWxzZSB7Ci0rICAgIC8vIFBP V0VSODogc2hpZnQgR1BSIGxlZnQgMzIgYml0cyB0byBwbGFjZSBmbG9hdCBiaXRzIGluIHVwcGVy IHdvcmQsCi0rICAgIC8vIHRoZW4gbW92ZSB0byBWU1IuIHhzY3ZzcGRwbiByZWFkcyBmcm9tIGJp dHMgMDozMS4KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAg ICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIHhfc2xkaSh0bXAsIHNyYywg MzIpOwotKyAgICBhc19tdHZzcmQoZGVzdCwgdG1wKTsKLSsgIH0KLSsgIGFzX3hzY3ZzcGRwbihk ZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZUZsb2F0MTZUb0dQ UihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VSVChIYXNQ T1dFUjkoKSk7Ci0rICAvLyBzcmMgaGFzIEZQMTYgaW4gZHcwIGJpdHMgNDg6NjM7IHJlc3Qgb2Yg ZHcwIGlzIDAgKHBlciB4c2N2ZHBocCAvCi0rICAvLyBseHNpaHp4IC8gbXR2c3J3eiBjb250cmFj dCkuIG1mdnNyZCByZWFkcyBkdzAg4oaSIGRlc3QgPSAweC4uLjAwMDBfSEhISC4KLSsgIC8vIE1h c2sgZGVmZW5zaXZlbHkgaW4gY2FzZSBhIGZ1dHVyZSBjYWxsZXIgaGFuZHMgdXMgYSBub24tY2Fu b25pY2FsIEZQMTYuCi0rICBhc19tZnZzcmQoZGVzdCwgc3JjKTsKLSsgIGFzX3JsZGljbChkZXN0 LCBkZXN0LCAwLCA0OCk7ICAvLyBjbHJsZGkgNDg6IGtlZXAgbG93IDE2IGJpdHMKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZUdQUlRvRmxvYXQxNihSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7Ci0rICAvLyBtdHZz cnd6IHplcm9zIGR3MCB3b3JkIDAgYW5kIGNvcGllcyBzcmMncyBsb3cgMzIgdG8gZHcwIHdvcmQg MTsgbWFzawotKyAgLy8gc3JjIHRvIGl0cyBsb3cgMTYgZmlyc3Qgc28gZHcwIGJpdHMgMzI6NDcg c3RheSB6ZXJvIChjYW5vbmljYWwgRlAxNikuCi0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcygqdGhpcyk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAg YXNfcmxkaWNsKHNjcmF0Y2gsIHNyYywgMCwgNDgpOyAgLy8gY2xybGRpIDQ4OiBrZWVwIG9ubHkg bG93IDE2Ci0rICBhc19tdHZzcnd6KGRlc3QsIHNjcmF0Y2gpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjptb3ZlOFplcm9FeHRlbmQoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7 Ci0rICAvLyBybHdpbm0gZGVzdCwgc3JjLCAwLCAyNCwgMzEg4oCUIG1hc2sgdG8gbG93IDggYml0 cy4KLSsgIGFzX3Jsd2lubShkZXN0LCBzcmMsIDAsIDI0LCAzMSk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om1vdmU4U2lnbkV4dGVuZChSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIGFzX2V4dHNiKGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om1vdmUxNlNpZ25FeHRlbmQoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBhc19l eHRzaChkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlOFNpZ25F eHRlbmRUb1B0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2V4dHNiKGRl c3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUxNlNpZ25FeHRlbmRU b1B0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2V4dHNoKGRlc3QsIHNy Yyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUzMlNpZ25FeHRlbmRUb1B0cihS ZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2V4dHN3KGRlc3QsIHNyYyk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUzMlplcm9FeHRlbmRUb1B0cihSZWdpc3Rl ciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3JsZGljbChkZXN0LCBzcmMsIDAsIDMyKTsK LSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rLy8gTG9hZCBpbnN0cnVjdGlvbnMKLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpsb2FkMzJTaWduRXh0ZW5kVG9QdHIoY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdp c3RlciBkZXN0KSB7Ci0rICBsb2FkMzIoc3JjLCBkZXN0KTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRl c3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsb2FkQWJpUmV0dXJuQWRkcmVzcyhS ZWdpc3RlciBkZXN0KSB7IHhzX21mbHIoZGVzdCk7IH0KLSsKLSsvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBMb2dp Y2FsIGluc3RydWN0aW9ucwotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5vdDMyKFJlZ2lzdGVy IHJlZykgewotKyAgeF9ub3QocmVnLCByZWcpOwotKyAgYXNfZXh0c3cocmVnLCByZWcpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpub3RQdHIoUmVnaXN0ZXIgcmVnKSB7IHhfbm90KHJl ZywgcmVnKTsgfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZFB0cihSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2FuZF8oZGVzdCwgZGVzdCwgc3JjKTsKLSt9Ci0rCi0r Ly8gSWYgYG1hc2tgIGlzIGEgbm9uLXplcm8sIG5vbi1hbGwtb25lcyBjb250aWd1b3VzIHJ1biBv ZiAxLWJpdHMgaW4gYQotKy8vIDMyLWJpdCB2YWx1ZSAoTFNCLW51bWJlcmluZyksIHNldCBNQi9N RSB0byB0aGUgQkUgYml0IHBvc2l0aW9ucwotKy8vIChQUEMgY29udmVudGlvbjogYml0IDAgPSBN U0IpIG5lZWRlZCBieSBgcmx3aW5tIFNIPTBgIGFuZCByZXR1cm4gdHJ1ZS4KLSsvLyBPdGhlcndp c2UgcmV0dXJuIGZhbHNlLiBSdW4tdGltZSBjb3N0IGlzIGF0IEpJVCBlbWl0IHRpbWUgb25seS4K LStzdGF0aWMgaW5saW5lIGJvb2wgSXNDb250aWdNYXNrMzIodWludDMyX3QgbWFzaywgdW5zaWdu ZWQmIG1iLCB1bnNpZ25lZCYgbWUpIHsKLSsgIGlmIChtYXNrID09IDAgfHwgbWFzayA9PSAweEZG RkZGRkZGdSkgcmV0dXJuIGZhbHNlOwotKyAgdW5zaWduZWQgdHogPSAodW5zaWduZWQpX19idWls dGluX2N0eihtYXNrKTsKLSsgIHVpbnQzMl90IHNoaWZ0ZWQgPSBtYXNrID4+IHR6OwotKyAgaWYg KChzaGlmdGVkICYgKHNoaWZ0ZWQgKyAxKSkgIT0gMCkgcmV0dXJuIGZhbHNlOyAgLy8gSGFzIGEg MCBiZXR3ZWVuIDFzLgotKyAgdW5zaWduZWQgd2lkdGggPSAzMiAtICh1bnNpZ25lZClfX2J1aWx0 aW5fY2x6KHNoaWZ0ZWQpOwotKyAgLy8gTFNCIGJpdHMgc2V0OiBbdHosIHR6K3dpZHRoLTFdLiBC RSBiaXRzOiBbMzItdHotd2lkdGgsIDMxLXR6XS4KLSsgIG1iID0gMzIgLSB0eiAtIHdpZHRoOwot KyAgbWUgPSAzMSAtIHR6OwotKyAgcmV0dXJuIHRydWU7Ci0rfQotKwotKy8vIDY0LWJpdCBjb250 aWd1b3VzLW1hc2sgY2xhc3NpZmljYXRpb24gZm9yIEFORC13aXRoLWltbSB2aWEgUFBDJ3MKLSsv LyByb3RhdGUtYW5kLW1hc2sgZmFtaWx5IChTSD0wKS4gT24gc3VjY2Vzcywgc2V0cyBgbHNiYCAo TFNCLW51bWJlcmluZwotKy8vIG9mIGxvd2VzdCBzZXQgYml0KSBhbmQgYHdpZHRoYCAobnVtYmVy IG9mIGNvbnRpZ3VvdXMgMS1iaXRzKS4KLSsvLyBDYWxsZXIgcGlja3MgdGhlIGVuY29kaW5nOgot Ky8vICAgLSBsc2IgPT0gMDogICAgICAgICAgICAgICAgbG93IGB3aWR0aGAgYml0cyBzZXQgICAg ICAgIOKGkiBybGRpY2wKLSsvLyAgIChtYjY9NjQtd2lkdGgpCi0rLy8gICAtIGxzYiArIHdpZHRo ID09IDY0OiAgICAgICBoaWdoIGB3aWR0aGAgYml0cyBzZXQgICAgICAg4oaSIHJsZGljcgotKy8v ICAgKG1lNj13aWR0aC0xKQotKy8vICAgLSBsc2IgKyB3aWR0aCA8PSAzMjogICAgICAgY29udGln IG1hc2sgd2l0aGluIGxvdyAzMiAgIOKGkiBybHdpbm0gKHplcm9zIGhpZ2gKLSsvLyAgIDMyKQot Ky8vICAgLSBvdGhlcndpc2UgKG1pZC1ydW4gbWFzayBzdHJhZGRsaW5nIGJpdCAzMiB3aXRoIGxz Yj4wKTogbm8gU0g9MCBzaW5nbGUKLSsvLyAgICAgaW5zbiBmaXRzLCByZXR1cm4gZmFsc2UgdG8g ZmFsbCBiYWNrIHRvIHNjcmF0Y2grYW5kLgotK3N0YXRpYyBpbmxpbmUgYm9vbCBJc0NvbnRpZ01h c2s2NCh1aW50NjRfdCBtYXNrLCB1bnNpZ25lZCYgbHNiLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCYgd2lkdGgpIHsKLSsgIGlmIChtYXNrID09IDAgfHwgbWFz ayA9PSB+dWludDY0X3QoMCkpIHJldHVybiBmYWxzZTsKLSsgIHVuc2lnbmVkIHR6ID0gKHVuc2ln bmVkKV9fYnVpbHRpbl9jdHpsbChtYXNrKTsKLSsgIHVpbnQ2NF90IHNoaWZ0ZWQgPSBtYXNrID4+ IHR6OwotKyAgaWYgKChzaGlmdGVkICYgKHNoaWZ0ZWQgKyAxKSkgIT0gMCkgcmV0dXJuIGZhbHNl OyAgLy8gSGFzIGEgMCBiZXR3ZWVuIDFzLgotKyAgd2lkdGggPSA2NCAtICh1bnNpZ25lZClfX2J1 aWx0aW5fY2x6bGwoc2hpZnRlZCk7Ci0rICBsc2IgPSB0ejsKLSsgIHJldHVybiB0cnVlOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphbmRQdHIoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0 KSB7Ci0rICAvLyBhbmRpLiBoYW5kbGVzIDE2LWJpdCB1bnNpZ25lZCBpbW1lZGlhdGVzIGluIDEg aW5zbiAoc2V0cyBDUjApLgotKyAgLy8gRm9yIHdpZGVyIHBvc2l0aXZlIGltbWVkaWF0ZXMsIElz Q29udGlnTWFzazMyIOKGkiBybHdpbm0gKDEgaW5zbiwKLSsgIC8vIGFsc28gc2V0cyBDUjApLiBO T1RFOiBhbmRQdHIgc2lnbi1leHRlbmRzIEltbTMyIHRvIDY0LWJpdCBiZWZvcmUKLSsgIC8vIEFO RGluZywgc28gY29udGlnLW1hc2sgaXMgb25seSBzYWZlIHdoZW4gdGhlIGltbWVkaWF0ZSBpcwot KyAgLy8gbm9uLW5lZ2F0aXZlIChoaWdoIGJpdCBjbGVhcikg4oCUIHJsd2lubSBhbHdheXMgemVy b3MgdGhlIGhpZ2ggMzIuCi0rICB1aW50MzJfdCB1aW1tID0gdWludDMyX3QoaW1tLnZhbHVlKTsK LSsgIGlmIChpc191aW50Tih1aW1tLCAxNikpIHsKLSsgICAgYXNfYW5kaV9yYyhkZXN0LCBkZXN0 LCB1aW1tKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgdW5zaWduZWQgbWIsIG1lOwotKyAgaWYg KGltbS52YWx1ZSA+PSAwICYmIElzQ29udGlnTWFzazMyKHVpbW0sIG1iLCBtZSkpIHsKLSsgICAg YXNfcmx3aW5tX3JjKGRlc3QsIGRlc3QsIDAsIG1iLCBtZSk7Ci0rICAgIHJldHVybjsKLSsgIH0K LSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQodWludHB0cl90 KGludHB0cl90KGltbS52YWx1ZSkpKSwgc2NyYXRjaCk7Ci0rICBhc19hbmRfKGRlc3QsIGRlc3Qs IHNjcmF0Y2gpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphbmRQdHIoSW1tMzIgaW1t LCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGlmIChzcmMgIT0gZGVzdCkgewot KyAgICB4c19tcihkZXN0LCBzcmMpOwotKyAgfQotKyAgYW5kUHRyKGltbSwgZGVzdCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZDY0KEltbTY0IGltbSwgUmVnaXN0ZXI2NCBkZXN0 KSB7Ci0rICB1aW50NjRfdCB1ID0gaW1tLnZhbHVlOwotKyAgLy8gMTYtYml0IHVuc2lnbmVkIOKG kiBhbmRpLiAoMSBpbnNuKS4KLSsgIGlmICh1IDw9IDB4RkZGRnUpIHsKLSsgICAgYXNfYW5kaV9y YyhkZXN0LnJlZywgZGVzdC5yZWcsIHVpbnQxNl90KHUpKTsKLSsgICAgcmV0dXJuOwotKyAgfQot KyAgdW5zaWduZWQgbHNiLCB3aWR0aDsKLSsgIGlmIChJc0NvbnRpZ01hc2s2NCh1LCBsc2IsIHdp ZHRoKSkgewotKyAgICBpZiAobHNiID09IDApIHsKLSsgICAgICAvLyBsb3cgYHdpZHRoYCBiaXRz IHNldDogcmxkaWNsIFNIPTAgTUI9NjQtd2lkdGguCi0rICAgICAgYXNfcmxkaWNsX3JjKGRlc3Qu cmVnLCBkZXN0LnJlZywgMCwgNjQgLSB3aWR0aCk7Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0r ICAgIGlmIChsc2IgKyB3aWR0aCA9PSA2NCkgewotKyAgICAgIC8vIGhpZ2ggYHdpZHRoYCBiaXRz IHNldDogcmxkaWNyIFNIPTAgTUU9d2lkdGgtMS4KLSsgICAgICBhc19ybGRpY3JfcmMoZGVzdC5y ZWcsIGRlc3QucmVnLCAwLCB3aWR0aCAtIDEpOwotKyAgICAgIHJldHVybjsKLSsgICAgfQotKyAg ICBpZiAobHNiICsgd2lkdGggPD0gMzIpIHsKLSsgICAgICAvLyBjb250aWcgbWFzayB3aXRoaW4g bG93IDMyOiBybHdpbm0gU0g9MCB6ZXJvcyBiaXRzIDAuLjMxIHRvby4KLSsgICAgICAvLyBCRSBw b3NpdGlvbnM6IG1iID0gMzIgLSBsc2IgLSB3aWR0aCwgbWUgPSAzMSAtIGxzYi4KLSsgICAgICBh c19ybHdpbm1fcmMoZGVzdC5yZWcsIGRlc3QucmVnLCAwLCAzMiAtIGxzYiAtIHdpZHRoLCAzMSAt IGxzYik7Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rICAgIC8vIG1pZC1ydW4gbWFzayBzdHJh ZGRsaW5nIGJpdCAzMiAobHNiPjAsIGxzYit3aWR0aD4zMiwgbHNiK3dpZHRoPDY0KToKLSsgICAg Ly8gbm90IGVuY29kYWJsZSBhcyBTSD0wIG1hc2suIEZhbGwgdGhyb3VnaCB0byBzY3JhdGNoK2Fu ZC4KLSsgIH0KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQo dSksIHNjcmF0Y2gpOwotKyAgYXNfYW5kXyhkZXN0LnJlZywgZGVzdC5yZWcsIHNjcmF0Y2gpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphbmQ2NChSZWdpc3RlcjY0IHNyYywgUmVnaXN0 ZXI2NCBkZXN0KSB7Ci0rICBhc19hbmRfKGRlc3QucmVnLCBkZXN0LnJlZywgc3JjLnJlZyk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZDMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIg ZGVzdCkgewotKyAgYXNfYW5kXyhkZXN0LCBkZXN0LCBzcmMpOwotKyAgYXNfZXh0c3coZGVzdCwg ZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZDMyKEltbTMyIGltbSwgUmVn aXN0ZXIgZGVzdCkgewotKyAgdWludDMyX3QgdWltbSA9IHVpbnQzMl90KGltbS52YWx1ZSk7Ci0r ICBpZiAoaXNfdWludE4odWltbSwgMTYpKSB7Ci0rICAgIGFzX2FuZGlfcmMoZGVzdCwgZGVzdCwg dWltbSk7Ci0rICB9IGVsc2UgewotKyAgICB1bnNpZ25lZCBtYiwgbWU7Ci0rICAgIGlmIChJc0Nv bnRpZ01hc2szMih1aW1tLCBtYiwgbWUpKSB7Ci0rICAgICAgLy8gcmx3aW5tLlNIPTAgQU5EcyB3 aXRoIHRoZSBjb250aWd1b3VzIG1hc2s7IHJlY29yZCBmb3JtIHNldHMgQ1IwCi0rICAgICAgLy8g dG8gbWF0Y2ggdGhlIHNpZGUtZWZmZWN0IG9mIHRoZSBhbmRpLiBmYXN0IHBhdGggYWJvdmUuCi0r ICAgICAgYXNfcmx3aW5tX3JjKGRlc3QsIGRlc3QsIDAsIG1iLCBtZSk7Ci0rICAgIH0gZWxzZSB7 Ci0rICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICAg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgbW92ZTMyKGltbSwg c2NyYXRjaCk7Ci0rICAgICAgYXNfYW5kXyhkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSsgICAgfQot KyAgfQotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBp ZiAoc3JjICE9IGRlc3QpIHsKLSsgICAgeHNfbXIoZGVzdCwgc3JjKTsKLSsgIH0KLSsgIGFuZDMy KGltbSwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZDMyKEltbTMyIGlt bSwgY29uc3QgQWRkcmVzcyYgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg IGxvYWQzMihkZXN0LCBzY3JhdGNoKTsKLSsgIGFuZDMyKGltbSwgc2NyYXRjaCk7Ci0rICBzdG9y ZTMyKHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphbmQzMihj b25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBsb2FkMzIoc3JjLCBzY3JhdGNoKTsKLSsgIGFzX2FuZF8oZGVzdCwgZGVzdCwg c2NyYXRjaCk7Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6b3I2NChJbW02NCBpbW0sIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgdWludDY0X3Qg dSA9IGltbS52YWx1ZTsKLSsgIC8vIG9yaS9vcmlzIHplcm8tZXh0ZW5kIHRoZWlyIGltbWVkaWF0 ZXMgYW5kIGRvbid0IHRvdWNoIG90aGVyIGJpdHMsIHNvCi0rICAvLyB3aGVuIGltbSBmaXRzIGlu IHVuc2lnbmVkIDMyIChoaWdoIDMyID09IDApIHRoZSBwYWlyIGhhbmRsZXMgaXQgaW4KLSsgIC8v IDEtMiBpbnNucyB3aXRoIG5vIHNjcmF0Y2guCi0rICBpZiAodSA8PSAweEZGRkZGRkZGdSkgewot KyAgICB1aW50MTZfdCBsbyA9IHVpbnQxNl90KHUpOwotKyAgICB1aW50MTZfdCBoaSA9IHVpbnQx Nl90KHUgPj4gMTYpOwotKyAgICBpZiAoaGkgPT0gMCkgewotKyAgICAgIGFzX29yaShkZXN0LnJl ZywgZGVzdC5yZWcsIGxvKTsKLSsgICAgfSBlbHNlIGlmIChsbyA9PSAwKSB7Ci0rICAgICAgYXNf b3JpcyhkZXN0LnJlZywgZGVzdC5yZWcsIGhpKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc19v cmkoZGVzdC5yZWcsIGRlc3QucmVnLCBsbyk7Ci0rICAgICAgYXNfb3JpcyhkZXN0LnJlZywgZGVz dC5yZWcsIGhpKTsKLSsgICAgfQotKyAgICByZXR1cm47Ci0rICB9Ci0rICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgbW92ZVB0cihJbW1Xb3JkKHUpLCBzY3JhdGNoKTsKLSsgIGFzX29yXyhk ZXN0LnJlZywgZGVzdC5yZWcsIHNjcmF0Y2gpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpvcjMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfb3JfKGRlc3QsIGRl c3QsIHNyYyk7Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHVpbnQzMl90IHVp bW0gPSB1aW50MzJfdChpbW0udmFsdWUpOwotKyAgdWludDE2X3QgbG8gPSB1aW1tICYgMHhGRkZG OwotKyAgdWludDE2X3QgaGkgPSAodWltbSA+PiAxNikgJiAweEZGRkY7Ci0rICBpZiAoaGkgPT0g MCkgewotKyAgICBhc19vcmkoZGVzdCwgZGVzdCwgbG8pOwotKyAgfSBlbHNlIGlmIChsbyA9PSAw KSB7Ci0rICAgIGFzX29yaXMoZGVzdCwgZGVzdCwgaGkpOwotKyAgfSBlbHNlIHsKLSsgICAgLy8g b3JpICsgb3JpcyBwYWlyIGhhbmRsZXMgYXJiaXRyYXJ5IDMyLWJpdCB1bnNpZ25lZCBpbW0gaW4g MiBpbnNucwotKyAgICAvLyB3aXRob3V0IGEgc2NyYXRjaCBHUFIuIG9yaS9vcmlzIGFyZSBub24t cmVjb3JkIGZvcm1zIChkb24ndCB0b3VjaAotKyAgICAvLyBDUjApLCBtYXRjaGluZyB0aGUgYmVo YXZpb3Igb2YgdGhlIHByZXZpb3VzIHNjcmF0Y2grb3JfIHBhdGgKLSsgICAgLy8gKG9yXyBpcyB0 aGUgcmVjb3JkIGZvcm0sIGJ1dCB0aGUgdmFsdWUtb25seSByZXN1bHQgaXMgd2hhdCBjYWxsZXJz Ci0rICAgIC8vIG9ic2VydmUgdGhyb3VnaCBkZXN0KS4KLSsgICAgYXNfb3JpKGRlc3QsIGRlc3Qs IGxvKTsKLSsgICAgYXNfb3JpcyhkZXN0LCBkZXN0LCBoaSk7Ci0rICB9Ci0rICBhc19leHRzdyhk ZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b3IzMihJbW0zMiBpbW0s IFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgaWYgKHNyYyAhPSBkZXN0KSB7Ci0r ICAgIHhzX21yKGRlc3QsIHNyYyk7Ci0rICB9Ci0rICBvcjMyKGltbSwgZGVzdCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9yMzIoSW1tMzIgaW1tLCBjb25zdCBBZGRyZXNzJiBkZXN0 KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZDMyKGRlc3QsIHNjcmF0Y2gp OwotKyAgb3IzMihpbW0sIHNjcmF0Y2gpOwotKyAgc3RvcmUzMihzY3JhdGNoLCBkZXN0KTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yNjQoSW1tNjQgaW1tLCBSZWdpc3RlcjY0IGRl c3QpIHsKLSsgIHVpbnQ2NF90IHUgPSBpbW0udmFsdWU7Ci0rICAvLyB4b3JpL3hvcmlzIHplcm8t ZXh0ZW5kIHRoZWlyIGltbWVkaWF0ZXM7IGZvciB1bnNpZ25lZC0zMi1maXQgdmFsdWVzCi0rICAv LyB0aGV5IHJlcGxhY2UgdGhlIHNjcmF0Y2greG9yIHNlcXVlbmNlIHdpdGggMS0yIGluc25zLgot KyAgaWYgKHUgPD0gMHhGRkZGRkZGRnUpIHsKLSsgICAgdWludDE2X3QgbG8gPSB1aW50MTZfdCh1 KTsKLSsgICAgdWludDE2X3QgaGkgPSB1aW50MTZfdCh1ID4+IDE2KTsKLSsgICAgaWYgKGhpID09 IDApIHsKLSsgICAgICBhc194b3JpKGRlc3QucmVnLCBkZXN0LnJlZywgbG8pOwotKyAgICB9IGVs c2UgaWYgKGxvID09IDApIHsKLSsgICAgICBhc194b3JpcyhkZXN0LnJlZywgZGVzdC5yZWcsIGhp KTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc194b3JpKGRlc3QucmVnLCBkZXN0LnJlZywgbG8p OwotKyAgICAgIGFzX3hvcmlzKGRlc3QucmVnLCBkZXN0LnJlZywgaGkpOwotKyAgICB9Ci0rICAg IHJldHVybjsKLSsgIH0KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKElt bVdvcmQodSksIHNjcmF0Y2gpOwotKyAgYXNfeG9yXyhkZXN0LnJlZywgZGVzdC5yZWcsIHNjcmF0 Y2gpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpvclB0cihSZWdpc3RlciBzcmMsIFJl Z2lzdGVyIGRlc3QpIHsKLSsgIGFzX29yXyhkZXN0LCBkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpvclB0cihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHVp bnQzMl90IHVpbW0gPSB1aW50MzJfdChpbW0udmFsdWUpOwotKyAgdWludDE2X3QgbG8gPSB1aW1t ICYgMHhGRkZGOwotKyAgdWludDE2X3QgaGkgPSAodWltbSA+PiAxNikgJiAweEZGRkY7Ci0rICAv LyBvcmkvb3JpcyB6ZXJvLWV4dGVuZCB0aGVpciBpbW1lZGlhdGVzLCBzbyBmb3Igbm9uLW5lZ2F0 aXZlIEltbTMyIChoaWdoCi0rICAvLyAzMiBvZiBzaWduLWV4dGVuZGVkIHZhbHVlID0gMCkgd2Ug Y2FuIHVzZSBvcmkrb3JpcyB0byBPUiB0aGUgZnVsbAotKyAgLy8gMzItYml0IHBhdHRlcm4gaW4g MS0yIGluc25zLiBOZWdhdGl2ZSBJbW0zMiBzaWduLWV4dGVuZHMgdG8gc2V0IGhpZ2gKLSsgIC8v IGJpdHMgMzIuLjYzIGluIHRoZSBPUiDigJQgdGhvc2UgYml0cyB3b3VsZCBiZSBsb3N0IHdpdGgg b3JpK29yaXMgYWxvbmUuCi0rICBpZiAoaW1tLnZhbHVlID49IDApIHsKLSsgICAgaWYgKGhpID09 IDApIHsKLSsgICAgICBhc19vcmkoZGVzdCwgZGVzdCwgbG8pOwotKyAgICB9IGVsc2UgaWYgKGxv ID09IDApIHsKLSsgICAgICBhc19vcmlzKGRlc3QsIGRlc3QsIGhpKTsKLSsgICAgfSBlbHNlIHsK LSsgICAgICBhc19vcmkoZGVzdCwgZGVzdCwgbG8pOwotKyAgICAgIGFzX29yaXMoZGVzdCwgZGVz dCwgaGkpOwotKyAgICB9Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQodWludHB0cl90KGludHB0cl90KGltbS52YWx1ZSkp KSwgc2NyYXRjaCk7Ci0rICBhc19vcl8oZGVzdCwgZGVzdCwgc2NyYXRjaCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6Om9yUHRyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICBpZiAoc3JjICE9IGRlc3QpIHsKLSsgICAgeHNfbXIoZGVzdCwgc3JjKTsK LSsgIH0KLSsgIG9yUHRyKGltbSwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om9yNjQoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgYXNfb3JfKGRlc3Qu cmVnLCBkZXN0LnJlZywgc3JjLnJlZyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Onhv cjY0KFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgIGFzX3hvcl8oZGVzdC5y ZWcsIGRlc3QucmVnLCBzcmMucmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9y UHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeG9yXyhkZXN0LCBkZXN0 LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp4b3JQdHIoSW1tMzIgaW1tLCBS ZWdpc3RlciBkZXN0KSB7Ci0rICB1aW50MzJfdCB1aW1tID0gdWludDMyX3QoaW1tLnZhbHVlKTsK LSsgIHVpbnQxNl90IGxvID0gdWltbSAmIDB4RkZGRjsKLSsgIHVpbnQxNl90IGhpID0gKHVpbW0g Pj4gMTYpICYgMHhGRkZGOwotKyAgaWYgKGltbS52YWx1ZSA+PSAwKSB7Ci0rICAgIGlmIChoaSA9 PSAwKSB7Ci0rICAgICAgYXNfeG9yaShkZXN0LCBkZXN0LCBsbyk7Ci0rICAgIH0gZWxzZSBpZiAo bG8gPT0gMCkgewotKyAgICAgIGFzX3hvcmlzKGRlc3QsIGRlc3QsIGhpKTsKLSsgICAgfSBlbHNl IHsKLSsgICAgICBhc194b3JpKGRlc3QsIGRlc3QsIGxvKTsKLSsgICAgICBhc194b3JpcyhkZXN0 LCBkZXN0LCBoaSk7Ci0rICAgIH0KLSsgICAgcmV0dXJuOwotKyAgfQotKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZCh1aW50cHRyX3QoaW50cHRyX3QoaW1tLnZh bHVlKSkpLCBzY3JhdGNoKTsKLSsgIGFzX3hvcl8oZGVzdCwgZGVzdCwgc2NyYXRjaCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnhvclB0cihJbW0zMiBpbW0sIFJlZ2lzdGVyIHNyYywg UmVnaXN0ZXIgZGVzdCkgewotKyAgaWYgKHNyYyAhPSBkZXN0KSB7Ci0rICAgIHhzX21yKGRlc3Qs IHNyYyk7Ci0rICB9Ci0rICB4b3JQdHIoaW1tLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6eG9yMzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194b3Jf KGRlc3QsIGRlc3QsIHNyYyk7Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6eG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICB1 aW50MzJfdCB1aW1tID0gdWludDMyX3QoaW1tLnZhbHVlKTsKLSsgIHVpbnQxNl90IGxvID0gdWlt bSAmIDB4RkZGRjsKLSsgIHVpbnQxNl90IGhpID0gKHVpbW0gPj4gMTYpICYgMHhGRkZGOwotKyAg aWYgKGhpID09IDApIHsKLSsgICAgYXNfeG9yaShkZXN0LCBkZXN0LCBsbyk7Ci0rICB9IGVsc2Ug aWYgKGxvID09IDApIHsKLSsgICAgYXNfeG9yaXMoZGVzdCwgZGVzdCwgaGkpOwotKyAgfSBlbHNl IHsKLSsgICAgLy8geG9yaSArIHhvcmlzIHBhaXIg4oCUIDIgaW5zbnMsIG5vIHNjcmF0Y2ggR1BS LgotKyAgICBhc194b3JpKGRlc3QsIGRlc3QsIGxvKTsKLSsgICAgYXNfeG9yaXMoZGVzdCwgZGVz dCwgaGkpOwotKyAgfQotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnhvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0 KSB7Ci0rICBpZiAoc3JjICE9IGRlc3QpIHsKLSsgICAgeHNfbXIoZGVzdCwgc3JjKTsKLSsgIH0K LSsgIHhvcjMyKGltbSwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnhvcjMy KEltbTMyIGltbSwgY29uc3QgQWRkcmVzcyYgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgIGxvYWQzMihkZXN0LCBzY3JhdGNoKTsKLSsgIHhvcjMyKGltbSwgc2NyYXRjaCk7 Ci0rICBzdG9yZTMyKHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy Ojp4b3IzMihjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIoc3JjLCBzY3JhdGNoKTsKLSsgIHhvcjMyKHNjcmF0 Y2gsIGRlc3QpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBTd2FwIGluc3RydWN0aW9ucwotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJ5dGVTd2FwMTZTaWduRXh0ZW5kKFJlZ2lzdGVyIHJlZykg ewotKyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyBicmggYnl0ZS1yZXZlcnNlcyBldmVy eSBoYWxmd29yZCBpbiByZWc7IGV4dHNoIGtlZXBzIGp1c3QgdGhlCi0rICAgIC8vIGxvdyBoYWxm d29yZCdzIGJ5dGUtcmV2ZXJzZWQgdmFsdWUsIHNpZ24tZXh0ZW5kZWQgdG8gNjQgYml0cy4KLSsg ICAgYXNfYnJoKHJlZywgcmVnKTsKLSsgICAgYXNfZXh0c2gocmVnLCByZWcpOwotKyAgICByZXR1 cm47Ci0rICB9Ci0rICAvLyBQT1dFUjgvOTogcm90YXRlLWFuZC1tYXNrIHN5bnRoZXNpcy4gU3dh cCBieXRlcyBpbiBsb3cgaGFsZndvcmQgdmlhCi0rICAvLyAocmVnPDw4KSYweEZGMDAgfCAocmVn Pj44KSYweEZGLCB0aGVuIHNpZ24tZXh0ZW5kLgotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK LSsgIGFzX3Jsd2lubShzY3JhdGNoLCByZWcsIDgsIDE2LCAyMyk7ICAvLyBzY3JhdGNoID0gKHJl Zzw8OCkgJiAweEZGMDAKLSsgIGFzX3Jsd2lubShyZWcsIHJlZywgMjQsIDI0LCAzMSk7ICAgICAv LyByZWcgPSAocmVnPj44KSAmIDB4RkYKLSsgIGFzX29yXyhyZWcsIHJlZywgc2NyYXRjaCk7Ci0r ICBhc19leHRzaChyZWcsIHJlZyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJ5dGVT d2FwMTZaZXJvRXh0ZW5kKFJlZ2lzdGVyIHJlZykgewotKyAgaWYgKEhhc1BPV0VSMTAoKSkgewot KyAgICAvLyBicmggYnl0ZS1yZXZlcnNlcyBldmVyeSBoYWxmd29yZDsgcmxkaWNsIHdpdGggc2g9 MCxtYj00OCB6ZXJvZXMKLSsgICAgLy8gdGhlIHVwcGVyIDQ4IGJpdHMg4oCUIG5vIENSMCBzaWRl IGVmZmVjdCAodnMgYW5kaS4pLgotKyAgICBhc19icmgocmVnLCByZWcpOwotKyAgICBhc19ybGRp Y2wocmVnLCByZWcsIDAsIDQ4KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIC8vIEJvdGggcmx3aW5tIGZvcm1zIHplcm8tZXh0ZW5kIHRoZSA2NC1i aXQgZGVzdGluYXRpb24gcGVyIElTQSB2My4wQgotKyAgLy8gKG1hc2sgTSA9IE1BU0soTUIrMzIs IE1FKzMyKSBpcyAwIGFib3ZlIGJpdCAzMSksIHNvIGFmdGVyIHRoZSBPUiB0aGUKLSsgIC8vIHVw cGVyIDQ4IGJpdHMgYXJlIGFscmVhZHkgemVybyDigJQgbm8gZm9sbG93LXVwIGNsZWFyaW5nIG5l ZWRlZC4KLSsgIGFzX3Jsd2lubShzY3JhdGNoLCByZWcsIDgsIDE2LCAyMyk7Ci0rICBhc19ybHdp bm0ocmVnLCByZWcsIDI0LCAyNCwgMzEpOwotKyAgYXNfb3JfKHJlZywgcmVnLCBzY3JhdGNoKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Ynl0ZVN3YXAzMihSZWdpc3RlciByZWcpIHsK LSsgIGlmIChIYXNQT1dFUjEwKCkpIHsKLSsgICAgLy8gYnJ3IGJ5dGUtcmV2ZXJzZXMgYm90aCAz Mi1iaXQgaGFsdmVzOyBleHRzdyBkcm9wcyB0aGUgdXBwZXIgaGFsZgotKyAgICAvLyBhbmQgc2ln bi1leHRlbmRzIHRoZSBieXRlLXJldmVyc2VkIGxvdyB3b3JkIHRvIDY0IGJpdHMuCi0rICAgIGFz X2JydyhyZWcsIHJlZyk7Ci0rICAgIGFzX2V4dHN3KHJlZywgcmVnKTsKLSsgICAgcmV0dXJuOwot KyAgfQotKyAgLy8gUE9XRVI4Lzk6IHJvdGF0ZS13aXRoLWluc2VydCBzeW50aGVzaXMgKDQgaW5z bnMpLgotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIC8vIHNjcmF0Y2ggPSByb3RhdGUg cmVnIGxlZnQgOCwgbWFzayBieXRlcyAwLDMKLSsgIGFzX3Jsd2lubShzY3JhdGNoLCByZWcsIDgs IDAsIDMxKTsgICAgLy8gcm90bDMyIGJ5IDgKLSsgIGFzX3Jsd2ltaShzY3JhdGNoLCByZWcsIDI0 LCAwLCA3KTsgICAgLy8gaW5zZXJ0IGJ5dGUgMAotKyAgYXNfcmx3aW1pKHNjcmF0Y2gsIHJlZywg MjQsIDE2LCAyMyk7ICAvLyBpbnNlcnQgYnl0ZSAyCi0rICAvLyBTaWduLWV4dGVuZCB0byA2NCBi aXRzIChhcyAzMi1iaXQgdmFsdWUpLgotKyAgYXNfZXh0c3cocmVnLCBzY3JhdGNoKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Ynl0ZVN3YXA2NChSZWdpc3RlcjY0IHJlZzY0KSB7Ci0r ICBpZiAoSGFzUE9XRVIxMCgpKSB7Ci0rICAgIC8vIDEgaW5zbiwgbm8gRlBSIHJvdW5kLXRyaXAu Ci0rICAgIGFzX2JyZChyZWc2NC5yZWcsIHJlZzY0LnJlZyk7Ci0rICB9IGVsc2UgaWYgKEhhc1BP V0VSOSgpKSB7Ci0rICAgIGFzX210dnNyZChTY3JhdGNoRG91YmxlUmVnLCByZWc2NC5yZWcpOwot KyAgICBhc194eGJyZChTY3JhdGNoRG91YmxlUmVnLCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgICAg YXNfbWZ2c3JkKHJlZzY0LnJlZywgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICB9IGVsc2UgewotKyAg ICAvLyBQT1dFUjg6IGJ5dGUtc3dhcCB2aWEgc3RhY2sgdXNpbmcgc3R3YnJ4ICh3b3JkIGJ5dGUt cmV2ZXJzZSBzdG9yZSkuCi0rICAgIC8vIHN0d2JyeCBSUyxSQSxSQiBzdG9yZXMgUlMgYnl0ZS1y ZXZlcnNlZCBhdCBSQStSQi4KLSsgICAgLy8gRm9yIDY0LWJpdCBzd2FwOiBzdG9yZSBoaWdoIHdv cmQgcmV2ZXJzZWQgYXQgYWRkciswLCBsb3cgd29yZCBhdCBhZGRyKzQuCi0rICAgIFJlZ2lzdGVy IHIgPSByZWc2NC5yZWc7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlz KTsKLSsgICAgUmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBhc19zdGR1KFN0 YWNrUG9pbnRlciwgU3RhY2tQb2ludGVyLCAtMTYpOwotKyAgICAvLyBTdG9yZSBsb3cgMzIgYml0 cyBieXRlLXJldmVyc2VkIGF0IFNQKzEyLgotKyAgICBhc19hZGRpKHRtcCwgU3RhY2tQb2ludGVy LCAxMik7Ci0rICAgIGFzX3N0d2JyeChyLCByMCwgdG1wKTsgIC8vIHIwIGFzIFJBID0gMCwgc28g YWRkciA9IHRtcAotKyAgICAvLyBTdG9yZSBoaWdoIDMyIGJpdHMgYnl0ZS1yZXZlcnNlZCBhdCBT UCs4LgotKyAgICB4X3NyZGkociwgciwgMzIpOwotKyAgICBhc19hZGRpKHRtcCwgU3RhY2tQb2lu dGVyLCA4KTsKLSsgICAgYXNfc3R3YnJ4KHIsIHIwLCB0bXApOyAgLy8gYWRkciA9IHRtcAotKyAg ICAvLyBMb2FkIHJldmVyc2VkIDY0LWJpdCB2YWx1ZSBmcm9tIFNQKzguCi0rICAgIGFzX2xkKHIs IFN0YWNrUG9pbnRlciwgOCk7Ci0rICAgIGFzX2FkZGkoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50 ZXIsIDE2KTsKLSsgIH0KLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gQXJpdGhtZXRpYyBmdW5jdGlv bnMKLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRQdHIoUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICBhc19hZGQoZGVzdCwgZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YWRkUHRyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgewotKyAgaW50MzJf dCB2YWwgPSBpbW0udmFsdWU7Ci0rICBpZiAoaXNfaW50Tih2YWwsIDE2KSkgewotKyAgICBhc19h ZGRpKGRlc3QsIGRlc3QsIHZhbCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGlmIChIYXNQT1dF UjEwKCkpIHsKLSsgICAgLy8gSW1tMzIgYWx3YXlzIGZpdHMgMzQtYml0IHNpZ25lZDsgcGFkZGkg ZG9lcyBkZXN0ID0gZGVzdCArIGltbSBpbiBvbmUKLSsgICAgLy8gcHJlZml4ZWQgaW5zdHJ1Y3Rp b24gd2l0aCBubyBzY3JhdGNoLgotKyAgICBhc19wYWRkaShkZXN0LCBkZXN0LCBpbnQ2NF90KHZh bCksIC8qUj0qL2ZhbHNlKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZChpbnQ2NF90KHZhbCkpLCBzY3JhdGNoKTsKLSsg IGFzX2FkZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YWRkUHRyKEltbVdvcmQgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBpZiAoaXNfaW50Tihp bnQ2NF90KGltbS52YWx1ZSksIDE2KSkgewotKyAgICBhc19hZGRpKGRlc3QsIGRlc3QsIGludDE2 X3QoaW1tLnZhbHVlKSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGlmIChIYXNQT1dFUjEwKCkg JiYgaXNfaW50TigoaW50cHRyX3QpaW1tLnZhbHVlLCAzNCkpIHsKLSsgICAgYXNfcGFkZGkoZGVz dCwgZGVzdCwgKGludDY0X3QpaW1tLnZhbHVlLCAvKlI9Ki9mYWxzZSk7Ci0rICAgIHJldHVybjsK LSsgIH0KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKGltbSwgc2NyYXRj aCk7Ci0rICBhc19hZGQoZGVzdCwgZGVzdCwgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmFkZDY0KFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgIGFz X2FkZChkZXN0LnJlZywgZGVzdC5yZWcsIHNyYy5yZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjphZGQ2NChJbW0zMiBpbW0sIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgYWRkUHRyKElt bTMyKGltbS52YWx1ZSksIGRlc3QucmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YWRkNjQoSW1tNjQgaW1tLCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgIGlmIChpc19pbnROKGludDY0 X3QoaW1tLnZhbHVlKSwgMTYpKSB7Ci0rICAgIGFzX2FkZGkoZGVzdC5yZWcsIGRlc3QucmVnLCBp bnQxNl90KGltbS52YWx1ZSkpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBpZiAoSGFzUE9XRVIx MCgpICYmIGlzX2ludE4oKGludDY0X3QpaW1tLnZhbHVlLCAzNCkpIHsKLSsgICAgYXNfcGFkZGko ZGVzdC5yZWcsIGRlc3QucmVnLCAoaW50NjRfdClpbW0udmFsdWUsIC8qUj0qL2ZhbHNlKTsKLSsg ICAgcmV0dXJuOwotKyAgfQotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIE1PWl9BU1NF UlQoZGVzdC5yZWcgIT0gc2NyYXRjaCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQoaW1tLnZhbHVlKSwg c2NyYXRjaCk7Ci0rICBhc19hZGQoZGVzdC5yZWcsIGRlc3QucmVnLCBzY3JhdGNoKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkMzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0 KSB7Ci0rICBhc19hZGQoZGVzdCwgZGVzdCwgc3JjKTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3Qp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVy IGRlc3QpIHsKLSsgIGlmIChpc19pbnROKGltbS52YWx1ZSwgMTYpKSB7Ci0rICAgIGFzX2FkZGko ZGVzdCwgZGVzdCwgaW1tLnZhbHVlKTsKLSsgIH0gZWxzZSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgICAgbW92ZTMyKGltbSwgc2NyYXRjaCk7Ci0rICAgIGFzX2FkZChkZXN0 LCBkZXN0LCBzY3JhdGNoKTsKLSsgIH0KLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVyIHNyYywgUmVn aXN0ZXIgZGVzdCkgewotKyAgbW92ZTMyKHNyYywgZGVzdCk7Ci0rICBhZGQzMihpbW0sIGRlc3Qp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGQzMihJbW0zMiBpbW0sIGNvbnN0IEFk ZHJlc3MmIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIoZGVz dCwgc2NyYXRjaCk7Ci0rICBhZGQzMihpbW0sIHNjcmF0Y2gpOwotKyAgc3RvcmUzMihzY3JhdGNo LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkMzIoY29uc3QgQWRkcmVz cyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAg bG9hZDMyKHNyYywgc2NyYXRjaCk7Ci0rICBhc19hZGQoZGVzdCwgZGVzdCwgc2NyYXRjaCk7Ci0r ICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRk UHRyKEltbTMyIGltbSwgY29uc3QgQWRkcmVzcyYgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKLSsgIGxvYWRQdHIoZGVzdCwgc2NyYXRjaCk7Ci0rICBhZGRQdHIoaW1tLCBzY3Jh dGNoKTsKLSsgIHN0b3JlUHRyKHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjphZGRQdHIoY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZFB0cihzcmMsIHNjcmF0Y2gpOwotKyAgYWRk UHRyKHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGREb3Vi bGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfZmFkZChk ZXN0LCBkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRGbG9hdDMy KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2ZhZGRzKGRl c3QsIGRlc3QsIHNyYyk7Ci0rfQotKwotK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN1YjMy RnJvbVN0YWNrUHRyV2l0aFBhdGNoKFJlZ2lzdGVyIGRlc3QpIHsKLSsgIENvZGVPZmZzZXQgb2Zm c2V0ID0gQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpOwotKyAgZW1pdExvYWQ2NFN0YW56YShk ZXN0LCAwKTsKLSsgIGFzX3N1YmYoZGVzdCwgZGVzdCwgU3RhY2tQb2ludGVyKTsKLSsgIHJldHVy biBvZmZzZXQ7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBhdGNoU3ViMzJGcm9tU3Rh Y2tQdHIoQ29kZU9mZnNldCBvZmZzZXQsIEltbTMyIGltbSkgewotKyAgSW5zdHJ1Y3Rpb24qIGlu c3QgPSAoSW5zdHJ1Y3Rpb24qKWVkaXRTcmMoQnVmZmVyT2Zmc2V0KG9mZnNldC5vZmZzZXQoKSkp OwotKyAgVXBkYXRlTG9hZDY0VmFsdWUoaW5zdCwgdWludDY0X3QoaW50NjRfdChpbW0udmFsdWUp KSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YlB0cihSZWdpc3RlciBzcmMsIFJl Z2lzdGVyIGRlc3QpIHsKLSsgIGFzX3N1YmYoZGVzdCwgc3JjLCBkZXN0KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6c3ViUHRyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgewotKyAg aWYgKGlzX2ludE4oLWludDY0X3QoaW1tLnZhbHVlKSwgMTYpKSB7Ci0rICAgIGFzX2FkZGkoZGVz dCwgZGVzdCwgLWltbS52YWx1ZSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGlmIChIYXNQT1dF UjEwKCkpIHsKLSsgICAgLy8gLUltbTMyIGZpdHMgMzQtYml0IHNpZ25lZCAod29yc3QgY2FzZSAt SU5UMzJfTUlOID0gKzJeMzEsIHdlbGwgd2l0aGluCi0rICAgIC8vIMKxMl4zMykuIHBhZGRpIHdp dGggdGhlIG5lZ2F0ZWQgaW1tZWRpYXRlIGRvZXMgdGhlIHN1YnRyYWN0IGluIDEgcHJlZml4ZWQK LSsgICAgLy8gaW5zbiB3aXRoIG5vIHNjcmF0Y2guCi0rICAgIGFzX3BhZGRpKGRlc3QsIGRlc3Qs IC1pbnQ2NF90KGltbS52YWx1ZSksIC8qUj0qL2ZhbHNlKTsKLSsgICAgcmV0dXJuOwotKyAgfQot KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZChpbnQ2NF90KGlt bS52YWx1ZSkpLCBzY3JhdGNoKTsKLSsgIGFzX3N1YmYoZGVzdCwgc2NyYXRjaCwgZGVzdCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YjY0KFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3Rl cjY0IGRlc3QpIHsKLSsgIGFzX3N1YmYoZGVzdC5yZWcsIHNyYy5yZWcsIGRlc3QucmVnKTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViNjQoSW1tNjQgaW1tLCBSZWdpc3RlcjY0IGRl c3QpIHsKLSsgIGlmIChpc19pbnROKC1pbnQ2NF90KGltbS52YWx1ZSksIDE2KSkgewotKyAgICBh c19hZGRpKGRlc3QucmVnLCBkZXN0LnJlZywgaW50MTZfdCgtaW50NjRfdChpbW0udmFsdWUpKSk7 Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigtKGlu dDY0X3QpaW1tLnZhbHVlLCAzNCkpIHsKLSsgICAgYXNfcGFkZGkoZGVzdC5yZWcsIGRlc3QucmVn LCAtKGludDY0X3QpaW1tLnZhbHVlLCAvKlI9Ki9mYWxzZSk7Ci0rICAgIHJldHVybjsKLSsgIH0K LSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBNT1pfQVNTRVJUKGRlc3QucmVnICE9IHNj cmF0Y2gpOwotKyAgbW92ZVB0cihJbW1Xb3JkKGltbS52YWx1ZSksIHNjcmF0Y2gpOwotKyAgYXNf c3ViZihkZXN0LnJlZywgc2NyYXRjaCwgZGVzdC5yZWcpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpzdWIzMihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3N1YmYo ZGVzdCwgc3JjLCBkZXN0KTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpzdWIzMihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGlm IChpc19pbnROKC1pbnQ2NF90KGltbS52YWx1ZSksIDE2KSkgewotKyAgICBhc19hZGRpKGRlc3Qs IGRlc3QsIC1pbW0udmFsdWUpOwotKyAgfSBlbHNlIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOwotKyAgICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsKLSsgICAgYXNfc3ViZihkZXN0LCBz Y3JhdGNoLCBkZXN0KTsKLSsgIH0KLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWIzMihjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRl c3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIoc3JjLCBzY3JhdGNo KTsKLSsgIGFzX3N1YmYoZGVzdCwgc2NyYXRjaCwgZGVzdCk7Ci0rICBhc19leHRzdyhkZXN0LCBk ZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViUHRyKFJlZ2lzdGVyIHNyYywg Y29uc3QgQWRkcmVzcyYgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxv YWRQdHIoZGVzdCwgc2NyYXRjaCk7Ci0rICBhc19zdWJmKHNjcmF0Y2gsIHNyYywgc2NyYXRjaCk7 Ci0rICBzdG9yZVB0cihzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6c3ViUHRyKGNvbnN0IEFkZHJlc3MmIGFkZHIsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKGFkZHIsIHNjcmF0Y2gpOwotKyAgYXNfc3Vi ZihkZXN0LCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3Vi RG91YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2Zz dWIoZGVzdCwgZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViRmxv YXQzMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc19mc3Vi cyhkZXN0LCBkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWw2NChj b25zdCBSZWdpc3RlcjY0JiByaHMsIGNvbnN0IFJlZ2lzdGVyNjQmIHNyY0Rlc3QpIHsKLSsgIGFz X211bGxkKHNyY0Rlc3QucmVnLCBzcmNEZXN0LnJlZywgcmhzLnJlZyk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6Om11bDY0KEltbTY0IGltbSwgY29uc3QgUmVnaXN0ZXI2NCYgZGVzdCkg ewotKyAgaWYgKGlzX2ludE4oaW50NjRfdChpbW0udmFsdWUpLCAxNikpIHsKLSsgICAgYXNfbXVs bGkoZGVzdC5yZWcsIGRlc3QucmVnLCBpbnQxNl90KGltbS52YWx1ZSkpOwotKyAgfSBlbHNlIHsK LSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBNT1pfQVNTRVJUKGRlc3QucmVn ICE9IHNjcmF0Y2gpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoaW1tLnZhbHVlKSwgc2NyYXRjaCk7 Ci0rICAgIGFzX211bGxkKGRlc3QucmVnLCBkZXN0LnJlZywgc2NyYXRjaCk7Ci0rICB9Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bDY0KEltbTY0IGltbSwgY29uc3QgUmVnaXN0ZXI2 NCYgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlciB0ZW1w KSB7Ci0rICBNT1pfQVNTRVJUKHRlbXAgPT0gUmVnaXN0ZXI6OkludmFsaWQoKSk7Ci0rICBtdWw2 NChpbW0sIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWw2NChjb25zdCBS ZWdpc3RlcjY0JiBzcmMsIGNvbnN0IFJlZ2lzdGVyNjQmIGRlc3QsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXIgdGVtcCkgewotKyAgTU9aX0FTU0VSVCh0ZW1wID09 IFJlZ2lzdGVyOjpJbnZhbGlkKCkpOwotKyAgYXNfbXVsbGQoZGVzdC5yZWcsIGRlc3QucmVnLCBz cmMucmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsUHRyKFJlZ2lzdGVyIHJo cywgUmVnaXN0ZXIgc3JjRGVzdCkgewotKyAgYXNfbXVsbGQoc3JjRGVzdCwgc3JjRGVzdCwgcmhz KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsUHRyKEltbVdvcmQgcmhzLCBSZWdp c3RlciBzcmNEZXN0KSB7Ci0rICBpZiAoaXNfaW50TihpbnQ2NF90KHJocy52YWx1ZSksIDE2KSkg ewotKyAgICBhc19tdWxsaShzcmNEZXN0LCBzcmNEZXN0LCBpbnQxNl90KHJocy52YWx1ZSkpOwot KyAgICByZXR1cm47Ci0rICB9Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgTU9aX0FT U0VSVChzcmNEZXN0ICE9IHNjcmF0Y2gpOwotKyAgbW92ZVB0cihyaHMsIHNjcmF0Y2gpOwotKyAg bXVsUHRyKHNjcmF0Y2gsIHNyY0Rlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpt dWxCeTMoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBtdWxsaSBpcyB0aGUg MTYtYml0LWltbWVkaWF0ZSBmb3JtIG9mIG11bGxkLiAxIGluc24sIG5vIHNjcmF0Y2gsCi0rICAv LyBzcmM9PWRlc3QgYWxpYXNpbmcgc2FmZSAoUkEgcmVhZCBiZWZvcmUgUlQgd3JpdGUpLgotKyAg YXNfbXVsbGkoZGVzdCwgc3JjLCAzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVs MzIoUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBzcmNEZXN0KSB7Ci0rICBhc19tdWxsdyhzcmNEZXN0 LCBzcmNEZXN0LCByaHMpOwotKyAgYXNfZXh0c3coc3JjRGVzdCwgc3JjRGVzdCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjRGVzdCkg ewotKyAgaWYgKGlzX2ludE4oaW1tLnZhbHVlLCAxNikpIHsKLSsgICAgYXNfbXVsbGkoc3JjRGVz dCwgc3JjRGVzdCwgaW1tLnZhbHVlKTsKLSsgIH0gZWxzZSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgICAgbW92ZTMyKGltbSwgc2NyYXRjaCk7Ci0rICAgIGFzX211bGx3KHNy Y0Rlc3QsIHNyY0Rlc3QsIHNjcmF0Y2gpOwotKyAgfQotKyAgYXNfZXh0c3coc3JjRGVzdCwgc3Jj RGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bEhpZ2hVbnNpZ25lZDMyKElt bTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgTU9aX0FTU0VSVChzcmMgIT0gc2NyYXRjaCk7Ci0rICBtb3ZlMzIoaW1t LCBzY3JhdGNoKTsKLSsgIGFzX211bGh3dShkZXN0LCBzcmMsIHNjcmF0Y2gpOwotKyAgYXNfZXh0 c3coZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bEZsb2F0MzIo RmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfZm11bHMoZGVz dCwgZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsRG91YmxlKEZs b2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2ZtdWwoZGVzdCwg ZGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsRG91YmxlUHRyKElt bVB0ciBpbW0sIFJlZ2lzdGVyIHRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg IG1vdmVQdHIoaW1tLCBzY3JhdGNoKTsKLSsgIGFzX2xmZChTY3JhdGNoRG91YmxlUmVnLCBzY3Jh dGNoLCAwKTsKLSsgIGFzX2ZtdWwoZGVzdCwgZGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmluYzY0KEFic29sdXRlQWRkcmVzcyBkZXN0KSB7Ci0r ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBh ZGRyUmVnID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihJbW1Xb3JkKHVpbnRwdHJfdChk ZXN0LmFkZHIpKSwgYWRkclJlZyk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gU2Vjb25kU2NyYXRj aFJlZzsKLSsgIGFzX2xkKHNjcmF0Y2gsIGFkZHJSZWcsIDApOwotKyAgYXNfYWRkaShzY3JhdGNo LCBzY3JhdGNoLCAxKTsKLSsgIGFzX3N0ZChzY3JhdGNoLCBhZGRyUmVnLCAwKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZGl2RmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICBhc19mZGl2cyhkZXN0LCBkZXN0LCBzcmMpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpkaXZEb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkgewotKyAgYXNfZmRpdihkZXN0LCBkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpxdW90aWVudDMyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBS ZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Vu c2lnbmVkKSB7Ci0rICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICBhc19kaXZ3dShkZXN0LCBsaHMs IHJocyk7Ci0rICB9IGVsc2UgewotKyAgICBhc19kaXZ3KGRlc3QsIGxocywgcmhzKTsKLSsgIH0K LSsgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpx dW90aWVudDY0KFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Vuc2lnbmVkKSB7Ci0rICBpZiAo aXNVbnNpZ25lZCkgewotKyAgICBhc19kaXZkdShkZXN0LCBsaHMsIHJocyk7Ci0rICB9IGVsc2Ug ewotKyAgICBhc19kaXZkKGRlc3QsIGxocywgcmhzKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6cmVtYWluZGVyMzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lz dGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Vuc2ln bmVkKSB7Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgaWYgKGlzVW5zaWduZWQpIHsKLSsg ICAgICBhc19tb2R1dyhkZXN0LCBsaHMsIHJocyk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgYXNf bW9kc3coZGVzdCwgbGhzLCByaHMpOwotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgICAgYXNfZGl2 d3Uoc2NyYXRjaCwgbGhzLCByaHMpOwotKyAgICAgIGFzX211bGx3KHNjcmF0Y2gsIHNjcmF0Y2gs IHJocyk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgYXNfZGl2dyhzY3JhdGNoLCBsaHMsIHJocyk7 Ci0rICAgICAgYXNfbXVsbHcoc2NyYXRjaCwgc2NyYXRjaCwgcmhzKTsKLSsgICAgfQotKyAgICBh c19zdWJmKGRlc3QsIHNjcmF0Y2gsIGxocyk7Ci0rICB9Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0 KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmVtYWluZGVyNjQoUmVnaXN0ZXIgbGhz LCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCBpc1Vuc2lnbmVkKSB7Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAg aWYgKGlzVW5zaWduZWQpIHsKLSsgICAgICBhc19tb2R1ZChkZXN0LCBsaHMsIHJocyk7Ci0rICAg IH0gZWxzZSB7Ci0rICAgICAgYXNfbW9kc2QoZGVzdCwgbGhzLCByaHMpOwotKyAgICB9Ci0rICB9 IGVsc2UgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGlmIChpc1Vuc2ln bmVkKSB7Ci0rICAgICAgYXNfZGl2ZHUoc2NyYXRjaCwgbGhzLCByaHMpOwotKyAgICAgIGFzX211 bGxkKHNjcmF0Y2gsIHNjcmF0Y2gsIHJocyk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgYXNfZGl2 ZChzY3JhdGNoLCBsaHMsIHJocyk7Ci0rICAgICAgYXNfbXVsbGQoc2NyYXRjaCwgc2NyYXRjaCwg cmhzKTsKLSsgICAgfQotKyAgICBhc19zdWJmKGRlc3QsIHNjcmF0Y2gsIGxocyk7Ci0rICB9Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5lZzY0KFJlZ2lzdGVyNjQgcmVnKSB7IGFzX25l ZyhyZWcucmVnLCByZWcucmVnKTsgfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5lZ1B0cihS ZWdpc3RlciByZWcpIHsgYXNfbmVnKHJlZywgcmVnKTsgfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om5lZzMyKFJlZ2lzdGVyIHJlZykgewotKyAgYXNfbmVnKHJlZywgcmVnKTsKLSsgIGFzX2V4 dHN3KHJlZywgcmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnYXRlRG91Ymxl KEZsb2F0UmVnaXN0ZXIgcmVnKSB7IGFzX2ZuZWcocmVnLCByZWcpOyB9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6bmVnYXRlRmxvYXQoRmxvYXRSZWdpc3RlciByZWcpIHsgYXNfZm5lZyhyZWcs IHJlZyk7IH0KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphYnMzMihSZWdpc3RlciBzcmMsIFJl Z2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBhc19zcmF3aShz Y3JhdGNoLCBzcmMsIDMxKTsKLSsgIGFzX3hvcl8oZGVzdCwgc3JjLCBzY3JhdGNoKTsKLSsgIGFz X3N1YmYoZGVzdCwgc2NyYXRjaCwgZGVzdCk7Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc19mYWJzKGRlc3QsIHNyYyk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmFic0RvdWJsZShGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdp c3RlciBkZXN0KSB7Ci0rICBhc19mYWJzKGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnNxcnRGbG9hdDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKLSsgIGFzX2ZzcXJ0cyhkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpzcXJ0RG91YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK LSsgIGFzX2ZzcXJ0KGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1p bjMyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBhc19j bXB3KGxocywgcmhzKTsKLSsgIC8vIGlzZWwgcnQsIHJhLCByYiwgY29uZDogcnQgPSAoQ1JbY29u ZF0gc2V0KSA/IHJhIDogcmIKLSsgIC8vIExlc3NUaGFuIHNldCBpZiBsaHMgPCByaHMgKHNpZ25l ZCksIHNvIHBpY2sgbGhzOyBlbHNlIHJocyA9IG1pbi4KLSsgIGFzX2lzZWwoZGVzdCwgbGhzLCBy aHMsIExlc3NUaGFuLCBjcjApOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW4zMihS ZWdpc3RlciBsaHMsIEltbTMyIHJocywgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIG1vdmUzMihyaHMsIHNjcmF0Y2gpOwotKyAgbWluMzIobGhzLCBzY3Jh dGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4MzIoUmVnaXN0ZXIg bGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2NtcHcobGhzLCByaHMp OwotKyAgLy8gR1Qgc2V0IGlmIGxocyA+IHJocyAoc2lnbmVkKSwgc28gcGljayBsaHM7IGVsc2Ug cmhzID0gbWF4LgotKyAgYXNfaXNlbChkZXN0LCBsaHMsIHJocywgR3JlYXRlclRoYW4sIGNyMCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heDMyKFJlZ2lzdGVyIGxocywgSW1tMzIg cmhzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92 ZTMyKHJocywgc2NyYXRjaCk7Ci0rICBtYXgzMihsaHMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5QdHIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX2NtcGQobGhzLCByaHMpOwotKyAgYXNfaXNlbChkZXN0 LCBsaHMsIHJocywgTGVzc1RoYW4sIGNyMCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om1pblB0cihSZWdpc3RlciBsaHMsIEltbVdvcmQgcmhzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihyaHMsIHNjcmF0Y2gpOwotKyAgbWlu UHRyKGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1h eFB0cihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNf Y21wZChsaHMsIHJocyk7Ci0rICBhc19pc2VsKGRlc3QsIGxocywgcmhzLCBHcmVhdGVyVGhhbiwg Y3IwKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4UHRyKFJlZ2lzdGVyIGxocywg SW1tV29yZCByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 Ci0rICBtb3ZlUHRyKHJocywgc2NyYXRjaCk7Ci0rICBtYXhQdHIobGhzLCBzY3JhdGNoLCBkZXN0 KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluRmxvYXQzMihGbG9hdFJlZ2lzdGVy IG90aGVyLCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIGhhbmRsZU5hTikgewotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIC8v IHhzbWluamRwIG1hdGNoZXMgRUNNQS0yNjIgTWF0aC5taW4gc2VtYW50aWNzIGZvciDCsTAgYW5k IE5hTi4KLSsgICAgLy8gRmxvYXQzMiB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBkb3VibGVzIGluIFBQ QyBGUFJzOyB0aGUgSi1mb3JtCi0rICAgIC8vIHJlc3VsdCBpcyBiaXQtZXhhY3QgZm9yIHZhbHVl cyByZXByZXNlbnRhYmxlIGluIGZsb2F0MzIgKHdoaWNoCi0rICAgIC8vIGluY2x1ZGVzIGV2ZXJ5 IE5hTi/CsTAvwrFJbmYgY29ybmVyIGNhc2UgSlMgb2JzZXJ2ZXMpLiAxIGluc24uCi0rICAgIGFz X3hzbWluamRwKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsKLSsgICAgcmV0dXJuOwotKyAgfQot KyAgTGFiZWwgZG9uZSwgbmFuLCBlcXVhbDsKLSsgIGFzX2ZjbXB1KHNyY0Rlc3QsIG90aGVyKTsK LSsgIGlmIChoYW5kbGVOYU4pIHsKLSsgICAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZVVub3JkZXJl ZCwgJm5hbik7Ci0rICB9Ci0rICAvLyBIYW5kbGUgKzAgdnMgLTAuCi0rICBtYV9iKEFzc2VtYmxl cjo6RG91YmxlRXF1YWwsICZlcXVhbCk7Ci0rICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlTGVzc1Ro YW4sICZkb25lKTsKLSsgIGFzX2ZtcihzcmNEZXN0LCBvdGhlcik7Ci0rICBqdW1wKCZkb25lKTsK LSsKLSsgIGJpbmQoJmVxdWFsKTsKLSsgIC8vIEJvdGggb3BlcmFuZHMgYXJlIGVxdWFsLiBDaGVj ayBpZiB0aGV5J3JlIHplcm8uCi0rICBsb2FkQ29uc3RhbnRGbG9hdDMyKDAuMGYsIFNjcmF0Y2hG bG9hdDMyUmVnKTsKLSsgIGFzX2ZjbXB1KHNyY0Rlc3QsIFNjcmF0Y2hGbG9hdDMyUmVnKTsKLSsg IC8vIElmIG5vdCB6ZXJvLCB0aGV5J3JlIGlkZW50aWNhbDsga2VlcCBzcmNEZXN0LgotKyAgbWFf YihBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsLCAmZG9uZSk7Ci0rICAvLyBCb3RoIGFyZSBzb21l IGNvbWJpbmF0aW9uIG9mICswLy0wLiBGb3IgbWluLCByZXN1bHQgc2hvdWxkIGJlIC0wCi0rICAv LyBpZiBlaXRoZXIgaXMgLTA6IC0oKC1zcmNEZXN0KSAtIG90aGVyKSBnaXZlcyAtMCB3aGVuIGVp dGhlciBpcyAtMC4KLSsgIGFzX2ZuZWcoU2NyYXRjaEZsb2F0MzJSZWcsIHNyY0Rlc3QpOwotKyAg YXNfZnN1YnMoU2NyYXRjaEZsb2F0MzJSZWcsIFNjcmF0Y2hGbG9hdDMyUmVnLCBvdGhlcik7Ci0r ICBhc19mbmVnKHNyY0Rlc3QsIFNjcmF0Y2hGbG9hdDMyUmVnKTsKLSsgIGp1bXAoJmRvbmUpOwot KwotKyAgaWYgKGhhbmRsZU5hTikgewotKyAgICBiaW5kKCZuYW4pOwotKyAgICBhc19mYWRkcyhz cmNEZXN0LCBzcmNEZXN0LCBvdGhlcik7Ci0rICB9Ci0rICBiaW5kKCZkb25lKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluRG91YmxlKEZsb2F0UmVnaXN0ZXIgb3RoZXIsIEZsb2F0 UmVnaXN0ZXIgc3JjRGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBo YW5kbGVOYU4pIHsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICAvLyB4c21pbmpkcCBtYXRj aGVzIEVDTUEtMjYyIE1hdGgubWluIHNlbWFudGljcyBleGFjdGx5IChjb3ZlcnMKLSsgICAgLy8g MTkgY29ybmVyIGNhc2VzIGluY2x1ZGluZyDCsTAgYW5kIE5hTikuIDEgaW5zbiB2cyB+MTIgZm9y IHRoZQotKyAgICAvLyBmY21wdS9icmFuY2ggZmFsbGJhY2suIFBPV0VSOCBmYWxsYmFjayBmb2xs b3dzLgotKyAgICBhc194c21pbmpkcChzcmNEZXN0LCBzcmNEZXN0LCBvdGhlcik7Ci0rICAgIHJl dHVybjsKLSsgIH0KLSsgIExhYmVsIGRvbmUsIG5hbiwgZXF1YWw7Ci0rICBhc19mY21wdShzcmNE ZXN0LCBvdGhlcik7Ci0rICBpZiAoaGFuZGxlTmFOKSB7Ci0rICAgIG1hX2IoQXNzZW1ibGVyOjpE b3VibGVVbm9yZGVyZWQsICZuYW4pOwotKyAgfQotKyAgLy8gSGFuZGxlICswIHZzIC0wLgotKyAg bWFfYihBc3NlbWJsZXI6OkRvdWJsZUVxdWFsLCAmZXF1YWwpOwotKyAgbWFfYihBc3NlbWJsZXI6 OkRvdWJsZUxlc3NUaGFuLCAmZG9uZSk7Ci0rICBhc19mbXIoc3JjRGVzdCwgb3RoZXIpOwotKyAg anVtcCgmZG9uZSk7Ci0rCi0rICBiaW5kKCZlcXVhbCk7Ci0rICBsb2FkQ29uc3RhbnREb3VibGUo MC4wLCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgIGFzX2ZjbXB1KHNyY0Rlc3QsIFNjcmF0Y2hEb3Vi bGVSZWcpOwotKyAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsLCAmZG9uZSk7Ci0rICAv LyAtKCgtc3JjRGVzdCkgLSBvdGhlcikgZ2l2ZXMgLTAgd2hlbiBlaXRoZXIgaXMgLTAuCi0rICBh c19mbmVnKFNjcmF0Y2hEb3VibGVSZWcsIHNyY0Rlc3QpOwotKyAgYXNfZnN1YihTY3JhdGNoRG91 YmxlUmVnLCBTY3JhdGNoRG91YmxlUmVnLCBvdGhlcik7Ci0rICBhc19mbmVnKHNyY0Rlc3QsIFNj cmF0Y2hEb3VibGVSZWcpOwotKyAganVtcCgmZG9uZSk7Ci0rCi0rICBpZiAoaGFuZGxlTmFOKSB7 Ci0rICAgIGJpbmQoJm5hbik7Ci0rICAgIGFzX2ZhZGQoc3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIp OwotKyAgfQotKyAgYmluZCgmZG9uZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1h eEZsb2F0MzIoRmxvYXRSZWdpc3RlciBvdGhlciwgRmxvYXRSZWdpc3RlciBzcmNEZXN0LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYW5kbGVOYU4pIHsKLSsgIGlmIChI YXNQT1dFUjkoKSkgewotKyAgICAvLyBTZWUgbWluRmxvYXQzMiBhYm92ZSBmb3IgdGhlIGZsb2F0 MzIg4oaUIEotZm9ybSBiaXQtZXhhY3RuZXNzIG5vdGUuCi0rICAgIGFzX3hzbWF4amRwKHNyY0Rl c3QsIHNyY0Rlc3QsIG90aGVyKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgTGFiZWwgZG9uZSwg bmFuLCBlcXVhbDsKLSsgIGFzX2ZjbXB1KHNyY0Rlc3QsIG90aGVyKTsKLSsgIGlmIChoYW5kbGVO YU4pIHsKLSsgICAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZVVub3JkZXJlZCwgJm5hbik7Ci0rICB9 Ci0rICAvLyBIYW5kbGUgKzAgdnMgLTAuCi0rICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlRXF1YWws ICZlcXVhbCk7Ci0rICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4sICZkb25lKTsK LSsgIGFzX2ZtcihzcmNEZXN0LCBvdGhlcik7Ci0rICBqdW1wKCZkb25lKTsKLSsKLSsgIGJpbmQo JmVxdWFsKTsKLSsgIGxvYWRDb25zdGFudEZsb2F0MzIoMC4wZiwgU2NyYXRjaEZsb2F0MzJSZWcp OwotKyAgYXNfZmNtcHUoc3JjRGVzdCwgU2NyYXRjaEZsb2F0MzJSZWcpOwotKyAgbWFfYihBc3Nl bWJsZXI6OkRvdWJsZU5vdEVxdWFsLCAmZG9uZSk7Ci0rICAvLyAtMCArIC0wID0gLTAgYW5kIC0w ICsgMCA9ICswLgotKyAgYXNfZmFkZHMoc3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIpOwotKyAganVt cCgmZG9uZSk7Ci0rCi0rICBpZiAoaGFuZGxlTmFOKSB7Ci0rICAgIGJpbmQoJm5hbik7Ci0rICAg IGFzX2ZhZGRzKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsKLSsgIH0KLSsgIGJpbmQoJmRvbmUp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhEb3VibGUoRmxvYXRSZWdpc3RlciBv dGhlciwgRmxvYXRSZWdpc3RlciBzcmNEZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIGhhbmRsZU5hTikgewotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIC8vIFNl ZSBtaW5Eb3VibGUgYWJvdmUgZm9yIHRoZSBKLWZvcm0gc2VtYW50aWNzIG5vdGUuCi0rICAgIGFz X3hzbWF4amRwKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsKLSsgICAgcmV0dXJuOwotKyAgfQot KyAgTGFiZWwgZG9uZSwgbmFuLCBlcXVhbDsKLSsgIGFzX2ZjbXB1KHNyY0Rlc3QsIG90aGVyKTsK LSsgIGlmIChoYW5kbGVOYU4pIHsKLSsgICAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZVVub3JkZXJl ZCwgJm5hbik7Ci0rICB9Ci0rICAvLyBIYW5kbGUgKzAgdnMgLTAuCi0rICBtYV9iKEFzc2VtYmxl cjo6RG91YmxlRXF1YWwsICZlcXVhbCk7Ci0rICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlR3JlYXRl clRoYW4sICZkb25lKTsKLSsgIGFzX2ZtcihzcmNEZXN0LCBvdGhlcik7Ci0rICBqdW1wKCZkb25l KTsKLSsKLSsgIGJpbmQoJmVxdWFsKTsKLSsgIGxvYWRDb25zdGFudERvdWJsZSgwLjAsIFNjcmF0 Y2hEb3VibGVSZWcpOwotKyAgYXNfZmNtcHUoc3JjRGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0r ICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwsICZkb25lKTsKLSsgIC8vIC0wICsgLTAg PSAtMCBhbmQgLTAgKyAwID0gKzAuCi0rICBhc19mYWRkKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVy KTsKLSsgIGp1bXAoJmRvbmUpOwotKwotKyAgaWYgKGhhbmRsZU5hTikgewotKyAgICBiaW5kKCZu YW4pOwotKyAgICBhc19mYWRkKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsKLSsgIH0KLSsgIGJp bmQoJmRvbmUpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBTaGlmdCBmdW5jdGlvbnMKLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpsc2hpZnQzMihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgIFJlZ2lzdGVy IG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGFzX3Jsd2lubShtYXNrZWQsIHNyYywgMCwg MjcsIDMxKTsKLSsgIGFzX3NsdyhkZXN0LCBkZXN0LCBtYXNrZWQpOwotKyAgYXNfZXh0c3coZGVz dCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxzaGlmdDMyKEltbTMyIGlt bSwgUmVnaXN0ZXIgZGVzdCkgewotKyAgbHNoaWZ0MzIoaW1tLCBkZXN0LCBkZXN0KTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHhfc2x3aShkZXN0LCBzcmMsIGltbS52YWx1ZSAmIDB4MWYp OwotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmZsZXhpYmxlTHNoaWZ0MzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBsc2hp ZnQzMihzcmMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsc2hpZnQ2NChS ZWdpc3RlciBzaGlmdCwgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICAvLyBQUEM2NCBzbGQgdXNlcyBh IDctYml0IHNoaWZ0IGZpZWxkOyBzaGlmdHMgPj0gNjQgcHJvZHVjZSAwLgotKyAgLy8gV2FzbSBp NjQuc2hsIHJlcXVpcmVzIHNoaWZ0IGNvdW50IG1vZHVsbyA2NCwgc28gbWFzayB0byA2IGJpdHMu Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3Rl ciBtYXNrZWQgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBhc19ybGRpY2wobWFza2VkLCBzaGlmdCwg MCwgNTgpOyAgLy8gY2xybGRpOiBrZWVwIGxvdyA2IGJpdHMKLSsgIGFzX3NsZChkZXN0LnJlZywg ZGVzdC5yZWcsIG1hc2tlZCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxzaGlmdDY0 KEltbTMyIGltbSwgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKDAgPD0gaW1tLnZh bHVlICYmIGltbS52YWx1ZSA8IDY0KTsKLSsgIHhfc2xkaShkZXN0LnJlZywgZGVzdC5yZWcsIGlt bS52YWx1ZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxzaGlmdFB0cihSZWdpc3Rl ciBzaGlmdCwgUmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfc2xkKGRlc3QsIGRlc3QsIHNoaWZ0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bHNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0 ZXIgZGVzdCkgewotKyAgbHNoaWZ0UHRyKGltbSwgZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmxzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VSVCgwIDw9IGltbS52YWx1ZSAmJiBpbW0udmFsdWUgPCA2 NCk7Ci0rICB4X3NsZGkoZGVzdCwgc3JjLCBpbW0udmFsdWUpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpmbGV4aWJsZUxzaGlmdFB0cihSZWdpc3RlciBzaGlmdCwgUmVnaXN0ZXIgc3Jj RGVzdCkgewotKyAgbHNoaWZ0UHRyKHNoaWZ0LCBzcmNEZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6cnNoaWZ0MzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICBSZWdpc3RlciBtYXNrZWQg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBhc19ybHdpbm0obWFza2VkLCBzcmMsIDAsIDI3LCAzMSk7 Ci0rICBhc19zcncoZGVzdCwgZGVzdCwgbWFza2VkKTsKLSsgIGFzX2V4dHN3KGRlc3QsIGRlc3Qp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lz dGVyIGRlc3QpIHsKLSsgIHJzaGlmdDMyKGltbSwgZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICB4X3Nyd2koZGVzdCwgc3JjLCBpbW0udmFsdWUgJiAweDFmKTsKLSsgIGFz X2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4aWJs ZVJzaGlmdDMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgcnNoaWZ0MzIoc3Jj LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0MzJBcml0aG1ldGlj KFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOwotKyAgUmVnaXN0ZXIgbWFza2VkID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgYXNfcmx3aW5tKG1hc2tlZCwgc3JjLCAwLCAyNywgMzEpOwotKyAgYXNfc3JhdyhkZXN0LCBk ZXN0LCBtYXNrZWQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQzMkFyaXRo bWV0aWMoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICByc2hpZnQzMkFyaXRobWV0aWMo aW1tLCBkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0MzJB cml0aG1ldGljKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBhc19zcmF3aShkZXN0LCBz cmMsIGltbS52YWx1ZSAmIDB4MWYpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4 aWJsZVJzaGlmdDMyQXJpdGhtZXRpYyhSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsg IHJzaGlmdDMyQXJpdGhtZXRpYyhzcmMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpyc2hpZnQ2NChSZWdpc3RlciBzaGlmdCwgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBtYXNrZWQg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBhc19ybGRpY2wobWFza2VkLCBzaGlmdCwgMCwgNTgpOwot KyAgYXNfc3JkKGRlc3QucmVnLCBkZXN0LnJlZywgbWFza2VkKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6cnNoaWZ0NjQoSW1tMzIgaW1tLCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgIE1P Wl9BU1NFUlQoMCA8PSBpbW0udmFsdWUgJiYgaW1tLnZhbHVlIDwgNjQpOwotKyAgeF9zcmRpKGRl c3QucmVnLCBkZXN0LnJlZywgaW1tLnZhbHVlKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6cnNoaWZ0NjRBcml0aG1ldGljKEltbTMyIGltbSwgUmVnaXN0ZXI2NCBkZXN0KSB7Ci0rICBN T1pfQVNTRVJUKDAgPD0gaW1tLnZhbHVlICYmIGltbS52YWx1ZSA8IDY0KTsKLSsgIGFzX3NyYWRp KGRlc3QucmVnLCBkZXN0LnJlZywgaW1tLnZhbHVlKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6cnNoaWZ0NjRBcml0aG1ldGljKFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3RlcjY0IGRlc3Qp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGFzX3JsZGljbChtYXNrZWQsIHNoaWZ0 LCAwLCA1OCk7Ci0rICBhc19zcmFkKGRlc3QucmVnLCBkZXN0LnJlZywgbWFza2VkKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0UHRyKFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICBhc19zcmQoZGVzdCwgZGVzdCwgc2hpZnQpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpyc2hpZnRQdHIoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBy c2hpZnRQdHIoaW1tLCBkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 cnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBN T1pfQVNTRVJUKDAgPD0gaW1tLnZhbHVlICYmIGltbS52YWx1ZSA8IDY0KTsKLSsgIHhfc3JkaShk ZXN0LCBzcmMsIGltbS52YWx1ZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhp YmxlUnNoaWZ0UHRyKFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3RlciBzcmNEZXN0KSB7Ci0rICByc2hp ZnRQdHIoc2hpZnQsIHNyY0Rlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hp ZnRQdHJBcml0aG1ldGljKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgewotKyAgcnNoaWZ0UHRy QXJpdGhtZXRpYyhpbW0sIGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy Ojpyc2hpZnRQdHJBcml0aG1ldGljKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgTU9a X0FTU0VSVCgwIDw9IGltbS52YWx1ZSAmJiBpbW0udmFsdWUgPCA2NCk7Ci0rICBhc19zcmFkaShk ZXN0LCBzcmMsIGltbS52YWx1ZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlm dFB0ckFyaXRobWV0aWMoUmVnaXN0ZXIgc2hpZnQsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3Ny YWQoZGVzdCwgZGVzdCwgc2hpZnQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4 aWJsZVJzaGlmdFB0ckFyaXRobWV0aWMoUmVnaXN0ZXIgc2hpZnQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNyY0Rlc3QpIHsKLSsg IHJzaGlmdFB0ckFyaXRobWV0aWMoc2hpZnQsIHNyY0Rlc3QpOwotK30KLSsKLSsvLyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsvLyBSb3RhdGlvbiBmdW5jdGlvbnMKLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVM ZWZ0KFJlZ2lzdGVyIGNvdW50LCBSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXIgZGVzdCkgewotKyAg Ly8gUFBDIHJvdGx3IGlzIHJsd25tIHdpdGggZnVsbCBtYXNrOiBybHdubSBkZXN0LCBpbnB1dCwg Y291bnQsIDAsIDMxCi0rICBhc19ybHdubShkZXN0LCBpbnB1dCwgY291bnQsIDAsIDMxKTsKLSsg IGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3Rh dGVMZWZ0KEltbTMyIGNvdW50LCBSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXIgZGVzdCkgewotKyAg YXNfcmx3aW5tKGRlc3QsIGlucHV0LCBjb3VudC52YWx1ZSAmIDMxLCAwLCAzMSk7Ci0rICBhc19l eHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cm90YXRlTGVm dDY0KFJlZ2lzdGVyIGNvdW50LCBSZWdpc3RlcjY0IHNyYywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBkZXN0LCBSZWdpc3RlciB0ZW1wKSB7Ci0rICBNT1pf QVNTRVJUKHRlbXAgPT0gUmVnaXN0ZXI6OkludmFsaWQoKSk7Ci0rICAvLyBybGRjbCBkZXN0LCBz cmMsIGNvdW50LCAwIOKAlCByb3RhdGUgbGVmdCBkb3VibGV3b3JkIHRoZW4gY2xlYXIgbGVmdCAw IGJpdHMuCi0rICBhc19ybGRjbChkZXN0LnJlZywgc3JjLnJlZywgY291bnQsIDApOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVMZWZ0NjQoSW1tMzIgY291bnQsIFJlZ2lzdGVy NjQgc3JjLCBSZWdpc3RlcjY0IGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIHRlbXApIHsKLSsgIE1PWl9BU1NFUlQodGVtcCA9PSBSZWdpc3Rlcjo6SW52 YWxpZCgpKTsKLSsgIC8vIHJsZGljbCBkZXN0LCBzcmMsIGNvdW50LCAwIOKAlCByb3RhdGUgbGVm dCBkb3VibGV3b3JkIGltbWVkaWF0ZSB0aGVuIGNsZWFyLgotKyAgYXNfcmxkaWNsKGRlc3QucmVn LCBzcmMucmVnLCBjb3VudC52YWx1ZSAmIDYzLCAwKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6cm90YXRlUmlnaHQoUmVnaXN0ZXIgY291bnQsIFJlZ2lzdGVyIGlucHV0LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIHJvdGF0 ZVJpZ2h0KG4pID0gcm90YXRlTGVmdCgzMi1uKS4gV2hlbiBkZXN0ICE9IGlucHV0LCB0aGUgbmVn YXRlZAotKyAgLy8gY291bnQgY2FuIGxhbmQgZGlyZWN0bHkgaW4gZGVzdCwgZHJvcHBpbmcgdGhl IEdQUiBzY3JhdGNoLiBkZXN0IG1heQotKyAgLy8gYWxpYXMgY291bnQgaGFybWxlc3NseSAoc3Vi ZmljIHJlYWRzIGNvdW50LCB0aGVuIHdyaXRlcyBkZXN0LCB0aGVuCi0rICAvLyBybHdubSBjb25z dW1lcyB0aGUgbmV3IGRlc3QgYXMgaXRzIHJvdGF0ZS1jb3VudCkuCi0rICBpZiAoZGVzdCAhPSBp bnB1dCkgewotKyAgICBhc19zdWJmaWMoZGVzdCwgY291bnQsIDMyKTsKLSsgICAgYXNfcmx3bm0o ZGVzdCwgaW5wdXQsIGRlc3QsIDAsIDMxKTsKLSsgICAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0r ICAgIHJldHVybjsKLSsgIH0KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFz bSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBhc19zdWJm aWMoc2NyYXRjaCwgY291bnQsIDMyKTsKLSsgIGFzX3Jsd25tKGRlc3QsIGlucHV0LCBzY3JhdGNo LCAwLCAzMSk7Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6cm90YXRlUmlnaHQoSW1tMzIgY291bnQsIFJlZ2lzdGVyIGlucHV0LCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICByb3RhdGVMZWZ0KEltbTMyKCgzMiAtIGNvdW50LnZhbHVlKSAmIDMxKSwg aW5wdXQsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVSaWdodDY0 KFJlZ2lzdGVyIGNvdW50LCBSZWdpc3RlcjY0IHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZGVzdCwgUmVnaXN0ZXIgdGVtcCkgewotKyAgTU9aX0FT U0VSVCh0ZW1wID09IFJlZ2lzdGVyOjpJbnZhbGlkKCkpOwotKyAgLy8gU2FtZSBzaGFwZSBhcyBy b3RhdGVSaWdodDMyOiB3aGVuIGRlc3QgIT0gc3JjLCB0aGUgbmVnYXRlZCBjb3VudAotKyAgLy8g Y2FuIGxhbmQgZGlyZWN0bHkgaW4gZGVzdCwgZHJvcHBpbmcgdGhlIEdQUiBzY3JhdGNoLgotKyAg aWYgKGRlc3QucmVnICE9IHNyYy5yZWcpIHsKLSsgICAgYXNfc3ViZmljKGRlc3QucmVnLCBjb3Vu dCwgNjQpOwotKyAgICBhc19ybGRjbChkZXN0LnJlZywgc3JjLnJlZywgZGVzdC5yZWcsIDApOwot KyAgICByZXR1cm47Ci0rICB9Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgYXNfc3Vi ZmljKHNjcmF0Y2gsIGNvdW50LCA2NCk7Ci0rICBhc19ybGRjbChkZXN0LnJlZywgc3JjLnJlZywg c2NyYXRjaCwgMCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJvdGF0ZVJpZ2h0NjQo SW1tMzIgY291bnQsIFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3RlcjY0IGRlc3QsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wKSB7Ci0rICBNT1pfQVNTRVJU KHRlbXAgPT0gUmVnaXN0ZXI6OkludmFsaWQoKSk7Ci0rICByb3RhdGVMZWZ0NjQoSW1tMzIoKDY0 IC0gY291bnQudmFsdWUpICYgNjMpLCBzcmMsIGRlc3QsIHRlbXApOwotK30KLSsKLSsvLyA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsvLyBCaXQgY291bnRpbmcgZnVuY3Rpb25zCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 Y2x6NjQoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgYXNfY250bHpkKGRl c3QucmVnLCBzcmMucmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y3R6NjQoUmVn aXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0r ICAgIGFzX2NudHR6ZChkZXN0LnJlZywgc3JjLnJlZyk7Ci0rICB9IGVsc2UgewotKyAgICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHRtcCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgICAgYXNfbmVnKHRtcCwgc3JjLnJlZyk7Ci0rICAgIC8vIGFuZC4g KHJlY29yZCBmb3JtKSBzZXRzIENSMFtlcV0gYmFzZWQgb24gcmVzdWx0OyByZXN1bHQgaXMgMCBp ZmYgc3JjPT0wLAotKyAgICAvLyBzbyB0aGlzIGZvbGRzIHRoZSBleHBsaWNpdCB6ZXJvLWNoZWNr IHRoYXQgd291bGQgb3RoZXJ3aXNlIG5lZWQgY21wZGkuCi0rICAgIGFzX2FuZF9fcmModG1wLCBz cmMucmVnLCB0bXApOyAgLy8gdG1wID0geCAmIC14OyBDUjBbZXFdID0gKHNyYyA9PSAwKQotKyAg ICBhc19jbnRsemQodG1wLCB0bXApOyAgICAgICAgICAgIC8vIHRtcCA9IGNseihpc29sYXRlZCBi aXQpCi0rICAgIGFzX3N1YmZpYyhkZXN0LnJlZywgdG1wLCA2Myk7ICAgLy8gZGVzdCA9IDYzIC0g Y2x6ID0gY3R6IChmb3Igbm9uemVybykKLSsgICAgeHNfbGkodG1wLCA2NCk7Ci0rICAgIGFzX2lz ZWwoZGVzdC5yZWcsIHRtcCwgZGVzdC5yZWcsIEVxdWFsKTsgIC8vIENSMFtlcV0g4oaSIDY0IGlm IHNyYz09MAotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwb3BjbnQ2NChSZWdp c3RlcjY0IGlucHV0LCBSZWdpc3RlcjY0IG91dHB1dCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciB0bXApIHsKLSsgIGFzX3BvcGNudGQob3V0cHV0LnJlZywgaW5wdXQu cmVnKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2x6MzIoUmVnaXN0ZXIgc3JjLCBS ZWdpc3RlciBkZXN0LCBib29sIGtub3duTm90WmVybykgewotKyAgYXNfY250bHp3KGRlc3QsIHNy Yyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmN0ejMyKFJlZ2lzdGVyIHNyYywgUmVn aXN0ZXIgZGVzdCwgYm9vbCBrbm93bk5vdFplcm8pIHsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewot KyAgICBhc19jbnR0encoZGVzdCwgc3JjKTsKLSsgIH0gZWxzZSB7Ci0rICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNx dWlyZSgpOwotKyAgICBhc19uZWcodG1wLCBzcmMpOwotKyAgICAvLyBhbmQuIHJlY29yZCBmb3Jt IGZvbGRzIHRoZSBjbXB3aSBzcmMsMCB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBuZWVkZWQKLSsg ICAgLy8gdG8gZHJpdmUgdGhlIGlzZWwgYmVsb3c6IHRtcCA9PSAwIGlmZiBzcmMgPT0gMC4KLSsg ICAgaWYgKGtub3duTm90WmVybykgewotKyAgICAgIGFzX2FuZF8odG1wLCBzcmMsIHRtcCk7Ci0r ICAgIH0gZWxzZSB7Ci0rICAgICAgYXNfYW5kX19yYyh0bXAsIHNyYywgdG1wKTsgIC8vIENSMFtl cV0gPSAoc3JjID09IDApCi0rICAgIH0KLSsgICAgYXNfY250bHp3KHRtcCwgdG1wKTsKLSsgICAg YXNfc3ViZmljKGRlc3QsIHRtcCwgMzEpOwotKyAgICBpZiAoIWtub3duTm90WmVybykgewotKyAg ICAgIHhzX2xpKHRtcCwgMzIpOwotKyAgICAgIGFzX2lzZWwoZGVzdCwgdG1wLCBkZXN0LCBFcXVh bCk7ICAvLyBDUjBbZXFdIOKGkiAzMiBpZiBzcmM9PTAKLSsgICAgfQotKyAgfQotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpwb3BjbnQzMihSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXIgb3V0 cHV0LCBSZWdpc3RlciB0bXApIHsKLSsgIGFzX3BvcGNudHcob3V0cHV0LCBpbnB1dCk7Ci0rICAv LyBwb3BjbnR3IGdpdmVzIHBlci13b3JkIHJlc3VsdHM7IG9uIDY0LWJpdCB0aGUgbG93IHdvcmQg Y291bnQgaXMgaW4KLSsgIC8vIGJpdHMgMzI6NjMsIHNvIGp1c3QgbWFzayB0byAzMiBiaXRzLgot KyAgYXNfcmx3aW5tKG91dHB1dCwgb3V0cHV0LCAwLCAwLCAzMSk7Ci0rfQotKwotKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKy8vIENvbmRpdGlvbiBmdW5jdGlvbnMKLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXA4 U2V0KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxocywgSW1tMzIgcmhzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBsaHMuYmFzZSk7Ci0rICBib29sIGlzVW5z aWduZWQgPSAoY29uZCAmIEFzc2VtYmxlcjo6Q29uZGl0aW9uVW5zaWduZWQpICE9IDA7Ci0rICBp ZiAoaXNVbnNpZ25lZCkgewotKyAgICBsb2FkOFplcm9FeHRlbmQobGhzLCBzY3JhdGNoKTsKLSsg ICAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tMzIodWludDhfdChyaHMudmFsdWUp KSwgY29uZCwgdHJ1ZSk7Ci0rICAgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rICB9IGVsc2Ugewot KyAgICBsb2FkOFNpZ25FeHRlbmQobGhzLCBzY3JhdGNoKTsKLSsgICAgQ29uZGl0aW9uIGMgPSBt YV9jbXAoc2NyYXRjaCwgSW1tMzIoaW50OF90KHJocy52YWx1ZSkpLCBjb25kLCB0cnVlKTsKLSsg ICAgbWFfY21wX3NldChkZXN0LCBjKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6Y21wMTZTZXQoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGhzLCBJbW0zMiByaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBsaHMuYmFzZSk7Ci0rICBi b29sIGlzVW5zaWduZWQgPSAoY29uZCAmIEFzc2VtYmxlcjo6Q29uZGl0aW9uVW5zaWduZWQpICE9 IDA7Ci0rICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICBsb2FkMTZaZXJvRXh0ZW5kKGxocywgc2Ny YXRjaCk7Ci0rICAgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIEltbTMyKHVpbnQxNl90 KHJocy52YWx1ZSkpLCBjb25kLCB0cnVlKTsKLSsgICAgbWFfY21wX3NldChkZXN0LCBjKTsKLSsg IH0gZWxzZSB7Ci0rICAgIGxvYWQxNlNpZ25FeHRlbmQobGhzLCBzY3JhdGNoKTsKLSsgICAgQ29u ZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tMzIoaW50MTZfdChyaHMudmFsdWUpKSwgY29u ZCwgdHJ1ZSk7Ci0rICAgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rICB9Ci0rfQotKwotK3RlbXBs YXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21w MzJTZXQoQ29uZGl0aW9uIGNvbmQsIFQxIGxocywgVDIgcmhzLCBSZWdpc3RlciBkZXN0KSB7Ci0r ICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCwgdHJ1ZSk7Ci0rICBtYV9jbXBf c2V0KGRlc3QsIGMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXA2NFNldChDb25k aXRpb24gY29uZCwgUmVnaXN0ZXI2NCBsaHMsIFJlZ2lzdGVyNjQgcmhzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIENvbmRpdGlvbiBjID0gbWFf Y21wKGxocy5yZWcsIHJocy5yZWcsIGNvbmQpOwotKyAgbWFfY21wX3NldChkZXN0LCBjKTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wNjRTZXQoQ29uZGl0aW9uIGNvbmQsIFJlZ2lz dGVyNjQgbGhzLCBJbW02NCByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgZGVzdCkgewotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLnJlZywgSW1tV29yZCh1 aW50NjRfdChyaHMudmFsdWUpKSwgY29uZCk7Ci0rICBtYV9jbXBfc2V0KGRlc3QsIGMpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXA2NFNldChDb25kaXRpb24gY29uZCwgQWRkcmVz cyBsaHMsIFJlZ2lzdGVyNjQgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKGxo cywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMucmVnLCBj b25kKTsKLSsgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmNtcDY0U2V0KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxocywgSW1tNjQgcmhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKGxocywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24g YyA9IG1hX2NtcChzY3JhdGNoLCBJbW1Xb3JkKHVpbnQ2NF90KHJocy52YWx1ZSkpLCBjb25kKTsK LSsgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUMSwg dHlwZW5hbWUgVDI+Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wUHRyU2V0KENvbmRpdGlvbiBj b25kLCBUMSBsaHMsIFQyIHJocywgUmVnaXN0ZXIgZGVzdCkgewotKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAobGhzLCByaHMsIGNvbmQpOwotKyAgbWFfY21wX3NldChkZXN0LCBjKTsKLSt9Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rLy8gQnJhbmNoIGZ1bmN0aW9ucwotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaDgoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywgSW1tMzIgcmhzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgLy8gTWlycm9yIEFSTTY0L0xvb25nQXJjaDY0L1JJU0MtVjog bmFycm93IHRoZSBpbW1lZGlhdGUgdG8gdGhlIDgtYml0Ci0rICAvLyBtZW1vcnkgb3BlcmFuZCB3 aWR0aCBzbyBib3RoIHNpZGVzIG9mIHRoZSBjb21wYXJlIGhhdmUgbWF0Y2hpbmcgYml0Ci0rICAv LyBwYXR0ZXJucyByZWdhcmRsZXNzIG9mIGhvdyBtb3ZlMzIoSW1tMzIpIG1hdGVyaWFsaXplcyB0 aGUgaW1tLiBVc2UKLSsgIC8vIHVpbnQ4IGNhc3QgZm9yIGVxdWFsaXR5IC8gdW5zaWduZWQsIGlu dDggY2FzdCBmb3Igc2lnbmVkIHJlbGF0aW9uYWwuCi0rICBib29sIGlzRXFPck5lID0gKGNvbmQg PT0gQXNzZW1ibGVyOjpFcXVhbCkgfHwgKGNvbmQgPT0gQXNzZW1ibGVyOjpOb3RFcXVhbCk7Ci0r ICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAmIEFzc2VtYmxlcjo6Q29uZGl0aW9uVW5zaWduZWQp ICE9IDA7Ci0rICBJbW0zMiBuYXJyb3dlZCgwKTsKLSsgIGlmIChpc0VxT3JOZSB8fCBpc1Vuc2ln bmVkKSB7Ci0rICAgIGxvYWQ4WmVyb0V4dGVuZChsaHMsIHNjcmF0Y2gpOwotKyAgICBuYXJyb3dl ZCA9IEltbTMyKHVpbnQ4X3QocmhzLnZhbHVlKSk7Ci0rICB9IGVsc2UgewotKyAgICBsb2FkOFNp Z25FeHRlbmQobGhzLCBzY3JhdGNoKTsKLSsgICAgbmFycm93ZWQgPSBJbW0zMihpbnQ4X3Qocmhz LnZhbHVlKSk7Ci0rICB9Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCBuYXJyb3dl ZCwgY29uZCwgdHJ1ZSk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoOChDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBsaHMsIFJl Z2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkg ewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQ4WmVyb0V4dGVuZChsaHMsIHNj cmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVl KTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFu Y2gxNihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLCBJbW0zMiByaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgLy8gU2VlIGJyYW5jaDg6IG5hcnJvdyB0aGUgaW1tZWRpYXRlIHRv IDE2IGJpdHMgc28gYm90aCBzaWRlcyBoYXZlIG1hdGNoaW5nCi0rICAvLyBiaXQgcGF0dGVybnMu IHVpbnQxNiBmb3IgZXF1YWxpdHkgLyB1bnNpZ25lZCwgaW50MTYgZm9yIHNpZ25lZCByZWxhdGlv bmFsLgotKyAgYm9vbCBpc0VxT3JOZSA9IChjb25kID09IEFzc2VtYmxlcjo6RXF1YWwpIHx8IChj b25kID09IEFzc2VtYmxlcjo6Tm90RXF1YWwpOwotKyAgYm9vbCBpc1Vuc2lnbmVkID0gKGNvbmQg JiBBc3NlbWJsZXI6OkNvbmRpdGlvblVuc2lnbmVkKSAhPSAwOwotKyAgSW1tMzIgbmFycm93ZWQo MCk7Ci0rICBpZiAoaXNFcU9yTmUgfHwgaXNVbnNpZ25lZCkgewotKyAgICBsb2FkMTZaZXJvRXh0 ZW5kKGxocywgc2NyYXRjaCk7Ci0rICAgIG5hcnJvd2VkID0gSW1tMzIodWludDE2X3QocmhzLnZh bHVlKSk7Ci0rICB9IGVsc2UgewotKyAgICBsb2FkMTZTaWduRXh0ZW5kKGxocywgc2NyYXRjaCk7 Ci0rICAgIG5hcnJvd2VkID0gSW1tMzIoaW50MTZfdChyaHMudmFsdWUpKTsKLSsgIH0KLSsgIENv bmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIG5hcnJvd2VkLCBjb25kLCB0cnVlKTsKLSsgIG1h X2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMihDb25k aXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChs aHMsIHJocywgY29uZCwgdHJ1ZSk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1t MzIgaW1tLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewot KyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBpbW0sIGNvbmQsIHRydWUpOwotKyAgbWFfYihj LCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDMyKENvbmRpdGlv biBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7Ci0rICBsb2FkMzIobGhzLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNj cmF0Y2gsIHJocywgY29uZCwgdHJ1ZSk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3Mm IGxocywgSW1tMzIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBs YWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihsaHMsIHNjcmF0 Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsK LSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gz MihDb25kaXRpb24gY29uZCwgY29uc3QgQWJzb2x1dGVBZGRyZXNzJiBsaHMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhzLCBMYWJlbCogbGFiZWwpIHsKLSsgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQoKHVpbnRwdHJfdClsaHMu YWRkciksIHNjcmF0Y2gpOwotKyAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaCwgMCksIHNjcmF0Y2gp OwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsKLSsg IG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMihD b25kaXRpb24gY29uZCwgY29uc3QgQWJzb2x1dGVBZGRyZXNzJiBsaHMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSW1tMzIgcmhzLCBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQoKHVpbnRwdHJfdClsaHMuYWRkciks IHNjcmF0Y2gpOwotKyAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaCwgMCksIHNjcmF0Y2gpOwotKyAg Q29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsKLSsgIG1hX2Io YywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMihDb25kaXRp b24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBsaHMsIEltbTMyIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7Ci0rICBsb2FkMzIobGhzLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNj cmF0Y2gsIHJocywgY29uZCwgdHJ1ZSk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIHdhc206OlN5bWJvbGlj QWRkcmVzcyBhZGRyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbTMyIGltbSwg TGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihh ZGRyLCBzY3JhdGNoKTsKLSsgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2gsIDApLCBzY3JhdGNoKTsK LSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIGltbSwgY29uZCwgdHJ1ZSk7Ci0rICBt YV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoNjQoQ29u ZGl0aW9uIGNvbmQsIFJlZ2lzdGVyNjQgbGhzLCBJbW02NCB2YWwsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIHN1Y2Nlc3MsIExhYmVsKiBmYWlsKSB7Ci0rICBDb25kaXRp b24gYyA9IG1hX2NtcChsaHMucmVnLCBJbW1Xb3JkKHVpbnQ2NF90KHZhbC52YWx1ZSkpLCBjb25k KTsKLSsgIGlmIChmYWlsKSB7Ci0rICAgIG1hX2IoYywgc3VjY2Vzcyk7Ci0rICAgIGp1bXAoZmFp bCk7Ci0rICB9IGVsc2UgewotKyAgICBtYV9iKGMsIHN1Y2Nlc3MpOwotKyAgfQotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2g2NChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXI2NCBs aHMsIFJlZ2lzdGVyNjQgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVs KiBzdWNjZXNzLCBMYWJlbCogZmFpbCkgewotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLnJl ZywgcmhzLnJlZywgY29uZCk7Ci0rICBpZiAoZmFpbCkgewotKyAgICBtYV9iKGMsIHN1Y2Nlc3Mp OwotKyAgICBqdW1wKGZhaWwpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFfYihjLCBzdWNjZXNzKTsK LSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoNjQoQ29uZGl0aW9uIGNv bmQsIGNvbnN0IEFkZHJlc3MmIGxocywgSW1tNjQgdmFsLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExhYmVsKiBzdWNjZXNzLCBMYWJlbCogZmFpbCkgewotKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0g bWFfY21wKHNjcmF0Y2gsIEltbVdvcmQodWludDY0X3QodmFsLnZhbHVlKSksIGNvbmQpOwotKyAg aWYgKGZhaWwpIHsKLSsgICAgbWFfYihjLCBzdWNjZXNzKTsKLSsgICAganVtcChmYWlsKTsKLSsg IH0gZWxzZSB7Ci0rICAgIG1hX2IoYywgc3VjY2Vzcyk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJyYW5jaDY0KENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCByaHMsIExhYmVsKiBz dWNjZXNzLCBMYWJlbCogZmFpbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxv YWRQdHIobGhzLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJo cy5yZWcsIGNvbmQpOwotKyAgaWYgKGZhaWwpIHsKLSsgICAgbWFfYihjLCBzdWNjZXNzKTsKLSsg ICAganVtcChmYWlsKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hX2IoYywgc3VjY2Vzcyk7Ci0rICB9 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDY0KENvbmRpdGlvbiBjb25kLCBj b25zdCBBZGRyZXNzJiBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QWRkcmVzcyYgcmhzLCBSZWdpc3RlciBzY3JhdGNoLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgbG9hZFB0cihyaHMsIHNjcmF0Y2gpOwotKyAgYnJh bmNoNjQoY29uZCwgbGhzLCBSZWdpc3RlcjY0KHNjcmF0Y2gpLCBsYWJlbCwgbnVsbHB0cik7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgUmVn aXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBsYWJlbCkgewotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCByaHMsIGNvbmQp OwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAobGhzLCBJbW1Xb3JkKGludDY0X3QocmhzLnZhbHVlKSksIGNvbmQpOwotKyAgbWFfYihj LCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRp b24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW1QdHIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywg cmhzLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1tR0NQdHIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIENv bmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhzLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIFJl Z2lzdGVyIGxocywgSW1tV29yZCByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBsYWJlbCkgewotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCByaHMsIGNvbmQp OwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFB0cihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLCBSZWdpc3RlciByaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlv biBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25z dCBBZGRyZXNzJiBsaHMsIEltbVB0ciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQ dHIobGhzLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywg Y29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMsIEltbUdDUHRyIHJo cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOwotKyAgQ29u ZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IEFkZHJlc3MmIGxocywgSW1tV29yZCByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg IGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gs IHJocywgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBYnNvbHV0ZUFkZHJlc3MmIGxo cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhzLCBMYWJlbCog bGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQo KHVpbnRwdHJfdClsaHMuYWRkciksIHNjcmF0Y2gpOwotKyAgbG9hZFB0cihBZGRyZXNzKHNjcmF0 Y2gsIDApLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywg Y29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBYnNvbHV0ZUFkZHJlc3MmIGxocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tV29yZCByaHMsIExhYmVsKiBsYWJlbCkg ewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZCgodWludHB0 cl90KWxocy5hZGRyKSwgc2NyYXRjaCk7Ci0rICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgMCks IHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kKTsK LSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQ dHIoQ29uZGl0aW9uIGNvbmQsIHdhc206OlN5bWJvbGljQWRkcmVzcyBsaHMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJocywgTGFiZWwqIGxhYmVsKSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbW92ZVB0cihsaHMsIHNjcmF0Y2gpOwotKyAgbG9h ZFB0cihBZGRyZXNzKHNjcmF0Y2gsIDApLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFf Y21wKHNjcmF0Y2gsIHJocywgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5k ZXgmIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhzLCBM YWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKGxo cywgc2NyYXRjaCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQp OwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFB0cihDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBsaHMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEltbVdvcmQgcmhzLCBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKGxocywgc2NyYXRjaCk7Ci0rICBDb25kaXRp b24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFByaXZhdGVQdHIoQ29uZGl0aW9uIGNv bmQsIGNvbnN0IEFkZHJlc3MmIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHJocywgTGFiZWwqIGxhYmVsKSB7Ci0rICBicmFuY2hQdHIoY29uZCwg bGhzLCByaHMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoRmxv YXQoRG91YmxlQ29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBMYWJlbCogbGFiZWwpIHsK LSsgIGFzX2ZjbXB1KGxocywgcmhzKTsKLSsgIG1hX2IoY29uZCwgbGFiZWwpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUcnVuY2F0ZUZsb2F0MzJNYXliZU1vZFVpbnQzMihG bG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsKSB7Ci0rICAv LyBDb252ZXJ0IGZsb2F0MzIgdG8gaW50NjQgKHRydW5jYXRpbmcgdG93YXJkIHplcm8pLCBmYWls IG9uIE5hTi9vdmVyZmxvdy4KLSsgIGFzX2ZjdGlkeihTY3JhdGNoRG91YmxlUmVnLCBzcmMpOwot KyAgYXNfbWZ2c3JkKGRlc3QsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgLy8gUFBDNjQgZmN0aWR6 IHNhdHVyYXRlcyB0byBJTlQ2NF9NSU4gb24gbmVnYXRpdmUgb3ZlcmZsb3cvTmFOLAotKyAgLy8g YW5kIHRvIElOVDY0X01BWCBvbiBwb3NpdGl2ZSBvdmVyZmxvdy4gQ2hlY2sgYm90aC4KLSsgIGFz TWFzbSgpLmJyYW5jaFB0cihBc3NlbWJsZXI6OkVxdWFsLCBkZXN0LCBJbW1Xb3JkKGludDY0X3Qo SU5UNjRfTUlOKSksIGZhaWwpOwotKyAgYXNNYXNtKCkuYnJhbmNoUHRyKEFzc2VtYmxlcjo6RXF1 YWwsIGRlc3QsIEltbVdvcmQoaW50NjRfdChJTlQ2NF9NQVgpKSwgZmFpbCk7Ci0rICAvLyBUcnVu Y2F0ZSB0byB1aW50MzIgKGtlZXAgbG93IDMyIGJpdHMpLgotKyAgYXNfcmxkaWNsKGRlc3QsIGRl c3QsIDAsIDMyKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVHJ1bmNhdGVG bG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBmYWlsKSB7 Ci0rICBjb252ZXJ0RmxvYXQzMlRvSW50MzIoc3JjLCBkZXN0LCBmYWlsLCBmYWxzZSk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaERvdWJsZShEb3VibGVDb25kaXRpb24gY29u ZCwgRmxvYXRSZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgcmhzLCBMYWJlbCogbGFiZWwpIHsKLSsgIGFzX2ZjbXB1KGxocywgcmhz KTsKLSsgIG1hX2IoY29uZCwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hUcnVuY2F0ZURvdWJsZU1heWJlTW9kVWludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExhYmVsKiBmYWlsKSB7Ci0rICAvLyBDb252ZXJ0IGRvdWJsZSB0byBpbnQ2 NCAodHJ1bmNhdGluZyB0b3dhcmQgemVybyksIGZhaWwgb24gTmFOL292ZXJmbG93LgotKyAgYXNf ZmN0aWR6KFNjcmF0Y2hEb3VibGVSZWcsIHNyYyk7Ci0rICBhc19tZnZzcmQoZGVzdCwgU2NyYXRj aERvdWJsZVJlZyk7Ci0rICAvLyBQUEM2NCBmY3RpZHogc2F0dXJhdGVzIHRvIElOVDY0X01JTiBv biBuZWdhdGl2ZSBvdmVyZmxvdy9OYU4sCi0rICAvLyBhbmQgdG8gSU5UNjRfTUFYIG9uIHBvc2l0 aXZlIG92ZXJmbG93LiBDaGVjayBib3RoLgotKyAgYXNNYXNtKCkuYnJhbmNoUHRyKEFzc2VtYmxl cjo6RXF1YWwsIGRlc3QsIEltbVdvcmQoaW50NjRfdChJTlQ2NF9NSU4pKSwgZmFpbCk7Ci0rICBh c01hc20oKS5icmFuY2hQdHIoQXNzZW1ibGVyOjpFcXVhbCwgZGVzdCwgSW1tV29yZChpbnQ2NF90 KElOVDY0X01BWCkpLCBmYWlsKTsKLSsgIC8vIFRydW5jYXRlIHRvIHVpbnQzMiAoa2VlcCBsb3cg MzIgYml0cykuCi0rICBhc19ybGRpY2woZGVzdCwgZGVzdCwgMCwgMzIpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoRmxvYXRSZWdpc3Rl ciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBmYWlsKSB7Ci0rICBjb252ZXJ0RG91YmxlVG9JbnQzMihz cmMsIGRlc3QsIGZhaWwsIGZhbHNlKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJh bmNoSW50NjROb3RJblB0clJhbmdlKFJlZ2lzdGVyNjQgc3JjLCBMYWJlbCogbGFiZWwpIHsKLSsg IC8vIE5vLW9wIG9uIDY0LWJpdC4KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNo VUludDY0Tm90SW5QdHJSYW5nZShSZWdpc3RlcjY0IHNyYywgTGFiZWwqIGxhYmVsKSB7Ci0rICAv LyBCcmFuY2ggaWYgc3JjID49IDJeNjMgKHNpZ24gYml0IHNldCA9IG91dCBvZiBzaWduZWQgcHRy IHJhbmdlKS4KLSsgIGFzX2NtcGRpKHNyYy5yZWcsIDApOwotKyAgbWFfYihBc3NlbWJsZXI6Okxl c3NUaGFuLCBsYWJlbCk7Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBUIHNyYywgUmVnaXN0ZXIg ZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb3ZlcmZsb3cp IHsKLSsgIHN3aXRjaCAoY29uZCkgewotKyAgICBjYXNlIE92ZXJmbG93OiB7Ci0rICAgICAgLy8g RG8gcmF3IDY0LWJpdCBhZGQgKG5vIHNpZ24gZXh0ZW5zaW9uKSBzbyB3ZSBjYW4gZGV0ZWN0IDMy LWJpdCBvdmVyZmxvdy4KLSsgICAgICAvLyBCb3RoIGlucHV0cyBzaG91bGQgYWxyZWFkeSBiZSBz aWduLWV4dGVuZGVkIDMyLWJpdCB2YWx1ZXMsIHNvIHRoZQotKyAgICAgIC8vIDY0LWJpdCByZXN1 bHQgaXMgbWF0aGVtYXRpY2FsbHkgY29ycmVjdC4gSWYgZXh0c3cocmVzdWx0KSAhPSByZXN1bHQs Ci0rICAgICAgLy8gdGhlIDMyLWJpdCBhZGQgb3ZlcmZsb3dlZC4KLSsgICAgICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICBhZGRQdHIoc3JjLCBkZXN0KTsKLSsgICAgICBhc19l eHRzdyhzY3JhdGNoLCBkZXN0KTsKLSsgICAgICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwotKyAg ICAgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOwotKyAgICAgIG1hX2IoTm90RXF1YWwsIG92ZXJmbG93 KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIE5vblplcm86Ci0rICAgIGNhc2Ug WmVybzoKLSsgICAgICBhZGQzMihzcmMsIGRlc3QpOwotKyAgICAgIGFzX2NtcGRpKGRlc3QsIDAp OwotKyAgICAgIG1hX2IoY29uZCA9PSBOb25aZXJvID8gTm90RXF1YWwgOiBFcXVhbCwgb3ZlcmZs b3cpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNpZ25lZDoKLSsgICAgY2FzZSBOb3RTaWdu ZWQ6Ci0rICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKLSsgICAgICBhc19jbXBkaShkZXN0LCAwKTsK LSsgICAgICBtYV9iKGNvbmQgPT0gU2lnbmVkID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1 YWwsIG92ZXJmbG93KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBDYXJyeUNsZWFyOgotKyAg ICBjYXNlIENhcnJ5U2V0OiB7Ci0rICAgICAgLy8gVW5zaWduZWQgMzItYml0IGNhcnJ5IGRldGVj dGlvbjogc2F2ZSBkZXN0LCBkbyAzMi1iaXQgYWRkLAotKyAgICAgIC8vIHRoZW4gdW5zaWduZWQt Y29tcGFyZSByZXN1bHQgd2l0aCBvcmlnaW5hbC4gSWYgcmVzdWx0IDwgb3JpZ2luYWwKLSsgICAg ICAvLyAodW5zaWduZWQpLCBhIGNhcnJ5IG9jY3VycmVkLgotKyAgICAgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgICAgIG1vdmUzMihkZXN0LCBzY3JhdGNoKTsKLSsgICAgICBhZGQz MihzcmMsIGRlc3QpOwotKyAgICAgIGFzX2NtcGx3KGRlc3QsIHNjcmF0Y2gpOwotKyAgICAgIG1h X2IoY29uZCA9PSBDYXJyeVNldCA/IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCBvdmVy Zmxvdyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pf Q1JBU0goIk5ZSSIpOwotKyAgfQotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgVCBzcmMsIFJlZ2lz dGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG92ZXJm bG93KSB7Ci0rICBzd2l0Y2ggKGNvbmQpIHsKLSsgICAgY2FzZSBPdmVyZmxvdzogewotKyAgICAg IC8vIERvIHJhdyA2NC1iaXQgc3ViIChubyBzaWduIGV4dGVuc2lvbikgc28gd2UgY2FuIGRldGVj dCAzMi1iaXQgb3ZlcmZsb3cuCi0rICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r ICAgICAgc3ViUHRyKHNyYywgZGVzdCk7Ci0rICAgICAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7 Ci0rICAgICAgYXNfY21wZChkZXN0LCBzY3JhdGNoKTsKLSsgICAgICBhc19leHRzdyhkZXN0LCBk ZXN0KTsKLSsgICAgICBtYV9iKE5vdEVxdWFsLCBvdmVyZmxvdyk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIH0KLSsgICAgY2FzZSBOb25aZXJvOgotKyAgICBjYXNlIFplcm86Ci0rICAgICAgc3ViMzIo c3JjLCBkZXN0KTsKLSsgICAgICBhc19jbXBkaShkZXN0LCAwKTsKLSsgICAgICBtYV9iKGNvbmQg PT0gTm9uWmVybyA/IE5vdEVxdWFsIDogRXF1YWwsIG92ZXJmbG93KTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSBTaWduZWQ6Ci0rICAgIGNhc2UgTm90U2lnbmVkOgotKyAgICAgIHN1YjMyKHNy YywgZGVzdCk7Ci0rICAgICAgYXNfY21wZGkoZGVzdCwgMCk7Ci0rICAgICAgbWFfYihjb25kID09 IFNpZ25lZCA/IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCBvdmVyZmxvdyk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJOWUkiKTsKLSsgIH0K LSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJh bmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIFQgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBvdmVyZmxvdykgewotKyAgTU9aX0FTU0VS VChjb25kID09IE92ZXJmbG93KTsKLSsgIC8vIERvIHJhdyA2NC1iaXQgbXVsdGlwbHkgKG5vIHNp Z24gZXh0ZW5zaW9uKSBzbyB3ZSBjYW4gZGV0ZWN0IDMyLWJpdAotKyAgLy8gb3ZlcmZsb3cuIGFz X211bGxkIGdpdmVzIGZ1bGwgNjQtYml0IGxvdyByZXN1bHQ7IGlmIGV4dHN3KHJlc3VsdCkgIT0K LSsgIC8vIHJlc3VsdCwgb3ZlcmZsb3cuIHNjcmF0Y2ggaXMgZGVhZCBhZnRlciB0aGUgbXVsbGQg KGNvbnN1bWVkIGFzIFJCKSwKLSsgIC8vIHNvIHRoZSBzaWduLWV4dGVuc2lvbiByb3VuZC10cmlw IHJldXNlcyBpdCBpbnN0ZWFkIG9mIGFjcXVpcmluZyBhCi0rICAvLyBzZWNvbmQgc2NyYXRjaC4K LSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtb3ZlMzIoc3JjLCBzY3JhdGNoKTsKLSsg IGFzX211bGxkKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOwotKyAgYXNfZXh0c3coc2NyYXRjaCwgZGVz dCk7Ci0rICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7 Ci0rICBtYV9iKE5vdEVxdWFsLCBvdmVyZmxvdyk7Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFt ZSBUPgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFJzaGlmdDMyKENvbmRpdGlvbiBjb25k LCBUIHNyYywgUmVnaXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8IGNvbmQg PT0gTm9uWmVybyk7Ci0rICByc2hpZnQzMihzcmMsIGRlc3QpOwotKyAgYnJhbmNoMzIoY29uZCA9 PSBaZXJvID8gRXF1YWwgOiBOb3RFcXVhbCwgZGVzdCwgSW1tMzIoMCksIGxhYmVsKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoTmVnMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lz dGVyIHJlZywgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gT3ZlcmZsb3cp OwotKyAgbmVnMzIocmVnKTsKLSsgIGJyYW5jaDMyKEVxdWFsLCByZWcsIEltbTMyKElOVDMyX01J TiksIGxhYmVsKTsKLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoQWRkUHRyKENvbmRpdGlvbiBjb25kLCBUIHNyYywgUmVnaXN0ZXIgZGVz dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0r ICBzd2l0Y2ggKGNvbmQpIHsKLSsgICAgY2FzZSBPdmVyZmxvdzogewotKyAgICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAgIG1vdmVQdHIoZGVzdCwgc2NyYXRjaCk7ICAvLyBz Y3JhdGNoID0gb2xkX2Rlc3QKLSsgICAgICBhZGRQdHIoc3JjLCBkZXN0KTsgICAgICAgLy8gZGVz dCA9IHJlc3VsdCA9IG9sZF9kZXN0ICsgc3JjCi0rICAgICAgYXNfeG9yXyhTZWNvbmRTY3JhdGNo UmVnLCBkZXN0LAotKyAgICAgICAgICAgICAgc2NyYXRjaCk7ICAvLyBTZWNvbmRTY3JhdGNoID0g cmVzdWx0IF4gb2xkX2Rlc3QKLSsgICAgICBhc19zdWJmKHNjcmF0Y2gsIHNjcmF0Y2gsCi0rICAg ICAgICAgICAgICBkZXN0KTsgIC8vIHNjcmF0Y2ggPSByZXN1bHQgLSBvbGRfZGVzdCA9IHNyY192 YWx1ZQotKyAgICAgIGFzX3hvcl8oc2NyYXRjaCwgc2NyYXRjaCwgZGVzdCk7ICAvLyBzY3JhdGNo ID0gc3JjX3ZhbHVlIF4gcmVzdWx0Ci0rICAgICAgLy8gKG9sZF9kZXN0IF4gcmVzdWx0KSAmIChz cmNfdmFsdWUgXiByZXN1bHQpOiBiaXQgNjMgc2V0IGlmZiBvdmVyZmxvdy4KLSsgICAgICAvLyBh bmQuIHJlY29yZCBmb3JtIHNldHMgQ1IwW2x0XT0oYml0IDYzIHNldCksIGZvbGRpbmcgdGhlIGNt cGRpLgotKyAgICAgIGFzX2FuZF9fcmMoc2NyYXRjaCwgc2NyYXRjaCwgU2Vjb25kU2NyYXRjaFJl Zyk7Ci0rICAgICAgbWFfYihMZXNzVGhhbiwgbGFiZWwpOwotKyAgICAgIGJyZWFrOwotKyAgICB9 Ci0rICAgIGNhc2UgTm9uWmVybzoKLSsgICAgY2FzZSBaZXJvOgotKyAgICAgIGFkZFB0cihzcmMs IGRlc3QpOwotKyAgICAgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAgICAgIG1hX2IoY29uZCA9PSBO b25aZXJvID8gTm90RXF1YWwgOiBFcXVhbCwgbGFiZWwpOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIFNpZ25lZDoKLSsgICAgY2FzZSBOb3RTaWduZWQ6Ci0rICAgICAgYWRkUHRyKHNyYywgZGVz dCk7Ci0rICAgICAgYXNfY21wZGkoZGVzdCwgMCk7Ci0rICAgICAgbWFfYihjb25kID09IFNpZ25l ZCA/IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCBsYWJlbCk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2UgQ2FycnlDbGVhcjoKLSsgICAgY2FzZSBDYXJyeVNldDogewotKyAgICAgIC8v IFVuc2lnbmVkIDY0LWJpdCBjYXJyeSBkZXRlY3Rpb246IHNhdmUgZGVzdCwgZG8gNjQtYml0IGFk ZCwKLSsgICAgICAvLyB0aGVuIHVuc2lnbmVkLWNvbXBhcmUgcmVzdWx0IHdpdGggb3JpZ2luYWwu IElmIHJlc3VsdCA8IG9yaWdpbmFsCi0rICAgICAgLy8gKHVuc2lnbmVkKSwgYSBjYXJyeSBvY2N1 cnJlZC4KLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICBtb3ZlUHRy KGRlc3QsIHNjcmF0Y2gpOwotKyAgICAgIGFkZFB0cihzcmMsIGRlc3QpOwotKyAgICAgIGFzX2Nt cGxkKGRlc3QsIHNjcmF0Y2gpOwotKyAgICAgIG1hX2IoY29uZCA9PSBDYXJyeVNldCA/IExlc3NU aGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCBsYWJlbCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0K LSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIk5ZSSIpOwotKyAgfQotK30KLSsKLSt0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hTdWJQdHIo Q29uZGl0aW9uIGNvbmQsIFQgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIHN3aXRjaCAoY29uZCkgewotKyAg ICBjYXNlIE92ZXJmbG93OiB7Ci0rICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r ICAgICAgbW92ZVB0cihkZXN0LCBzY3JhdGNoKTsgIC8vIHNjcmF0Y2ggPSBvbGRfZGVzdAotKyAg ICAgIHN1YlB0cihzcmMsIGRlc3QpOyAgICAgICAvLyBkZXN0ID0gcmVzdWx0ID0gb2xkX2Rlc3Qg LSBzcmMKLSsgICAgICAvLyBPdmVyZmxvdyBpZiAob2xkX2Rlc3QgXiBzcmNfdmFsdWUpICYgKG9s ZF9kZXN0IF4gcmVzdWx0KSBoYXMgYml0IDYzCi0rICAgICAgLy8gc2V0LgotKyAgICAgIGFzX3N1 YmYoU2Vjb25kU2NyYXRjaFJlZywgZGVzdCwKLSsgICAgICAgICAgICAgIHNjcmF0Y2gpOyAgLy8g U2Vjb25kU2NyYXRjaCA9IG9sZF9kZXN0IC0gcmVzdWx0ID0gc3JjX3ZhbHVlCi0rICAgICAgYXNf eG9yXyhTZWNvbmRTY3JhdGNoUmVnLCBzY3JhdGNoLAotKyAgICAgICAgICAgICAgU2Vjb25kU2Ny YXRjaFJlZyk7ICAgICAgICAvLyBvbGRfZGVzdCBeIHNyY192YWx1ZQotKyAgICAgIGFzX3hvcl8o c2NyYXRjaCwgc2NyYXRjaCwgZGVzdCk7ICAvLyBvbGRfZGVzdCBeIHJlc3VsdAotKyAgICAgIC8v IFJlY29yZC1mb3JtIEFORCBzZXRzIENSMCB0byB0aGUgc2lnbmVkIGNvbXBhcmUgb2YgdGhlIHJl c3VsdCB2cyAwLAotKyAgICAgIC8vIHNvIGEgc2VwYXJhdGUgY21wZGkgaXMgdW5uZWNlc3Nhcnk7 IExlc3NUaGFuIHJlYWRzIENSMC5MVC4KLSsgICAgICBhc19hbmRfX3JjKHNjcmF0Y2gsIHNjcmF0 Y2gsIFNlY29uZFNjcmF0Y2hSZWcpOwotKyAgICAgIG1hX2IoTGVzc1RoYW4sIGxhYmVsKTsKLSsg ICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIE5vblplcm86Ci0rICAgIGNhc2UgWmVybzoK LSsgICAgICBzdWJQdHIoc3JjLCBkZXN0KTsKLSsgICAgICBhc19jbXBkaShkZXN0LCAwKTsKLSsg ICAgICBtYV9iKGNvbmQgPT0gTm9uWmVybyA/IE5vdEVxdWFsIDogRXF1YWwsIGxhYmVsKTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSBTaWduZWQ6Ci0rICAgIGNhc2UgTm90U2lnbmVkOgotKyAg ICAgIHN1YlB0cihzcmMsIGRlc3QpOwotKyAgICAgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAgICAg IG1hX2IoY29uZCA9PSBTaWduZWQgPyBMZXNzVGhhbiA6IEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGFi ZWwpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgiTllJ Iik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaE11bFB0cihDb25k aXRpb24gY29uZCwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9 PSBBc3NlbWJsZXI6Ok92ZXJmbG93KTsKLSsgIGFzX211bGxkbyhkZXN0LCBkZXN0LCBzcmMpOwot KyAgbWFfYihPdmVyZmxvdywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hOZWdQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHJlZywgTGFiZWwqIGxhYmVsKSB7 Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gT3ZlcmZsb3cpOwotKyAgbmVnUHRyKHJlZyk7Ci0rICBi cmFuY2hQdHIoQXNzZW1ibGVyOjpFcXVhbCwgcmVnLCBJbW1Xb3JkKGludHB0cl90KElOVFBUUl9N SU4pKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpkZWNCcmFuY2hQdHIo Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1tMzIgcmhzLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIHN1YlB0cihyaHMsIGxocyk7 Ci0rICBicmFuY2hQdHIoY29uZCwgbGhzLCBJbW0zMigwKSwgbGFiZWwpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxo cywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJl bCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8IGNvbmQgPT0gTm9uWmVy byB8fCBjb25kID09IFNpZ25lZCB8fAotKyAgICAgICAgICAgICBjb25kID09IE5vdFNpZ25lZCk7 Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgaWYgKGxocyAhPSByaHMpIHsKLSsgICAg YXNfYW5kXyhzY3JhdGNoLCBsaHMsIHJocyk7Ci0rICAgIGFzX2V4dHN3X3JjKHNjcmF0Y2gsIHNj cmF0Y2gpOyAgLy8gQ1IwIHNldCBvbiBzaWduLWV4dGVuZGVkIGkzMjsgZm9sZHMgY21wZGkKLSsg IH0gZWxzZSB7Ci0rICAgIGFzX2V4dHN3X3JjKHNjcmF0Y2gsIGxocyk7Ci0rICB9Ci0rICBDb25k aXRpb24gYmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlvbj4oY29uZCAmIH5Bc3NlbWJsZXI6OkNv bmRpdGlvblplcm8pOwotKyAgbWFfYihiYXNlLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0z MiByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkg ewotKyAgTU9aX0FTU0VSVChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJvIHx8IGNvbmQg PT0gU2lnbmVkIHx8Ci0rICAgICAgICAgICAgIGNvbmQgPT0gTm90U2lnbmVkKTsKLSsgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBpZiAoaXNfdWludE4ocmhzLnZhbHVlLCAxNikpIHsKLSsg ICAgYXNfYW5kaV9yYyhzY3JhdGNoLCBsaHMsIHJocy52YWx1ZSk7Ci0rICAgIC8vIGFuZGlfcmMg c2V0cyBDUjAgb24gdGhlIG1hc2tlZCB2YWx1ZSwgYnV0IG9ubHkgdGhlIGxvdyAxNiBiaXRzIG1h dHRlcgotKyAgICAvLyBzaW5jZSByaHMgaXMgYSAxNi1iaXQgdW5zaWduZWQgbWFzayDigJQgc2ln biBvZiB0aGUgaTMyIHJlc3VsdCBpcyBhbHdheXMKLSsgICAgLy8gMCwgc28gQ1IwW2x0XSBpcyBh bHdheXMgMC4gRm9yIFNpZ25lZC9Ob3RTaWduZWQgY29uZGl0aW9ucyB0aGUgYW5zd2VyCi0rICAg IC8vIGlzIGZpeGVkOyBmb3IgWmVyby9Ob25aZXJvIENSMFtlcV0gaXMgY29ycmVjdC4KLSsgIH0g ZWxzZSB7Ci0rICAgIG1vdmUzMihyaHMsIHNjcmF0Y2gpOwotKyAgICBhc19hbmRfKHNjcmF0Y2gs IGxocywgc2NyYXRjaCk7Ci0rICAgIGFzX2V4dHN3X3JjKHNjcmF0Y2gsIHNjcmF0Y2gpOyAgLy8g Q1IwIHNldCBvbiBzaWduLWV4dGVuZGVkIGkzMjsgZm9sZHMgY21wZGkKLSsgIH0KLSsgIENvbmRp dGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29u ZGl0aW9uWmVybyk7Ci0rICBtYV9iKGJhc2UsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMs IEltbTMyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxh YmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8gfHwg Y29uZCA9PSBTaWduZWQgfHwKLSsgICAgICAgICAgICAgY29uZCA9PSBOb3RTaWduZWQpOwotKyAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihsaHMsIHNjcmF0Y2gpOwotKyAgLy8g YW5kMzIgcGlja3MgdXAgdGhlIHJsd2lubSBjb250aWctbWFzayBmYXN0IHBhdGggZm9yIG5vbi0x Ni1iaXQtZml0Ci0rICAvLyBpbW1lZGlhdGVzIHRoYXQgYXJlIGEgY29udGlndW91cyBydW4gb2Yg MS1iaXRzIChjb21tb246IHRhZyBtYXNrcywKLSsgIC8vIGhlYWRlciBiaXQtZmllbGRzKS4gSXQg YWxzbyBlbWl0cyB0aGUgdHJhaWxpbmcgZXh0c3cuCi0rICBhbmQzMihyaHMsIHNjcmF0Y2gpOwot KyAgYXNfY21wZGkoc2NyYXRjaCwgMCk7Ci0rICBDb25kaXRpb24gYmFzZSA9IHN0YXRpY19jYXN0 PENvbmRpdGlvbj4oY29uZCAmIH5Bc3NlbWJsZXI6OkNvbmRpdGlvblplcm8pOwotKyAgbWFfYihi YXNlLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3QzMihD b25kaXRpb24gY29uZCwgY29uc3QgQWJzb2x1dGVBZGRyZXNzJiBsaHMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEltbTMyIHJocywgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pf QVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8gfHwgY29uZCA9PSBTaWduZWQg fHwKLSsgICAgICAgICAgICAgY29uZCA9PSBOb3RTaWduZWQpOwotKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZCgodWludHB0cl90KWxocy5hZGRyKSwgc2NyYXRj aCk7Ci0rICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoLCAwKSwgc2NyYXRjaCk7Ci0rICBhbmQzMihy aHMsIHNjcmF0Y2gpOwotKyAgYXNfY21wZGkoc2NyYXRjaCwgMCk7Ci0rICBDb25kaXRpb24gYmFz ZSA9IHN0YXRpY19jYXN0PENvbmRpdGlvbj4oY29uZCAmIH5Bc3NlbWJsZXI6OkNvbmRpdGlvblpl cm8pOwotKyAgbWFfYihiYXNlLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaFRlc3RQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0r ICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8gfHwgY29uZCA9PSBT aWduZWQgfHwKLSsgICAgICAgICAgICAgY29uZCA9PSBOb3RTaWduZWQpOwotKyAgaWYgKGxocyA9 PSByaHMpIHsKLSsgICAgYXNfY21wZGkobGhzLCAwKTsKLSsgIH0gZWxzZSB7Ci0rICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgLy8gUmVjb3JkLWZvcm0gQU5EIHNldHMgQ1IwOyBu byBmb2xsb3ctdXAgY21wZGkgbmVlZGVkLgotKyAgICBhc19hbmRfX3JjKHNjcmF0Y2gsIGxocywg cmhzKTsKLSsgIH0KLSsgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihj b25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7Ci0rICBtYV9iKGJhc2UsIGxhYmVsKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFB0cihDb25kaXRpb24gY29u ZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBaZXJvIHx8IGNv bmQgPT0gTm9uWmVybyB8fCBjb25kID09IFNpZ25lZCB8fAotKyAgICAgICAgICAgICBjb25kID09 IE5vdFNpZ25lZCk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgaWYgKGlzX3VpbnRO KHJocy52YWx1ZSwgMTYpKSB7Ci0rICAgIGFzX2FuZGlfcmMoc2NyYXRjaCwgbGhzLCByaHMudmFs dWUpOwotKyAgfSBlbHNlIHsKLSsgICAgbW92ZTMyKHJocywgc2NyYXRjaCk7Ci0rICAgIGFzX2Fu ZF9fcmMoc2NyYXRjaCwgbGhzLCBzY3JhdGNoKTsgIC8vIHJlY29yZCBmb3JtIGZvbGRzIHRoZSBj bXBkaQotKyAgfQotKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNv bmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKLSsgIG1hX2IoYmFzZSwgbGFiZWwpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0UHRyKENvbmRpdGlvbiBjb25k LCBSZWdpc3RlciBsaHMsIEltbVdvcmQgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBj b25kID09IE5vblplcm8gfHwgY29uZCA9PSBTaWduZWQgfHwKLSsgICAgICAgICAgICAgY29uZCA9 PSBOb3RTaWduZWQpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIocmhz LCBzY3JhdGNoKTsKLSsgIGFzX2FuZF9fcmMoc2NyYXRjaCwgbGhzLCBzY3JhdGNoKTsKLSsgIENv bmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6 Q29uZGl0aW9uWmVybyk7Ci0rICBtYV9iKGJhc2UsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFB0cihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYg bGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tMzIgcmhzLCBMYWJl bCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsK LSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKGxocywg c2NyYXRjaCk7Ci0rICAvLyBhbmRQdHIgcGlja3MgdXAgdGhlIHJsd2lubSBjb250aWctbWFzayBm YXN0IHBhdGggZm9yIG5vbi0xNi1iaXQtZml0Ci0rICAvLyBpbW1lZGlhdGVzIHRoYXQgYXJlIGEg Y29udGlndW91cyBydW4gb2YgMS1iaXRzLgotKyAgYW5kUHRyKHJocywgc2NyYXRjaCk7Ci0rICBh c19jbXBkaShzY3JhdGNoLCAwKTsKLSsgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29u ZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7Ci0rICBtYV9iKGJhc2Us IGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdDY0KENvbmRp dGlvbiBjb25kLCBSZWdpc3RlcjY0IGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXI2NCByaHMsIFJlZ2lzdGVyIHRlbXAsIExhYmVsKiBzdWNjZXNzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbCkgewotKyAgTU9aX0FT U0VSVChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJvIHx8IGNvbmQgPT0gU2lnbmVkIHx8 Ci0rICAgICAgICAgICAgIGNvbmQgPT0gTm90U2lnbmVkKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBhc19hbmRfX3JjKHNjcmF0Y2gsIGxocy5yZWcsIHJocy5yZWcpOwotKyAgQ29u ZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpD b25kaXRpb25aZXJvKTsKLSsgIGlmIChmYWlsKSB7Ci0rICAgIG1hX2IoYmFzZSwgc3VjY2Vzcyk7 Ci0rICAgIGp1bXAoZmFpbCk7Ci0rICB9IGVsc2UgewotKyAgICBtYV9iKGJhc2UsIHN1Y2Nlc3Mp OwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0NjQoQ29uZGl0 aW9uIGNvbmQsIFJlZ2lzdGVyNjQgbGhzLCBJbW02NCByaHMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBzdWNjZXNzLCBMYWJlbCogZmFpbCkgewotKyAgTU9aX0FT U0VSVChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJvIHx8IGNvbmQgPT0gU2lnbmVkIHx8 Ci0rICAgICAgICAgICAgIGNvbmQgPT0gTm90U2lnbmVkKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBtb3ZlUHRyKEltbVdvcmQodWludDY0X3QocmhzLnZhbHVlKSksIHNjcmF0Y2gp OwotKyAgYXNfYW5kX19yYyhzY3JhdGNoLCBsaHMucmVnLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlv biBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0 aW9uWmVybyk7Ci0rICBpZiAoZmFpbCkgewotKyAgICBtYV9iKGJhc2UsIHN1Y2Nlc3MpOwotKyAg ICBqdW1wKGZhaWwpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFfYihiYXNlLCBzdWNjZXNzKTsKLSsg IH0KLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gVmFsdWUtdHlwZSBicmFuY2ggZnVuY3Rpb25zCi0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFVuZGVmaW5lZChDb25kaXRpb24gY29u ZCwgUmVnaXN0ZXIgdGFnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9 PSBOb3RFcXVhbCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9U QUdfVU5ERUZJTkVEKSwgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFVuZGVmaW5lZChDb25kaXRpb24gY29uZCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlT3BlcmFuZCYg dmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCog bGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBzcGxpdFRhZyh2YWx1ZSwg c2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHNjcmF0Y2gsIEltbVRhZyhKU1ZBTF9U QUdfVU5ERUZJTkVEKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFu Y2hUZXN0VW5kZWZpbmVkKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7 Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRh ZyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWco SlNWQUxfVEFHX1VOREVGSU5FRCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YnJhbmNoVGVzdFVuZGVmaW5lZChDb25kaXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRk cmVzcywgc2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFM X1RBR19VTkRFRklORUQpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaFRlc3RJbnQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQo Y29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgIENvbmRpdGlvbiBjID0gbWFf Y21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19JTlQzMiksIGNvbmQpOwotKyAgbWFfYihjLCBsYWJl bCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RJbnQzMihDb25kaXRp b24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25k LCBzY3JhdGNoLCBJbW1UYWcoSlNWQUxfVEFHX0lOVDMyKSwgbGFiZWwpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0SW50MzIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFk ZHJlc3MmIGFkZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRh ZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQs IHRhZywgSW1tVGFnKEpTVkFMX1RBR19JTlQzMiksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEludDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5k ZXgmIGFkZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVs KiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwot KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9 IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHRh ZywgSW1tVGFnKEpTVkFMX1RBR19JTlQzMiksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoVGVzdEludDMyVHJ1dGh5KGJvb2wgYiwgY29uc3QgVmFsdWVPcGVyYW5k JiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgdW5ib3hJbnQzMih2 YWx1ZSwgc2NyYXRjaCk7Ci0rICBhc19jbXB3aShzY3JhdGNoLCAwKTsKLSsgIG1hX2IoYiA/IE5v dEVxdWFsIDogRXF1YWwsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJh bmNoVGVzdERvdWJsZShDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJU KGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0rICBDb25kaXRpb24gYWN0dWFs ID0gKGNvbmQgPT0gRXF1YWwpID8gQmVsb3dPckVxdWFsIDogQWJvdmU7Ci0rICBDb25kaXRpb24g YyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfTUFYX0RPVUJMRSksIGFjdHVhbCk7Ci0r ICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVz dERvdWJsZShDb25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKLSsgIGJy YW5jaFRlc3REb3VibGUoY29uZCwgc2NyYXRjaCwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpicmFuY2hUZXN0RG91YmxlKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNz JiBhZGRyZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwq IGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0g ZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3REb3VibGUoY29uZCwg dGFnLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3REb3Vi bGUoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2Ny YXRjaCk7Ci0rICBicmFuY2hUZXN0RG91YmxlKGNvbmQsIHRhZywgbGFiZWwpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0RG91YmxlVHJ1dGh5KGJvb2wgYiwgRmxvYXRS ZWdpc3RlciB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHhzX2xp KHNjcmF0Y2gsIDApOwotKyAgYXNfbXR2c3JkKFNjcmF0Y2hEb3VibGVSZWcsIHNjcmF0Y2gpOwot KyAgYXNfZmNtcHUodmFsdWUsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgRG91YmxlQ29uZGl0aW9u IGNvbmQgPSBiID8gRG91YmxlTm90RXF1YWwgOiBEb3VibGVFcXVhbE9yVW5vcmRlcmVkOwotKyAg bWFfYihjb25kLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRl c3ROdW1iZXIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHRhZywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25k ID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwotKyAgQ29uZGl0aW9uIGFjdHVhbCA9IChj b25kID09IEVxdWFsKSA/IEJlbG93T3JFcXVhbCA6IEFib3ZlOwotKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAodGFnLCBJbW0zMihKUzo6ZGV0YWlsOjpWYWx1ZVVwcGVySW5jbE51bWJlclRhZyksIGFj dHVhbCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoVGVzdE51bWJlcihDb25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1 ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkg ewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNo KTsKLSsgIGJyYW5jaFRlc3ROdW1iZXIoY29uZCwgc2NyYXRjaCwgbGFiZWwpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0Qm9vbGVhbihDb25kaXRpb24gY29uZCwgUmVn aXN0ZXIgdGFnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVs KiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1 YWwpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFHX0JPT0xF QU4pLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hUZXN0Qm9vbGVhbihDb25kaXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKLSsgIGJy YW5jaFRlc3RUYWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RBR19CT09MRUFOKSwgbGFi ZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0Qm9vbGVhbihDb25k aXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOwot KyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfQk9PTEVBTiksIGxh YmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEJvb2xlYW4oQ29u ZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gp OwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfQk9PTEVBTiks IGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEJvb2xlYW5U cnV0aHkoYm9vbCBiLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHVuYm94Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaCk7Ci0rICBh c19jbXB3aShzY3JhdGNoLCAwKTsKLSsgIG1hX2IoYiA/IE5vdEVxdWFsIDogRXF1YWwsIGxhYmVs KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFN0cmluZyhDb25kaXRp b24gY29uZCwgUmVnaXN0ZXIgdGFnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29u ZCA9PSBOb3RFcXVhbCk7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZB TF9UQUdfU1RSSU5HKSwgY29uZCk7Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFN0cmluZyhDb25kaXRpb24gY29uZCwgY29uc3QgVmFs dWVPcGVyYW5kJiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHNwbGl0VGFn KHZhbHVlLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgc2NyYXRjaCwgSW1tVGFn KEpTVkFMX1RBR19TVFJJTkcpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaFRlc3RTdHJpbmcoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3Ms Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsK LSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFn KGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhK U1ZBTF9UQUdfU1RSSU5HKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hUZXN0U3RyaW5nKENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3Ms Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsK LSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFn KGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhK U1ZBTF9UQUdfU1RSSU5HKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hUZXN0U3RyaW5nVHJ1dGh5KGJvb2wgYiwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJl bCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHVuYm94U3RyaW5nKHZhbHVlLCBz Y3JhdGNoKTsKLSsgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2gsIEpTU3RyaW5nOjpvZmZzZXRPZkxl bmd0aCgpKSwgc2NyYXRjaCk7Ci0rICBhc19jbXB3aShzY3JhdGNoLCAwKTsKLSsgIG1hX2IoYiA/ IE5vdEVxdWFsIDogRXF1YWwsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoVGVzdFN5bWJvbChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNT RVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0rICBDb25kaXRpb24gYyA9 IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfU1lNQk9MKSwgY29uZCk7Ci0rICBtYV9iKGMs IGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFN5bWJvbChD b25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RU YWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RBR19TWU1CT0wpLCBsYWJlbCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RTeW1ib2woQ29uZGl0aW9uIGNvbmQs IGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg IFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICBicmFuY2hU ZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19TWU1CT0wpLCBsYWJlbCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RTeW1ib2woQ29uZGl0aW9uIGNvbmQs IGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBS ZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgYnJhbmNoVGVz dFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfU1lNQk9MKSwgbGFiZWwpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0QmlnSW50KENvbmRpdGlvbiBjb25kLCBS ZWdpc3RlciB0YWcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJl bCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVx dWFsKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19CSUdJ TlQpLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hUZXN0QmlnSW50KENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQm IHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxh YmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgc3BsaXRUYWcodmFsdWUsIHNj cmF0Y2gpOwotKyAgYnJhbmNoVGVzdFRhZyhjb25kLCBzY3JhdGNoLCBJbW1UYWcoSlNWQUxfVEFH X0JJR0lOVCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVz dEJpZ0ludChDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywg c2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19C SUdJTlQpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RC aWdJbnQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywg c2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19C SUdJTlQpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RC aWdJbnRUcnV0aHkoYm9vbCBiLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgdW5ib3hCaWdJbnQodmFsdWUsIHNjcmF0Y2gpOwot KyAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaCwgQmlnSW50OjpvZmZzZXRPZkRpZ2l0TGVuZ3RoKCkp LCBzY3JhdGNoKTsKLSsgIGFzX2NtcHdpKHNjcmF0Y2gsIDApOwotKyAgbWFfYihiID8gTm90RXF1 YWwgOiBFcXVhbCwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hU ZXN0TnVsbChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09 IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFn LCBJbW1UYWcoSlNWQUxfVEFHX05VTEwpLCBjb25kKTsKLSsgIG1hX2IoYywgbGFiZWwpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TnVsbChDb25kaXRpb24gY29uZCwg Y29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBz cGxpdFRhZyh2YWx1ZSwgc2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQsIHNjcmF0Y2gs IEltbVRhZyhKU1ZBTF9UQUdfTlVMTCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVGVzdE51bGwoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJl c3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7 Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRh ZyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWco SlNWQUxfVEFHX05VTEwpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaFRlc3ROdWxsKENvbmRpdGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRy ZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxf VEFHX05VTEwpLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRl c3RPYmplY3QoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHRhZywKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25k ID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAo dGFnLCBJbW1UYWcoSlNWQUxfVEFHX09CSkVDVCksIGNvbmQpOwotKyAgbWFfYihjLCBsYWJlbCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RPYmplY3QoQ29uZGl0aW9u IGNvbmQsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7Ci0rICBzcGxpdFRhZyh2YWx1ZSwgc2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0VGFnKGNvbmQs IHNjcmF0Y2gsIEltbVRhZyhKU1ZBTF9UQUdfT0JKRUNUKSwgbGFiZWwpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0T2JqZWN0KENvbmRpdGlvbiBjb25kLCBjb25zdCBB ZGRyZXNzJiBhZGRyZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIg dGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29u ZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX09CSkVDVCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE9iamVjdChDb25kaXRpb24gY29uZCwgY29uc3QgQmFz ZUluZGV4JiBhZGRyZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIg dGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29u ZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX09CSkVDVCksIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFByaW1pdGl2ZShDb25kaXRpb24gY29uZCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlT3BlcmFuZCYg dmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCog bGFiZWwpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBzcGxpdFRhZyh2YWx1ZSwg c2NyYXRjaCk7Ci0rICBicmFuY2hUZXN0UHJpbWl0aXZlKGNvbmQsIHNjcmF0Y2gsIGxhYmVsKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEdDVGhpbmcoQ29uZGl0aW9u IGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBicmFuY2hUZXN0R0NUaGluZ0ltcGwo Y29uZCwgYWRkcmVzcywgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFu Y2hUZXN0R0NUaGluZyhDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewot KyAgYnJhbmNoVGVzdEdDVGhpbmdJbXBsKGNvbmQsIGFkZHJlc3MsIGxhYmVsKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEdDVGhpbmcoQ29uZGl0aW9uIGNvbmQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVPcGVyYW5k JiBhZGRyZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVs KiBsYWJlbCkgewotKyAgYnJhbmNoVGVzdEdDVGhpbmdJbXBsKGNvbmQsIGFkZHJlc3MsIGxhYmVs KTsKLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoVGVzdEdDVGhpbmdJbXBsKENvbmRpdGlvbiBjb25kLCBjb25zdCBUJiBhZGRyZXNzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwp IHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFk ZHJlc3MsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGFjdHVhbCA9IChjb25kID09IEVxdWFsKSA/ IEFib3ZlT3JFcXVhbCA6IEJlbG93OwotKyAgQ29uZGl0aW9uIGMgPQotKyAgICAgIG1hX2NtcCh0 YWcsIEltbTMyKEpTOjpkZXRhaWw6OlZhbHVlTG93ZXJJbmNsR0NUaGluZ1RhZyksIGFjdHVhbCk7 Ci0rICBtYV9iKGMsIGxhYmVsKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNo VGVzdFByaW1pdGl2ZShDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNT RVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0rICBDb25kaXRpb24gYWN0 dWFsID0gKGNvbmQgPT0gRXF1YWwpID8gQmVsb3cgOiBBYm92ZU9yRXF1YWw7Ci0rICBDb25kaXRp b24gYyA9Ci0rICAgICAgbWFfY21wKHRhZywgSW1tMzIoSlM6OmRldGFpbDo6VmFsdWVVcHBlckV4 Y2xQcmltaXRpdmVUYWcpLCBhY3R1YWwpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RNYWdpYyhDb25kaXRpb24gY29uZCwgUmVnaXN0 ZXIgdGFnLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFi ZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsK LSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19NQUdJQyksIGNv bmQpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaFRlc3RNYWdpYyhDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRy ZXNzLCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxf VEFHX01BR0lDKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hU ZXN0TWFnaWMoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Ci0rICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNz LCBzY3JhdGNoKTsKLSsgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFH X01BR0lDKSwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0 TWFnaWMoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKLSsgIGJyYW5j aFRlc3RUYWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RBR19NQUdJQyksIGxhYmVsKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE1hZ2ljKENvbmRpdGlvbiBj b25kLCBjb25zdCBBZGRyZXNzJiB2YWxhZGRyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBKU1doeU1hZ2ljIHdoeSwgTGFiZWwqIGxhYmVsKSB7Ci0rICB1aW50NjRfdCBt YWdpYyA9IE1hZ2ljVmFsdWUod2h5KS5hc1Jhd0JpdHMoKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBsb2FkUHRyKHZhbGFkZHIsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAoc2NyYXRjaCwgSW1tV29yZChtYWdpYyksIGNvbmQpOwotKyAgbWFfYihjLCBsYWJlbCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RNYWdpYyhDb25kaXRpb24g Y29uZCwgY29uc3QgQmFzZUluZGV4JiB2YWxhZGRyLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBKU1doeU1hZ2ljIHdoeSwgTGFiZWwqIGxhYmVsKSB7Ci0rICB1aW50NjRf dCBtYWdpYyA9IE1hZ2ljVmFsdWUod2h5KS5hc1Jhd0JpdHMoKTsKLSsgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICBsb2FkUHRyKHZhbGFkZHIsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMg PSBtYV9jbXAoc2NyYXRjaCwgSW1tV29yZChtYWdpYyksIGNvbmQpOwotKyAgbWFfYihjLCBsYWJl bCk7Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaFRlc3RWYWx1ZShDb25kaXRpb24gY29uZCwgY29uc3QgVCYgbGhzLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZU9wZXJhbmQmIHJocywgTGFi ZWwqIGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RF cXVhbCk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZFB0cihsaHMsIHNjcmF0 Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLnZhbHVlUmVnKCksIGNv bmQpOwotKyAgbWFfYihjLCBsYWJlbCk7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIFRlc3Qtc2V0 IGZ1bmN0aW9ucwotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnRlc3ROdW1iZXJTZXQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFQmIHNyYywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIE1PWl9BU1NF UlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKHNyYywgc2NyYXRjaCk7Ci0r ICBDb25kaXRpb24gYWN0dWFsID0gKGNvbmQgPT0gRXF1YWwpID8gQmVsb3dPckVxdWFsIDogQWJv dmU7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbTMyKEpTOjpkZXRhaWw6OlZhbHVl VXBwZXJJbmNsTnVtYmVyVGFnKSwgYWN0dWFsKTsKLSsgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Ci0r fQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRlc3RC b29sZWFuU2V0KENvbmRpdGlvbiBjb25kLCBjb25zdCBUJiBzcmMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VSVChjb25k ID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoc3JjLCBzY3JhdGNoKTsKLSsgIENvbmRp dGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19CT09MRUFOKSwgY29uZCk7Ci0r ICBtYV9jbXBfc2V0KGRlc3QsIGMpOwotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp0ZXN0U3RyaW5nU2V0KENvbmRpdGlvbiBjb25kLCBjb25zdCBU JiBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0 KSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0r ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhz cmMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxf VEFHX1NUUklORyksIGNvbmQpOwotKyAgbWFfY21wX3NldChkZXN0LCBjKTsKLSt9Ci0rCi0rdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dGVzdFN5bWJvbFNldChD b25kaXRpb24gY29uZCwgY29uc3QgVCYgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8 IGNvbmQgPT0gTm90RXF1YWwpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIFJlZ2lz dGVyIHRhZyA9IGV4dHJhY3RUYWcoc3JjLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFf Y21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19TWU1CT0wpLCBjb25kKTsKLSsgIG1hX2NtcF9zZXQo ZGVzdCwgYyk7Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnRlc3RCaWdJbnRTZXQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFQmIHNyYywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIE1PWl9B U1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKHNyYywgc2NyYXRjaCk7 Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfQklHSU5UKSwg Y29uZCk7Ci0rICBtYV9jbXBfc2V0KGRlc3QsIGMpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBD b21wdXRlZCBhZGRyZXNzIC8gY29uZGl0aW9uYWwgbW92ZSAvIGNvbmRpdGlvbmFsIGxvYWQKLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUb0NvbXB1dGVkQWRkcmVzcyhjb25zdCBCYXNl SW5kZXgmIGFkZHIpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKGFk ZHIsIHNjcmF0Y2gpOwotKyAgYnJhbmNoKHNjcmF0Y2gpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpjbXAzMk1vdmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiBy aHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc3JjLCBSZWdp c3RlciBkZXN0KSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCwgdHJ1 ZSk7Ci0rICBtYV9jbXBfbW92ZShkZXN0LCBzcmMsIGMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpjbXAzMk1vdmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBSZWdpc3Rl ciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc3JjLCBS ZWdpc3RlciBkZXN0KSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCwg dHJ1ZSk7Ci0rICBtYV9jbXBfbW92ZShkZXN0LCBzcmMsIGMpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpjbXAzMk1vdmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIHJocywgUmVnaXN0 ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIocmhzLCBzY3JhdGNoKTsK LSsgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgc2NyYXRjaCwgY29uZCwgdHJ1ZSk7Ci0rICBt YV9jbXBfbW92ZShkZXN0LCBzcmMsIGMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpj bXAzMk1vdmVQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1tMzIgcmhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRl c3QpIHsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhzLCBjb25kLCB0cnVlKTsKLSsg IG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmNtcFB0ck1vdmVQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1tMzIgcmhzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIEltbVdvcmQoaW50NjRfdChy aHMudmFsdWUpKSwgY29uZCk7Ci0rICBtYV9jbXBfbW92ZShkZXN0LCBzcmMsIGMpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXBQdHJNb3ZlUHRyKENvbmRpdGlvbiBjb25kLCBSZWdp c3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgQ29uZGl0aW9uIGMgPSBtYV9j bXAobGhzLCByaHMsIGNvbmQpOwotKyAgbWFfY21wX21vdmUoZGVzdCwgc3JjLCBjKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wUHRyTW92ZVB0cihDb25kaXRpb24gY29uZCwgUmVn aXN0ZXIgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRk cmVzcyYgcmhzLCBSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9h ZFB0cihyaHMsIHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBzY3JhdGNo LCBjb25kKTsKLSsgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYyk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmNtcDMyTG9hZDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgcmhzLCBjb25z dCBBZGRyZXNzJiBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwot KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihyaHMsIHNj cmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBzY3JhdGNoLCBjb25kLCB0cnVl KTsKLSsgIC8vIENvbmRpdGlvbmFsIGxvYWQ6IGxvYWQgaW50byBzY3JhdGNoLCB0aGVuIGlzZWwu Ci0rICBsb2FkMzIoc3JjLCBzY3JhdGNoKTsKLSsgIG1hX2NtcF9tb3ZlKGRlc3QsIHNjcmF0Y2gs IGMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMkxvYWQzMihDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBDb25k aXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCwgdHJ1ZSk7Ci0rICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgbG9hZDMyKHNyYywgc2NyYXRjaCk7Ci0rICBtYV9jbXBfbW92ZShkZXN0 LCBzY3JhdGNoLCBjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wMzJMb2FkMzIo Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1tMzIgcmhzLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgewot KyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCByaHMsIGNvbmQsIHRydWUpOwotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihzcmMsIHNjcmF0Y2gpOwotKyAgbWFfY21wX21v dmUoZGVzdCwgc2NyYXRjaCwgYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMy TG9hZFB0cihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLCBJbW0zMiByaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIHNyYywgUmVn aXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihsaHMs IHNjcmF0Y2gpOwotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0 cnVlKTsKLSsgIGxvYWRQdHIoc3JjLCBzY3JhdGNoKTsKLSsgIG1hX2NtcF9tb3ZlKGRlc3QsIHNj cmF0Y2gsIGMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0ZXN0MzJMb2FkUHRyKENv bmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBhZGRyLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSW1tMzIgbWFzaywgY29uc3QgQWRkcmVzcyYgc3JjLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VS VChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJvKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBsb2FkMzIoYWRkciwgc2NyYXRjaCk7Ci0rICBpZiAoaXNfdWludE4obWFzay52 YWx1ZSwgMTYpKSB7Ci0rICAgIGFzX2FuZGlfcmMoc2NyYXRjaCwgc2NyYXRjaCwgbWFzay52YWx1 ZSk7Ci0rICB9IGVsc2UgewotKyAgICAvLyBVc2UgYSBuZXN0ZWQgc2NvcGUgc28gc2NyYXRjaDIg aXMgcmVsZWFzZWQgYmVmb3JlIGxvYWRQdHIgYmVsb3cuCi0rICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzMihhc01hc20oKSk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2gyID0gdGVtcHMy LkFjcXVpcmUoKTsKLSsgICAgbW92ZTMyKG1hc2ssIHNjcmF0Y2gyKTsKLSsgICAgYXNfYW5kX19y YyhzY3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNoMik7ICAvLyByZWNvcmQgZm9ybSBmb2xkcyB0aGUg Y21wZGkKLSsgIH0KLSsgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihj b25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7Ci0rICBsb2FkUHRyKHNyYywgc2NyYXRj aCk7Ci0rICBtYV9jbXBfbW92ZShkZXN0LCBzY3JhdGNoLCBiYXNlKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6dGVzdDMyTW92ZVB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgb3Bl cmFuZCwgSW1tMzIgbWFzaywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IFplcm8g fHwgY29uZCA9PSBOb25aZXJvKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBpZiAo aXNfdWludE4obWFzay52YWx1ZSwgMTYpKSB7Ci0rICAgIGFzX2FuZGlfcmMoc2NyYXRjaCwgb3Bl cmFuZCwgbWFzay52YWx1ZSk7Ci0rICB9IGVsc2UgewotKyAgICBtb3ZlMzIobWFzaywgc2NyYXRj aCk7Ci0rICAgIGFzX2FuZF9fcmMoc2NyYXRjaCwgb3BlcmFuZCwgc2NyYXRjaCk7ICAvLyByZWNv cmQgZm9ybSBmb2xkcyB0aGUgY21wZGkKLSsgIH0KLSsgIENvbmRpdGlvbiBiYXNlID0gc3RhdGlj X2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7Ci0rICBt YV9jbXBfbW92ZShkZXN0LCBzcmMsIGJhc2UpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy Ojp0ZXN0MzJNb3ZlUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBhZGRyLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tMzIgbWFzaywgUmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09 IE5vblplcm8pOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwot KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWQzMihhZGRyLCBz Y3JhdGNoKTsKLSsgIGFuZDMyKG1hc2ssIHNjcmF0Y2gpOwotKyAgYXNfY21wZGkoc2NyYXRjaCwg MCk7Ci0rICBDb25kaXRpb24gYmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlvbj4oY29uZCAmIH5B c3NlbWJsZXI6OkNvbmRpdGlvblplcm8pOwotKyAgbWFfY21wX21vdmUoZGVzdCwgc3JjLCBiYXNl KTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gU3BlY3RyZSBtaXRpZ2F0aW9ucwotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnNwZWN0cmVNb3ZlUHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBz cmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkg ewotKyAgLy8gQXNzdW1lcyBjb21wYXJlIGFscmVhZHkgaXNzdWVkLgotKyAgQ29uZGl0aW9uIGJh c2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KAotKyAgICAgIGNvbmQgJiB+KEFzc2VtYmxlcjo6 Q29uZGl0aW9uVW5zaWduZWQgfCBBc3NlbWJsZXI6OkNvbmRpdGlvblplcm8pKTsKLSsgIG1hX2Nt cF9tb3ZlKGRlc3QsIHNyYywgYmFzZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNw ZWN0cmVaZXJvUmVnaXN0ZXIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHNjcmF0Y2gsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7Ci0r ICAvLyBBc3N1bWVzIGNvbXBhcmUgYWxyZWFkeSBpc3N1ZWQuIFplcm8gZGVzdCBpZiBjb25kaXRp b24gaXMgdHJ1ZS4KLSsgIENvbmRpdGlvbiBvcmlnQmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlv bj4oCi0rICAgICAgY29uZCAmIH4oQXNzZW1ibGVyOjpDb25kaXRpb25VbnNpZ25lZCB8IEFzc2Vt Ymxlcjo6Q29uZGl0aW9uWmVybykpOwotKyAgLy8gSWYgb3JpZ2luYWwgY29uZGl0aW9uIGlzIHRy dWUsIHdlIHdhbnQgZGVzdD0wLgotKyAgLy8gaXNlbDogaWYgY29uZGl0aW9uIHRydWUsIHNlbGVj dCB6ZXJvOyBlbHNlIGtlZXAgZGVzdC4KLSsgIHhzX2xpKHNjcmF0Y2gsIDApOwotKyAgbWFfY21w X21vdmUoZGVzdCwgc2NyYXRjaCwgb3JpZ0Jhc2UpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpzcGVjdHJlQm91bmRzQ2hlY2szMihSZWdpc3RlciBpbmRleCwgUmVnaXN0ZXIgbGVuZ3Ro LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1h eWJlU2NyYXRjaCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM YWJlbCogZmFpbHVyZSkgewotKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoaW5kZXgsIGxlbmd0aCwg QmVsb3csIHRydWUpOwotKyAgaWYgKGZhaWx1cmUpIHsKLSsgICAgbWFfYihJbnZlcnRDb25kaXRp b24oYyksIGZhaWx1cmUpOwotKyAgfQotKyAgaWYgKG1heWJlU2NyYXRjaCAhPSBJbnZhbGlkUmVn KSB7Ci0rICAgIHhzX2xpKG1heWJlU2NyYXRjaCwgMCk7Ci0rICAgIG1hX2NtcF9tb3ZlKGluZGV4 LCBtYXliZVNjcmF0Y2gsIEludmVydENvbmRpdGlvbihjKSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnNwZWN0cmVCb3VuZHNDaGVjazMyKFJlZ2lzdGVyIGluZGV4LCBjb25z dCBBZGRyZXNzJiBsZW5ndGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgbWF5YmVTY3JhdGNoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsdXJlKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgbG9hZDMyKGxlbmd0aCwgc2NyYXRjaCk7Ci0rICBzcGVjdHJlQm91bmRzQ2hlY2sz MihpbmRleCwgc2NyYXRjaCwgbWF5YmVTY3JhdGNoLCBmYWlsdXJlKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6c3BlY3RyZUJvdW5kc0NoZWNrUHRyKFJlZ2lzdGVyIGluZGV4LCBSZWdp c3RlciBsZW5ndGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIG1heWJlU2NyYXRjaCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGFiZWwqIGZhaWx1cmUpIHsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKGlu ZGV4LCBsZW5ndGgsIEJlbG93KTsKLSsgIGlmIChmYWlsdXJlKSB7Ci0rICAgIG1hX2IoSW52ZXJ0 Q29uZGl0aW9uKGMpLCBmYWlsdXJlKTsKLSsgIH0KLSsgIGlmIChtYXliZVNjcmF0Y2ggIT0gSW52 YWxpZFJlZykgewotKyAgICB4c19saShtYXliZVNjcmF0Y2gsIDApOwotKyAgICBtYV9jbXBfbW92 ZShpbmRleCwgbWF5YmVTY3JhdGNoLCBJbnZlcnRDb25kaXRpb24oYykpOwotKyAgfQotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGVjdHJlQm91bmRzQ2hlY2tQdHIoUmVnaXN0ZXIgaW5k ZXgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFk ZHJlc3MmIGxlbmd0aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgbWF5YmVTY3JhdGNoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMYWJlbCogZmFpbHVyZSkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgIGxvYWRQdHIobGVuZ3RoLCBzY3JhdGNoKTsKLSsgIHNwZWN0cmVCb3VuZHNDaGVja1B0 cihpbmRleCwgc2NyYXRjaCwgbWF5YmVTY3JhdGNoLCBmYWlsdXJlKTsKLSt9Ci0rCi0rLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rLy8gTWVtb3J5IGFjY2VzcyBwcmltaXRpdmVzCi0rCi0rRmF1bHRpbmdDb2RlT2Zmc2V0 IE1hY3JvQXNzZW1ibGVyOjpzdG9yZUZsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYg YWRkcikgewotKyAgTU9aX0FTU0VSVChhZGRyLmJhc2UgIT0gcjApOwotKyAgaWYgKGlzX2ludE4o YWRkci5vZmZzZXQsIDE2KSkgewotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0 ZnMoc3JjLCBhZGRyLmJhc2UsIGFkZHIub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBp ZiAoSGFzUE9XRVIxMCgpICYmIGlzX2ludE4oKGludHB0cl90KWFkZHIub2Zmc2V0LCAzNCkpIHsK LSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgIGFzX3BzdGZzKHNyYywg YWRkci5iYXNlLCAoaW50NjRfdClhZGRyLm9mZnNldCwgLypSPSovZmFsc2UpCi0rICAgICAgICAg ICAgLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBt b3ZlUHRyKEltbVdvcmQoYWRkci5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgIHJldHVybiBGYXVsdGlu Z0NvZGVPZmZzZXQoYXNfc3Rmc3goc3JjLCBhZGRyLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgp KTsKLSt9Ci0rCi0rRmF1bHRpbmdDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpzdG9yZUZsb2F0 MzIoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBhZGRyKSB7Ci0rICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MoYWRkciwgc2NyYXRjaCk7Ci0r ICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0ZnMoc3JjLCBzY3JhdGNoLCAwKS5nZXRP ZmZzZXQoKSk7Ci0rfQotKwotK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6c3Rv cmVEb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBhZGRyKSB7Ci0rICBNT1pfQVNTRVJU KGFkZHIuYmFzZSAhPSByMCk7Ci0rICBpZiAoaXNfaW50TihhZGRyLm9mZnNldCwgMTYpKSB7Ci0r ICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3RmZChzcmMsIGFkZHIuYmFzZSwgYWRk ci5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNf aW50TigoaW50cHRyX3QpYWRkci5vZmZzZXQsIDM0KSkgewotKyAgICByZXR1cm4gRmF1bHRpbmdD b2RlT2Zmc2V0KAotKyAgICAgICAgYXNfcHN0ZmQoc3JjLCBhZGRyLmJhc2UsIChpbnQ2NF90KWFk ZHIub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKLSsgICAgICAgICAgICAuZ2V0T2Zmc2V0KCkpOwotKyAg fQotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIG1vdmVQdHIoSW1tV29yZChhZGRyLm9m ZnNldCksIHNjcmF0Y2gpOwotKyAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGZkeChz cmMsIGFkZHIuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotK30KLSsKLStGYXVsdGluZ0Nv ZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlRG91YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFz ZUluZGV4JiBhZGRyKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgY29tcHV0ZUVm ZmVjdGl2ZUFkZHJlc3MoYWRkciwgc2NyYXRjaCk7Ci0rICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zm c2V0KGFzX3N0ZmQoc3JjLCBzY3JhdGNoLCAwKS5nZXRPZmZzZXQoKSk7Ci0rfQotKwotK0ZhdWx0 aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6c3RvcmVGbG9hdDE2KEZsb2F0UmVnaXN0ZXIg c3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFkZHJlc3MmIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCkgewotKyAgTU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7 Ci0rICBpZiAoZGVzdC5vZmZzZXQgPT0gMCkgewotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zm c2V0KGFzX3N0eHNpaHgoc3JjLCByMCwgZGVzdC5iYXNlKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0r ICBpZiAoaXNfaW50TihkZXN0Lm9mZnNldCwgMTYpKSB7Ci0rICAgIGFzX2FkZGkodGVtcCwgZGVz dC5iYXNlLCBkZXN0Lm9mZnNldCk7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNf c3R4c2loeChzcmMsIHIwLCB0ZW1wKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBtb3ZlUHRyKElt bVdvcmQoZGVzdC5vZmZzZXQpLCB0ZW1wKTsKLSsgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQo YXNfc3R4c2loeChzcmMsIGRlc3QuYmFzZSwgdGVtcCkuZ2V0T2Zmc2V0KCkpOwotK30KLSsKLStG YXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlRmxvYXQxNihGbG9hdFJlZ2lz dGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBCYXNlSW5kZXgmIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCkgewotKyAgTU9aX0FTU0VSVChIYXNQT1dF UjkoKSk7Ci0rICBjb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhkZXN0LCB0ZW1wKTsKLSsgIHJldHVy biBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4c2loeChzcmMsIHIwLCB0ZW1wKS5nZXRPZmZzZXQo KSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1lbW9yeUJhcnJpZXIoTWVtb3J5QmFy cmllciBiYXJyaWVyKSB7Ci0rICBpZiAoYmFycmllci5pc05vbmUoKSkgewotKyAgICByZXR1cm47 Ci0rICB9Ci0rICBpZiAoYmFycmllci5oYXNTdG9yZUxvYWQoKSB8fCBiYXJyaWVyLmhhc1N5bmMo KSkgewotKyAgICBhc19zeW5jKCk7Ci0rICB9IGVsc2UgewotKyAgICBhc19sd3N5bmMoKTsKLSsg IH0KLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gQ2xhbXBpbmcgZnVuY3Rpb25zCi0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6Y2xhbXBJbnRUb1VpbnQ4KFJlZ2lzdGVyIHJlZykgewotKyAgLy8gQ2xh bXAgdG8gWzAsIDI1NV0uCi0rICBMYWJlbCBkb25lOwotKyAgYXNfY21wd2kocmVnLCAyNTUpOwot KyAgbWFfYihMZXNzVGhhbk9yRXF1YWwsICZkb25lKTsKLSsgIG1vdmUzMihJbW0zMigyNTUpLCBy ZWcpOwotKyAgYmluZCgmZG9uZSk7Ci0rICBMYWJlbCBwb3NpdGl2ZTsKLSsgIGFzX2NtcHdpKHJl ZywgMCk7Ci0rICBtYV9iKEdyZWF0ZXJUaGFuT3JFcXVhbCwgJnBvc2l0aXZlKTsKLSsgIG1vdmUz MihJbW0zMigwKSwgcmVnKTsKLSsgIGJpbmQoJnBvc2l0aXZlKTsKLSt9Ci0rCi0rLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rLy8gVW5ib3hpbmcKLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmYWxsaWJsZVVuYm94UHRy KGNvbnN0IFZhbHVlT3BlcmFuZCYgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVR5cGUgdHlwZSwgTGFiZWwqIGZhaWwpIHsK LSsgIE1PWl9BU1NFUlQodHlwZSA9PSBKU1ZBTF9UWVBFX09CSkVDVCB8fCB0eXBlID09IEpTVkFM X1RZUEVfU1RSSU5HIHx8Ci0rICAgICAgICAgICAgIHR5cGUgPT0gSlNWQUxfVFlQRV9TWU1CT0wg fHwgdHlwZSA9PSBKU1ZBTF9UWVBFX0JJR0lOVCk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OwotKyAgc3BsaXRUYWcoc3JjLCBzY3JhdGNoKTsKLSsgIENvbmRpdGlvbiBjID0gbWFfY21wKHNj cmF0Y2gsIEltbVRhZyhKU1ZBTF9UWVBFX1RPX1RBRyh0eXBlKSksIE5vdEVxdWFsKTsKLSsgIG1h X2IoYywgZmFpbCk7Ci0rICB1bmJveE5vbkRvdWJsZShzcmMsIGRlc3QsIHR5cGUpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmYWxsaWJsZVVuYm94UHRyKGNvbnN0IEFkZHJlc3MmIHNy YywgUmVnaXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEpTVmFsdWVUeXBlIHR5cGUsIExhYmVsKiBmYWlsKSB7Ci0rICBsb2FkVmFsdWUoc3JjLCBWYWx1 ZU9wZXJhbmQoZGVzdCkpOwotKyAgZmFsbGlibGVVbmJveFB0cihWYWx1ZU9wZXJhbmQoZGVzdCks IGRlc3QsIHR5cGUsIGZhaWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmYWxsaWJs ZVVuYm94UHRyKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVR5cGUgdHlwZSwgTGFiZWwqIGZh aWwpIHsKLSsgIGxvYWRWYWx1ZShzcmMsIFZhbHVlT3BlcmFuZChkZXN0KSk7Ci0rICBmYWxsaWJs ZVVuYm94UHRyKFZhbHVlT3BlcmFuZChkZXN0KSwgZGVzdCwgdHlwZSwgZmFpbCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21BZGRTdWJJMTI4SEk2NChSZWdpc3RlciBsaHNMbywg UmVnaXN0ZXIgbGhzSGksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIHJoc0xvLCBSZWdpc3RlciByaHNIaSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0LCBib29sIGlzQWRkKSB7Ci0rICBNT1pf UkVMRUFTRV9BU1NFUlQob3V0cHV0ICE9IGxoc0xvICYmIG91dHB1dCAhPSBsaHNIaSAmJiBvdXRw dXQgIT0gcmhzTG8gJiYKLSsgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgIT0gcmhzSGkpOwot KyAgaWYgKGlzQWRkKSB7Ci0rICAgIC8vIGFkZGMgc2V0cyBDQSAoY2FycnkpLCBhZGRlIHVzZXMg aXQuCi0rICAgIGFzX2FkZGMob3V0cHV0LCBsaHNMbywgcmhzTG8pOyAgLy8gb3V0cHV0ID0gbGhz TG8gKyByaHNMbywgQ0EgPSBjYXJyeQotKyAgICBhc19hZGRlKG91dHB1dCwgbGhzSGksIHJoc0hp KTsgIC8vIG91dHB1dCA9IGxoc0hpICsgcmhzSGkgKyBDQQotKyAgfSBlbHNlIHsKLSsgICAgLy8g c3ViZmM6IHJkID0gcmIgLSByYSwgc2V0cyBDQSAoYm9ycm93IGNvbXBsZW1lbnQpLgotKyAgICAv LyBzdWJmZTogcmQgPSByYiArIH5yYSArIENBLgotKyAgICBhc19zdWJmYyhvdXRwdXQsIHJoc0xv LCBsaHNMbyk7ICAvLyBvdXRwdXQgPSBsaHNMbyAtIHJoc0xvLCBDQSA9IH5ib3Jyb3cKLSsgICAg YXNfc3ViZmUob3V0cHV0LCByaHNIaSwgbGhzSGkpOyAgLy8gb3V0cHV0ID0gbGhzSGkgLSByaHNI aSAtIGJvcnJvdwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtTXVsSTY0 V2lkZUhJNjQoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCwgYm9vbCBpc1NpZ25lZCkgewot KyAgaWYgKGlzU2lnbmVkKSB7Ci0rICAgIGFzX211bGhkKG91dHB1dCwgbGhzLCByaHMpOwotKyAg fSBlbHNlIHsKLSsgICAgYXNfbXVsaGR1KG91dHB1dCwgbGhzLCByaHMpOwotKyAgfQotK30KLSsK LSsvL319fSBjaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXJQUEM2NENvbXBhdDo6aW5jcmVtZW50SW50MzJWYWx1ZShjb25zdCBBZGRyZXNzJiBhZGRyKSB7 Ci0rICBhc01hc20oKS5hZGQzMihJbW0zMigxKSwgYWRkcik7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXJQUEM2NENvbXBhdDo6cmV0bihJbW0zMiBuKSB7Ci0rICAvLyBMb2FkIHJldHVybiBh ZGRyZXNzIGZyb20gW1NQLDBdIGZpcnN0LCB0aGVuIGFkanVzdCBTUCwgdGhlbiByZXR1cm4uCi0r ICAvLyBNdXN0IGxvYWQgUkEgYmVmb3JlIGFkanVzdGluZyBTUCAobGlrZSBsb29uZzY0KSwgc2lu Y2UgdGhlIFJBIGlzIGF0Ci0rICAvLyB0aGUgY3VycmVudCB0b3Agb2Ygc3RhY2ssIG5vdCBhdCBT UCtuLgotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGFzX2xkKHNjcmF0Y2gsIFN0YWNrUG9p bnRlciwgMCk7Ci0rICBpZiAobi52YWx1ZSAhPSAwKSB7Ci0rICAgIGFzTWFzbSgpLmFkZFB0cihJ bW0zMihuLnZhbHVlKSwgU3RhY2tQb2ludGVyKTsKLSsgIH0KLSsgIHhzX210bHIoc2NyYXRjaCk7 Ci0rICBhc19ibHIoKTsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gVGVtcGxhdGUgc3BlY2lhbGl6 YXRpb25zIChvdXRzaWRlIGNoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlKQotKwotK3RlbXBsYXRl IDw+Ci0raW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcFB0clNldChBc3NlbWJsZXI6OkNv bmRpdGlvbiBjb25kLCBBZGRyZXNzIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEltbVB0ciByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBsb2FkUHRyKGxocywgc2NyYXRjaCk7Ci0rICBBc3NlbWJsZXI6OkNvbmRpdGlv biBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7Ci0rICBtYV9jbXBfc2V0KGRlc3QsIGMp OwotK30KLSsKLSt0ZW1wbGF0ZSA8PgotK2lubGluZSB2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXBQ dHJTZXQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyByaHMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkUHRyKHJocywgc2NyYXRjaCk7Ci0r ICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjID0gbWFfY21wKGxocywgc2NyYXRjaCwgY29uZCk7Ci0r ICBtYV9jbXBfc2V0KGRlc3QsIGMpOwotK30KLSsKLSt0ZW1wbGF0ZSA8PgotK2lubGluZSB2b2lk IE1hY3JvQXNzZW1ibGVyOjpjbXBQdHJTZXQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgQWRk cmVzcyBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KCp0aGlzKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2Fk UHRyKGxocywgc2NyYXRjaCk7Ci0rICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjID0gbWFfY21wKHNj cmF0Y2gsIHJocywgY29uZCk7Ci0rICBtYV9jbXBfc2V0KGRlc3QsIGMpOwotK30KLSsKLSt0ZW1w bGF0ZSA8PgotK2lubGluZSB2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMlNldChBc3NlbWJsZXI6 OkNvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFkZHJlc3MgcmhzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgbG9hZDMyKHJocywgc2NyYXRjaCk7Ci0rICBBc3NlbWJsZXI6OkNvbmRp dGlvbiBjID0gbWFfY21wKGxocywgc2NyYXRjaCwgY29uZCwgdHJ1ZSk7Ci0rICBtYV9jbXBfc2V0 KGRlc3QsIGMpOwotK30KLSsKLSt0ZW1wbGF0ZSA8PgotK2lubGluZSB2b2lkIE1hY3JvQXNzZW1i bGVyOjpjbXAzMlNldChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhzLCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbG9hZDMyKGxocywgc2NyYXRj aCk7Ci0rICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29u ZCwgdHJ1ZSk7Ci0rICBtYV9jbXBfc2V0KGRlc3QsIGMpOwotK30KLSsKLSt0ZW1wbGF0ZSA8Pgot K2lubGluZSB2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMlNldChBc3NlbWJsZXI6OkNvbmRpdGlv biBjb25kLCBBZGRyZXNzIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW1tMzIgcmhzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcygqdGhpcyk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgbG9hZDMyKGxocywgc2NyYXRjaCk7Ci0rICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjID0gbWFf Y21wKHNjcmF0Y2gsIHJocywgY29uZCwgdHJ1ZSk7Ci0rICBtYV9jbXBfc2V0KGRlc3QsIGMpOwot K30KLSsKLSsvL3t7eyBjaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZQotKy8vID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8v IFNJTUQgbG9hZC9zdG9yZSAoMTI4LWJpdCkKLSsKLStGYXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9B c3NlbWJsZXI6OmxvYWRVbmFsaWduZWRTaW1kMTI4KGNvbnN0IEFkZHJlc3MmIHNyYywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOwotKyAgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClzcmMub2Zmc2V0 LCAzNCkpIHsKLSsgICAgLy8gUE9XRVIxMCBwcmVmaXhlZCBsb2FkIOKAlCBuYXR1cmFsLUxFIGJ5 dGUgb3JkZXIsIG5vIEdQUiBzY3JhdGNoLgotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0 KAotKyAgICAgICAgYXNfcGx4dihkZXN0LmVuY29kaW5nKCksIHNyYy5iYXNlLCAoaW50NjRfdClz cmMub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKLSsgICAgICAgICAgICAuZ2V0T2Zmc2V0KCkpOwotKyAg fQotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIC8vIFBPV0VSOTogbHh2eCAoWC1mb3JtLCBp bmRleGVkKSBsb2FkcyAxMjggYml0cyBpbiBjb3JyZWN0IExFIG9yZGVyLgotKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBpZiAoc3JjLm9mZnNldCA9PSAwKSB7 Ci0rICAgICAgLy8gUkE9MCBtZWFucyAidXNlIDAgYXMgYmFzZSIgaW4gaW5kZXhlZCBmb3Jtcywg c28gdXNlIHIwIGVuY29kaW5nLgotKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNf bHh2eChkZXN0LCByMCwgc3JjLmJhc2UpLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBtb3Zl UHRyKEltbVdvcmQoc3JjLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICByZXR1cm4gRmF1bHRpbmdD b2RlT2Zmc2V0KGFzX2x4dngoZGVzdCwgc3JjLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsK LSsgIH0KLSsgIC8vIFBPV0VSODogbHh2ZDJ4IGxvYWRzIHdpdGggZG91Ymxld29yZCBzd2FwIG9u IExFLiBGaXggd2l0aCB4eHBlcm1kaS4KLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgZmNvOwotKyAgaWYgKHNyYy5vZmZzZXQgPT0g MCkgewotKyAgICBmY28gPSBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHh2ZDJ4KGRlc3QsIHIwLCBz cmMuYmFzZSkuZ2V0T2Zmc2V0KCkpOwotKyAgfSBlbHNlIHsKLSsgICAgbW92ZVB0cihJbW1Xb3Jk KHNyYy5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgZmNvID0gRmF1bHRpbmdDb2RlT2Zmc2V0KGFz X2x4dmQyeChkZXN0LCBzcmMuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAg YXNfeHhwZXJtZGkoZGVzdCwgZGVzdCwgZGVzdCwgMik7Ci0rICByZXR1cm4gZmNvOwotK30KLSsK LStGYXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OmxvYWRVbmFsaWduZWRTaW1kMTI4 KGNvbnN0IEJhc2VJbmRleCYgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgY29tcHV0ZVNjYWxlZEFkZHJlc3Moc3JjLCBzY3JhdGNoKTsK LSsgIGlmIChzcmMub2Zmc2V0ICE9IDApIHsKLSsgICAgLy8gYWRkUHRyIHBpY2tzIHVwIFBPV0VS MTAgcGFkZGkgKDEgcHJlZml4ZWQgaW5zbikgd2hlbiBhdmFpbGFibGU7Ci0rICAgIC8vIGZhbGxz IGJhY2sgdG8gbW92ZVB0cithZGQgb24gUDkvUDguIERyb3BzIHRoZSBleHBsaWNpdCBzY3JhdGNo Mi4KLSsgICAgYWRkUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgfQotKyAg aWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHh2 eChkZXN0LCByMCwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgRmF1bHRpbmdDb2Rl T2Zmc2V0IGZjbyhhc19seHZkMngoZGVzdCwgcjAsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKLSsg IGFzX3h4cGVybWRpKGRlc3QsIGRlc3QsIGRlc3QsIDIpOwotKyAgcmV0dXJuIGZjbzsKLSt9Ci0r Ci0rRmF1bHRpbmdDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpzdG9yZVVuYWxpZ25lZFNpbWQx MjgoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgZGVzdCkgewotKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgaWYgKEhhc1BPV0VSMTAoKSAm JiBpc19pbnROKChpbnRwdHJfdClkZXN0Lm9mZnNldCwgMzQpKSB7Ci0rICAgIC8vIFBPV0VSMTAg cHJlZml4ZWQgc3RvcmUg4oCUIG5hdHVyYWwtTEUgYnl0ZSBvcmRlciwgbm8gR1BSIHNjcmF0Y2gu Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCi0rICAgICAgICBhc19wc3R4dihzcmMu ZW5jb2RpbmcoKSwgZGVzdC5iYXNlLCAoaW50NjRfdClkZXN0Lm9mZnNldCwgLypSPSovZmFsc2Up Ci0rICAgICAgICAgICAgLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIGlmIChIYXNQT1dFUjkoKSkg ewotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBpZiAoZGVz dC5vZmZzZXQgPT0gMCkgewotKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4 dngoc3JjLCByMCwgZGVzdC5iYXNlKS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgbW92ZVB0 cihJbW1Xb3JkKGRlc3Qub2Zmc2V0KSwgc2NyYXRjaCk7Ci0rICAgIHJldHVybiBGYXVsdGluZ0Nv ZGVPZmZzZXQoYXNfc3R4dngoc3JjLCBkZXN0LmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsK LSsgIH0KLSsgIC8vIFBPV0VSODogc3R4dmQyeCBzdG9yZXMgd2l0aCBkb3VibGV3b3JkIHN3YXAg b24gTEUuCi0rICAvLyBTd2FwIGJlZm9yZSBzdG9yZSwgdGhlbiBzd2FwIGJhY2sgdG8gcmVzdG9y ZSB0aGUgcmVnaXN0ZXIuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gxMjgoKnRoaXMp OwotKyAgYXNfeHhwZXJtZGkoc2NyYXRjaDEyOCwgc3JjLCBzcmMsIDIpOwotKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBmY287Ci0r ICBpZiAoZGVzdC5vZmZzZXQgPT0gMCkgewotKyAgICBmY28gPSBGYXVsdGluZ0NvZGVPZmZzZXQo YXNfc3R4dmQyeChzY3JhdGNoMTI4LCByMCwgZGVzdC5iYXNlKS5nZXRPZmZzZXQoKSk7Ci0rICB9 IGVsc2UgewotKyAgICBtb3ZlUHRyKEltbVdvcmQoZGVzdC5vZmZzZXQpLCBzY3JhdGNoKTsKLSsg ICAgZmNvID0gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgYXNfc3R4dmQyeChzY3JhdGNo MTI4LCBkZXN0LmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIHJldHVybiBm Y287Ci0rfQotKwotK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6c3RvcmVVbmFs aWduZWRTaW1kMTI4KAotKyAgICBGbG9hdFJlZ2lzdGVyIHNyYywgY29uc3QgQmFzZUluZGV4JiBk ZXN0KSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgY29tcHV0ZVNjYWxlZEFkZHJl c3MoZGVzdCwgc2NyYXRjaCk7Ci0rICBpZiAoZGVzdC5vZmZzZXQgIT0gMCkgewotKyAgICBhZGRQ dHIoSW1tV29yZChkZXN0Lm9mZnNldCksIHNjcmF0Y2gpOwotKyAgfQotKyAgaWYgKEhhc1BPV0VS OSgpKSB7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4dngoc3JjLCByMCwg c2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3Jh dGNoMTI4KCp0aGlzKTsKLSsgIGFzX3h4cGVybWRpKHNjcmF0Y2gxMjgsIHNyYywgc3JjLCAyKTsK LSsgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4dmQyeChzY3JhdGNoMTI4LCByMCwg c2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBTSU1EIG9wZXJh dGlvbnMKLSsvLwotKy8vIFNjcmF0Y2ggcmVnaXN0ZXIgY29udmVudGlvbnMgZm9yIFNJTUQgaGVs cGVycyAocmVhZCB0aGlzIGJlZm9yZSB3cml0aW5nCi0rLy8gYSBuZXcgb25lKToKLSsvLwotKy8v IDEuIGBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpYCDigJQgYWNxdWlyZXMgdjAg KD0gVlIwID0gVlNSMzIsCi0rLy8gICAgbm9uLWFsbG9jYXRhYmxlKS4gQ29uc3RydWN0ZWQgYXMg e0Zsb2F0UmVnaXN0ZXJzOjpmMCwgU2ltZDEyOH0gc28KLSsvLyAgICBlbmNvZGluZygpID0gMCAr IDMyID0gMzIgKHBlciBBcmNoaXRlY3R1cmUtcHBjNjQuaCkuIERlZmF1bHQgdGVtcC4KLSsvLyAg ICBPbmUgc2NvcGUgYXQgYSB0aW1lIHBlciBoZWxwZXIuIFNhZmUgdG8gcGFzcyB0byBhbnkgVk1Y L1ZTWAotKy8vICAgIGluc3RydWN0aW9uOyB0aGUgYWxsb2NhdG9yIG5ldmVyIHBsYWNlcyBhIGxp dmUgdjEyOCBpbiB2MC4KLSsvLwotKy8vIDIuICoqRG8gTk9UKiogd3JpdGUgdG8gVlIxLi5WUjMx ICg9IFZTUjMzLi5WU1I2Mykgd2l0aG91dCBhIExvd2VyaW5nCi0rLy8gICAgdGVtcC4gVlIxLi5W UjMxIGFyZSBhbGxvY2F0YWJsZTsgYSBsaXZlIHdhc20gdjEyOCBtYXkgYmUgc2l0dGluZyBpbgot Ky8vICAgIGFueSBvZiB0aGVtLiBVc2UgYFNjcmF0Y2hTaW1kMTI4U2NvcGVgIChydWxlIDEpIG9y IGEgTG93ZXJpbmcgdGVtcC4KLSsvLwotKy8vIDMuICoqUmVkLXpvbmUgc3Rhc2gqKiDigJQgdXNl IGBSZWRab25lU3Rhc2hTaW1kMTI4YCAvIGBSZWRab25lUmVzdG9yZVNpbWQxMjhgCi0rLy8gICAg KGRlY2xhcmVkIGp1c3QgYmVsb3cpIHdoZW4gYSBoZWxwZXIgZ2VudWluZWx5IG5lZWRzID4xIFNJ TUQgc2NyYXRjaAotKy8vICAgIEFORCBhZGRpbmcgYSBMb3dlcmluZyB0ZW1wIHdvdWxkIHJlcXVp cmUgTElSICsgTUlSICsgQ29kZUdlbiBjaGFuZ2VzLgotKy8vICAgIEVMRnYyIHJlc2VydmVzIDI4 OCBieXRlcyBiZWxvdyBTUDsgd2UgdXNlIGF0IG1vc3QgMzIgKHR3byAxNi1ieXRlCi0rLy8gICAg c2xvdHMpLiBMaXZlIHVzZXJzOiBgZXh0QWRkUGFpcndpc2VJbnQqYCAoMiBzbG90cyksIGBzd2l6 emxlSW50OHgxNmAKLSsvLyAgICAoMSBzbG90KSwgYGRvdEludDh4MTZJbnQ3eDE2VGhlbkFkZGAg NC1hcmcgKDEgc2xvdCkuIElmIHlvdSBmaW5kCi0rLy8gICAgeW91cnNlbGYgd2FudGluZyBhIDNy ZCBzbG90IG9yIG5lc3RlZCBzYXZlL3Jlc3RvcmUsIHByZWZlciBhIExvd2VyaW5nCi0rLy8gICAg dGVtcCBpbnN0ZWFkIOKAlCB0aGUgcmVkLXpvbmUgYXBwcm9hY2ggaXMgdG9sZXJhYmxlIGJlY2F1 c2UgaXQncwotKy8vICAgIHNlbGYtY29udGFpbmVkIHRvIGEgc2luZ2xlIGhlbHBlci4gVGhlIGBN T1pfQVNTRVJUKHNsb3QgPCAyKWAgaW5zaWRlCi0rLy8gICAgdGhlIGhlbHBlcnMgZW5mb3JjZXMg dGhpcyBhdCB0ZXN0IHRpbWUuCi0rLy8KLSsvLyBTaW1kMTI4IGxpdmVzIGluIFZSLW5hbWVzcGFj ZSAoVlNSMzItNjMpLCBzbyBWTVggb3BzIGFkZHJlc3MgU2ltZDEyOAotKy8vIEZsb2F0UmVnaXN0 ZXJzIGRpcmVjdGx5IHdpdGggbm8gc3RhZ2luZy4gRW5jb2RpbmcgaXMgMzItNjM7IHRoZSBWTVgK LSsvLyBWUiBmaWVsZCBpcyA1LWJpdCAoMC0zMSksIHNvIHdlIG1hc2sgd2l0aCBgJiAzMWAuCi0r Ci0rLy8gVHdvIDE2LWJ5dGUgU2ltZDEyOCBzbG90cyBhdmFpbGFibGUgaW4gdGhlIEVMRnYyIHJl ZCB6b25lIGZvciBzaG9ydC1saXZlZAotKy8vIFNJTUQgc3BpbGxzIChzZWUgcG9pbnQgMyBvZiB0 aGUgU0lNRCBjb252ZW50aW9ucyBwcmVhbWJsZSBhYm92ZSkuCi0rc3RhdGljIGNvbnN0ZXhwciBp bnQga1JlZFpvbmVTaW1kMTI4TWF4U2xvdHMgPSAyOwotKwotK3N0YXRpYyBpbmxpbmUgdm9pZCBS ZWRab25lU3Rhc2hTaW1kMTI4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBGbG9hdFJlZ2lzdGVyIHNy YywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2xvdCkgewot KyAgTU9aX0FTU0VSVChzbG90ID49IDAgJiYgc2xvdCA8IGtSZWRab25lU2ltZDEyOE1heFNsb3Rz KTsKLSsgIG1hc20uc3RvcmVVbmFsaWduZWRTaW1kMTI4KHNyYywgQWRkcmVzcyhTdGFja1BvaW50 ZXIsIC0xNiAqIChzbG90ICsgMSkpKTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSB2b2lkIFJlZFpv bmVSZXN0b3JlU2ltZDEyOChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgaW50IHNsb3QsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK LSsgIE1PWl9BU1NFUlQoc2xvdCA+PSAwICYmIHNsb3QgPCBrUmVkWm9uZVNpbWQxMjhNYXhTbG90 cyk7Ci0rICBtYXNtLmxvYWRVbmFsaWduZWRTaW1kMTI4KEFkZHJlc3MoU3RhY2tQb2ludGVyLCAt MTYgKiAoc2xvdCArIDEpKSwgZGVzdCk7Ci0rfQotKwotK3R5cGVkZWYgdm9pZCAoKlZteEJpbmFy eUZuKShBc3NlbWJsZXImLCB1aW50OF90LCB1aW50OF90LCB1aW50OF90KTsKLSsKLStzdGF0aWMg dm9pZCBFbWl0Vm14QmluYXJ5KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBWbXhCaW5hcnlGbiB2bXhP cCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgewotKyAgdm14T3Aoc3RhdGljX2Nhc3Q8QXNzZW1ibGVyJj4obWFzbSksIGRlc3QuZW5jb2Rp bmcoKSAmIDMxLAotKyAgICAgICAgbGhzLmVuY29kaW5nKCkgJiAzMSwgcmhzLmVuY29kaW5nKCkg JiAzMSk7Ci0rfQotKwotKy8vIE1hY3JvIGZvciBkZWZpbmluZyBWTVggYmluYXJ5IHdyYXBwZXJz LgotKyNkZWZpbmUgVk1YX0JJTkFSWV9XUkFQUEVSKHZteEluc3QpICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1 aW50OF90IHZyYikgeyBcCi0rICAgIGEuYXNfIyN2bXhJbnN0KHZydCwgdnJhLCB2cmIpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgfQotKwotKy8vIEVtaXQgb3AgZGlyZWN0bHkgb24g U2ltZDEyOCBkZXN0LCB0aGVuIHh4bG5vciBpbiBwbGFjZS4KLSt0ZW1wbGF0ZSA8dHlwZW5hbWUg Vm14QmluYXJ5Rm5UPgotK3N0YXRpYyB2b2lkIEVtaXRWbXhCaW5hcnlOb3QoTWFjcm9Bc3NlbWJs ZXImIG1hc20sIFZteEJpbmFyeUZuVCB2bXhPcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgdm14T3Aoc3RhdGljX2Nh c3Q8QXNzZW1ibGVyJj4obWFzbSksIGRlc3QuZW5jb2RpbmcoKSAmIDMxLAotKyAgICAgICAgbGhz LmVuY29kaW5nKCkgJiAzMSwgcmhzLmVuY29kaW5nKCkgJiAzMSk7Ci0rICBtYXNtLmFzX3h4bG5v cihkZXN0LCBkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rLy8gSW50ZWdlciBTSU1EIGNvbXBhcmUgaGVs cGVyLiBWTVggY29tcGFyZSBpbnN0cnVjdGlvbnMgcHJvZHVjZSBhbGwtb25lcwotKy8vIGZvciB0 cnVlLCBhbGwtemVyb3MgZm9yIGZhbHNlIHBlciBlbGVtZW50LgotKy8vIEF2YWlsYWJsZSBWTVgg Y29tcGFyZXM6IHZjbXBlcXUqIChlcSksIHZjbXBndHMqIChzaWduZWQgZ3QpLCB2Y21wZ3R1Kgot Ky8vICh1bnNpZ25lZCBndCkuIE90aGVyIGNvbmRpdGlvbnMgZGVyaXZlZCBieSBzd2FwcGluZyBv cGVyYW5kcyBvcgotKy8vIGNvbXBsZW1lbnRpbmcuCi0rdGVtcGxhdGUgPHR5cGVuYW1lIEVxRm4s IHR5cGVuYW1lIEd0c0ZuLCB0eXBlbmFtZSBHdHVGbj4KLStzdGF0aWMgdm9pZCBFbWl0Vm14Q29t cGFyZShNYWNyb0Fzc2VtYmxlciYgbWFzbSwgQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LCBF cUZuIGVxRm4sIEd0c0ZuIGd0c0ZuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0dUZu IGd0dUZuKSB7Ci0rICBzd2l0Y2ggKGNvbmQpIHsKLSsgICAgY2FzZSBBc3NlbWJsZXI6OkVxdWFs OgotKyAgICAgIEVtaXRWbXhCaW5hcnkobWFzbSwgZXFGbiwgbGhzLCByaHMsIGRlc3QpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIEFzc2VtYmxlcjo6Tm90RXF1YWw6Ci0rICAgICAgRW1pdFZt eEJpbmFyeU5vdChtYXNtLCBlcUZuLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2UgQXNzZW1ibGVyOjpHcmVhdGVyVGhhbjoKLSsgICAgICBFbWl0Vm14QmluYXJ5KG1h c20sIGd0c0ZuLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNz ZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWw6Ci0rICAgICAgLy8gIShyaHMgPiBsaHMpCi0rICAg ICAgRW1pdFZteEJpbmFyeU5vdChtYXNtLCBndHNGbiwgcmhzLCBsaHMsIGRlc3QpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIEFzc2VtYmxlcjo6TGVzc1RoYW46Ci0rICAgICAgLy8gcmhzID4g bGhzIChzd2FwKQotKyAgICAgIEVtaXRWbXhCaW5hcnkobWFzbSwgZ3RzRm4sIHJocywgbGhzLCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVh bDoKLSsgICAgICAvLyAhKGxocyA+IHJocykKLSsgICAgICBFbWl0Vm14QmluYXJ5Tm90KG1hc20s IGd0c0ZuLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNzZW1i bGVyOjpBYm92ZToKLSsgICAgICBFbWl0Vm14QmluYXJ5KG1hc20sIGd0dUZuLCBsaHMsIHJocywg ZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWw6 Ci0rICAgICAgRW1pdFZteEJpbmFyeU5vdChtYXNtLCBndHVGbiwgcmhzLCBsaHMsIGRlc3QpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEFzc2VtYmxlcjo6QmVsb3c6Ci0rICAgICAgRW1pdFZt eEJpbmFyeShtYXNtLCBndHVGbiwgcmhzLCBsaHMsIGRlc3QpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIEFzc2VtYmxlcjo6QmVsb3dPckVxdWFsOgotKyAgICAgIEVtaXRWbXhCaW5hcnlOb3Qo bWFzbSwgZ3R1Rm4sIGxocywgcmhzLCBkZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVs dDoKLSsgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgU0lNRCBpbnRlZ2VyIGNvbmRpdGlvbiIp OwotKyAgfQotK30KLSsKLSsvLyBFbWl0IHRlcm5hcnkgVk1YIG9wIGRpcmVjdGx5IG9uIFNpbWQx MjggcmVncywgbm8gc3RhZ2luZy4KLSt0eXBlZGVmIHZvaWQgKCpWbXhUZXJuYXJ5Rm4pKEFzc2Vt YmxlciYsIHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQ4X3QpOwotKwotK3N0YXRpYyB2 b2lkIEVtaXRWbXhUZXJuYXJ5KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBWbXhUZXJuYXJ5Rm4gdm14 T3AsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBhLCBGbG9hdFJl Z2lzdGVyIGIsIEZsb2F0UmVnaXN0ZXIgYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHZteE9wKHN0YXRpY19jYXN0PEFzc2VtYmxlciY+KG1h c20pLCBkZXN0LmVuY29kaW5nKCkgJiAzMSwgYS5lbmNvZGluZygpICYgMzEsCi0rICAgICAgICBi LmVuY29kaW5nKCkgJiAzMSwgYy5lbmNvZGluZygpICYgMzEpOwotK30KLSsKLSsvLyBFbWl0IHVu YXJ5IFZNWCBvcCBkaXJlY3RseSBvbiBTaW1kMTI4IHJlZ3MsIG5vIHN0YWdpbmcuCi0rdHlwZWRl ZiB2b2lkICgqVm14VW5hcnlGbikoQXNzZW1ibGVyJiwgdWludDhfdCwgdWludDhfdCk7Ci0rCi0r c3RhdGljIHZvaWQgRW1pdFZteFVuYXJ5KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBWbXhVbmFyeUZu IHZteE9wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KSB7Ci0rICB2bXhPcChzdGF0aWNfY2FzdDxBc3NlbWJsZXImPihtYXNt KSwgZGVzdC5lbmNvZGluZygpICYgMzEsCi0rICAgICAgICBzcmMuZW5jb2RpbmcoKSAmIDMxKTsK LSt9Ci0rCi0rLy8gSGVscGVyOiBjcmVhdGUgYSB6ZXJvIFNJTUQgcmVnaXN0ZXIgdXNpbmcgeHhs eG9yLgotK3N0YXRpYyB2b2lkIFplcm9TaW1kMTI4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKLSsgIG1hc20uYXNfeHhseG9yKGRlc3QsIGRlc3QsIGRlc3QpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBpZiAoc3JjICE9IGRlc3QpIHsKLSsgICAgYXNf eHhsb3IoZGVzdCwgc3JjLCBzcmMpOwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy Ojpsb2FkQ29uc3RhbnRTaW1kMTI4KGNvbnN0IFNpbWRDb25zdGFudCYgdiwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAg Ly8gTG9hZCAxMjgtYml0IGNvbnN0YW50IGZyb20gaW5saW5lIGNvbnN0YW50IHBvb2wuCi0rICAv LyBDbG9iYmVycyBTZWNvbmRTY3JhdGNoUmVnIChyMTIpLgotKyAgbG9hZEZyb21Qb29sU2ltZDEy OChkZXN0LCB2KTsKLSt9Ci0rCi0rLy8gUFBDNjQgTEUgbGFuZSBtYXBwaW5nOgotKy8vIFdhc20g bGFuZSBLID0gbWVtb3J5IGJ5dGUgSyA9IHJlZ2lzdGVyIGJ5dGUgKDE1LUspLgotKy8vIG1mdnNy ZCBleHRyYWN0cyByZWdpc3RlciBiaXRzWzA6NjNdID0gQkUgZHdvcmQgMCA9IFdhc20gbGFuZXMg OC0xNSAoYnl0ZXMpLgotKy8vIEZvciBWTVggYnl0ZSBvcHMsIEJFIGJ5dGUgaW5kZXggPSAxNSAt IHdhc21fbGFuZS4KLSsvLyBGb3IgVk1YIGhhbGZ3b3JkIG9wcywgQkUgaGFsZndvcmQgaW5kZXgg PSA3IC0gd2FzbV9oYWxmd29yZC4KLSsvLyBGb3IgVlNYIHdvcmQgb3BzICh4eHNwbHR3KSwgQkUg d29yZCBpbmRleCA9IDMgLSB3YXNtX3dvcmQuCi0rLy8gRm9yIGRvdWJsZXdvcmQgb3BzLCBCRSBk d29yZCBpbmRleCA9IDEgLSB3YXNtX2R3b3JkLgotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNw bGF0WDE2KFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBtdHZzcmQg d3JpdGVzIHNyYyBpbnRvIEJFIDAuLjYzIG9mIGRlc3QgKGxvdyBieXRlIGF0IEJFIGJ5dGUgNyk7 Ci0rICAvLyB2c3BsdGIgdGhlbiBzcGxhdHMgdGhhdCBieXRlIG92ZXIgYWxsIDE2IGxhbmVzLiBk ZXN0IGFsaWFzZXMgYXMKLSsgIC8vIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbiDigJQgdnNw bHRiIHRvbGVyYXRlcyB0aGlzLiBObyBleHRyYQotKyAgLy8gc2NyYXRjaCByZWdpc3RlciByZXF1 aXJlZCwgc28gY2FsbGVycyB0aGF0IGFscmVhZHkgaG9sZCBhCi0rICAvLyBTY3JhdGNoU2ltZDEy OFNjb3BlIChleHRBZGRQYWlyd2lzZSosIHZhci1zaGlmdCBuYXJyb3cgZm9ybXMpIGRvCi0rICAv LyBub3Qgc2VlIGEgbmVzdGVkLWFjcXVpcmUgY29sbGlzaW9uLgotKyAgYXNfbXR2c3JkKGRlc3Qs IHNyYyk7Ci0rICBhc192c3BsdGIoZGVzdCwgZGVzdCwgNyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnNwbGF0WDgoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsg IC8vIFNhbWUgc2hhcGUgYXMgc3BsYXRYMTYgd2l0aCBoYWxmd29yZCBncmFudWxhcml0eS4gbXR2 c3JkIHBsYWNlcwotKyAgLy8gdGhlIGxvdyAxNiBiaXRzIGF0IEJFIGhhbGZ3b3JkIDMgKD0gQkUg Ynl0ZXMgNi4uNyk7IHZzcGx0aCBwaWNrcwotKyAgLy8gaXQgdXAgYW5kIHNwbGF0cyBhY3Jvc3Mg OCBsYW5lcy4gdnNwbHRoIHJlYWRzIG9ubHkgdGhlIGNob3NlbgotKyAgLy8gaGFsZndvcmQsIHNv IG5lZ2F0aXZlIGkzMiBpbnB1dHMgZG8gbm90IG5lZWQgYSAxNi1iaXQgcHJlLW1hc2sKLSsgIC8v ICh3aGljaCB0aGUgcHJldmlvdXMgR1BSLXJlcGxpY2F0ZSBwYXRoIHJlcXVpcmVkKS4KLSsgIGFz X210dnNyZChkZXN0LCBzcmMpOwotKyAgYXNfdnNwbHRoKGRlc3QsIGRlc3QsIDMpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGxhdFg0KFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgYXNfbXR2c3J3cyhkZXN0LCBz cmMpOwotKyAgfSBlbHNlIHsKLSsgICAgYXNfbXR2c3JkKGRlc3QsIHNyYyk7Ci0rICAgIGFzX3h4 c3BsdHcoZGVzdCwgZGVzdCwgMSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OnNwbGF0WDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8g c3JjIGlzIGEgZG91YmxlLXByZWNpc2lvbiBGUFIgaG9sZGluZyBhIGZsb2F0IHZhbHVlICh0aGUg SklUIGtlZXBzCi0rICAvLyBGUDMyIGluIERQLWVxdWl2YWxlbnQgZm9ybSBvbiBQUEM2NCkuIENv bnZlcnQgRFDihpJTUCBpbnRvIEJFIHdvcmQgMAotKyAgLy8gKHhzY3ZkcHNwbiBsYXlzIHRoZSBz aW5nbGUgYXQgYml0c1swOjMxXSAvIEJFIHdvcmQgMCksIHRoZW4gc3BsYXQKLSsgIC8vIHdvcmQg MCB0byBhbGwgZm91ciBsYW5lcy4KLSsgIGFzX3hzY3ZkcHNwbihkZXN0LCBzcmMpOwotKyAgYXNf eHhzcGx0dyhkZXN0LCBkZXN0LCAwKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3Bs YXRYMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBTcGxh dCBzY2FsYXIgZG91YmxlIHRvIGJvdGggZG91Ymxld29yZCBsYW5lcy4KLSsgIC8vIFNjYWxhciB2 YWx1ZSBpcyBpbiByZWdpc3RlciBiaXRzWzA6NjNdIChCRSBkd29yZCAwKS4KLSsgIC8vIHh4cGVy bWRpIGRtPTA6IGRlc3QgPSBbc3JjLmR3MCwgc3JjLmR3MF0KLSsgIGFzX3h4cGVybWRpKGRlc3Qs IHNyYywgc3JjLCAwKTsKLSt9Ci0rCi0rLy8gSGVscGVyczogc3BsYXQgSW1tMzIgaW50byBTSU1E IHJlZ2lzdGVyIGF0IHZhcmlvdXMgZWxlbWVudCB3aWR0aHMuCi0rLy8gVk1YIHNoaWZ0IGluc3Ry dWN0aW9ucyByZWFkIHRoZSBzaGlmdCBjb3VudCBmcm9tIEVBQ0ggZWxlbWVudCBpbmRlcGVuZGVu dGx5LAotKy8vIHNvIHRoZSBjb3VudCBtdXN0IGJlIHJlcGxpY2F0ZWQgdG8gZXZlcnkgYnl0ZS9o YWxmd29yZC93b3JkIGFzIGFwcHJvcHJpYXRlLgotKy8vCi0rLy8gRmFzdCBwYXRoIGZvciBzbWFs bCBjb25zdGFudHM6IHZzcGx0aXN7YixoLHd9IChQT1dFUjcrKSBzcGxhdHMgYSA1LWJpdAotKy8v IHNpZ25lZCBpbW1lZGlhdGUgdG8gYWxsIGxhbmVzIGluIDEgaW5zbiB3aXRoIG5vIHBvb2wgZW50 cnkuIEZvciB2YWx1ZXMKLSsvLyBvdXRzaWRlIFstMTYsIDE1XSB3ZSBmYWxsIGJhY2sgdG8gdGhl IGlubGluZS1wb29sIHBhdGguCi0rc3RhdGljIHZvaWQgU3BsYXRJbW04KE1hY3JvQXNzZW1ibGVy JiBtYXNtLCBJbW0zMiBpbW0sIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgaW50OF90IHZhbCA9 IChpbnQ4X3QpaW1tLnZhbHVlOwotKyAgaWYgKHZhbCA+PSAtMTYgJiYgdmFsIDw9IDE1KSB7Ci0r ICAgIG1hc20uYXNfdnNwbHRpc2IoZGVzdC5lbmNvZGluZygpICYgMzEsIHZhbCk7Ci0rICAgIHJl dHVybjsKLSsgIH0KLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICAvLyBQOSB4eHNwbHRpYiBo YW5kbGVzIHRoZSBmdWxsIDgtYml0IHJhbmdlIGluIDEgaW5zbi4KLSsgICAgbWFzbS5hc194eHNw bHRpYihkZXN0LCAodWludDhfdCl2YWwpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBpbnQ4X3Qg Ynl0ZXNbMTZdOwotKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSBieXRlc1tpXSA9IHZh bDsKLSsgIG1hc20ubG9hZENvbnN0YW50U2ltZDEyOChTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihi eXRlcyksIGRlc3QpOwotK30KLSsKLStzdGF0aWMgdm9pZCBTcGxhdEltbTE2KE1hY3JvQXNzZW1i bGVyJiBtYXNtLCBJbW0zMiBpbW0sIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgaW50MTZfdCB2 YWwgPSAoaW50MTZfdClpbW0udmFsdWU7Ci0rICBpZiAodmFsID49IC0xNiAmJiB2YWwgPD0gMTUp IHsKLSsgICAgbWFzbS5hc192c3BsdGlzaChkZXN0LmVuY29kaW5nKCkgJiAzMSwgKGludDhfdCl2 YWwpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBpbnQxNl90IGhhbGZzWzhdOwotKyAgZm9yIChp bnQgaSA9IDA7IGkgPCA4OyBpKyspIGhhbGZzW2ldID0gdmFsOwotKyAgbWFzbS5sb2FkQ29uc3Rh bnRTaW1kMTI4KFNpbWRDb25zdGFudDo6Q3JlYXRlWDgoaGFsZnMpLCBkZXN0KTsKLSt9Ci0rCi0r c3RhdGljIHZvaWQgU3BsYXRJbW0zMihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgSW1tMzIgaW1tLCBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGludDMyX3QgdmFsID0gaW1tLnZhbHVlOwotKyAgaWYg KHZhbCA+PSAtMTYgJiYgdmFsIDw9IDE1KSB7Ci0rICAgIG1hc20uYXNfdnNwbHRpc3coZGVzdC5l bmNvZGluZygpICYgMzEsIChpbnQ4X3QpdmFsKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgaW50 MzJfdCB3b3Jkc1s0XSA9IHt2YWwsIHZhbCwgdmFsLCB2YWx9OwotKyAgbWFzbS5sb2FkQ29uc3Rh bnRTaW1kMTI4KFNpbWRDb25zdGFudDo6Q3JlYXRlWDQod29yZHMpLCBkZXN0KTsKLSt9Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rLy8gRXh0cmFjdCBsYW5lCi0rCi0rc3RhdGljIHZvaWQgRXh0cmFjdExhbmVU b0dQUihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgdWludDMyX3QgbGFuZSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGFuZVdpZHRoQnl0ZXMsIHVuc2lnbmVk IGxhbmVXaWR0aEJpdHMpIHsKLSsgIC8vIEV4dHJhY3QgV2FzbSBsYW5lIGZyb20gdmVjdG9yIHJl Z2lzdGVyIHRvIEdQUi4KLSsgIC8vIFdhc20gbGFuZSBLIOKGkiByZWdpc3RlciBieXRlIG9mZnNl dCAoMTUgLSBLKmxhbmVXaWR0aEJ5dGVzKS4KLSsgIC8vCi0rICAvLyBTdHJhdGVneTogdXNlIG1m dnNyZCB0byBnZXQgb25lIDY0LWJpdCBoYWxmIG9mIHRoZSByZWdpc3RlciwgdGhlbiBzaGlmdAot KyAgLy8gYW5kIG1hc2sgdG8gaXNvbGF0ZSB0aGUgbGFuZS4KLSsgIC8vCi0rICAvLyBtZnZzcmQg Z2V0cyByZWdpc3RlciBiaXRzWzA6NjNdIChCRSBkd29yZCAwKSA9IFdhc20gbGFuZXMgaW4gdGhl IGhpZ2gKLSsgIC8vIGhhbGYgb2YgdGhlIHJlZ2lzdGVyIChoaWdoLW51bWJlcmVkIGxhbmVzIGlu IExFIG1lbW9yeSBvcmRlcikuCi0rICAvLyBGb3IgYW4gTi1iaXQgbGFuZSBhdCBXYXNtIGluZGV4 IEw6Ci0rICAvLyAgIElmIEwgaXMgaW4gdGhlIGhpZ2ggZHdvcmQgKEwgPj0gOC9sYW5lV2lkdGhC eXRlcyk6Ci0rICAvLyAgICAgdXNlIG1mdnNyZDsgbGFuZSBpcyBhdCBHUFIgYml0IG9mZnNldCBs YW5lV2lkdGhCaXRzKihMIC0KLSsgIC8vICAgICA4L2xhbmVXaWR0aEJ5dGVzKSBmcm9tIExTQgot KyAgLy8gICBFbHNlIChMIGluIGxvdyBkd29yZCk6Ci0rICAvLyAgICAgc3dhcCBkd29yZHMsIHRo ZW4gbWZ2c3JkOyBsYW5lIGlzIGF0IEdQUiBiaXQgb2Zmc2V0IGxhbmVXaWR0aEJpdHMqTAotKyAg Ly8gICAgIGZyb20gTFNCCi0rCi0rICB1bnNpZ25lZCBsYW5lc1BlckR3b3JkID0gOCAvIGxhbmVX aWR0aEJ5dGVzOwotKwotKyAgaWYgKGxhbmUgPj0gbGFuZXNQZXJEd29yZCkgewotKyAgICBtYXNt LmFzX21mdnNyZChkZXN0LCBzcmMpOwotKyAgICB1bnNpZ25lZCBzaGlmdCA9IGxhbmVXaWR0aEJp dHMgKiAobGFuZSAtIGxhbmVzUGVyRHdvcmQpOwotKyAgICBpZiAoc2hpZnQpIHsKLSsgICAgICBt YXNtLnhfc3JkaShkZXN0LCBkZXN0LCBzaGlmdCk7Ci0rICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAg IGlmIChIYXNQT1dFUjkoKSkgewotKyAgICAgIG1hc20uYXNfbWZ2c3JsZChkZXN0LCBzcmMpOwot KyAgICB9IGVsc2UgewotKyAgICAgIC8vIFBPV0VSODogc3dhcCBkd29yZHMgdG8gZ2V0IGR3MSBp bnRvIHNjYWxhciBwb3NpdGlvbi4KLSsgICAgICAvLyBBdm9pZCBTY3JhdGNoU2ltZDEyOFNjb3Bl IOKAlCBjYWxsZXJzIG1heSBhbHJlYWR5IGhvbGQgaXQuCi0rICAgICAgLy8gVXNlIHh4cGVybWRp IGRpcmVjdGx5IG9uIFNjcmF0Y2hTaW1kMTI4UmVnICh2MC9WU1IzMiwgbm9uLWFsbG9jYXRhYmxl KS4KLSsgICAgICBtYXNtLmFzX3h4cGVybWRpKFNjcmF0Y2hTaW1kMTI4UmVnLCBzcmMsIHNyYywg Mik7Ci0rICAgICAgbWFzbS5hc19tZnZzcmQoZGVzdCwgU2NyYXRjaFNpbWQxMjhSZWcpOwotKyAg ICB9Ci0rICAgIHVuc2lnbmVkIHNoaWZ0ID0gbGFuZVdpZHRoQml0cyAqIGxhbmU7Ci0rICAgIGlm IChzaGlmdCkgewotKyAgICAgIG1hc20ueF9zcmRpKGRlc3QsIGRlc3QsIHNoaWZ0KTsKLSsgICAg fQotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEV4dHJhY3RMYW5l SW50OHgxNih1aW50MzJfdCBsYW5lLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIE1PWl9BU1NF UlQobGFuZSA8IDE2KTsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICAvLyB2ZXh0cmFjdHVi IHB1dHMgVlJCLkJFX2J5dGVbVUlNXSBhdCBWUlQuQkVfYnl0ZVs3XSB3aXRoIHRoZSByZXN0Ci0r ICAgIC8vIHplcm9lZDsgbWZ2c3JkIHRoZW4gcmVhZHMgQkUgYnl0ZXMgMC4uNyDihpIgbG93IGJ5 dGUgb2YgZGVzdCwgaGlnaAotKyAgICAvLyBieXRlcyBhbHJlYWR5IDAuIE5vIG1hc2sgbmVlZGVk LgotKyAgICBhc192ZXh0cmFjdHViKFNjcmF0Y2hTaW1kMTI4UmVnLCBzcmMsIDE1IC0gbGFuZSk7 Ci0rICAgIGFzX21mdnNyZChkZXN0LCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0rICAgIHJldHVybjsK LSsgIH0KLSsgIEV4dHJhY3RMYW5lVG9HUFIoKnRoaXMsIGxhbmUsIHNyYywgZGVzdCwgMSwgOCk7 Ci0rICBhc19ybGRpY2woZGVzdCwgZGVzdCwgMCwgNTYpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjp1bnNpZ25lZEV4dHJhY3RMYW5lSW50MTZ4OCh1aW50MzJfdCBsYW5lLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg c3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIGRlc3QpIHsKLSsgIE1PWl9BU1NFUlQobGFuZSA8IDgpOwotKyAgaWYgKEhhc1BPV0VS OSgpKSB7Ci0rICAgIGFzX3ZleHRyYWN0dWgoU2NyYXRjaFNpbWQxMjhSZWcsIHNyYywgMTQgLSAy ICogbGFuZSk7Ci0rICAgIGFzX21mdnNyZChkZXN0LCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0rICAg IHJldHVybjsKLSsgIH0KLSsgIEV4dHJhY3RMYW5lVG9HUFIoKnRoaXMsIGxhbmUsIHNyYywgZGVz dCwgMiwgMTYpOwotKyAgYXNfcmxkaWNsKGRlc3QsIGRlc3QsIDAsIDQ4KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0cmFjdExhbmVGbG9hdDMyeDQodWludDMyX3QgbGFuZSwgRmxv YXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKGxhbmUgPCA0KTsKLSsgIC8v IEJFIHdvcmQgaW5kZXggPSAzIC0gbGFuZS4geHhleHRyYWN0dXcgZXh0cmFjdHMgYSB3b3JkIGJ5 IEJFIGJ5dGUgb2Zmc2V0LgotKyAgLy8gQkUgYnl0ZSBvZmZzZXQgb2YgQkUgd29yZCBXID0gVyo0 LiBTbyBvZmZzZXQgPSAoMy1sYW5lKSo0LgotKyAgLy8geHhleHRyYWN0dXcgcHV0cyB0aGUgZXh0 cmFjdGVkIHdvcmQgaW50byBiaXRzWzMyOjYzXSBvZiBkZXN0ICh0aGUgbG93Ci0rICAvLyB3b3Jk IG9mIHRoZSBzY2FsYXIgZG91Ymxld29yZCksIHRoZW4geHNjdnNwZHBuIGNvbnZlcnRzIFNQ4oaS RFAuCi0rICAvLyB4eHNwbHR3IHJlcGxpY2F0ZXMgYSB3b3JkIGludG8gYWxsIDQgcG9zaXRpb25z LiBUaGUgc2NhbGFyIFNQIHZhbHVlCi0rICAvLyBpcyB0aGVuIGF0IGJpdHNbMDozMV0gd2hlcmUg eHNjdnNwZHBuIGV4cGVjdHMgaXQuCi0rICBhc194eHNwbHR3KGRlc3QsIHNyYywgMyAtIGxhbmUp OwotKyAgYXNfeHNjdnNwZHBuKGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpleHRyYWN0TGFuZUZsb2F0NjR4Mih1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNy YywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIE1PWl9BU1NFUlQobGFuZSA8IDIpOwotKyAgaWYgKGxhbmUgPT0gMCkg ewotKyAgICAvLyBMYW5lIDAgPSBMRSBsb3cgZHdvcmQgPSBCRSBkd29yZCAxLiBOZWVkIHRvIHN3 YXAgdG8gc2NhbGFyIHBvc2l0aW9uLgotKyAgICBhc194eHBlcm1kaShkZXN0LCBzcmMsIHNyYywg Mik7Ci0rICB9IGVsc2UgewotKyAgICAvLyBMYW5lIDEgPSBMRSBoaWdoIGR3b3JkID0gQkUgZHdv cmQgMCA9IHNjYWxhciBwb3NpdGlvbi4KLSsgICAgaWYgKHNyYyAhPSBkZXN0KSB7Ci0rICAgICAg YXNfeHhsb3IoZGVzdCwgc3JjLCBzcmMpOwotKyAgICB9Ci0rICB9Ci0rfQotKwotKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKy8vIFJlcGxhY2UgbGFuZQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VMYW5l SW50OHgxNih1bnNpZ25lZCBsYW5lLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgewotKyAgTU9aX0FT U0VSVChsYW5lIDwgMTYpOwotKyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyAyIGluc25z ICsgMSBHUFIgc2NyYXRjaDogbG9hZCBsYW5lIGluZGV4LCB2aW5zYnJ4IChyaWdodC1pbmRleGVk Ci0rICAgIC8vID0gTEUtbmF0dXJhbCkuIHZpbnNicnggbWFza3MgUkEgJiAweEYsIHNvIHRoZSBp bW1lZGlhdGUgZml0cy4KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOwotKyAgICBSZWdpc3RlciBpZHggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIHhzX2xpKGlk eCwgaW50MTZfdChsYW5lKSk7Ci0rICAgIGFzX3ZpbnNicngobGhzRGVzdCwgaWR4LCByaHMpOwot KyAgICByZXR1cm47Ci0rICB9Ci0rICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgLy8gMiBpbnNu cyArIDEgVlNSIHNjcmF0Y2g6IHN0YWdlIHJocyBpbiBCRSAwLi42MyBvZiBhIHNjcmF0Y2ggVlNS Ci0rICAgIC8vIChsb3cgYnl0ZSBvZiByaHMgbGFuZHMgYXQgQkUgYnl0ZSA3KSwgdGhlbiB2aW5z ZXJ0YiBjb3BpZXMgdGhhdAotKyAgICAvLyBCRSBieXRlIDcgaW50byBsaHNEZXN0J3MgQkUgYnl0 ZSAoMTUgLSBsYW5lKSA9IHdhc20gbGFuZSBMLgotKyAgICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNj cmF0Y2goKnRoaXMpOwotKyAgICBhc19tdHZzcmQoc2NyYXRjaCwgcmhzKTsKLSsgICAgYXNfdmlu c2VydGIobGhzRGVzdCwgc2NyYXRjaCwgMTUgLSBsYW5lKTsKLSsgICAgcmV0dXJuOwotKyAgfQot KyAgewotKyAgICAvLyBQT1dFUjg6IGV4dHJhY3QgZHdvcmQsIHVzZSBybGRpbWkgdG8gaW5zZXJ0 IGJ5dGUsIHdyaXRlIGJhY2suCi0rICAgIC8vIE9ubHkgbmVlZHMgMSBHUFIgc2NyYXRjaC4KLSsg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICBTY3JhdGNo U2ltZDEyOFNjb3BlIHNjcmF0Y2gxMjgoKnRoaXMpOwotKyAgICBSZWdpc3RlciB0bXAgPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICAgIHVuc2lnbmVkIGR3b3JkID0gbGFuZSAvIDg7Ci0rICAgIHVuc2ln bmVkIGJ5dGVJbkR3b3JkID0gbGFuZSAlIDg7Ci0rICAgIGlmIChkd29yZCA9PSAxKSB7Ci0rICAg ICAgYXNfbWZ2c3JkKHRtcCwgbGhzRGVzdCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgYXNfeHhw ZXJtZGkoc2NyYXRjaDEyOCwgbGhzRGVzdCwgbGhzRGVzdCwgMik7Ci0rICAgICAgYXNfbWZ2c3Jk KHRtcCwgc2NyYXRjaDEyOCk7Ci0rICAgIH0KLSsgICAgLy8gcmxkaW1pIFJULFJTLFNILE1COiBp bnNlcnQgcm90YXRlZCBSUyBiaXRzIGludG8gUlQgYXQgcG9zaXRpb25zCi0rICAgIC8vIE1CLi42 My1TSC4gSW5zZXJ0IHJocyBieXRlIGF0IGJpdCBvZmZzZXQgOCpieXRlSW5Ed29yZCBmcm9tIExT QjoKLSsgICAgLy8gICBTSCA9IDgqYnl0ZUluRHdvcmQsIE1CID0gNTYgLSA4KmJ5dGVJbkR3b3Jk Ci0rICAgIGFzX3JsZGltaSh0bXAsIHJocywgOCAqIGJ5dGVJbkR3b3JkLCA1NiAtIDggKiBieXRl SW5Ed29yZCk7Ci0rICAgIGFzX210dnNyZChzY3JhdGNoMTI4LCB0bXApOwotKyAgICAvLyBtdHZz cmQgd3JpdGVzIHNjcmF0Y2gxMjguZHcwIGZyb20gYHRtcGAgYW5kIGxlYXZlcyBzY3JhdGNoMTI4 LmR3MQotKyAgICAvLyB1bmRlZmluZWQuIEJvdGggeHhwZXJtZGkgZm9ybXMgYmVsb3cgc2VsZWN0 IHNjcmF0Y2gxMjguZHcwIG9ubHk6Ci0rICAgIC8vICAgRE09MGIwMSDihpIgW3NjcmF0Y2guZHcw LCBsaHNEZXN0LmR3MV0KLSsgICAgLy8gICBETT0wYjAwIOKGkiBbbGhzRGVzdC5kdzAsIHNjcmF0 Y2guZHcwXQotKyAgICAvLyBTbyB0aGUgdW5kZWZpbmVkIGR3MSBpcyBuZXZlciByZWFkLiBJTlZB UklBTlQ6IGFueSBmdXR1cmUgY2hhbmdlCi0rICAgIC8vIHRvIGVpdGhlciBETSBsaXRlcmFsIE1V U1QgZmlyc3QgemVybyBzY3JhdGNoMTI4LmR3MSB2aWEgeHhseG9yIG9yCi0rICAgIC8vIGFkb3B0 IGEgZGlmZmVyZW50IHN0YWdpbmcgc2NoZW1lOyBvdGhlcndpc2UgcmVhZHMgb2YgZHcxIHByb2R1 Y2UKLSsgICAgLy8gUE9XRVI5LXplcm8gLyBQT1dFUjgtdW5kZWZpbmVkIGdhcmJhZ2UgaW4gdGhl IG91dHB1dC4KLSsgICAgaWYgKGR3b3JkID09IDEpIHsKLSsgICAgICBhc194eHBlcm1kaShsaHNE ZXN0LCBzY3JhdGNoMTI4LCBsaHNEZXN0LCAxKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc194 eHBlcm1kaShsaHNEZXN0LCBsaHNEZXN0LCBzY3JhdGNoMTI4LCAwKTsKLSsgICAgfQotKyAgfQot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlTGFuZUludDE2eDgodW5zaWduZWQg bGFuZSwgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKLSsgIE1PWl9BU1NFUlQobGFuZSA8IDgpOwot KyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyAyIGluc25zICsgMSBHUFIgc2NyYXRjaDog bGFuZSoyIOKGkiBieXRlIHBvc2l0aW9uLCB0aGVuIHZpbnNocnguCi0rICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgICAgUmVnaXN0ZXIgaWR4ID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgICB4c19saShpZHgsIGludDE2X3QobGFuZSAqIDIpKTsKLSsgICAgYXNf dmluc2hyeChsaHNEZXN0LCBpZHgsIHJocyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGlmIChI YXNQT1dFUjkoKSkgewotKyAgICAvLyAyIGluc25zICsgMSBWU1Igc2NyYXRjaDogc3RhZ2Ugcmhz IGluIEJFIDAuLjYzIChsb3cgMTYgb2YgcmhzCi0rICAgIC8vIGxhbmRzIGF0IEJFIGJ5dGVzIDYu LjcpLCB0aGVuIHZpbnNlcnRoIGNvcGllcyB0aG9zZSB0d28gYnl0ZXMKLSsgICAgLy8gaW50byBs aHNEZXN0J3MgQkUgYnl0ZXMgKDE0IC0gMkwpLi4oMTUgLSAyTCkgPSB3YXNtIGxhbmUgTC4KLSsg ICAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgICAgYXNfbXR2c3JkKHNj cmF0Y2gsIHJocyk7Ci0rICAgIGFzX3ZpbnNlcnRoKGxoc0Rlc3QsIHNjcmF0Y2gsIDE0IC0gMiAq IGxhbmUpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICB7Ci0rICAgIC8vIFBPV0VSODogZXh0cmFj dCBkd29yZCwgcmxkaW1pIHRvIGluc2VydCBoYWxmd29yZCwgd3JpdGUgYmFjay4KLSsgICAgLy8g U2FtZSBkdzEtdW5kZWYgaW52YXJpYW50IGFzIHJlcGxhY2VMYW5lSW50OHgxNiBhYm92ZS4KLSsg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICBTY3JhdGNo U2ltZDEyOFNjb3BlIHNjcmF0Y2gxMjgoKnRoaXMpOwotKyAgICBSZWdpc3RlciB0bXAgPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICAgIHVuc2lnbmVkIGR3b3JkID0gbGFuZSAvIDQ7Ci0rICAgIHVuc2ln bmVkIGh3SW5Ed29yZCA9IGxhbmUgJSA0OwotKyAgICBpZiAoZHdvcmQgPT0gMSkgewotKyAgICAg IGFzX21mdnNyZCh0bXAsIGxoc0Rlc3QpOwotKyAgICB9IGVsc2UgewotKyAgICAgIGFzX3h4cGVy bWRpKHNjcmF0Y2gxMjgsIGxoc0Rlc3QsIGxoc0Rlc3QsIDIpOwotKyAgICAgIGFzX21mdnNyZCh0 bXAsIHNjcmF0Y2gxMjgpOwotKyAgICB9Ci0rICAgIGFzX3JsZGltaSh0bXAsIHJocywgMTYgKiBo d0luRHdvcmQsIDQ4IC0gMTYgKiBod0luRHdvcmQpOwotKyAgICBhc19tdHZzcmQoc2NyYXRjaDEy OCwgdG1wKTsKLSsgICAgaWYgKGR3b3JkID09IDEpIHsKLSsgICAgICBhc194eHBlcm1kaShsaHNE ZXN0LCBzY3JhdGNoMTI4LCBsaHNEZXN0LCAxKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc194 eHBlcm1kaShsaHNEZXN0LCBsaHNEZXN0LCBzY3JhdGNoMTI4LCAwKTsKLSsgICAgfQotKyAgfQot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlTGFuZUludDMyeDQodW5zaWduZWQg bGFuZSwgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKLSsgIE1PWl9BU1NFUlQobGFuZSA8IDQpOwot KyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyAxIGluc24sIG5vIHNjcmF0Y2ggVlNSLiBV SU0gaXMgdGhlIEJFIGJ5dGUgb2Zmc2V0LgotKyAgICBhc192aW5zdyhsaHNEZXN0LCByaHMsICgz IC0gbGFuZSkgKiA0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgaWYgKEhhc1BPV0VSOSgpKSB7 Ci0rICAgIC8vIFBPV0VSOTogeHhpbnNlcnR3IGluc2VydHMgd29yZCBmcm9tIGJpdHNbMzI6NjNd IG9mIFhCIGF0IEJFIGJ5dGUKLSsgICAgLy8gb2Zmc2V0IFVJTSBpbiBYVC4gbXR2c3JkIHB1dHMg R1BSIGludG8gYml0c1swOjYzXTsgbG93IDMyIGJpdHMKLSsgICAgLy8gbGFuZCBhdCBiaXRzWzMy OjYzXS4gQkUgYnl0ZSBvZmZzZXQgb2YgV2FzbSB3b3JkIGxhbmUgPSAoMy1sYW5lKSo0LgotKyAg ICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgICBhc19tdHZzcmQoc2Ny YXRjaCwgcmhzKTsKLSsgICAgYXNfeHhpbnNlcnR3KGxoc0Rlc3QsIHNjcmF0Y2gsICgzIC0gbGFu ZSkgKiA0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgLy8gUE9XRVI4OiBleHRyYWN0IGR3b3Jk LCBybGRpbWkgdG8gaW5zZXJ0IHdvcmQsIHdyaXRlIGJhY2suCi0rICAvLyBNb2RlbGVkIG9uIHJl cGxhY2VMYW5lSW50MTZ4OCBiZWxvdy4KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaDEyOCgqdGhpcyk7Ci0r ICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICB1bnNpZ25lZCBkd29yZCA9IGxh bmUgLyAyOyAgICAgICAgLy8gMCA9IGxhbmVzIDAsMTsgMSA9IGxhbmVzIDIsMy4KLSsgIHVuc2ln bmVkIHdvcmRJbkR3b3JkID0gbGFuZSAlIDI7ICAvLyAwID0gbG93IExFIHdvcmQ7IDEgPSBoaWdo IExFIHdvcmQuCi0rICBpZiAoZHdvcmQgPT0gMSkgewotKyAgICBhc19tZnZzcmQodG1wLCBsaHNE ZXN0KTsKLSsgIH0gZWxzZSB7Ci0rICAgIGFzX3h4cGVybWRpKHNjcmF0Y2gxMjgsIGxoc0Rlc3Qs IGxoc0Rlc3QsIDIpOwotKyAgICBhc19tZnZzcmQodG1wLCBzY3JhdGNoMTI4KTsKLSsgIH0KLSsg IGFzX3JsZGltaSh0bXAsIHJocywgMzIgKiB3b3JkSW5Ed29yZCwgMzIgLSAzMiAqIHdvcmRJbkR3 b3JkKTsKLSsgIGFzX210dnNyZChzY3JhdGNoMTI4LCB0bXApOwotKyAgaWYgKGR3b3JkID09IDEp IHsKLSsgICAgYXNfeHhwZXJtZGkobGhzRGVzdCwgc2NyYXRjaDEyOCwgbGhzRGVzdCwgMSk7Ci0r ICB9IGVsc2UgewotKyAgICBhc194eHBlcm1kaShsaHNEZXN0LCBsaHNEZXN0LCBzY3JhdGNoMTI4 LCAwKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZUxhbmVGbG9h dDMyeDQodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Ci0rICBN T1pfQVNTRVJUKGxhbmUgPCA0KTsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICBTY3JhdGNo U2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgICBhc194c2N2ZHBzcG4oc2NyYXRjaCwg cmhzKTsKLSsgICAgYXNfeHhpbnNlcnR3KGxoc0Rlc3QsIHNjcmF0Y2gsICgzIC0gbGFuZSkgKiA0 KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgLy8gUE9XRVI4OiBjb252ZXJ0IGRvdWJsZSByaHMg dG8gc2luZ2xlIChsYW5kcyBpbiBCRSBiaXRzIDAuLjMxIG9mIEZQUiksCi0rICAvLyBleHRyYWN0 IGJpdHMgdG8gYSBHUFIsIHRoZW4gcm91dGUgdGhyb3VnaCB0aGUgaW50ZWdlciBpbnNlcnQgcGF0 aC4KLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lz dGVyIHJoc0JpdHMgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICB7Ci0rICAgIFNjcmF0Y2hTaW1kMTI4 U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICAgIGFzX3hzY3ZkcHNwbihzY3JhdGNoLCByaHMpOwot KyAgICBhc19tZnZzcmQocmhzQml0cywgc2NyYXRjaCk7ICAgLy8gc2luZ2xlIGlzIGluIGhpZ2gg MzIgYml0cyBvZiBHUFIKLSsgICAgeF9zcmRpKHJoc0JpdHMsIHJoc0JpdHMsIDMyKTsgIC8vIHNp bmdsZSDihpIgbG93IDMyIGJpdHMKLSsgIH0KLSsgIC8vIElubGluZSB0aGUgaW50LWluc2VydCBz ZXF1ZW5jZSAoY2FuJ3QgY2FsbCByZXBsYWNlTGFuZUludDMyeDQgZnJvbQotKyAgLy8gaGVyZSBi ZWNhdXNlIHdlJ3JlIGFscmVhZHkgaW5zaWRlIGEgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgYW5k Ci0rICAvLyBuZWVkIHRvIGFjcXVpcmUgYSBzZXBhcmF0ZSB0bXApLgotKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoMTI4KCp0aGlzKTsKLSsgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgIHVuc2lnbmVkIGR3b3JkID0gbGFuZSAvIDI7Ci0rICB1bnNpZ25lZCB3b3JkSW5E d29yZCA9IGxhbmUgJSAyOwotKyAgaWYgKGR3b3JkID09IDEpIHsKLSsgICAgYXNfbWZ2c3JkKHRt cCwgbGhzRGVzdCk7Ci0rICB9IGVsc2UgewotKyAgICBhc194eHBlcm1kaShzY3JhdGNoMTI4LCBs aHNEZXN0LCBsaHNEZXN0LCAyKTsKLSsgICAgYXNfbWZ2c3JkKHRtcCwgc2NyYXRjaDEyOCk7Ci0r ICB9Ci0rICBhc19ybGRpbWkodG1wLCByaHNCaXRzLCAzMiAqIHdvcmRJbkR3b3JkLCAzMiAtIDMy ICogd29yZEluRHdvcmQpOwotKyAgYXNfbXR2c3JkKHNjcmF0Y2gxMjgsIHRtcCk7Ci0rICBpZiAo ZHdvcmQgPT0gMSkgewotKyAgICBhc194eHBlcm1kaShsaHNEZXN0LCBzY3JhdGNoMTI4LCBsaHNE ZXN0LCAxKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIGxoc0Rlc3Qs IHNjcmF0Y2gxMjgsIDApOwotKyAgfQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXBs YWNlTGFuZUZsb2F0NjR4Mih1bnNpZ25lZCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rl c3QpIHsKLSsgIE1PWl9BU1NFUlQobGFuZSA8IDIpOwotKyAgLy8geHhwZXJtZGkgdG8gcGxhY2Ug dGhlIHNjYWxhciBkb3VibGUgaW50byB0aGUgY29ycmVjdCBsYW5lLgotKyAgaWYgKGxhbmUgPT0g MCkgewotKyAgICAvLyBSZXBsYWNlIExFIGxvdyBkd29yZCAoPSBkdzEpLiBLZWVwIGxoc0Rlc3Qg ZHcwIChsYW5lIDEpLgotKyAgICAvLyByaHMgc2NhbGFyIGlzIGluIGR3MC4gZG09MGIwMDogW2xo c0Rlc3QuZHcwLCByaHMuZHcwXQotKyAgICBhc194eHBlcm1kaShsaHNEZXN0LCBsaHNEZXN0LCBy aHMsIDApOwotKyAgfSBlbHNlIHsKLSsgICAgLy8gUmVwbGFjZSBMRSBoaWdoIGR3b3JkICg9IGR3 MCkuIEtlZXAgbGhzRGVzdCBkdzEgKGxhbmUgMCkuCi0rICAgIC8vIHJocyBzY2FsYXIgaXMgaW4g ZHcwLiBkbT0wYjAxOiBbcmhzLmR3MCwgbGhzRGVzdC5kdzFdCi0rICAgIGFzX3h4cGVybWRpKGxo c0Rlc3QsIHJocywgbGhzRGVzdCwgMSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnNodWZmbGVJbnQ4eDE2KGNvbnN0IHVpbnQ4X3QgbGFuZXNbMTZdLCBGbG9hdFJlZ2lzdGVy IHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGxoc0Rlc3QpIHsKLSsgIHNodWZmbGVJbnQ4eDE2KGxhbmVzLCBsaHNEZXN0LCByaHMsIGxoc0Rl c3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzaHVmZmxlSW50OHgxNihjb25zdCB1 aW50OF90IGxhbmVzWzE2XSwgRmxvYXRSZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkg ewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIC8vIFBQQzY0IHZw ZXJtIHVzZXMgQkUgYnl0ZSBpbmRpY2VzOiBWUkFbMF09TVNCLCBWUkFbMTVdPUxTQiwgVlJCWzE2 Li4zMV0uCi0rICAvLyBDb252ZXJ0IFdhc20gTEUgbGFuZSBpbmRpY2VzIHRvIHZwZXJtIGNvbnRy b2w6IGxocyBsYW5lIE4gPSBCRSBpbmRleAotKyAgLy8gKDE1LU4pLCByaHMgbGFuZSBOID0gQkUg aW5kZXggKDMxLU4pID0gKDQ3IC0gKE4rMTYpKS4KLSsgIGludDhfdCBjdHJsWzE2XTsKLSsgIGZv ciAodW5zaWduZWQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgIHVpbnQ4X3Qgc3JjID0gbGFu ZXNbaV07Ci0rICAgIGlmIChzcmMgPCAxNikgewotKyAgICAgIGN0cmxbaV0gPSAxNSAtIHNyYzsK LSsgICAgfSBlbHNlIHsKLSsgICAgICBjdHJsW2ldID0gNDcgLSBzcmM7Ci0rICAgIH0KLSsgIH0K LSsgIGxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoY3RybCksIHNj cmF0Y2gpOwotKyAgLy8gdnBlcm0gZGlyZWN0bHkgb24gU2ltZDEyOCByZWdzLgotKyAgYXNfdnBl cm0oZGVzdC5lbmNvZGluZygpICYgMzEsIGxocy5lbmNvZGluZygpICYgMzEsIHJocy5lbmNvZGlu ZygpICYgMzEsCi0rICAgICAgICAgICBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxhbmVTZWxlY3RTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbWFz aywgRmxvYXRSZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8geHhz ZWw6IFhDPTDihpJYQSwgWEM9MeKGklhCIOKGkiBYVCA9IChYQSAmIH5YQykgfCAoWEIgJiBYQykK LSsgIC8vIGxhbmVTZWxlY3Q6IGRlc3QgPSAobGhzICYgbWFzaykgfCAocmhzICYgfm1hc2spCi0r ICAvLyBOZWVkIFhBPXJocywgWEI9bGhzLCBYQz1tYXNrLgotKyAgYXNfeHhzZWwoZGVzdCwgcmhz LCBsaHMsIG1hc2spOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjppbnRlcmxlYXZlSGln aEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK LSsgIC8vIE9uIExFLCB2bXJnaGIocmhzLCBsaHMpIGdpdmVzIFdhc20gaW50ZXJsZWF2ZV9oaWdo LgotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtcmdoYiksIHJo cywgbGhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6aW50ZXJsZWF2ZUhp Z2hJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1yZ2hoKSwgcmhz LCBsaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjppbnRlcmxlYXZlSGln aEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK LSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bXJnaHcpLCByaHMs IGxocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmludGVybGVhdmVIaWdo SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewot KyAgLy8geHhwZXJtZGkgRE09MDogW1hBLmR3MCwgWEIuZHcwXSA9IG1lcmdlIGhpZ2ggZHdvcmRz LgotKyAgLy8gT24gTEU6IGR3MCA9IGhpZ2ggV2FzbSBsYW5lIChsYW5lIDEpLgotKyAgYXNfeHhw ZXJtZGkoZGVzdCwgcmhzLCBsaHMsIDApOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpp bnRlcmxlYXZlTG93SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1y Z2xiKSwgcmhzLCBsaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjppbnRl cmxlYXZlTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1yZ2xo KSwgcmhzLCBsaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjppbnRlcmxl YXZlTG93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1yZ2x3KSwg cmhzLCBsaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjppbnRlcmxlYXZl TG93SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 Ci0rICAvLyB4eHBlcm1kaSBETT0zOiBbWEEuZHcxLCBYQi5kdzFdID0gbWVyZ2UgbG93IGR3b3Jk cy4KLSsgIGFzX3h4cGVybWRpKGRlc3QsIHJocywgbGhzLCAzKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6Y29uY2F0QW5kUmlnaHRTaGlmdFNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNoaWZ0KSB7Ci0rICAvLyB2c2xkb2koVlJBLCBW UkIsIFNIKSBleHRyYWN0cyAxNiBieXRlcyBzdGFydGluZyBhdCBieXRlIFNIIG9mIHRoZQotKyAg Ly8gYmlnLWVuZGlhbiBjb25jYXRlbmF0aW9uIFZSQXx8VlJCLiBFbmRpYW5uZXNzIG1hcHBpbmcg Zm9yIHRoZSBXYXNtCi0rICAvLyBgdjEyOC5zaHVmZmxlYCByaWdodC1zaGlmdC1jb25jYXQgc2Vt YW50aWM6Ci0rICAvLyAgIFdhc206ICByZXN1bHRbaV0gPSAoaSArIHNoaWZ0IDwgMTYpID8gcmhz W2kgKyBzaGlmdF0KLSsgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiBsaHNbaSArIHNoaWZ0IC0gMTZdCi0rICAvLyAgIFBQQyBMRTogdnNsZG9pKHJocywgbGhzLCBz aGlmdCkgcHJvZHVjZXMgZXhhY3RseSB0aGF0IOKAlCB0aGUgTEUgYnl0ZQotKyAgLy8gICBsYXlv dXQgcmV2ZXJzZXMgZnJvbSBCRSwgc28gcGFzc2luZyAocmhzLCBsaHMsIHNoaWZ0KSBoZXJlIGlz IHRoZSBMRQotKyAgLy8gICBlcXVpdmFsZW50IG9mIChsaHMsIHJocywgMTYgLSBzaGlmdCkgb24g QkUuCi0rICBNT1pfQVNTRVJUKHNoaWZ0IDwgMTYpOwotKyAgaWYgKHNoaWZ0ID09IDApIHsKLSsg ICAgbW92ZVNpbWQxMjgocmhzLCBkZXN0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgLy8gdnNs ZG9pIFZSVCxWUkEsVlJCLFNIOiByZXN1bHRbaV0gPSAoVlJBfHxWUkIpW1NIK2ldCi0rICAvLyBF bWl0IHZzbGRvaSBkaXJlY3RseSBvbiBTaW1kMTI4IHJlZ3MgKFZSQSA9IGxocyA9IGhpZ2ggcGFy dCwgVlJCID0KLSsgIC8vIHJocyA9IGxvdyBwYXJ0KS4gVGhlIFZNWCBlbWl0dGVyIG1hc2tzIGAm IDMxYCBpbnRlcm5hbGx5IHRvIGV4dHJhY3QKLSsgIC8vIHRoZSA1LWJpdCBWUiBmaWVsZCBmcm9t IHRoZSBTaW1kMTI4IGVuY29kaW5nLgotKyAgYXNfdnNsZG9pKGRlc3QsIGxocywgcmhzLCBzaGlm dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxlZnRTaGlmdFNpbWQxMjgoSW1tMzIg Y291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKGNvdW50LnZhbHVl IDwgMTYpOwotKyAgaWYgKGNvdW50LnZhbHVlID09IDApIHsKLSsgICAgbW92ZVNpbWQxMjgoc3Jj LCBkZXN0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgLy8gdnNsbyBzaGlmdHMgbGVmdCBieSBi eXRlcyAoY291bnQgaW4gYml0cyAxMjEtMTI0IG9mIFZSQiwgaS5lLiBieXRlIDE1IGJpdHMKLSsg IC8vIDEtNCkuIHZzbCBzaGlmdHMgbGVmdCBieSBiaXRzIChjb3VudCBpbiBiaXRzIDEyNS0xMjcg b2YgVlJCLCBpLmUuIGJ5dGUgMTUKLSsgIC8vIGJpdHMgNS03KS4gRm9yIGJ5dGUgc2hpZnQ6IHNw bGF0WDQoY291bnQqOCwgc2NyYXRjaCksIHRoZW4gdnNsby4KLSsgIFNjcmF0Y2hTaW1kMTI4U2Nv cGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBTcGxhdEltbTMyKCp0aGlzLCBJbW0zMihjb3VudC52YWx1 ZSAqIDgpLCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JB UFBFUih2c2xvKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6cmlnaHRTaGlmdFNpbWQxMjgoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgewotKyAgTU9aX0FTU0VSVChjb3VudC52YWx1ZSA8IDE2KTsKLSsgIGlmIChjb3VudC52YWx1 ZSA9PSAwKSB7Ci0rICAgIG1vdmVTaW1kMTI4KHNyYywgZGVzdCk7Ci0rICAgIHJldHVybjsKLSsg IH0KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBTcGxhdEltbTMy KCp0aGlzLCBJbW0zMihjb3VudC52YWx1ZSAqIDgpLCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5h cnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3JvKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6emVyb0V4dGVuZDh4MTZUbzE2eDgoRmxvYXRS ZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBVbnNpZ25lZCB3aWRlbiBsb3c6IGludGVybGVh dmUgbG93IGJ5dGVzIHdpdGggemVybyBieXRlcy4KLSsgIC8vIE9uIExFLCB2bXJnbGIoemVybywg c3JjKSBpbnRlcmxlYXZlcyB0aGUgbG93IDggYnl0ZXMgb2Ygc3JjIHdpdGggemVyb3MuCi0rICAv LyBVc2UgU2NyYXRjaFNpbWQxMjhSZWcgYXMgdGhlIHplcm8uIE9yZGVyIG1hdHRlcnM6IHJlYWQg c3JjIGludG8gdGhlCi0rICAvLyBtZXJnZSBCRUZPUkUgd3JpdGluZyBkZXN0ICh3aGljaCBtaWdo dCBhbGlhcyBzcmMpLiB2bXJnbGIgcmVhZHMKLSsgIC8vIHZyYSt2cmIsIHdyaXRlcyB2cnQg4oCU IHNpbmdsZS1jeWNsZSBpc3N1ZS4KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgemVybygqdGhpcyk7 Ci0rICBhc194eGx4b3IoemVybywgemVybywgemVybyk7Ci0rICBhc192bXJnbGIoZGVzdC5lbmNv ZGluZygpICYgMzEsIHplcm8uZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6emVyb0V4dGVuZDh4MTZUbzMyeDQoRmxvYXRS ZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICB6ZXJvRXh0ZW5kOHgxNlRvMTZ4OChzcmMsIGRlc3Qp OwotKyAgemVyb0V4dGVuZDE2eDhUbzMyeDQoZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Onplcm9FeHRlbmQ4eDE2VG82NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgewotKyAgemVyb0V4dGVuZDh4MTZUbzMyeDQoc3JjLCBkZXN0KTsKLSsgIHplcm9FeHRlbmQz Mng0VG82NHgyKGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp6ZXJv RXh0ZW5kMTZ4OFRvMzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIFVuc2ln bmVkIHdpZGVuIGxvdzogaW50ZXJsZWF2ZSBsb3cgaGFsZndvcmRzIHdpdGggemVybyBoYWxmd29y ZHMuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHplcm8oKnRoaXMpOwotKyAgYXNfeHhseG9yKHpl cm8sIHplcm8sIHplcm8pOwotKyAgYXNfdm1yZ2xoKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCB6ZXJv LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Onplcm9FeHRlbmQxNng4VG82NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgewotKyAgemVyb0V4dGVuZDE2eDhUbzMyeDQoc3JjLCBkZXN0KTsKLSsgIHplcm9FeHRlbmQz Mng0VG82NHgyKGRlc3QsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp6ZXJv RXh0ZW5kMzJ4NFRvNjR4MihGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIFVuc2ln bmVkIHdpZGVuIGxvdzogaW50ZXJsZWF2ZSBsb3cgd29yZHMgd2l0aCB6ZXJvIHdvcmRzLgotKyAg U2NyYXRjaFNpbWQxMjhTY29wZSB6ZXJvKCp0aGlzKTsKLSsgIGFzX3h4bHhvcih6ZXJvLCB6ZXJv LCB6ZXJvKTsKLSsgIGFzX3ZtcmdsdyhkZXN0LmVuY29kaW5nKCkgJiAzMSwgemVyby5lbmNvZGlu ZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpyZXZlcnNlSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0 KSB7Ci0rICBjb25zdCB1aW50OF90IGxhbmVzW10gPSB7MTQsIDE1LCAxMiwgMTMsIDEwLCAxMSwg OCwgOSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICA2LCAgNywgIDQsICA1LCAgMiwgIDMs ICAwLCAxfTsKLSsgIHNodWZmbGVJbnQ4eDE2KGxhbmVzLCBzcmMsIHNyYywgZGVzdCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJldmVyc2VJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGNvbnN0IHVpbnQ4X3QgbGFuZXNbXSA9IHsxMiwg MTMsIDE0LCAxNSwgOCwgOSwgMTAsIDExLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQs ICA1LCAgNiwgIDcsICAwLCAxLCAyLCAgM307Ci0rICBzaHVmZmxlSW50OHgxNihsYW5lcywgc3Jj LCBzcmMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnNlSW50NjR4 MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194eHBlcm1k aShkZXN0LCBzcmMsIHNyYywgMik7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN3aXp6 bGVJbnQ4eDE2UmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgc3dpenpsZUludDh4MTYobGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSsvLyBl eHRNdWx7TG93LEhpZ2h9SW50ezh4MTYsMTZ4OH0gdXNlIFBPV0VSOCsgd2lkZW5pbmcgbXVsdGlw bGllcwotKy8vICh2bXVse2Usb317cyx1fXtiLGh9KSBwbHVzIGEgaGFsZndvcmQvd29yZCBtZXJn ZSB0byBtYXAgQkUtaW5kZXhlZAotKy8vIGV2ZW4vb2RkIHByb2R1Y3RzIGludG8gV2FzbSBsYW5l IG9yZGVyIG9uIFBQQzY0IExFLgotKy8vCi0rLy8gTGFuZSBtYXBwaW5nOgotKy8vICAgRm9yIExv dyAoV2FzbSBsYW5lcyBmcm9tIExFIGJ5dGVzL0hXIDAuLk4vMi0xID0gQkUgMTUuLk4vMik6Ci0r Ly8gICAgIHZtcmdse2gsd30oZXZlbl9wcm9kdWN0cywgb2RkX3Byb2R1Y3RzKSBwbGFjZXMgdGhl IHJpZ2h0IHByb2R1Y3RzCi0rLy8gICAgIGF0IEJFIHJlc3VsdCBpbmRpY2VzLCB3aGljaCBvbiBM RSBtYXAgdG8gV2FzbSBsYW5lcyAwLi5OLzItMS4KLSsvLyAgIEZvciBIaWdoIChXYXNtIGxhbmVz IGZyb20gTEUgaW5kaWNlcyBOLzIuLk4tMSA9IEJFIE4vMi0xLi4wKToKLSsvLyAgICAgdm1yZ2h7 aCx3fSB0YWtlcyB0aGUgdXBwZXItaGFsZiBCRSBpbmRpY2VzIGluc3RlYWQuCi0rLy8KLSsvLyBB bGlhc2luZyBzYWZldHk6IHZtdWwqIHJlYWRzIGJvdGggb3BlcmFuZHMgYmVmb3JlIHdyaXRpbmcs IHNvCi0rLy8gYGRlc3QgPSB2bXVsbyogbGhzLCByaHNgIGlzIHNhZmUgZXZlbiB3aGVuIGRlc3Qg YWxpYXNlcyBsaHMvcmhzLgotKy8vIFdlIHVzZSBvbmUgc2NyYXRjaCBmb3IgdGhlIGV2ZW4tcHJv ZHVjdCBoYWxmIGJlY2F1c2Ugdm1yZ2x7aCx3fQotKy8vIHJlYWRzIGRlc3QgYWZ0ZXIgdGhlIG9k ZCBtdWx0aXBseS4KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRNdWxMb3dJbnQ4eDE2KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGluZygpICYg MzEsIHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBkID0gZGVzdC5lbmNvZGlu ZygpICYgMzEsIHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKLSsgIGFzX3ZtdWxlc2Iocywg bCwgcik7Ci0rICBhc192bXVsb3NiKGQsIGwsIHIpOwotKyAgYXNfdm1yZ2xoKGQsIHMsIGQpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRNdWxIaWdoSW50OHgxNihGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3Bl IHNjcmF0Y2goKnRoaXMpOwotKyAgdWludDhfdCBsID0gbGhzLmVuY29kaW5nKCkgJiAzMSwgciA9 IHJocy5lbmNvZGluZygpICYgMzE7Ci0rICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5nKCkgJiAz MSwgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOwotKyAgYXNfdm11bGVzYihzLCBsLCByKTsK LSsgIGFzX3ZtdWxvc2IoZCwgbCwgcik7Ci0rICBhc192bXJnaGgoZCwgcywgZCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0TXVsTG93SW50OHgxNihGbG9hdFJlZ2lz dGVyIGxocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBz Y3JhdGNoKCp0aGlzKTsKLSsgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGluZygpICYgMzEsIHIgPSBy aHMuZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBkID0gZGVzdC5lbmNvZGluZygpICYgMzEs IHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKLSsgIGFzX3ZtdWxldWIocywgbCwgcik7Ci0r ICBhc192bXVsb3ViKGQsIGwsIHIpOwotKyAgYXNfdm1yZ2xoKGQsIHMsIGQpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEV4dE11bEhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0 ZXIgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUg c2NyYXRjaCgqdGhpcyk7Ci0rICB1aW50OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMxLCByID0g cmhzLmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2RpbmcoKSAmIDMx LCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7Ci0rICBhc192bXVsZXViKHMsIGwsIHIpOwot KyAgYXNfdm11bG91YihkLCBsLCByKTsKLSsgIGFzX3ZtcmdoaChkLCBzLCBkKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0TXVsTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgq dGhpcyk7Ci0rICB1aW50OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMxLCByID0gcmhzLmVuY29k aW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzID0gc2Ny YXRjaC5lbmNvZGluZygpICYgMzE7Ci0rICBhc192bXVsZXNoKHMsIGwsIHIpOwotKyAgYXNfdm11 bG9zaChkLCBsLCByKTsKLSsgIGFzX3ZtcmdsdyhkLCBzLCBkKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6ZXh0TXVsSGlnaEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsK LSsgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGluZygpICYgMzEsIHIgPSByaHMuZW5jb2RpbmcoKSAm IDMxOwotKyAgdWludDhfdCBkID0gZGVzdC5lbmNvZGluZygpICYgMzEsIHMgPSBzY3JhdGNoLmVu Y29kaW5nKCkgJiAzMTsKLSsgIGFzX3ZtdWxlc2gocywgbCwgcik7Ci0rICBhc192bXVsb3NoKGQs IGwsIHIpOwotKyAgYXNfdm1yZ2h3KGQsIHMsIGQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjp1bnNpZ25lZEV4dE11bExvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0r ICB1aW50OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMxLCByID0gcmhzLmVuY29kaW5nKCkgJiAz MTsKLSsgIHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzID0gc2NyYXRjaC5lbmNv ZGluZygpICYgMzE7Ci0rICBhc192bXVsZXVoKHMsIGwsIHIpOwotKyAgYXNfdm11bG91aChkLCBs LCByKTsKLSsgIGFzX3ZtcmdsdyhkLCBzLCBkKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6dW5zaWduZWRFeHRNdWxIaWdoSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwot KyAgdWludDhfdCBsID0gbGhzLmVuY29kaW5nKCkgJiAzMSwgciA9IHJocy5lbmNvZGluZygpICYg MzE7Ci0rICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5nKCkgJiAzMSwgcyA9IHNjcmF0Y2guZW5j b2RpbmcoKSAmIDMxOwotKyAgYXNfdm11bGV1aChzLCBsLCByKTsKLSsgIGFzX3ZtdWxvdWgoZCwg bCwgcik7Ci0rICBhc192bXJnaHcoZCwgcywgZCk7Ci0rfQotKwotKy8vIEV4dE11bHtMb3csSGln aH1JbnQzMng0IHVzZSB2bXVse2Usb317cyx1fXcgKFBPV0VSOCspIHBsdXMgeHhwZXJtZGkKLSsv LyB0byBjb21iaW5lIHRoZSB0d28gaTY0IHBhcnRpYWwgcHJvZHVjdHMgaW50byBXYXNtIGxhbmUg b3JkZXIgb24gUFBDNjQKLSsvLyBMRS4geHhwZXJtZGkgYWNjZXB0cyB0aGUgZnVsbCA2LWJpdCBW U1IgZW5jb2Rpbmcgc28gaXQgd29ya3MgZGlyZWN0bHkKLSsvLyBvbiBTaW1kMTI4IHJlZ3MgKGVu Y29kaW5nIDMyLTYzKSB3aXRob3V0IGFueSBWUiBzdGFnaW5nLgotKy8vCi0rLy8gQWxpYXNpbmcg c2FmZTogYm90aCB2bXVsKiByZWFkcyBjb21wbGV0ZSBiZWZvcmUgdGhlIHNlY29uZCBvbmUgd3Jp dGVzCi0rLy8gZGVzdCwgYW5kIHh4cGVybWRpIHJlYWRzIGJvdGggaW5wdXRzIGJlZm9yZSB3cml0 aW5nLgotKwotK3N0YXRpYyB2b2lkIEVtaXRFeHRNdWxJbnQzMng0KAotKyAgICBNYWNyb0Fzc2Vt YmxlciYgbWFzbSwgRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICBG bG9hdFJlZ2lzdGVyIGRlc3QsIHZvaWQgKCptdWxFdmVuKShBc3NlbWJsZXImLCB1aW50OF90LCB1 aW50OF90LCB1aW50OF90KSwKLSsgICAgdm9pZCAoKm11bE9kZCkoQXNzZW1ibGVyJiwgdWludDhf dCwgdWludDhfdCwgdWludDhfdCksIHVpbnQ4X3QgZG0pIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2Nv cGUgc2NyYXRjaChtYXNtKTsKLSsgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGluZygpICYgMzE7Ci0r ICB1aW50OF90IHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBkID0gZGVzdC5l bmNvZGluZygpICYgMzE7Ci0rICB1aW50OF90IHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsK LSsgIG11bEV2ZW4oc3RhdGljX2Nhc3Q8QXNzZW1ibGVyJj4obWFzbSksIHMsIGwsIHIpOwotKyAg bXVsT2RkKHN0YXRpY19jYXN0PEFzc2VtYmxlciY+KG1hc20pLCBkLCBsLCByKTsKLSsgIG1hc20u YXNfeHhwZXJtZGkoZGVzdCwgc2NyYXRjaCwgZGVzdCwgZG0pOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpleHRNdWxMb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgewotKyAgRW1pdEV4dE11bEludDMyeDQoCi0rICAgICAgKnRoaXMsIGxocywg cmhzLCBkZXN0LAotKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90IHgs IHVpbnQ4X3QgeSkgewotKyAgICAgICAgYS5hc192bXVsZXN3KHQsIHgsIHkpOwotKyAgICAgIH0s Ci0rICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgeCwgdWludDhfdCB5 KSB7Ci0rICAgICAgICBhLmFzX3ZtdWxvc3codCwgeCwgeSk7Ci0rICAgICAgfSwKLSsgICAgICAz KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0TXVsSGlnaEludDMyeDQoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdEV4dE11bEludDMy eDQoCi0rICAgICAgKnRoaXMsIGxocywgcmhzLCBkZXN0LAotKyAgICAgIFtdKEFzc2VtYmxlciYg YSwgdWludDhfdCB0LCB1aW50OF90IHgsIHVpbnQ4X3QgeSkgewotKyAgICAgICAgYS5hc192bXVs ZXN3KHQsIHgsIHkpOwotKyAgICAgIH0sCi0rICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90 IHQsIHVpbnQ4X3QgeCwgdWludDhfdCB5KSB7Ci0rICAgICAgICBhLmFzX3ZtdWxvc3codCwgeCwg eSk7Ci0rICAgICAgfSwKLSsgICAgICAwKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 dW5zaWduZWRFeHRNdWxMb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7Ci0rICBFbWl0RXh0TXVsSW50MzJ4NCgKLSsgICAgICAqdGhpcywgbGhzLCByaHMs IGRlc3QsCi0rICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgeCwgdWlu dDhfdCB5KSB7Ci0rICAgICAgICBhLmFzX3ZtdWxldXcodCwgeCwgeSk7Ci0rICAgICAgfSwKLSsg ICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwgdWludDhfdCB4LCB1aW50OF90IHkpIHsK LSsgICAgICAgIGEuYXNfdm11bG91dyh0LCB4LCB5KTsKLSsgICAgICB9LAotKyAgICAgIDMpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEV4dE11bEhpZ2hJbnQzMng0KEZs b2F0UmVnaXN0ZXIgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRFeHRNdWxJ bnQzMng0KAotKyAgICAgICp0aGlzLCBsaHMsIHJocywgZGVzdCwKLSsgICAgICBbXShBc3NlbWJs ZXImIGEsIHVpbnQ4X3QgdCwgdWludDhfdCB4LCB1aW50OF90IHkpIHsKLSsgICAgICAgIGEuYXNf dm11bGV1dyh0LCB4LCB5KTsKLSsgICAgICB9LAotKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWlu dDhfdCB0LCB1aW50OF90IHgsIHVpbnQ4X3QgeSkgewotKyAgICAgICAgYS5hc192bXVsb3V3KHQs IHgsIHkpOwotKyAgICAgIH0sCi0rICAgICAgMCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnExNU11bHJTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKLSsgIC8vIFExNSBtdWx0aXBseS1yb3VuZC1zYXR1cmF0ZTogdm1ocmFkZHNocyhh LCBiLCB6ZXJvKSBjb21wdXRlcwotKyAgLy8gc2F0dXJhdGUoKGFbaV0qYltpXSArIDB4NDAwMCkg Pj4gMTUpIGZvciBlYWNoIGhhbGZ3b3JkLgotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNo KCp0aGlzKTsKLSsgIFplcm9TaW1kMTI4KCp0aGlzLCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhUZXJu YXJ5KAotKyAgICAgICp0aGlzLAotKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQs IHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwgdWludDhfdCB2cmMpIHsKLSsgICAgICAgIGEuYXNf dm1ocmFkZHNocyh2cnQsIHZyYSwgdnJiLCB2cmMpOwotKyAgICAgIH0sCi0rICAgICAgbGhzLCBy aHMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSsvLyBuZWcgPSAwIC0gc3JjLiBVc2UgU2NyYXRj aFNpbWQxMjhSZWcgKD0gVlIwLCBub24tYWxsb2NhdGFibGUpIGFzIHRoZQotKy8vIHplcm8gc291 cmNlIHNvIHRoZSByZWdpc3RlciBhbGxvY2F0b3Igc2VlcyBubyBjbG9iYmVyZWQgVlJzLgotKy8v IDIgaW5zbnM6IHh4bHhvciBzY3JhdGNoICsgdnN1YnVYbSBkZXN0LCBzY3JhdGNoLCBzcmMuIHZu ZWd7YixofQotKy8vIGRvZXNuJ3QgZXhpc3QgaW4gYW55IFBPV0VSIElTQSwgaGVuY2UgdGhlIHN1 YnRyYWN0LgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5lZ0ludDh4MTYoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNo KCp0aGlzKTsKLSsgIFplcm9TaW1kMTI4KCp0aGlzLCBzY3JhdGNoKTsKLSsgIGFzX3ZzdWJ1Ym0o ZGVzdC5lbmNvZGluZygpICYgMzEsIHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxLAotKyAgICAgICAg ICAgICBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 bmVnSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBT Y3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgWmVyb1NpbWQxMjgoKnRoaXMs IHNjcmF0Y2gpOwotKyAgYXNfdnN1YnVobShkZXN0LmVuY29kaW5nKCkgJiAzMSwgc2NyYXRjaC5l bmNvZGluZygpICYgMzEsCi0rICAgICAgICAgICAgIHNyYy5lbmNvZGluZygpICYgMzEpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWdJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICBFbWl0Vm14 VW5hcnkoCi0rICAgICAgICAqdGhpcywKLSsgICAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhf dCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNfdm5lZ3codnJ0LCB2cmIpOyB9LAotKyAgICAgICAg c3JjLCBkZXN0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgLy8gUE9XRVI4IGZhbGxiYWNrOiAw IC0gc3JjIHZpYSBTY3JhdGNoU2ltZDEyOFJlZyAoVlIwKS4KLSsgIFNjcmF0Y2hTaW1kMTI4U2Nv cGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBaZXJvU2ltZDEyOCgqdGhpcywgc2NyYXRjaCk7Ci0rICBh c192c3VidXdtKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSwK LSsgICAgICAgICAgICAgc3JjLmVuY29kaW5nKCkgJiAzMSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Om5lZ0ludDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVz dCkgewotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIEVtaXRWbXhVbmFyeSgKLSsgICAgICAg ICp0aGlzLAotKyAgICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWludDhfdCB2 cmIpIHsgYS5hc192bmVnZCh2cnQsIHZyYik7IH0sCi0rICAgICAgICBzcmMsIGRlc3QpOwotKyAg ICByZXR1cm47Ci0rICB9Ci0rICAvLyBQT1dFUjggZmFsbGJhY2s6IDAgLSBzcmMgdmlhIFNjcmF0 Y2hTaW1kMTI4UmVnIChWUjApLgotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlz KTsKLSsgIFplcm9TaW1kMTI4KCp0aGlzLCBzY3JhdGNoKTsKLSsgIGFzX3ZzdWJ1ZG0oZGVzdC5l bmNvZGluZygpICYgMzEsIHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxLAotKyAgICAgICAgICAgICBz cmMuZW5jb2RpbmcoKSAmIDMxKTsKLSt9Ci0rI3VuZGVmIERFRl9ORUdfSU5UTnhNX1ZTVUIKLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEFkZFNhdEludDh4MTYoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YWRkdWJzKSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEFkZFNhdEludDE2eDgoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YWRkdWhzKSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFN1YlNhdEludDh4MTYoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3VidWJzKSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFN1YlNhdEludDE2eDgoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3VidWhzKSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZE1pbkludDh4MTYoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZN WF9CSU5BUllfV1JBUFBFUih2bWludWIpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkTWluSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFS WV9XUkFQUEVSKHZtaW51aCksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6dW5zaWduZWRNaW5JbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQ RVIodm1pbnV3KSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy Ojp1bnNpZ25lZE1heEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bWF4 dWIpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2ln bmVkTWF4SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg ewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtYXh1aCksIGxo cywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRNYXhJ bnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBF bWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1heHV3KSwgbGhzLCByaHMs IGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEF2ZXJhZ2VJbnQ4 eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5h cnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YXZndWIpLCBsaHMsIHJocywgZGVzdCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkQXZlcmFnZUludDE2eDgoRmxvYXRS ZWdpc3RlciBsaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywg Vk1YX0JJTkFSWV9XUkFQUEVSKHZhdmd1aCksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0rLy8g YWJzKHgpID0gbWF4KHgsIC14KSBwZXIgc2lnbmVkIGxhbmUuIE5vIHZhYnN7YixoLHcsZH0gZXhp c3RzIGluIGFueSBJU0EuCi0rLy8gdm5lZ3t3LGR9IGV4aXN0cyBvbmx5IG9uIFBPV0VSOS4KLSsv LyBXZSB1c2UgU2NyYXRjaFNpbWQxMjhSZWcgYXMgYSB0ZW1wIGZvciAtc3JjLiBPcmRlciBtYXR0 ZXJzOiBjb21wdXRlCi0rLy8gLXNyYyBpbnRvIHRlbXAgZmlyc3QgKHJlYWRzIHNyYyksIHRoZW4g bWF4KHNyYywgdGVtcCkgaW50byBkZXN0IChyZWFkcwotKy8vIHNyYyArIHRlbXAsIHdyaXRlcyBk ZXN0KS4gU2FmZSBldmVuIHdoZW4gZGVzdCA9PSBzcmMgYmVjYXVzZSBzcmMgaXMKLSsvLyByZWFk IGJlZm9yZSBkZXN0IGlzIHdyaXR0ZW4gYnkgdm1heHNYLgotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmFic0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewot KyAgU2NyYXRjaFNpbWQxMjhTY29wZSB0bXAoKnRoaXMpOwotKyAgYXNfeHhseG9yKHRtcCwgdG1w LCB0bXApOyAgLy8gdG1wID0gMAotKyAgYXNfdnN1YnVibSh0bXAuZW5jb2RpbmcoKSAmIDMxLCB0 bXAuZW5jb2RpbmcoKSAmIDMxLAotKyAgICAgICAgICAgICBzcmMuZW5jb2RpbmcoKSAmIDMxKTsg IC8vIHRtcCA9IC1zcmMKLSsgIGFzX3ZtYXhzYihkZXN0LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVu Y29kaW5nKCkgJiAzMSwKLSsgICAgICAgICAgICB0bXAuZW5jb2RpbmcoKSAmIDMxKTsgIC8vIGRl c3QgPSBtYXgoc3JjLCAtc3JjKQotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphYnNJbnQx Nng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hT aW1kMTI4U2NvcGUgdG1wKCp0aGlzKTsKLSsgIGFzX3h4bHhvcih0bXAsIHRtcCwgdG1wKTsKLSsg IGFzX3ZzdWJ1aG0odG1wLmVuY29kaW5nKCkgJiAzMSwgdG1wLmVuY29kaW5nKCkgJiAzMSwgc3Jj LmVuY29kaW5nKCkgJiAzMSk7Ci0rICBhc192bWF4c2goZGVzdC5lbmNvZGluZygpICYgMzEsIHNy Yy5lbmNvZGluZygpICYgMzEsIHRtcC5lbmNvZGluZygpICYgMzEpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjphYnNJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgdG1wKCp0aGlzKTsKLSsgIGlmIChIYXNQ T1dFUjkoKSkgewotKyAgICBhc192bmVndyh0bXAuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2Rp bmcoKSAmIDMxKTsgIC8vIHRtcCA9IC1zcmMKLSsgIH0gZWxzZSB7Ci0rICAgIGFzX3h4bHhvcih0 bXAsIHRtcCwgdG1wKTsKLSsgICAgYXNfdnN1YnV3bSh0bXAuZW5jb2RpbmcoKSAmIDMxLCB0bXAu ZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKLSsgIH0KLSsgIGFzX3ZtYXhz dyhkZXN0LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSwgdG1wLmVuY29kaW5n KCkgJiAzMSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFic0ludDY0eDIoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSB0bXAoKnRoaXMpOwotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIGFzX3ZuZWdkKHRtcC5l bmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOyAgLy8gdG1wID0gLXNyYwotKyAg fSBlbHNlIHsKLSsgICAgYXNfeHhseG9yKHRtcCwgdG1wLCB0bXApOwotKyAgICBhc192c3VidWRt KHRtcC5lbmNvZGluZygpICYgMzEsIHRtcC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygp ICYgMzEpOwotKyAgfQotKyAgYXNfdm1heHNkKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5j b2RpbmcoKSAmIDMxLCB0bXAuZW5jb2RpbmcoKSAmIDMxKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bGVmdFNoaWZ0SW50OHgxNihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBTcGxhdElt bTgoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9C SU5BUllfV1JBUFBFUih2c2xiKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6bGVmdFNoaWZ0SW50MTZ4OChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3Rl ciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBT cGxhdEltbTE2KCp0aGlzLCBjb3VudCwgc2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlz LCBWTVhfQklOQVJZX1dSQVBQRVIodnNsaCksIHNyYywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxlZnRTaGlmdEludDMyeDQoSW1tMzIgY291bnQsIEZsb2F0 UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMp OwotKyAgU3BsYXRJbW0zMigqdGhpcywgY291bnQsIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFy eSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzbHcpLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsZWZ0U2hpZnRJbnQ2NHgyKEltbTMyIGNvdW50 LCBGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNo KCp0aGlzKTsKLSsgIFNwbGF0SW1tMzIoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKLSsgIEVtaXRW bXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2xkKSwgc3JjLCBzY3JhdGNoLCBk ZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmlnaHRTaGlmdEludDh4MTYoSW1t MzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSBzY3JhdGNoKCp0aGlzKTsKLSsgIFNwbGF0SW1tOCgqdGhpcywgY291bnQsIHNjcmF0Y2gpOwot KyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmFiKSwgc3JjLCBz Y3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRSaWdo dFNoaWZ0SW50OHgxNihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBTcGxhdEltbTgo KnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5B UllfV1JBUFBFUih2c3JiKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6cmlnaHRTaGlmdEludDE2eDgoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIg c3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIFNw bGF0SW1tMTYoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMs IFZNWF9CSU5BUllfV1JBUFBFUih2c3JhaCksIHNyYywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkUmlnaHRTaGlmdEludDE2eDgoSW1tMzIgY291 bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNj b3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgU3BsYXRJbW0xNigqdGhpcywgY291bnQsIHNjcmF0Y2gp OwotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmgpLCBzcmMs IHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0 SW50MzJ4NChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNo U2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgU3BsYXRJbW0zMigqdGhpcywgY291bnQs IHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZz cmF3KSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 dW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0r ICBTcGxhdEltbTMyKCp0aGlzLCBjb3VudCwgc2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0 aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNydyksIHNyYywgc2NyYXRjaCwgZGVzdCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJpZ2h0U2hpZnRJbnQ2NHgyKEltbTMyIGNvdW50LCBG bG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgq dGhpcyk7Ci0rICBTcGxhdEltbTMyKCp0aGlzLCBjb3VudCwgc2NyYXRjaCk7Ci0rICBFbWl0Vm14 QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyYWQpLCBzcmMsIHNjcmF0Y2gsIGRl c3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFJpZ2h0U2hpZnRJbnQ2 NHgyKEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2Ny YXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIFNwbGF0SW1tMzIoKnRoaXMsIGNv dW50LCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBF Uih2c3JkKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6Yml0d2lzZUFuZFNpbWQxMjgoRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Ci0rICBhc194 eGxhbmQobGhzRGVzdCwgbGhzRGVzdCwgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6Yml0d2lzZUFuZFNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgYXNfeHhsYW5kKGRlc3QsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6Yml0d2lzZU9yU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgewot KyAgYXNfeHhsb3IobGhzRGVzdCwgbGhzRGVzdCwgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6Yml0d2lzZU9yU2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIGFzX3h4bG9yKGRlc3QsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6Yml0d2lzZVhvclNpbWQxMjgoRmxvYXRSZWdpc3RlciByaHMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0 KSB7Ci0rICBhc194eGx4b3IobGhzRGVzdCwgbGhzRGVzdCwgcmhzKTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6Yml0d2lzZVhvclNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHhseG9yKGRlc3QsIGxocywgcmhzKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZU5vdFNpbWQxMjgoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHhsbm9yKGRlc3QsIHNyYywgc3JjKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZU5vdEFuZFNpbWQxMjgoRmxvYXRS ZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Ci0rICAvLyBub3RhbmQobGhzLCByaHMpID0gfmxocyAm IHJocyA9IHh4bGFuZGMocmhzLCBsaHMpCi0rICBhc194eGxhbmRjKGxoc0Rlc3QsIHJocywgbGhz RGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFueVRydWVTaW1kMTI4KEZsb2F0 UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyB2Y21wZXF1ZC4gKFBPV0VSOCsp IGFnYWluc3QgemVybyBzZXRzIENSNjoKLSsgIC8vICAgLSBDUjYuTFQgKEJFIGJpdCAyNCkgPSAx IGlmZiB0aGUgcGVyLWxhbmUgcmVzdWx0IGlzIGFsbC0xcywgaS5lLgotKyAgLy8gICAgIGV2ZXJ5 IGRvdWJsZXdvcmQgb2Ygc3JjIGVxdWFscyB6ZXJvICg9IHNyYyBpcyBhbGwtemVybykuCi0rICAv LyAgIC0gQ1I2LkVRIChCRSBiaXQgMjYpID0gMSBpZmYgbm8gbGFuZSB3YXMgZXF1YWwgKD0gYW55 IG5vbnplcm8pLgotKyAgLy8gYW55LXRydWUgPSAhYWxsLXplcm8gPSAhQ1I2LkxULgotKyAgU2Ny YXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIHVpbnQ4X3QgcyA9IHNjcmF0Y2gu ZW5jb2RpbmcoKSAmIDMxOwotKyAgYXNfeHhseG9yKHNjcmF0Y2gsIHNjcmF0Y2gsIHNjcmF0Y2gp OwotKyAgYXNfdmNtcGVxdWRfcmMocywgc3JjLmVuY29kaW5nKCkgJiAzMSwgcyk7Ci0rICBpZiAo SGFzUE9XRVIxMCgpKSB7Ci0rICAgIC8vIHNldGJjciBtYXRlcmlhbGlzZXMgKENSW0JJXSA9PSAw KSA/IDEgOiAwIGRpcmVjdGx5IGludG8gZGVzdC4KLSsgICAgLy8gZGVzdCA9IChDUjYuTFQgPT0g MCkgPSAibm90IGFsbC16ZXJvIiA9IGFueS10cnVlLgotKyAgICBhc19zZXRiY3IoZGVzdCwgQXNz ZW1ibGVyOjpMZXNzVGhhbiwgY3I2KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgYXNfbWZvY3Jm KGRlc3QsIGNyNik7Ci0rICAvLyBDUjYuTFQgaXMgYXQgQkUgYml0IDI0IG9mIHRoZSBHUFIuIHJs d2lubSBzaD0yNSByb3RhdGVzIGxlZnQgMjU6Ci0rICAvLyBiaXQgKDI0IC0gMjUpIG1vZCAzMiA9 IDMxIChMU0IpLiBNYXNrIDMxLi4zMSBrZWVwcyBqdXN0IGJpdCAzMS4KLSsgIGFzX3Jsd2lubShk ZXN0LCBkZXN0LCAyNSwgMzEsIDMxKTsKLSsgIGFzX3hvcmkoZGVzdCwgZGVzdCwgMSk7Ci0rfQot KwotKy8vIHZjbXBlcXVYLiBhZ2FpbnN0IHplcm8gc2V0cyBDUjY6IExUID0gYWxsIGlucHV0IGxh bmVzIHdlcmUgemVybywKLSsvLyBFUSA9IG5vIGlucHV0IGxhbmUgd2FzIHplcm8uIFRoZSBsYXR0 ZXIgaXMgZXhhY3RseSAiYWxsLXRydWUiLgotKy8vIG1mb2NyZiBwbGFjZXMgQ1I2IGF0IGJpdHMg MjQtMjcgb2YgdGhlIGxvdyAzMi1iaXQgaGFsZiAoTFQ9MjQsIEVRPTI2KS4KLSsvLyBybHdpbm0g cmQscmQsMjcsMzEsMzEgZXh0cmFjdHMgYml0IDI2IChDUjYuRVEpIHJpZ2h0LWp1c3RpZmllZC4K LSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVm14Q21wUmNGbj4KLStzdGF0aWMgdm9pZCBFbWl0QWxsVHJ1 ZUludChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwgVm14Q21wUmNGbiB2bXhDbXBSYykgewot KyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKG1hc20pOwotKyAgWmVyb1NpbWQxMjgobWFz bSwgc2NyYXRjaCk7Ci0rICB1aW50OF90IHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKLSsg IHZteENtcFJjKHN0YXRpY19jYXN0PEFzc2VtYmxlciY+KG1hc20pLCBzLCBzcmMuZW5jb2Rpbmco KSAmIDMxLCBzKTsKLSsgIGlmIChIYXNQT1dFUjEwKCkpIHsKLSsgICAgLy8gc2V0YmMgbWF0ZXJp YWxpc2VzIENSNi5FUSBkaXJlY3RseSBpbnRvIGRlc3QgKDEgaW5zbiB2cyB0aGUgMi1pbnNuCi0r ICAgIC8vIG1mb2NyZiArIHJsd2lubSBleHRyYWN0KS4gQWxyZWFkeSB3aXJlZCBpbiBtYV9jbXBf c2V0LgotKyAgICBtYXNtLmFzX3NldGJjKGRlc3QsIEFzc2VtYmxlcjo6RXF1YWwsIGNyNik7Ci0r ICAgIHJldHVybjsKLSsgIH0KLSsgIG1hc20uYXNfbWZvY3JmKGRlc3QsIGNyNik7Ci0rICBtYXNt LmFzX3Jsd2lubShkZXN0LCBkZXN0LCAyNywgMzEsIDMxKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YWxsVHJ1ZUludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIEVtaXRBbGxUcnVlSW50KCp0aGlzLCBzcmMsIGRlc3QsCi0rICAgICAgICAgICAgICAg ICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwgdWludDhfdCByLCB1aW50OF90IGIpIHsKLSsg ICAgICAgICAgICAgICAgICAgYS5hc192Y21wZXF1Yl9yYyh0LCByLCBiKTsKLSsgICAgICAgICAg ICAgICAgIH0pOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphbGxUcnVlSW50MTZ4OChG bG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdEFsbFRydWVJbnQoKnRo aXMsIHNyYywgZGVzdCwKLSsgICAgICAgICAgICAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhf dCB0LCB1aW50OF90IHIsIHVpbnQ4X3QgYikgewotKyAgICAgICAgICAgICAgICAgICBhLmFzX3Zj bXBlcXVoX3JjKHQsIHIsIGIpOwotKyAgICAgICAgICAgICAgICAgfSk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmFsbFRydWVJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICBFbWl0QWxsVHJ1ZUludCgqdGhpcywgc3JjLCBkZXN0LAotKyAgICAgICAg ICAgICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgciwgdWludDhfdCBi KSB7Ci0rICAgICAgICAgICAgICAgICAgIGEuYXNfdmNtcGVxdXdfcmModCwgciwgYik7Ci0rICAg ICAgICAgICAgICAgICB9KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWxsVHJ1ZUlu dDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRBbGxUcnVl SW50KCp0aGlzLCBzcmMsIGRlc3QsCi0rICAgICAgICAgICAgICAgICBbXShBc3NlbWJsZXImIGEs IHVpbnQ4X3QgdCwgdWludDhfdCByLCB1aW50OF90IGIpIHsKLSsgICAgICAgICAgICAgICAgICAg YS5hc192Y21wZXF1ZF9yYyh0LCByLCBiKTsKLSsgICAgICAgICAgICAgICAgIH0pOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlSW50OHgxNihBc3NlbWJsZXI6OkNvbmRpdGlv biBjb25kLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKLSsgIGNvbXBhcmVJbnQ4eDE2KGNvbmQs IGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNv bXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgewotKyAgaWYgKGNvbmQgPT0gQXNzZW1ibGVyOjpOb3RFcXVhbCAmJiBIYXNQT1dFUjkoKSkg ewotKyAgICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodmNtcG5lYiks IGxocywgcmhzLCBkZXN0KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgRW1pdFZteENvbXBhcmUo KnRoaXMsIGNvbmQsIGxocywgcmhzLCBkZXN0LCBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGVxdWIp LAotKyAgICAgICAgICAgICAgICAgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBndHNiKSwgVk1YX0JJ TkFSWV9XUkFQUEVSKHZjbXBndHViKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNv bXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhz RGVzdCkgewotKyAgY29tcGFyZUludDE2eDgoY29uZCwgbGhzRGVzdCwgcmhzLCBsaHNEZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpD b25kaXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBpZiAoY29uZCA9PSBBc3Nl bWJsZXI6Ok5vdEVxdWFsICYmIEhhc1BPV0VSOSgpKSB7Ci0rICAgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wbmVoKSwgbGhzLCByaHMsIGRlc3QpOwotKyAgICBy ZXR1cm47Ci0rICB9Ci0rICBFbWl0Vm14Q29tcGFyZSgqdGhpcywgY29uZCwgbGhzLCByaHMsIGRl c3QsIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZXF1aCksCi0rICAgICAgICAgICAgICAgICBWTVhf QklOQVJZX1dSQVBQRVIodmNtcGd0c2gpLCBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGd0dWgpKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUludDMyeDQoQXNzZW1ibGVyOjpD b25kaXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Ci0rICBjb21wYXJlSW50MzJ4 NChjb25kLCBsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIGlmIChjb25kID09IEFzc2VtYmxlcjo6Tm90RXF1YWwgJiYgSGFzUE9X RVI5KCkpIHsKLSsgICAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZj bXBuZXcpLCBsaHMsIHJocywgZGVzdCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIEVtaXRWbXhD b21wYXJlKCp0aGlzLCBjb25kLCBsaHMsIHJocywgZGVzdCwgVk1YX0JJTkFSWV9XUkFQUEVSKHZj bXBlcXV3KSwKLSsgICAgICAgICAgICAgICAgIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZ3Rzdyks IFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZ3R1dykpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjb21wYXJlRmxvYXQzMng0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkg ewotKyAgY29tcGFyZUZsb2F0MzJ4NChjb25kLCBsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlRmxvYXQzMng0KEFzc2VtYmxlcjo6Q29u ZGl0aW9uIGNvbmQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHN3aXRjaCAoY29uZCkg ewotKyAgICBjYXNlIEFzc2VtYmxlcjo6RXF1YWw6Ci0rICAgICAgYXNfeHZjbXBlcXNwKGRlc3Qs IGxocywgcmhzKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBc3NlbWJsZXI6Ok5vdEVxdWFs OgotKyAgICAgIGFzX3h2Y21wZXFzcChkZXN0LCBsaHMsIHJocyk7Ci0rICAgICAgYml0d2lzZU5v dFNpbWQxMjgoZGVzdCwgZGVzdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVy OjpHcmVhdGVyVGhhbjoKLSsgICAgICBhc194dmNtcGd0c3AoZGVzdCwgbGhzLCByaHMpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIEFzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsOgotKyAg ICAgIGFzX3h2Y21wZ2VzcChkZXN0LCBsaHMsIHJocyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2UgQXNzZW1ibGVyOjpMZXNzVGhhbjoKLSsgICAgICBhc194dmNtcGd0c3AoZGVzdCwgcmhzLCBs aHMpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEFzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFs OgotKyAgICAgIGFzX3h2Y21wZ2VzcChkZXN0LCByaHMsIGxocyk7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIFNJTUQgZmxvYXQgY29u ZGl0aW9uIik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVGbG9h dDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Ci0rICBjb21wYXJlRmxv YXQ2NHgyKGNvbmQsIGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmNvbXBhcmVGbG9hdDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBG bG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgc3dpdGNoIChjb25kKSB7Ci0rICAgIGNhc2UgQXNz ZW1ibGVyOjpFcXVhbDoKLSsgICAgICBhc194dmNtcGVxZHAoZGVzdCwgbGhzLCByaHMpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIEFzc2VtYmxlcjo6Tm90RXF1YWw6Ci0rICAgICAgYXNfeHZj bXBlcWRwKGRlc3QsIGxocywgcmhzKTsKLSsgICAgICBiaXR3aXNlTm90U2ltZDEyOChkZXN0LCBk ZXN0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuOgot KyAgICAgIGFzX3h2Y21wZ3RkcChkZXN0LCBsaHMsIHJocyk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGNhc2UgQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWw6Ci0rICAgICAgYXNfeHZjbXBnZWRw KGRlc3QsIGxocywgcmhzKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBc3NlbWJsZXI6Okxl c3NUaGFuOgotKyAgICAgIGFzX3h2Y21wZ3RkcChkZXN0LCByaHMsIGxocyk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGNhc2UgQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWw6Ci0rICAgICAgYXNfeHZj bXBnZWRwKGRlc3QsIHJocywgbGhzKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsg ICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgU0lNRCBmbG9hdCBjb25kaXRpb24iKTsKLSsgIH0K LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2bmVnc3AoZGVzdCwgc3JjKTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2bmVnZHAoZGVzdCwgc3JjKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2YWJzc3AoZGVzdCwgc3JjKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2YWJzZHAoZGVzdCwgc3JjKTsKLSt9Ci0rCi0rLy8g UGVyIHNwZWM6Ci0rLy8gICByZXN1bHRba10gPSAoc3x1KWV4dF93aWRlbihzcmNbMmtdKSArIChz fHUpZXh0X3dpZGVuKHNyY1syaysxXSkKLSsvLyBQT1dFUiBsYWNrcyBwYWlyd2lzZSBtdWx0aXBs eS1hZGQuIEVtdWxhdGUgdmlhIHZtdWxYe2Usb31YKHNyYywgc3BsYXQoMSkpCi0rLy8gKyB2YWRk LiBCb3RoIHZtdWxzIG5lZWQgYHNyY2AgQU5EIGBzcGxhdCgxKWAgYXZhaWxhYmxlIHNpbXVsdGFu ZW91c2x5LgotKy8vCi0rLy8gQXZhaWxhYmxlIFNJTUQgc2xvdHMgd2l0aG91dCBpbnZvbHZpbmcg TG93ZXJpbmc6Ci0rLy8gICAtIFNjcmF0Y2hTaW1kMTI4UmVnIChWUjAsIG5vbi1hbGxvY2F0YWJs ZSkKLSsvLyAgIC0gZGVzdCwgc3JjCi0rLy8gVGhhdCdzIDMgcmVncyB3aGVuIGRlc3QgIT0gc3Jj IOKAlCBlbm91Z2ggZm9yIHtzcmMsIHNwbGF0LCBpbnRlcm1lZGlhdGV9LgotKy8vIFdoZW4gZGVz dCA9PSBzcmMgd2Ugc3Rhc2ggc3JjIGFuZCB0aGUgZXZlbiBwcm9kdWN0IHRvIHRoZSAyODgtYnl0 ZSBFTEZ2MgotKy8vIHJlZCB6b25lIGFuZCByZWJ1aWxkIHNwbGF0KDEpLgotKy8vCi0rLy8gKEVh cmxpZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGhlbHBlcnMgcm91dGVkIHRocm91Z2ggaGFy ZGNvZGVkCi0rLy8gVlIxL1ZSMi9WUjMgdmlhIHh4bG9yX3ZzciDigJQgZmFzdGVyIGJ1dCBzdG9t cGVkIGFsbG9jYXRvci1tYW5hZ2VkIFZScwotKy8vIGFuZCBzaWxlbnRseSBjb3JydXB0ZWQgYW55 IGxpdmUgd2FzbSB2MTI4IHRoZSBhbGxvY2F0b3IgaGFkIHBsYWNlZAotKy8vIHRoZXJlLiBTY3Jh dGNoU2ltZDEyOFJlZyArIHJlZC16b25lIHN0YXNoIGlzIHRoZSBzYWZlIGNvbnRyYWN0LikKLSsv LyBBbHdheXMtc2FmZSBwYXR0ZXJuOiBzdGFzaCBzcmMgdG8gcmVkIHpvbmUgc28gZGVzdCBjYW4g YmUgZnJlZWx5IG92ZXJ3cml0dGVuLAotKy8vIHN0YXNoIGV2ZW4gdG8gcmVkIHpvbmUgYWZ0ZXIg Zmlyc3Qgdm11bCBzbyB3ZSBjYW4gcmVidWlsZCBzcGxhdCgxKSBmb3IgdGhlCi0rLy8gc2Vjb25k IHZtdWwuIFRoZSBzcGxhdC1vZi0xIGlzIG5vdyBgdnNwbHRpc3tiLGh9YCAoNS1iaXQgc2lnbmVk IGltbWVkaWF0ZQotKy8vIHNwbGF0KSDigJQgMSBpbnNuIHZzIHRoZSAzLWluc24gbW92ZVB0citt dHZzcmQrdnNwbHQgc2VxdWVuY2UgdGhlIHByZXZpb3VzCi0rLy8gcGF0aCB1c2VkLgotKy8vIFBh dHRlcm46IHN0YXNoIHNyYyB0byByZWQgem9uZSBzbG90IDAgc28gZGVzdCBjYW4gYmUgZnJlZWx5 IG92ZXJ3cml0dGVuOwotKy8vIHZtdWwtZXZlbiAoc2lnbmVkL3Vuc2lnbmVkKSBvZiBzcmMgd2l0 aCBzcGxhdCgxKSBwcm9kdWNlcyBzaWduL3plcm8tZXh0ZW5kZWQKLSsvLyBldmVuLWxhbmUgcHJv ZHVjdHMgaW50byBkZXN0OyBzdGFzaCB0aGF0IHRvIHNsb3QgMSBhbmQgcmVidWlsZCBzY3JhdGNo PXNyYwotKy8vIChzbG90IDApIGFuZCBkZXN0PXNwbGF0KDEpOyB2bXVsLW9kZCBwcm9kdWNlcyB0 aGUgb2RkIHByb2R1Y3RzOyByZXN0b3JlCi0rLy8gZXZlbiBmcm9tIHNsb3QgMSBhbmQgcGFpcndp c2UtYWRkLgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4dEFkZFBhaXJ3aXNlSW50OHgxNihGbG9h dFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOwotKyAgdWludDhfdCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7Ci0rICB1aW50 OF90IHNyY0VuYyA9IHNyYy5lbmNvZGluZygpICYgMzE7Ci0rICB1aW50OF90IGRlc3RFbmMgPSBk ZXN0LmVuY29kaW5nKCkgJiAzMTsKLSsgIFJlZFpvbmVTdGFzaFNpbWQxMjgoKnRoaXMsIHNyYywg MCk7Ci0rICBhc192c3BsdGlzYihzLCAxKTsKLSsgIGFzX3ZtdWxlc2IoZGVzdEVuYywgc3JjRW5j LCBzKTsKLSsgIFJlZFpvbmVTdGFzaFNpbWQxMjgoKnRoaXMsIGRlc3QsIDEpOwotKyAgUmVkWm9u ZVJlc3RvcmVTaW1kMTI4KCp0aGlzLCAwLCBzY3JhdGNoKTsKLSsgIGFzX3ZzcGx0aXNiKGRlc3RF bmMsIDEpOwotKyAgYXNfdm11bG9zYihkZXN0RW5jLCBzLCBkZXN0RW5jKTsKLSsgIFJlZFpvbmVS ZXN0b3JlU2ltZDEyOCgqdGhpcywgMSwgc2NyYXRjaCk7Ci0rICBhc192YWRkdWhtKGRlc3RFbmMs IGRlc3RFbmMsIHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEV4dEFk ZFBhaXJ3aXNlSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsg IFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICB1aW50OF90IHMgPSBzY3Jh dGNoLmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3Qgc3JjRW5jID0gc3JjLmVuY29kaW5nKCkg JiAzMTsKLSsgIHVpbnQ4X3QgZGVzdEVuYyA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxOwotKyAgUmVk Wm9uZVN0YXNoU2ltZDEyOCgqdGhpcywgc3JjLCAwKTsKLSsgIGFzX3ZzcGx0aXNiKHMsIDEpOwot KyAgYXNfdm11bGV1YihkZXN0RW5jLCBzcmNFbmMsIHMpOwotKyAgUmVkWm9uZVN0YXNoU2ltZDEy OCgqdGhpcywgZGVzdCwgMSk7Ci0rICBSZWRab25lUmVzdG9yZVNpbWQxMjgoKnRoaXMsIDAsIHNj cmF0Y2gpOwotKyAgYXNfdnNwbHRpc2IoZGVzdEVuYywgMSk7Ci0rICBhc192bXVsb3ViKGRlc3RF bmMsIHMsIGRlc3RFbmMpOwotKyAgUmVkWm9uZVJlc3RvcmVTaW1kMTI4KCp0aGlzLCAxLCBzY3Jh dGNoKTsKLSsgIGFzX3ZhZGR1aG0oZGVzdEVuYywgZGVzdEVuYywgcyk7Ci0rfQotKwotKy8vIHZt c3Vtc2htL3Ztc3VtdWhtIGNvbGxhcHNlIHRoZSBpMTZ4OCDihpIgaTMyeDQgcGFpcndpc2UtYWRk IGludG8gYSBzaW5nbGUKLSsvLyBtdWx0aXBseS1zdW06IFZULmkzMltrXSA9IFZSQS5pMTZbMmtd KlZSQi5pMTZbMmtdICsKLSsvLyBWUkEuaTE2WzJrKzFdKlZSQi5pMTZbMmsrMV0KLSsvLyArIFZS Qy5pMzJba10uIFdpdGggVlJCID0gc3BsYXQoMSkgYW5kIFZSQyA9IDAgdGhpcyBpcyBleGFjdGx5 IHRoZSB3YXNtCi0rLy8gaTMyeDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3tzLHV9IGNvbnRyYWN0 LiAzIGluc25zIHdoZW4gZGVzdCAhPSBzcmM7Ci0rLy8gTFdhc21VbmFyeVNpbWQxMjggdXNlcyB1 c2VSZWdpc3RlckF0U3RhcnQgc28gZGVzdCBtYXkgYWxpYXMgc3JjIOKAlCBpbiB0aGF0Ci0rLy8g Y2FzZSB3ZSBwdXQgc3BsYXQoMSkgaW50byBzY3JhdGNoIChwcmVzZXJ2aW5nIHNyYyBpbiBkZXN0 KSBhbmQgdXNlIGEKLSsvLyByZWQtem9uZSBzbG90IGZvciB0aGUgemVybyBWUkMgb3BlcmFuZC4K LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRBZGRQYWlyd2lzZUludDE2eDgoRmxvYXRSZWdpc3Rl ciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsK LSsgIGlmIChkZXN0ICE9IHNyYykgewotKyAgICBhc194eGx4b3Ioc2NyYXRjaCwgc2NyYXRjaCwg c2NyYXRjaCk7ICAvLyBzY3JhdGNoID0gMCAoVlJDIGFkZGVuZCkKLSsgICAgYXNfdnNwbHRpc2go ZGVzdC5lbmNvZGluZygpICYgMzEsIDEpOyAgLy8gZGVzdCA9IHNwbGF0KDEpIChWUkIgbXVsdGlw bGllcikKLSsgICAgYXNfdm1zdW1zaG0oZGVzdC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGlu ZygpICYgMzEsIGRlc3QuZW5jb2RpbmcoKSAmIDMxLAotKyAgICAgICAgICAgICAgICBzY3JhdGNo LmVuY29kaW5nKCkgJiAzMSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIC8vIGRlc3QgPT0gc3Jj OiBsb2FkIHNwbGF0KDEpIGludG8gc2NyYXRjaCBpbnN0ZWFkLCBzdGFzaCB6ZXJvIHRvIHRoZSBy ZWQKLSsgIC8vIHpvbmUsIHJlc3RvcmUgemVybyBpbnRvIHNjcmF0Y2ggYWZ0ZXIgdGhlIHNwbGF0 IGlzIGNvbnN1bWVkLi4uIGFjdHVhbGx5Ci0rICAvLyBzaW1wbGVyOiB1c2Ugdm11bGUvdm11bG8g KyB2YWRkIHRyaW8gd2l0aCByZWQgem9uZS4gU2FtZSBzaGFwZSBhcyB0aGUKLSsgIC8vIHByZS12 bXN1bXNobSBmYWxsYmFjayBmb3IgaTh4MTYuCi0rICB1aW50OF90IHMgPSBzY3JhdGNoLmVuY29k aW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3Qgc3JjRW5jID0gc3JjLmVuY29kaW5nKCkgJiAzMTsKLSsg IHVpbnQ4X3QgZGVzdEVuYyA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxOwotKyAgUmVkWm9uZVN0YXNo U2ltZDEyOCgqdGhpcywgc3JjLCAwKTsKLSsgIGFzX3ZzcGx0aXNoKHMsIDEpOwotKyAgYXNfdm11 bGVzaChkZXN0RW5jLCBzcmNFbmMsIHMpOwotKyAgUmVkWm9uZVN0YXNoU2ltZDEyOCgqdGhpcywg ZGVzdCwgMSk7Ci0rICBSZWRab25lUmVzdG9yZVNpbWQxMjgoKnRoaXMsIDAsIHNjcmF0Y2gpOwot KyAgYXNfdnNwbHRpc2goZGVzdEVuYywgMSk7Ci0rICBhc192bXVsb3NoKGRlc3RFbmMsIHMsIGRl c3RFbmMpOwotKyAgUmVkWm9uZVJlc3RvcmVTaW1kMTI4KCp0aGlzLCAxLCBzY3JhdGNoKTsKLSsg IGFzX3ZhZGR1d20oZGVzdEVuYywgZGVzdEVuYywgcyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnVuc2lnbmVkRXh0QWRkUGFpcndpc2VJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsK LSsgIGlmIChkZXN0ICE9IHNyYykgewotKyAgICBhc194eGx4b3Ioc2NyYXRjaCwgc2NyYXRjaCwg c2NyYXRjaCk7Ci0rICAgIGFzX3ZzcGx0aXNoKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCAxKTsKLSsg ICAgYXNfdm1zdW11aG0oZGVzdC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEs IGRlc3QuZW5jb2RpbmcoKSAmIDMxLAotKyAgICAgICAgICAgICAgICBzY3JhdGNoLmVuY29kaW5n KCkgJiAzMSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5j b2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCBzcmNFbmMgPSBzcmMuZW5jb2RpbmcoKSAmIDMxOwot KyAgdWludDhfdCBkZXN0RW5jID0gZGVzdC5lbmNvZGluZygpICYgMzE7Ci0rICBSZWRab25lU3Rh c2hTaW1kMTI4KCp0aGlzLCBzcmMsIDApOwotKyAgYXNfdnNwbHRpc2gocywgMSk7Ci0rICBhc192 bXVsZXVoKGRlc3RFbmMsIHNyY0VuYywgcyk7Ci0rICBSZWRab25lU3Rhc2hTaW1kMTI4KCp0aGlz LCBkZXN0LCAxKTsKLSsgIFJlZFpvbmVSZXN0b3JlU2ltZDEyOCgqdGhpcywgMCwgc2NyYXRjaCk7 Ci0rICBhc192c3BsdGlzaChkZXN0RW5jLCAxKTsKLSsgIGFzX3ZtdWxvdWgoZGVzdEVuYywgcywg ZGVzdEVuYyk7Ci0rICBSZWRab25lUmVzdG9yZVNpbWQxMjgoKnRoaXMsIDEsIHNjcmF0Y2gpOwot KyAgYXNfdmFkZHV3bShkZXN0RW5jLCBkZXN0RW5jLCBzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6c3FydEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0KSB7Ci0rICBhc194dnNxcnRzcChkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpzcXJ0RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKLSsgIGFzX3h2c3FydGRwKGRlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmNvbnZlcnRJbnQzMng0VG9GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKLSsgIGFzX3h2Y3ZzeHdzcChkZXN0LCBzcmMpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjp1bnNpZ25lZENvbnZlcnRJbnQzMng0VG9GbG9hdDMyeDQoRmxvYXRSZWdpc3Rl ciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZjdnV4d3NwKGRlc3QsIHNyYyk7 Ci0rfQotKwotKy8vIGkzMng0IChsb3cgMiBsYW5lcykg4oaSIGY2NHgyLiBXYXNtIGBmNjR4Mi5j b252ZXJ0X2xvd19pMzJ4NF97cyx1fWAuCi0rLy8geHZjdntzLHV9eHdkcCBjb252ZXJ0cyBCRSB3 b3JkIDAgYW5kIEJFIHdvcmQgMiBvZiBzb3VyY2UgdG8gZG91YmxlcyBpbgotKy8vIEJFIGR3b3Jk cyAwIGFuZCAxLiB2bXJnbHcgcGxhY2VzIHNyYy53b3JkX0JFWzIsM10gYXQgdGhlIHJlYWQgcG9z aXRpb25zLAotKy8vIG1hdGNoaW5nIHRoZSBmMzLihpJmNjQgcHJvbW90ZSBzaGFwZToKLSsvLyAg IHZtcmdsdyAgICBzY3JhdGNoLCBzcmMsIHNyYyAgICA7IEJFIHdvcmRzIDIsMyBvZiBzcmMg4oaS IEJFIHdvcmRzIDAsMiBvZgotKy8vICAgc2NyYXRjaCB4dmN2Knh3ZHAgZGVzdCwgc2NyYXRjaCAg ICAgICAgOyBjb252ZXJ0IGJvdGgsIHBsYWNlIGluIEJFIGR3b3JkcwotKy8vICAgMCwxCi0rLy8g T3V0cHV0IEJFIGR3b3JkcyBsYW5kIGFzIFtjb252ZXJ0KGlucHV0IGxhbmUgMSksIGNvbnZlcnQo aW5wdXQgbGFuZSAwKV0sCi0rLy8gd2hpY2ggb24gUFBDNjRMRSBzdG9yYWdlIElTIHRoZSB3YXNt IG91dHB1dCBsYXlvdXQuCi0rLy8KLSsvLyAyIGluc25zIGVhY2gsIHNpbmdsZSBTY3JhdGNoU2lt ZDEyOCBzY29wZSwgbm8gR1BSIG9yIEZQUiBzY3JhdGNoLgotKy8vIEFsbCBvcHMgUE9XRVI3Ky4g ZGVzdD09c3JjIGFsaWFzaW5nIHNhZmUgKHZtcmdsdyBjb25zdW1lcyBzcmMgaW50bwotKy8vIHNj cmF0Y2ggYmVmb3JlIGRlc3QgaXMgd3JpdHRlbikuCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29u dmVydEludDMyeDRUb0Zsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewot KyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3ZtcmdsdyhzY3Jh dGNoLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkg JiAzMSk7Ci0rICBhc194dmN2c3h3ZHAoZGVzdCwgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnVuc2lnbmVkQ29udmVydEludDMyeDRUb0Zsb2F0NjR4MihGbG9hdFJlZ2lz dGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNj cmF0Y2goKnRoaXMpOwotKyAgYXNfdm1yZ2x3KHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxLCBzcmMu ZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKLSsgIGFzX3h2Y3Z1eHdkcChk ZXN0LCBzY3JhdGNoKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dHJ1bmNTYXRGbG9h dDMyeDRUb0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyB4 dmN2c3BzeHdzIGdpdmVzIElOVDMyX01JTiBmb3IgTmFOLCBidXQgV2FzbSByZXF1aXJlcyAwLgot KyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h2Y21wZXFzcChz Y3JhdGNoLCBzcmMsIHNyYyk7ICAvLyB+MCBmb3Igbm9uLU5hTiwgMCBmb3IgTmFOCi0rICBhc194 dmN2c3BzeHdzKGRlc3QsIHNyYyk7Ci0rICBhc194eGxhbmQoZGVzdCwgZGVzdCwgc2NyYXRjaCk7 ICAvLyB6ZXJvIE5hTiBsYW5lcwotK30KLSsKLSsvLyBQYWNrIHRoZSB0d28gImludGVyZXN0aW5n IiAzMi1iaXQgcmVzdWx0cyB0aGF0IHh2Y3YqeHdzIC8geHZjdmRwc3AgbGVhdmVzCi0rLy8gYXQg c2NyYXRjaC53b3JkX0JFWzBdICg9IEEpIGFuZCBzY3JhdGNoLndvcmRfQkVbMl0gKD0gQikgaW50 byBhIHplcm9lZCBkZXN0Ci0rLy8gYXMgZGVzdC53b3JkX0JFID0gWzAsIDAsIEEsIEJdLiBUaGlz IGlzIHRoZSBsYXlvdXQgd2FzbSByZXF1aXJlcyBmb3IKLSsvLyBmNjR4MiDihpIge2kzMng0IHRy dW5jX3NhdCwgZjMyeDQgZGVtb3RlfS4gV3JpdGVzIGRlc3QsIGNvbnN1bWVzIHNjcmF0Y2guCi0r Ly8KLSsvLyBQT1dFUjkgcGF0aCAoNCBpbnNucykgdXNlcyB4eGluc2VydHcveHhleHRyYWN0dXcu IFBPV0VSOCBwYXRoICg3IGluc25zKQotKy8vIGdvZXMgdmlhIHR3byBHUFIgcm91bmQtdHJpcHM6 IGV4dHJhY3QgQSBhbmQgQiB3aXRoIG1mdnNyZCwgc3BsaWNlIHRoZW0KLSsvLyBpbnRvIGEgc2lu Z2xlIGR3b3JkIHdpdGggcmxkaW1pLCBtdHZzcmQgYmFjayBpbnRvIGEgU0lNRCByZWcsIGFuZAot Ky8vIHh4cGVybWRpIHRoZSByZXN1bHQgaW50byBkZXN0LmR3MSB3aGlsZSBrZWVwaW5nIGRlc3Qu ZHcwIHplcm8uCi0rc3RhdGljIGlubGluZSB2b2lkIFBhY2tUd29Xb3Jkc1RvTG93SGFsZihNYWNy b0Fzc2VtYmxlciYgbWFzbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgc2NyYXRjaCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgaWYgKEhhc1BPV0VSOSgpKSB7 Ci0rICAgIG1hc20uYXNfeHhpbnNlcnR3KGRlc3QsIHNjcmF0Y2gsCi0rICAgICAgICAgICAgICAg ICAgICAgIDgpOyAgLy8gZGVzdC53b3JkX0JFWzJdIOKGkCBzY3JhdGNoLndvcmRfQkVbMV0gKD0g QSkKLSsgICAgbWFzbS5hc194eGV4dHJhY3R1dyhzY3JhdGNoLCBzY3JhdGNoLAotKyAgICAgICAg ICAgICAgICAgICAgICAgIDgpOyAgLy8gc2NyYXRjaC53b3JkX0JFWzFdIOKGkCBzY3JhdGNoLndv cmRfQkVbMl0gKD0gQikKLSsgICAgbWFzbS5hc194eGluc2VydHcoZGVzdCwgc2NyYXRjaCwKLSsg ICAgICAgICAgICAgICAgICAgICAgMTIpOyAgLy8gZGVzdC53b3JkX0JFWzNdIOKGkCBzY3JhdGNo LndvcmRfQkVbMV0gKD0gQikKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgLy8gUE9XRVI4OiB4eGlu c2VydHcveHhleHRyYWN0dXcgYXJlIElTQSAzLjAuIFRha2UgYSBHUFIgZGV0b3VyIGluc3RlYWQu Ci0rICAvLyBzY3JhdGNoLmR3X0JFWzBdID0gKEEgPDwgMzIpIHwgQSwgc2NyYXRjaC5kd19CRVsx XSA9IChCIDw8IDMyKSB8IEIuCi0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNt KTsKLSsgIFJlZ2lzdGVyIHRtcEEgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBSZWdpc3RlciB0bXBC ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbWFzbS5hc19tZnZzcmQodG1wQSwgc2NyYXRjaCk7ICAv LyB0bXBBID0gKEEgPDwgMzIpIHwgQQotKyAgbWFzbS5hc194eHBlcm1kaShzY3JhdGNoLCBzY3Jh dGNoLCBzY3JhdGNoLAotKyAgICAgICAgICAgICAgICAgICAyKTsgICAgICAgICAgICAvLyBzd2Fw IGR3b3Jkczogbm93IGR3MCA9IChCPDwzMil8QgotKyAgbWFzbS5hc19tZnZzcmQodG1wQiwgc2Ny YXRjaCk7ICAvLyB0bXBCID0gKEIgPDwgMzIpIHwgQgotKyAgbWFzbS54X3NyZGkodG1wQSwgdG1w QSwgMzIpOyAgICAvLyB0bXBBID0gMHgwMDAwMDAwMF9BQUFBQUFBQQotKyAgbWFzbS5hc19ybGRp bWkodG1wQiwgdG1wQSwgMzIsCi0rICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgIC8v IHRtcEJbMC4uMzFdID0gQTsgdG1wQlszMi4uNjNdID0gQiAoa2VwdCkKLSsgIG1hc20uYXNfbXR2 c3JkKHNjcmF0Y2gsIHRtcEIpOyAgLy8gc2NyYXRjaC5kd19CRVswXSA9IChBIDw8IDMyKSB8IEI7 IGR3MSA9IDAKLSsgIG1hc20uYXNfeHhwZXJtZGkoZGVzdCwgZGVzdCwgc2NyYXRjaCwKLSsgICAg ICAgICAgICAgICAgICAgMCk7ICAvLyBkZXN0ID0ge2Rlc3QuZHcwPTAsIHNjcmF0Y2guZHcwfSA9 IFswLCAwLCBBLCBCXQotK30KLSsKLSsvLyBmY3Rpd3ogLyBmY21wdSAvIGZjdGlkdXogYXJlIFgt Zm9ybSBzY2FsYXIgRlAgaW5zdHJ1Y3Rpb25zIHRoYXQgb25seQotKy8vIGVuY29kZSA1LWJpdCBG UlQvRlJCIGZpZWxkcywgc28gZW1pdHRpbmcgdGhlbSBvbiBhIFNpbWQxMjggcmVnCi0rLy8gKGVu Y29kaW5nIDMyKykgd291bGQgY29ycnVwdCB0aGUgb3Bjb2RlLiBCcmlkZ2UgdGhyb3VnaAotKy8v IFNjcmF0Y2hEb3VibGVSZWcgKEZQUiBmMCkgZm9yIHRoZSBjb252ZXJzaW9uLiBFeHRyYWN0IGJv dGggbGFuZXMnIEdQUgotKy8vIHJlc3VsdHMgYmVmb3JlIHdyaXRpbmcgZGVzdCBzbyB0aGF0IGRl c3QgPT0gc3JjIGlzIHNhZmUuCi0rLy8KLSsvLyBBdm9pZCByZXBsYWNlTGFuZUludDMyeDQgb24g dGhlIHRhaWw6IG9uIFBPV0VSOCBpdCBuZWVkcyBhbiBleHRyYQotKy8vIEdQUiBzY3JhdGNoLCBi dXQgcjExIGFuZCByMTIgYXJlIGFscmVhZHkgaGVsZCBhcyBhL2IgaGVyZS4gUGFjayBib3RoCi0r Ly8gaW50MzJzIGludG8gYGFgIHdpdGggcmxkaW1pLCB0cmFuc2ZlciB2aWEgbXR2c3JkLCB0aGVu IHh4cGVybWRpIHRoZQotKy8vIERXcyBpbnRvIHRoZSBsb3cgaGFsZiBzbyB3YXNtIGxhbmUgMCAo QkUgVzMpIGhvbGRzIGEsIGxhbmUgMSAoVzIpIGIuCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dHJ1 bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgdGVtcCkgewotKyAgLy8gV2FzbSBgaTMyeDQudHJ1bmNfc2F0X2Y2NHgyX3NfemVyb2Au IHh2Y3ZkcHN4d3Mgc2F0dXJhdGVzIHRvIElOVDMyX01JTgotKyAgLy8gb24gb3ZlcmZsb3cvTmFO IChwZXIgSVNBKTsgd2FzbSByZXF1aXJlcyBOYU4g4oaSIDAsIHNvIGEgcGVyLWR3b3JkIE5hTgot KyAgLy8gbWFzayB2aWEgeHZjbXBlcWRwIGNsYW1wcyBOYU4gbGFuZXMgdG8gMCBiZWZvcmUgbGF5 aW5nIG91dCB0aGUgcmVzdWx0LgotKyAgLy8gT3V0cHV0IEJFIHdvcmQgcG9zaXRpb25zIG5lZWQg d2FzbSBsYW5lIG9yZGVyOiBsYW5lIDEg4oaSIEJFIHdvcmQgMiwKLSsgIC8vIGxhbmUgMCDihpIg QkUgd29yZCAzLiB4dmN2ZHBzeHdzIGxhbmRzIGl0cyByZXN1bHRzIGF0IEJFIHdvcmRzIDAgYW5k IDIKLSsgIC8vICh3aXRoIHJlcGxpY2F0aW9uIGludG8gMS8zKTsgUGFja1R3b1dvcmRzVG9Mb3dI YWxmIG1vdmVzIHRoZW0gaW50bwotKyAgLy8gdGhlIHJpZ2h0IHBvc2l0aW9ucyB3aGlsZSB6ZXJv aW5nIHRoZSByZXN0LgotKyAgLy8gZGVzdD09c3JjIHNhZmU6IHNyYyBpcyBjb25zdW1lZCBieSB4 dmN2ZHBzeHdzIGFuZCB4dmNtcGVxZHAgYmVmb3JlCi0rICAvLyBkZXN0IGlzIHplcm9lZC4KLSsg IFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBhc194dmN2ZHBzeHdzKHNj cmF0Y2gsIHNyYyk7Ci0rICBhc194dmNtcGVxZHAoZGVzdCwgc3JjLAotKyAgICAgICAgICAgICAg IHNyYyk7ICAvLyBOYU4tbWFzazogMHhGRi4uLkYgcGVyIGR3b3JkIGZvciBub24tTmFOLCAwIGZv ciBOYU4KLSsgIGFzX3h4bGFuZChzY3JhdGNoLCBzY3JhdGNoLCBkZXN0KTsKLSsgIGFzX3h4bHhv cihkZXN0LCBkZXN0LCBkZXN0KTsKLSsgIFBhY2tUd29Xb3Jkc1RvTG93SGFsZigqdGhpcywgc2Ny YXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkVHJ1bmNT YXRGbG9hdDY0eDJUb0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIHsKLSsgIC8vIFdhc20gYGkzMng0LnRydW5jX3NhdF9m NjR4Ml91X3plcm9gLiB4dmN2ZHB1eHdzIHNlbWFudGljcyBhbHJlYWR5Ci0rICAvLyBtYXRjaCB0 aGUgd2FzbSBzcGVjIHdpdGhvdXQgYW55IG1hc2tpbmc6IE5hTiDihpIgMCwgbmVnYXRpdmUg4oaS IDAsCi0rICAvLyBwb3NpdGl2ZSBvdmVyZmxvdyDihpIgVUlOVDMyX01BWC4gU28gbm8gTmFOIG1h c2sgbmVlZGVkOyBqdXN0IHBvc2l0aW9uCi0rICAvLyB0aGUgc2F0dXJhdGVkIHJlc3VsdHMgaW50 byBCRSB3b3JkcyAyLDMgd2l0aCB6ZXJvcyBhdCB3b3JkcyAwLDEuCi0rICAvLyBkZXN0PT1zcmMg c2FmZTogc3JjIGNvbnN1bWVkIGJ5IHh2Y3ZkcHV4d3MgYmVmb3JlIGRlc3QgaXMgemVyb2VkLgot KyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h2Y3ZkcHV4d3Mo c2NyYXRjaCwgc3JjKTsKLSsgIGFzX3h4bHhvcihkZXN0LCBkZXN0LCBkZXN0KTsKLSsgIFBhY2tU d29Xb3Jkc1RvTG93SGFsZigqdGhpcywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnRydW5jRmxvYXQzMng0VG9JbnQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVy IHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICB0cnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChz cmMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFRydW5jRmxv YXQzMng0VG9JbnQzMng0UmVsYXhlZCgKLSsgICAgRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkgewotKyAgdW5zaWduZWRUcnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChzcmMs IGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0cnVuY0Zsb2F0NjR4MlRvSW50 MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgdHJ1 bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoc3JjLCBkZXN0LCBTY3JhdGNoU2ltZDEyOFJlZyk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkVHJ1bmNGbG9hdDY0eDJUb0ludDMy eDRSZWxheGVkKAotKyAgICBGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7 Ci0rICB1bnNpZ25lZFRydW5jU2F0RmxvYXQ2NHgyVG9JbnQzMng0KHNyYywgZGVzdCwgU2NyYXRj aFNpbWQxMjhSZWcpOwotK30KLSsKLSsvLyBmNjR4MiDihpIgZjMyeDQgKGxvdyAyIGxhbmVzOyBo aWdoIGxhbmVzIHplcm8pLiBXYXNtIGBmMzJ4NC5kZW1vdGVfZjY0eDJfemVyb2AuCi0rLy8geHZj dmRwc3AgY29udmVydHMgYm90aCBkb3VibGVzIGluIG9uZSBzaG90LCByZXBsaWNhdGluZyBlYWNo IHJlc3VsdCBhY3Jvc3MKLSsvLyBpdHMgZHdvcmQ6IEJFIHdvcmQgbGFuZXMgPSBbcyhpbi5kdzAp LCBzKGluLmR3MCksIHMoaW4uZHcxKSwgcyhpbi5kdzEpXS4KLSsvLyBPbiBQUEM2NExFIHdhc20g c3RvcmFnZSAobHh2eC1sb2FkZWQpLCBpbnB1dC5kd19CRVswXSA9IHdhc20gbGFuZSAxIGFuZAot Ky8vIGlucHV0LmR3X0JFWzFdID0gd2FzbSBsYW5lIDAsIHNvIHdlIGdldCBbcyhsMSksIHMobDEp LCBzKGwwKSwgcyhsMCldIGluCi0rLy8gQkUgd29yZCBvcmRlci4gV2UgdGhlbiB6ZXJvIGRlc3Qg YW5kIHBhY2sgcyhsMSkgaW50byBCRSB3b3JkIDIgKHdhc20KLSsvLyBvdXRwdXQgbGFuZSAxKSBh bmQgcyhsMCkgaW50byBCRSB3b3JkIDMgKHdhc20gb3V0cHV0IGxhbmUgMCkgdmlhIHRoZQotKy8v IHNoYXJlZCBQYWNrVHdvV29yZHNUb0xvd0hhbGYgaGVscGVyLCB3aGljaCBoYXMgUE9XRVI5IGFu ZCBQT1dFUjggcGF0aHMuCi0rLy8KLSsvLyBkZXN0PT1zcmMgYWxpYXNpbmcgc2FmZTogc3JjIGlz IGNvbnN1bWVkIGJ5IHh2Y3ZkcHNwIGJlZm9yZSBkZXN0IGlzIHplcm9lZC4KLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpjb252ZXJ0RmxvYXQ2NHgyVG9GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsK LSsgIGFzX3h2Y3ZkcHNwKHNjcmF0Y2gsIHNyYyk7Ci0rICBaZXJvU2ltZDEyOCgqdGhpcywgZGVz dCk7Ci0rICBQYWNrVHdvV29yZHNUb0xvd0hhbGYoKnRoaXMsIHNjcmF0Y2gsIGRlc3QpOwotK30K LSsKLSsvLyBmMzJ4NCAobG93IDIgbGFuZXMpIOKGkiBmNjR4Mi4gV2FzbSBgZjY0eDIucHJvbW90 ZV9sb3dfZjMyeDRgLiB4dmN2c3BkcAotKy8vIGNvbnZlcnRzIGJvdGggQkUgd29yZCAwIGFuZCBC RSB3b3JkIDIgb2YgaXRzIHNvdXJjZSB0byBkb3VibGVzIGluIEJFCi0rLy8gZHdvcmRzIDAgYW5k IDEgcmVzcGVjdGl2ZWx5LiBUbyBnZXQgd2FzbSBsYW5lcyAwIGFuZCAxICg9IGlucHV0IEJFCi0r Ly8gd29yZHMgMyBhbmQgMikgaW50byB0aG9zZSBzb3VyY2UgcG9zaXRpb25zLCB2bXJnbHcgbWVy Z2VzIGxvdyB3b3JkczoKLSsvLyBWUlQud29yZFswXSA9IFZSQS53b3JkWzJdID0gd2FzbSBsYW5l IDEsIFZSVC53b3JkWzJdID0gVlJBLndvcmRbM10gPQotKy8vIHdhc20gbGFuZSAwICh3aXRoIHJl cGxpY2F0ZWQgY29waWVzIGluIG9kZCB3b3JkIHNsb3RzIHRoYXQgeHZjdnNwZHAKLSsvLyBpZ25v cmVzKS4gT3V0cHV0IEJFIGR3b3JkcyBsYW5kIGFzIFtkb3VibGUobGFuZTEpLCBkb3VibGUobGFu ZTApXSwKLSsvLyB3aGljaCBvbiBQUEM2NExFIHN0b3JhZ2UgaXMgZXhhY3RseSB0aGUgd2FzbSBm NjR4MiBvdXRwdXQgbGF5b3V0LgotKy8vCi0rLy8gZGVzdD09c3JjIGFsaWFzaW5nIHNhZmU6IHZt cmdsdyBjb25zdW1lcyBzcmMgaW50byBhIHNlcGFyYXRlIHNjcmF0Y2gKLSsvLyBiZWZvcmUgZGVz dCBpcyB3cml0dGVuLgotKy8vCi0rLy8gMiBpbnNucywgc2luZ2xlIFNjcmF0Y2hTaW1kMTI4IHNj b3BlLiBBbGwgb3BzIFBPV0VSNysuCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29udmVydEZsb2F0 MzJ4NFRvRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNj cmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBhc192bXJnbHcoc2NyYXRjaC5l bmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEp OwotKyAgYXNfeHZjdnNwZHAoZGVzdCwgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnVuc2lnbmVkTmFycm93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gT24gTEUsIFZNWCBwYWNrIHN3YXBzIG9wZXJhbmQg b3JkZXIgdnMgV2FzbSBjb252ZW50aW9uLgotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJ TkFSWV9XUkFQUEVSKHZwa3NodXMpLCByaHMsIGxocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnVuc2lnbmVkTmFycm93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gT24gTEUsIFZNWCBwYWNrIHN3YXBzIG9w ZXJhbmQgb3JkZXIgdnMgV2FzbSBjb252ZW50aW9uLgotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywg Vk1YX0JJTkFSWV9XUkFQUEVSKHZwa3N3dXMpLCByaHMsIGxocywgZGVzdCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OndpZGVuTG93SW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBPbiBQUEM2NCBMRSwgcmF3IHZ1cGtsc2IgdW5wYWNr cyB0aGUgTE9XIFdhc20gbGFuZXMgKG5vdCB2dXBraHNiKS4KLSsgIC8vIEdDQyB2ZWNfdW5wYWNr aCBtYXBzIHRvIHZ1cGtsc2Igb24gTEUgKHN3YXBwZWQgZnJvbSBCRSBuYW1pbmcpLgotKyAgLy8g UmF3IHZ1cGtsc2IoWzEuLjgsLTEuLi04XSkgPSBbMSwyLDMsNCw1LDYsNyw4XS4KLSsgIEVtaXRW bXhVbmFyeSgKLSsgICAgICAqdGhpcywKLSsgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3Qg dnJ0LCB1aW50OF90IHZyYikgeyBhLmFzX3Z1cGtsc2IodnJ0LCB2cmIpOyB9LAotKyAgICAgIHNy YywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OndpZGVuSGlnaEludDh4MTYo RmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gT24gUFBDNjQg TEUsIHJhdyB2dXBraHNiIHVucGFja3MgdGhlIEhJR0ggV2FzbSBsYW5lcy4KLSsgIEVtaXRWbXhV bmFyeSgKLSsgICAgICAqdGhpcywKLSsgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYikgeyBhLmFzX3Z1cGtoc2IodnJ0LCB2cmIpOyB9LAotKyAgICAgIHNyYywg ZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkV2lkZW5Mb3dJbnQ4 eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgemVyb0V4dGVuZDh4MTZUbzE2 eDgoc3JjLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRXaWRl bkhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIHZtcmdo Yih6ZXJvLCBzcmMpIGludGVybGVhdmVzIHplcm8gYnl0ZXMgd2l0aCB0aGUgQkUtaGlnaCBoYWxm IG9mIHNyYywKLSsgIC8vIHByb2R1Y2luZyB6ZXJvLWV4dGVuZGVkIGhhbGZ3b3JkcyBvZiB0aGUg TEUtaGlnaCAoV2FzbS1oaWdoKSBsYW5lcy4KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRj aCgqdGhpcyk7Ci0rICBhc194eGx4b3Ioc2NyYXRjaCwgc2NyYXRjaCwgc2NyYXRjaCk7Ci0rICBh c192bXJnaGIoZGVzdC5lbmNvZGluZygpICYgMzEsIHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxLCBz cmMuZW5jb2RpbmcoKSAmIDMxKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2lkZW5M b3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8v IE9uIFBQQzY0IExFLCByYXcgdnVwa2xzaCB1bnBhY2tzIExPVyBXYXNtIGxhbmVzIChHQ0Mgc3dh cHMgaC9sIG9uIExFKS4KLSsgIEVtaXRWbXhVbmFyeSgKLSsgICAgICAqdGhpcywKLSsgICAgICBb XShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYikgeyBhLmFzX3Z1cGtsc2go dnJ0LCB2cmIpOyB9LAotKyAgICAgIHNyYywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OndpZGVuSGlnaEludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgRW1pdFZteFVuYXJ5KAotKyAgICAgICp0aGlzLAotKyAgICAgIFtdKEFzc2Vt YmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNfdnVwa2hzaCh2cnQsIHZy Yik7IH0sCi0rICAgICAgc3JjLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 dW5zaWduZWRXaWRlbkxvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0r ICB6ZXJvRXh0ZW5kMTZ4OFRvMzJ4NChzcmMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjp1bnNpZ25lZFdpZGVuSGlnaEludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h4 bHhvcihzY3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNoKTsKLSsgIGFzX3ZtcmdoaChkZXN0LmVuY29k aW5nKCkgJiAzMSwgc2NyYXRjaC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3aWRlbkxvd0ludDMyeDQoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gT24gUFBDNjQgTEUsIHJhdyB2 dXBrbHN3IHVucGFja3MgTE9XIFdhc20gbGFuZXMuCi0rICBFbWl0Vm14VW5hcnkoCi0rICAgICAg KnRoaXMsCi0rICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHZydCwgdWludDhfdCB2cmIp IHsgYS5hc192dXBrbHN3KHZydCwgdnJiKTsgfSwKLSsgICAgICBzcmMsIGRlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFdpZGVuTG93SW50MzJ4NChGbG9hdFJlZ2lz dGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIHplcm9FeHRlbmQzMng0VG82NHgyKHNyYywgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OndpZGVuSGlnaEludDMyeDQoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteFVuYXJ5KAotKyAgICAg ICp0aGlzLAotKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJi KSB7IGEuYXNfdnVwa2hzdyh2cnQsIHZyYik7IH0sCi0rICAgICAgc3JjLCBkZXN0KTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRXaWRlbkhpZ2hJbnQzMng0KEZsb2F0UmVn aXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIGk2NHgyLmV4dGVuZF9oaWdoX2kzMng0X3U6 IHRha2UgaGlnaCAyIGkzMiBsYW5lcyBvZiBzcmMsIHplcm8tZXh0ZW5kCi0rICAvLyB0byBpNjQg ZWFjaC4gVXNlIHZtcmdodyB0byBpbnRlcmxlYXZlIGEgemVybyBWUiB3aXRoIHNyYyDigJQgc2Ft ZSBzaGFwZQotKyAgLy8gYXMgdGhlIChhbHJlYWR5LWNvcnJlY3QpIHVuc2lnbmVkV2lkZW5IaWdo SW50MTZ4OCBzaWJsaW5nIGFib3ZlLgotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0 aGlzKTsKLSsgIFplcm9TaW1kMTI4KCp0aGlzLCBzY3JhdGNoKTsKLSsgIGFzX3ZtcmdodyhkZXN0 LmVuY29kaW5nKCkgJiAzMSwgc2NyYXRjaC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygp ICYgMzEpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwc2V1ZG9NaW5GbG9hdDMyeDQo RmxvYXRSZWdpc3RlciByaHNPclJoc0Rlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzT3JMaHNEZXN0KSB7Ci0rICAvLyBwbWluOiBy ZXN1bHRbaV0gPSByaHNbaV0gPCBsaHNbaV0gPyByaHNbaV0gOiBsaHNbaV0KLSsgIC8vIHh2Y21w Z3RzcChtYXNrLCBsaHMsIHJocykg4oaSIDEgd2hlcmUgbGhzID4gcmhzIChpLmUuLCByaHMgPCBs aHMpCi0rICAvLyB4eHNlbDogbWFzaz0xIOKGkiBYQj1yaHMuIG1hc2s9MCDihpIgWEE9bGhzLgot KyAgLy8gUmVzdWx0IGdvZXMgdG8gbGhzT3JMaHNEZXN0IChzZWNvbmQgcGFyYW0pLgotKyAgU2Ny YXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h2Y21wZ3RzcChzY3JhdGNo LCBsaHNPckxoc0Rlc3QsIHJoc09yUmhzRGVzdCk7Ci0rICBhc194eHNlbChsaHNPckxoc0Rlc3Qs IGxoc09yTGhzRGVzdCwgcmhzT3JSaHNEZXN0LCBzY3JhdGNoKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6cHNldWRvTWluRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBwbWluKGxocywgcmhzKSA9IHJocyA8IGxocyA/IHJo cyA6IGxocwotKyAgLy8gSW5saW5lIHRvIGhhbmRsZSBkZXN0IGFsaWFzaW5nIHdpdGggZWl0aGVy IG9wZXJhbmQuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgYXNf eHZjbXBndHNwKHNjcmF0Y2gsIGxocywgcmhzKTsKLSsgIC8vIG1hc2s9MSB3aGVyZSBsaHMgPiBy aHMuIFhDPTEg4oaSIHNlbGVjdCBYQj1yaHMuIFhDPTAg4oaSIHNlbGVjdCBYQT1saHMuCi0rICBh c194eHNlbChkZXN0LCBsaHMsIHJocywgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnBzZXVkb01pbkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHJoc09yUmhzRGVzdCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNP ckxoc0Rlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBh c194dmNtcGd0ZHAoc2NyYXRjaCwgbGhzT3JMaHNEZXN0LCByaHNPclJoc0Rlc3QpOwotKyAgYXNf eHhzZWwobGhzT3JMaHNEZXN0LCBsaHNPckxoc0Rlc3QsIHJoc09yUmhzRGVzdCwgc2NyYXRjaCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBzZXVkb01pbkZsb2F0NjR4MihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhT Y29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h2Y21wZ3RkcChzY3JhdGNoLCBsaHMsIHJocyk7 Ci0rICBhc194eHNlbChkZXN0LCBsaHMsIHJocywgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnBzZXVkb01heEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHJoc09yUmhzRGVz dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBsaHNPckxoc0Rlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7 Ci0rICBhc194dmNtcGd0c3Aoc2NyYXRjaCwgcmhzT3JSaHNEZXN0LCBsaHNPckxoc0Rlc3QpOwot KyAgYXNfeHhzZWwobGhzT3JMaHNEZXN0LCBsaHNPckxoc0Rlc3QsIHJoc09yUmhzRGVzdCwgc2Ny YXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBzZXVkb01heEZsb2F0MzJ4NChG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gcG1heChs aHMsIHJocykgPSBsaHMgPCByaHMgPyByaHMgOiBsaHMKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUg c2NyYXRjaCgqdGhpcyk7Ci0rICBhc194dmNtcGd0c3Aoc2NyYXRjaCwgcmhzLCBsaHMpOwotKyAg Ly8gbWFzaz0xIHdoZXJlIHJocyA+IGxocyAobGhzIDwgcmhzKS4gWEM9MSDihpIgc2VsZWN0IFhC PXJocy4gWEM9MCDihpIgc2VsZWN0Ci0rICAvLyBYQT1saHMuCi0rICBhc194eHNlbChkZXN0LCBs aHMsIHJocywgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBzZXVkb01h eEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHJoc09yUmhzRGVzdCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNPckxoc0Rlc3QpIHsKLSsg IFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBhc194dmNtcGd0ZHAoc2Ny YXRjaCwgcmhzT3JSaHNEZXN0LCBsaHNPckxoc0Rlc3QpOwotKyAgYXNfeHhzZWwobGhzT3JMaHNE ZXN0LCBsaHNPckxoc0Rlc3QsIHJoc09yUmhzRGVzdCwgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnBzZXVkb01heEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0 aGlzKTsKLSsgIGFzX3h2Y21wZ3RkcChzY3JhdGNoLCByaHMsIGxocyk7Ci0rICBhc194eHNlbChk ZXN0LCBsaHMsIHJocywgc2NyYXRjaCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmRv dEludDh4MTZJbnQ3eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKLSsgIC8vIHJlc3VsdFtrXSA9IGxoc1sya10qcmhzWzJrXSArIGxoc1syaysxXSpyaHNbMmsr MV0gZm9yIGs9MC4uNy4KLSsgIC8vIHZtdWxlc2Ivdm11bG9zYiBwcm9kdWNlIGV2ZW4vb2RkIGJ5 dGUgcHJvZHVjdHMgYXMgaTE2IGluIG1hdGNoaW5nCi0rICAvLyBoYWxmd29yZCBsYW5lczsgdmFk ZHVobSBzdW1zIHRoZW0gcGFpcndpc2UuCi0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOwotKyAgdWludDhfdCBsID0gbGhzLmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3Qg ciA9IHJocy5lbmNvZGluZygpICYgMzE7Ci0rICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5nKCkg JiAzMTsKLSsgIHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOwotKyAgYXNfdm11 bGVzYihzLCBsLCByKTsKLSsgIGFzX3ZtdWxvc2IoZCwgbCwgcik7Ci0rICBhc192YWRkdWhtKGQs IHMsIGQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjZWlsRmxvYXQzMng0KEZsb2F0 UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2cnNwaXAoZGVzdCwg c3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2VpbEZsb2F0NjR4MihGbG9hdFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dnJkcGlwKGRlc3QsIHNy Yyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsb29yRmxvYXQzMng0KEZsb2F0UmVn aXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2cnNwaW0oZGVzdCwgc3Jj KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Zmxvb3JGbG9hdDY0eDIoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZyZHBpbShkZXN0LCBzcmMp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0cnVuY0Zsb2F0MzJ4NChGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dnJzcGl6KGRlc3QsIHNyYyk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRydW5jRmxvYXQ2NHgyKEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2cmRwaXooZGVzdCwgc3JjKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVhcmVzdEZsb2F0MzJ4NChGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dnJzcGljKGRlc3QsIHNyYyk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5lYXJlc3RGbG9hdDY0eDIoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZyZHBpYyhkZXN0LCBzcmMp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbm1hRmxvYXQzMng0KEZsb2F0UmVnaXN0 ZXIgc3JjMSwgRmxvYXRSZWdpc3RlciBzcmMyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSB7Ci0rICBhc194dm5tc3ViYXNwKHNyY0Rl c3QsIHNyYzEsIHNyYzIpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbm1hRmxvYXQ2 NHgyKEZsb2F0UmVnaXN0ZXIgc3JjMSwgRmxvYXRSZWdpc3RlciBzcmMyLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSB7Ci0rICBhc194 dm5tc3ViYWRwKHNyY0Rlc3QsIHNyYzEsIHNyYzIpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjptaW5GbG9hdDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSB7Ci0r ICBhc194dm1pbnNwKHNyY0Rlc3QsIHNyY0Rlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Om1pbkZsb2F0MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dm1pbnNwKGRlc3QsIGxocywgcmhzKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVy IHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgc3JjRGVzdCkgewotKyAgYXNfeHZtYXhzcChzcmNEZXN0LCBzcmNEZXN0LCBzcmMpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhGbG9hdDMyeDRSZWxheGVkKEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZtYXhzcChkZXN0 LCBsaHMsIHJocyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbkZsb2F0NjR4MlJl bGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIHsKLSsgIGFzX3h2bWluZHAoc3JjRGVz dCwgc3JjRGVzdCwgc3JjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluRmxvYXQ2 NHgyUmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK LSsgIGFzX3h2bWluZHAoZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjptYXhGbG9hdDY0eDJSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSB7Ci0r ICBhc194dm1heGRwKHNyY0Rlc3QsIHNyY0Rlc3QsIHNyYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Om1heEZsb2F0NjR4MlJlbGF4ZWQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dm1heGRwKGRlc3QsIGxocywgcmhzKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cTE1TXVsckludDE2eDhSZWxheGVkKEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBxMTVNdWxyU2F0SW50MTZ4 OChsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotKy8vIFNJTUQgb3ZlcmxvYWRzIGFjY2VwdGluZyBh biBleHRyYSBGbG9hdFJlZ2lzdGVyIHRlbXAgKHNoYXJlZC1oZWFkZXIgc2lnbmF0dXJlCi0rLy8g dXNlZCBieSB4ODY7IG9uIFBQQzY0IHRoZSB0ZW1wIGlzIHVudXNlZCBmb3IgbW9zdCBvZiB0aGVz ZSkuCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cG9wY250SW50OHgxNihGbG9hdFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciB0ZW1wKSB7Ci0rICBwb3BjbnRJbnQ4eDE2KHNyYywgZGVzdCk7Ci0r fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkVHJ1bmNTYXRGbG9hdDMyeDRUb0lu dDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIHRlbXApIHsKLSsgIHVuc2lnbmVkVHJ1bmNTYXRGbG9hdDMyeDRUb0ludDMyeDQoc3JjLCBk ZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZG90SW50OHgxNkludDd4MTZUaGVu QWRkKEZsb2F0UmVnaXN0ZXIgbGhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIHsK LSsgIC8vIGRlc3QgKz0gcGFpcndpc2Vfd2lkZW5faTE2X3RvX2kzMihkb3RfaTh4MTYobGhzLCBy aHMpKS4KLSsgIC8vCi0rICAvLyBTdGVwIDE6IGkxNng4IGRvdCBvZiBpOCBieXRlIHBhaXJzICh2 bXVsZXNiL3ZtdWxvc2IvdmFkZHVobSkuIEtlZXBzCi0rICAvLyB0aGUgZXhpc3Rpbmcgc2lnbmVk LWJ5dGUgbXVsdGlwbHkgc2VtYW50aWNzIHRoYXQgbWF0Y2ggQVJNNjQgc2RvdAotKyAgLy8gYW5k IHg4NiB2cGRwYnNzZCAodm1zdW1tYm0gd291bGQgYmUgc2lnbmVkw5d1bnNpZ25lZCBhbmQgZGl2 ZXJnZSBmb3IKLSsgIC8vIGk3IGxhbmVzIHRoYXQgYml0LXBhdHRlcm4gYXMgbmVnYXRpdmUpLgot KyAgLy8KLSsgIC8vIFN0ZXAgMjogdm1zdW1zaG0gZGVzdCwgZG90LCBzcGxhdF9odygxKSwgZGVz dCBjb21wdXRlcwotKyAgLy8gICBkZXN0LmkzMltrXSA9IGRlc3QuaTMyW2tdICsgZG90LmkxNlsy a10qMSArIGRvdC5pMTZbMmsrMV0qMQotKyAgLy8gd2hpY2ggaXMgZXhhY3RseSBwYWlyd2lzZSB3 aWRlbiArIGFjY3VtdWxhdGUgaW4gYSBzaW5nbGUgaW5zbi4KLSsgIC8vIHNwbGF0X2h3KDEpIGlz IGEgc2luZ2xlIHZzcGx0aXNoICg1LWJpdCBTSU1NIHNwbGF0IHRvIGFsbCA4IGhhbGZ3b3Jkcyku Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgdWludDhfdCBsID0g bGhzLmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgciA9IHJocy5lbmNvZGluZygpICYgMzE7 Ci0rICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgcyA9IHNj cmF0Y2guZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhfdCB0ID0gdGVtcC5lbmNvZGluZygpICYg MzE7Ci0rCi0rICBhc192bXVsZXNiKHMsIGwsIHIpOwotKyAgYXNfdm11bG9zYih0LCBsLCByKTsK LSsgIGFzX3ZhZGR1aG0odCwgcywgdCk7Ci0rICBhc192c3BsdGlzaChzLCAxKTsKLSsgIGFzX3Zt c3Vtc2htKGQsIHQsIHMsIGQpOwotK30KLSsKLSsvLyBTSU1EIG9wcyBwb3J0ZWQgZnJvbSBhcm02 NC0gYW5kIHg4Ni94NjQtc2hhcGVkIHNpZ25hdHVyZXMuCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6cGVybXV0ZUludDE2eDgoY29uc3QgdWludDE2X3QgbGFuZXNbOF0sIEZsb2F0UmVnaXN0ZXIg c3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgdWludDhfdCBzaHVmZmxlTGFuZXNbMTZdOwotKyAgZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IDg7IGkrKykgewotKyAgICBzaHVmZmxlTGFuZXNbaSAqIDJdID0gbGFuZXNbaV0g KiAyOwotKyAgICBzaHVmZmxlTGFuZXNbaSAqIDIgKyAxXSA9IGxhbmVzW2ldICogMiArIDE7Ci0r ICB9Ci0rICBzaHVmZmxlSW50OHgxNihzaHVmZmxlTGFuZXMsIHNyYywgc3JjLCBkZXN0KTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cm90YXRlUmlnaHRTaW1kMTI4KEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IHNoaWZ0KSB7Ci0rICBNT1pfQVNTRVJUKHNoaWZ0IDwgMTYp OwotKyAgaWYgKHNoaWZ0ID09IDApIHsKLSsgICAgbW92ZVNpbWQxMjgoc3JjLCBkZXN0KTsKLSsg ICAgcmV0dXJuOwotKyAgfQotKyAgLy8gdnNsZG9pIFZSVCxWUkEsVlJCLFNIOiBjb25jYXRlbmF0 ZSBWUkF8fFZSQiwgdGFrZSBieXRlcyBbU0guLlNIKzE1XS4KLSsgIC8vIFJvdGF0ZSByaWdodCBi eSBOID0gdnNsZG9pKHNyYywgc3JjLCAxNi1OKS4KLSsgIGFzX3ZzbGRvaShkZXN0LCBzcmMsIHNy YywgMTYgLSBzaGlmdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bEludDY0eDIo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LCBGbG9hdFJlZ2lzdGVyIHRlbXAxLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgewot KyAgLy8gUE9XRVIxMCBjb2xsYXBzZXMgdGhlIGVudGlyZSBpNjR4MiBtdWx0aXBseSB0byBhIHNp bmdsZSB2bXVsbGQuCi0rICAvLyBQT1dFUjkvUE9XRVI4IGZhbGwgYmFjayB0byB0aGUgR1BSIHJv dW5kLXRyaXAgcGF0aDogZXh0cmFjdCBlYWNoCi0rICAvLyBsYW5lIHBhaXIgaW50byBHUFJzICht ZnZzcmxkIGZvciBMRS1kdzAvV2FzbS1sYW5lLTAsIG1mdnNyZCBmb3IKLSsgIC8vIExFLWR3MS9s YW5lLTEpLCBtdWx0aXBseSwgYW5kIHJlYXNzZW1ibGUgdmlhIG10dnNyZCArIHh4cGVybWRpLgot KyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICBhc192bXVsbGQoZGVzdC5lbmNvZGluZygpICYg MzEsIGxocy5lbmNvZGluZygpICYgMzEsIHJocy5lbmNvZGluZygpICYgMzEpOwotKyAgICByZXR1 cm47Ci0rICB9Ci0rICAvLyBBbGlhc2luZyBzYWZldHk6IHN0YXNoIHRoZSBsYW5lLTAgcHJvZHVj dCBpbiBTY3JhdGNoU2ltZDEyOCAod2hpY2gKLSsgIC8vIGlzIG5vbi1hbGxvY2F0YWJsZSwgc28g Y2Fubm90IGFsaWFzIGxocy9yaHMpIGFuZCBvbmx5IHdyaXRlIGRlc3QgYXQKLSsgIC8vIHRoZSB2 ZXJ5IGVuZCwgYWZ0ZXIgYm90aCBsaHMgYW5kIHJocyBoYXZlIGJlZW4gZnVsbHkgY29uc3VtZWQu Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgYSA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgIFJlZ2lzdGVyIGIgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rCi0rICBpZiAoSGFzUE9X RVI5KCkpIHsKLSsgICAgYXNfbWZ2c3JsZChhLCBsaHMpOwotKyAgICBhc19tZnZzcmxkKGIsIHJo cyk7Ci0rICB9IGVsc2UgewotKyAgICBhc194eHBlcm1kaShzY3JhdGNoLCBsaHMsIGxocywgMik7 Ci0rICAgIGFzX21mdnNyZChhLCBzY3JhdGNoKTsKLSsgICAgYXNfeHhwZXJtZGkoc2NyYXRjaCwg cmhzLCByaHMsIDIpOwotKyAgICBhc19tZnZzcmQoYiwgc2NyYXRjaCk7Ci0rICB9Ci0rICBhc19t dWxsZChhLCBhLCBiKTsKLSsgIGFzX210dnNyZChzY3JhdGNoLCBhKTsKLSsKLSsgIGFzX21mdnNy ZChhLCBsaHMpOwotKyAgYXNfbWZ2c3JkKGIsIHJocyk7Ci0rICBhc19tdWxsZChhLCBhLCBiKTsK LSsgIGFzX210dnNyZChkZXN0LCBhKTsKLSsgIGFzX3h4cGVybWRpKGRlc3QsIGRlc3QsIHNjcmF0 Y2gsIDApOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpiaXR3aXNlQW5kTm90U2ltZDEy OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAvLyBh bmRub3QobGhzLCByaHMpID0gbGhzICYgfnJocyA9IHh4bGFuZGMobGhzLCByaHMpCi0rICBhc194 eGxhbmRjKGRlc3QsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0 d2lzZVNlbGVjdFNpbWQxMjgoRmxvYXRSZWdpc3RlciBvblRydWUsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBvbkZhbHNlLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbWFza0Rl c3QpIHsKLSsgIC8vIHJlc3VsdCA9IChvblRydWUgJiBtYXNrKSB8IChvbkZhbHNlICYgfm1hc2sp Ci0rICAvLyB4eHNlbDogWEM9MOKGklhBLCBYQz0x4oaSWEIg4oaSIFhUID0gKFhBICYgflhDKSB8 IChYQiAmIFhDKQotKyAgLy8gTmVlZCBYQT1vbkZhbHNlLCBYQj1vblRydWUsIFhDPW1hc2suCi0r ICBhc194eHNlbChtYXNrRGVzdCwgb25GYWxzZSwgb25UcnVlLCBtYXNrRGVzdCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBvcGNudEludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteFVuYXJ5KAotKyAgICAgICp0aGlzLAotKyAg ICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNfdnBv cGNudGIodnJ0LCB2cmIpOyB9LAotKyAgICAgIHNyYywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJpdG1hc2tJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBk ZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg dGVtcCkgewotKyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyBTaW5nbGUtaW5zdHJ1Y3Rp b24gY29sbGFwc2Ugb24gUE9XRVIxMC4KLSsgICAgYXNfdmV4dHJhY3RibShkZXN0LCBzcmMpOwot KyAgICByZXR1cm47Ci0rICB9Ci0rICAvLyBQT1dFUjgrIHZicGVybXEtYmFzZWQgYml0bWFzazog Y3RsW2ldID0gKDE1LWkpKjggcHJvZHVjZXMgdGhlIHdhc20tc3BlYwotKyAgLy8gYml0bWFwIChi aXQgaSA9IE1TQiBvZiBMRSBsYW5lIGkpIGluIGR3MCBsb3cgMTYgYml0cy4KLSsgIGludDhfdCBj dGxbMTZdID0gezEyMCwgMTEyLCAxMDQsIDk2LCA4OCwgODAsIDcyLCA2NCwKLSsgICAgICAgICAg ICAgICAgICAgIDU2LCAgNDgsICA0MCwgIDMyLCAyNCwgMTYsIDgsICAwfTsKLSsgIGxvYWRDb25z dGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoY3RsKSwgdGVtcCk7Ci0rICBhc192 YnBlcm1xKHRlbXAuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCB0ZW1wLmVu Y29kaW5nKCkgJiAzMSk7Ci0rICBhc19tZnZzcmQoZGVzdCwgdGVtcCk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmJpdG1hc2tJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgdGVtcCkgewotKyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICBhc192ZXh0cmFjdGhtKGRl c3QsIHNyYyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIC8vIFNhbWUgcmVjaXBlIGFzIGJpdG1h c2tJbnQ4eDE2IGJ1dCBjdGwgcGlja3MgaGFsZndvcmQgTVNCczoKLSsgIC8vIEJFIGJpdCAoMTQt MmkpKjggZm9yIGxhbmUgaSwgcGx1cyA4IGlnbm9yZS1ieXRlcyAoaGlnaCBiaXQgc2V0KS4KLSsg IGludDhfdCBjdGxbMTZdID0gezExMiwgIDk2LCAgIDgwLCAgIDY0LCAgIDQ4LCAgIDMyLCAgIDE2 LCAgIDAsCi0rICAgICAgICAgICAgICAgICAgICAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4 LCAtMTI4LCAtMTI4LCAtMTI4fTsKLSsgIGxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50 OjpDcmVhdGVYMTYoY3RsKSwgdGVtcCk7Ci0rICBhc192YnBlcm1xKHRlbXAuZW5jb2RpbmcoKSAm IDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCB0ZW1wLmVuY29kaW5nKCkgJiAzMSk7Ci0rICBhc19t ZnZzcmQoZGVzdCwgdGVtcCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJpdG1hc2tJ bnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgewotKyAgaWYgKEhhc1BP V0VSMTAoKSkgewotKyAgICBhc192ZXh0cmFjdHdtKGRlc3QsIHNyYyk7Ci0rICAgIHJldHVybjsK LSsgIH0KLSsgIC8vIFNhbWUgcmVjaXBlIGFzIGJpdG1hc2tJbnQ4eDE2IGJ1dCBjdGwgcGlja3Mg d29yZCBNU0JzOgotKyAgLy8gQkUgYml0ICgxMi00aSkqOCBmb3IgbGFuZSBpLCBwbHVzIDEyIGln bm9yZS1ieXRlcyAoaGlnaCBiaXQgc2V0KS4KLSsgIGludDhfdCBjdGxbMTZdID0gezk2LCAgIDY0 LCAgIDMyLCAgIDAsICAgIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsCi0rICAgICAgICAgICAgICAg ICAgICAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4fTsKLSsg IGxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoY3RsKSwgdGVtcCk7 Ci0rICBhc192YnBlcm1xKHRlbXAuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMx LCB0ZW1wLmVuY29kaW5nKCkgJiAzMSk7Ci0rICBhc19tZnZzcmQoZGVzdCwgdGVtcCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJpdG1hc2tJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgdGVtcCkgewotKyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICBhc192ZXh0 cmFjdGRtKGRlc3QsIHNyYyk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIC8vIFNhbWUgcmVjaXBl IGFzIHRoZSBvdGhlciBiaXRtYXNrIHZhcmlhbnRzLiBjdGwgcGlja3MgZHdvcmQgTVNCczoKLSsg IC8vIEJFIGJpdCA2NCBmb3IgbGFuZSAwLCBCRSBiaXQgMCBmb3IgbGFuZSAxLCBwbHVzIDE0IGln bm9yZS1ieXRlcy4KLSsgIGludDhfdCBjdGxbMTZdID0gezY0LCAgIDAsICAgIC0xMjgsIC0xMjgs IC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsCi0rICAgICAgICAgICAgICAgICAgICAtMTI4LCAtMTI4 LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4fTsKLSsgIGxvYWRDb25zdGFudFNp bWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoY3RsKSwgdGVtcCk7Ci0rICBhc192YnBlcm1x KHRlbXAuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCB0ZW1wLmVuY29kaW5n KCkgJiAzMSk7Ci0rICBhc19tZnZzcmQoZGVzdCwgdGVtcCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmNvbXBhcmVJbnQ2NHgyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0 UmVnaXN0ZXIgbGhzRGVzdCkgewotKyAgY29tcGFyZUludDY0eDIoY29uZCwgbGhzRGVzdCwgcmhz LCBsaHNEZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUludDY0eDIo QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0 Vm14Q29tcGFyZSgqdGhpcywgY29uZCwgbGhzLCByaHMsIGRlc3QsIFZNWF9CSU5BUllfV1JBUFBF Uih2Y21wZXF1ZCksCi0rICAgICAgICAgICAgICAgICBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGd0 c2QpLCBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGd0dWQpKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bWluRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxo c0Rlc3QpIHsKLSsgIG1pbkZsb2F0MzJ4NChsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2bWluc3AoZGVzdCwgbGhzLCByaHMpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QsIEZsb2F0UmVnaXN0ZXIgdGVtcDEsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIHsKLSsgIC8vIFdhc20gbWluIHdp dGggTmFOIHByb3BhZ2F0aW9uLgotKyAgLy8gRGV0ZWN0IE5hTiBpbiBlaXRoZXIgb3BlcmFuZCAo bm90IHZpYSBhZGQgd2hpY2ggZmFsc2VseSBmbGFncyBpbmYrKC1pbmYpKS4KLSsgIC8vIENvbXB1 dGUgbWFzayBhbmQgYWRkIEJFRk9SRSBtaW4gKG1pbiBtYXkgY2xvYmJlciBsaHMgdmlhIGRlc3Qg YWxpYXNpbmcpLgotKyAgYXNfeHZjbXBlcXNwKHRlbXAxLCBsaHMsIGxocyk7Ci0rICBhc194dmNt cGVxc3AodGVtcDIsIHJocywgcmhzKTsKLSsgIGFzX3h4bGFuZCh0ZW1wMSwgdGVtcDEsIHRlbXAy KTsKLSsgIGFzX3h2YWRkc3AodGVtcDIsIGxocywgcmhzKTsKLSsgIGFzX3h2bWluc3AoZGVzdCwg bGhzLCByaHMpOwotKyAgYXNfeHhzZWwoZGVzdCwgdGVtcDIsIGRlc3QsIHRlbXAxKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgcmhzLCBG bG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKLSsgIG1pbkZsb2F0NjR4MihsaHNEZXN0LCByaHMsIGxo c0Rlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDY0eDIoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2bWluZHAoZGVzdCwgbGhz LCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDY0eDIoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIEZsb2F0UmVnaXN0ZXIgdGVtcDEsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIHsKLSsg IC8vIE5hTiBtYXNrIGFuZCBhZGQgbXVzdCBiZSBjb21wdXRlZCBCRUZPUkUgbWluICh3aGljaCBt YXkgY2xvYmJlciBsaHMgdmlhCi0rICAvLyBkZXN0KS4KLSsgIGFzX3h2Y21wZXFkcCh0ZW1wMSwg bGhzLCBsaHMpOwotKyAgYXNfeHZjbXBlcWRwKHRlbXAyLCByaHMsIHJocyk7Ci0rICBhc194eGxh bmQodGVtcDEsIHRlbXAxLCB0ZW1wMik7ICAvLyB0ZW1wMSA9IH4wIHdoZW4gYm90aCBub24tTmFO Ci0rICBhc194dmFkZGRwKHRlbXAyLCBsaHMsIHJocyk7ICAgICAvLyB0ZW1wMiA9IGFkZCAoTmFO IHNvdXJjZSkKLSsgIGFzX3h2bWluZHAoZGVzdCwgbGhzLCByaHMpOyAgICAgIC8vIGRlc3QgPSBt aW4gKG1heSBjbG9iYmVyIGxocykKLSsgIGFzX3h4c2VsKGRlc3QsIHRlbXAyLCBkZXN0LCB0ZW1w MSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heEZsb2F0MzJ4NChGbG9hdFJlZ2lz dGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7Ci0rICBtYXhGbG9hdDMyeDQobGhzRGVz dCwgcmhzLCBsaHNEZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQz Mng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dm1heHNw KGRlc3QsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQz Mng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LCBGbG9hdFJlZ2lzdGVyIHRl bXAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRl bXAyKSB7Ci0rICAvLyBXYXNtIG1heCB3aXRoIE5hTiBwcm9wYWdhdGlvbiwgdXNpbmcgdGVtcCBy ZWdpc3RlcnMuCi0rICBhc194dmNtcGVxc3AodGVtcDEsIGxocywgbGhzKTsKLSsgIGFzX3h2Y21w ZXFzcCh0ZW1wMiwgcmhzLCByaHMpOwotKyAgYXNfeHhsYW5kKHRlbXAxLCB0ZW1wMSwgdGVtcDIp OwotKyAgYXNfeHZhZGRzcCh0ZW1wMiwgbGhzLCByaHMpOwotKyAgYXNfeHZtYXhzcChkZXN0LCBs aHMsIHJocyk7Ci0rICBhc194eHNlbChkZXN0LCB0ZW1wMiwgZGVzdCwgdGVtcDEpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciByaHMsIEZs b2F0UmVnaXN0ZXIgbGhzRGVzdCkgewotKyAgbWF4RmxvYXQ2NHgyKGxoc0Rlc3QsIHJocywgbGhz RGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heEZsb2F0NjR4MihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZtYXhkcChkZXN0LCBsaHMs IHJocyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heEZsb2F0NjR4MihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wMSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgewotKyAg YXNfeHZjbXBlcWRwKHRlbXAxLCBsaHMsIGxocyk7Ci0rICBhc194dmNtcGVxZHAodGVtcDIsIHJo cywgcmhzKTsKLSsgIGFzX3h4bGFuZCh0ZW1wMSwgdGVtcDEsIHRlbXAyKTsKLSsgIGFzX3h2YWRk ZHAodGVtcDIsIGxocywgcmhzKTsKLSsgIGFzX3h2bWF4ZHAoZGVzdCwgbGhzLCByaHMpOwotKyAg YXNfeHhzZWwoZGVzdCwgdGVtcDIsIGRlc3QsIHRlbXAxKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6dW5zaWduZWRUcnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChGbG9hdFJlZ2lzdGVy IHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgYXNfeHZjdnNwdXh3cyhkZXN0LCBzcmMp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRyYWN0TGFuZUludDY0eDIodWludDMy X3QgbGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAgTU9aX0FTU0VSVChsYW5lIDwgMik7 Ci0rICBpZiAobGFuZSA9PSAxKSB7Ci0rICAgIC8vIExhbmUgMSA9IEJFIGR3b3JkIDAgPSByZWdp c3RlciBiaXRzWzA6NjNdLgotKyAgICBhc19tZnZzcmQoZGVzdC5yZWcsIHNyYyk7Ci0rICB9IGVs c2UgewotKyAgICAvLyBMYW5lIDAgPSBCRSBkd29yZCAxLgotKyAgICBpZiAoSGFzUE9XRVI5KCkp IHsKLSsgICAgICBhc19tZnZzcmxkKGRlc3QucmVnLCBzcmMpOwotKyAgICB9IGVsc2UgewotKyAg ICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICAgICAgYXNfeHhwZXJt ZGkoc2NyYXRjaCwgc3JjLCBzcmMsIDIpOwotKyAgICAgIGFzX21mdnNyZChkZXN0LnJlZywgc2Ny YXRjaCk7Ci0rICAgIH0KLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFj ZUxhbmVJbnQ2NHgyKHVuc2lnbmVkIGxhbmUsIFJlZ2lzdGVyNjQgcmhzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKLSsg IE1PWl9BU1NFUlQobGFuZSA8IDIpOwotKyAgaWYgKEhhc1BPV0VSMTAoKSkgewotKyAgICAvLyAx IGluc24sIG5vIHNjcmF0Y2ggVlNSLiBVSU0gYnl0ZSBvZmZzZXQ6IGxhbmUgMCDihpIgOCwgbGFu ZSAxIOKGkiAwLgotKyAgICBhc192aW5zZChsaHNEZXN0LCByaHMucmVnLCAoMSAtIGxhbmUpICog OCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgq dGhpcyk7Ci0rICBhc19tdHZzcmQoc2NyYXRjaCwgcmhzLnJlZyk7Ci0rICBpZiAobGFuZSA9PSAw KSB7Ci0rICAgIC8vIFJlcGxhY2UgZHcxIChMRSBsb3cgPSBsYW5lIDApLiBLZWVwIGR3MCAobGFu ZSAxKS4KLSsgICAgLy8gZG09MGIwMDogW2xoc0Rlc3QuZHcwLCBzY3JhdGNoLmR3MF0KLSsgICAg YXNfeHhwZXJtZGkobGhzRGVzdCwgbGhzRGVzdCwgc2NyYXRjaCwgMCk7Ci0rICB9IGVsc2Ugewot KyAgICAvLyBSZXBsYWNlIGR3MCAoTEUgaGlnaCA9IGxhbmUgMSkuIEtlZXAgZHcxIChsYW5lIDAp LgotKyAgICAvLyBkbT0wYjAxOiBbc2NyYXRjaC5kdzAsIGxoc0Rlc3QuZHcxXQotKyAgICBhc194 eHBlcm1kaShsaHNEZXN0LCBzY3JhdGNoLCBsaHNEZXN0LCAxKTsKLSsgIH0KLSt9Ci0rCi0rLy8g U0lNRCAzLW9wZXJhbmQgYXJpdGhtZXRpYyAoeDg2X3NoYXJlZC1zdHlsZSBzaWduYXR1cmVzKS4K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2YWRkc3AoZGVzdCwgbGhzLCByaHMpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2YWRkZHAoZGVzdCwgbGhzLCByaHMpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBG bG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQ UEVSKHZhZGR1aG0pLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmFkZEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBF bWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodmFkZHVibSksIGxocywgcmhz LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZGl2RmxvYXQzMng0KEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dmRpdnNwKGRlc3QsIGxo cywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0cmFjdExhbmVJbnQxNng4 KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7Ci0rICBNT1pfQVNTRVJUKGxhbmUg PCA4KTsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICBhc192ZXh0cmFjdHVoKFNjcmF0Y2hT aW1kMTI4UmVnLCBzcmMsIDE0IC0gMiAqIGxhbmUpOwotKyAgICBhc19tZnZzcmQoZGVzdCwgU2Ny YXRjaFNpbWQxMjhSZWcpOwotKyAgICBhc19leHRzaChkZXN0LCBkZXN0KTsKLSsgICAgcmV0dXJu OwotKyAgfQotKyAgRXh0cmFjdExhbmVUb0dQUigqdGhpcywgbGFuZSwgc3JjLCBkZXN0LCAyLCAx Nik7Ci0rICBhc19leHRzaChkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6ZXh0cmFjdExhbmVJbnQzMng0KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7 Ci0rICBNT1pfQVNTRVJUKGxhbmUgPCA0KTsKLSsgIEV4dHJhY3RMYW5lVG9HUFIoKnRoaXMsIGxh bmUsIHNyYywgZGVzdCwgNCwgMzIpOwotKyAgLy8gRXh0cmFjdExhbmVUb0dQUiBsZWF2ZXMgdGhl IGFkamFjZW50IGxhbmUgaW4gdGhlIGhpZ2ggMzIgYml0cyBmb3IgdGhlCi0rICAvLyB1bnNoaWZ0 ZWQgbGFuZXMgKDAgYW5kIDIpOyBjYW5vbmljYWxpemUgdG8gYSBzaWduLWV4dGVuZGVkIGkzMiwg YXMgdGhlCi0rICAvLyBpOHgxNi9pMTZ4OCBleHRyYWN0cyBkbyB3aXRoIGV4dHNiL2V4dHNoLiBB IGNvbnN1bWVyIHRoYXQgcmVhZHMgdGhlIGZ1bGwKLSsgIC8vIDY0LWJpdCByZWdpc3RlciAtLSBl LmcuIHRoZSBQT1dFUjggaTMyLmN0eiBlbXVsYXRpb24sIHdob3NlIDY0LWJpdCBuZWcvYW5kLgot KyAgLy8gd2l0aCBhIDMyLWJpdCBjbnRsencgb3RoZXJ3aXNlIG1pcy1oYW5kbGVzIGEgemVybyBs b3cgd29yZCBvdmVyIG5vbnplcm8KLSsgIC8vIGhpZ2ggZ2FyYmFnZSBhbmQgcmV0dXJucyAtMSAt LSByZXF1aXJlcyB0aGlzLgotKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmV4dHJhY3RMYW5lSW50OHgxNih1aW50MzJfdCBsYW5lLCBGbG9hdFJl Z2lzdGVyIHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgZGVzdCkgewotKyAgTU9aX0FTU0VSVChsYW5lIDwgMTYpOwotKyAgaWYgKEhhc1BPV0VS OSgpKSB7Ci0rICAgIGFzX3ZleHRyYWN0dWIoU2NyYXRjaFNpbWQxMjhSZWcsIHNyYywgMTUgLSBs YW5lKTsKLSsgICAgYXNfbWZ2c3JkKGRlc3QsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKLSsgICAgYXNf ZXh0c2IoZGVzdCwgZGVzdCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIEV4dHJhY3RMYW5lVG9H UFIoKnRoaXMsIGxhbmUsIHNyYywgZGVzdCwgMSwgOCk7Ci0rICBhc19leHRzYihkZXN0LCBkZXN0 KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4SW50MTZ4OChGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5B UllfV1JBUFBFUih2bWF4c2gpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Om1heEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1heHN3KSwgbGhz LCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhJbnQ4eDE2KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhp cywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtYXhzYiksIGxocywgcmhzLCBkZXN0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2 bWluc2IpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11 bEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBFbWl0Vm14 QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm11bHV3bSksIGxocywgcmhzLCBkZXN0 KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmFycm93SW50MTZ4OChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIC8vIE9uIExFLCBWTVggcGFjayBzd2Fw cyBvcGVyYW5kIG9yZGVyIHZzIFdhc20gY29udmVudGlvbi4KLSsgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2cGtzaHNzKSwgcmhzLCBsaHMsIGRlc3QpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGxhdFgyKFJlZ2lzdGVyNjQgc3JjLCBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAgICBhc19tdHZzcmRkKGRlc3Qs IHNyYy5yZWcsIHNyYy5yZWcpOwotKyAgfSBlbHNlIHsKLSsgICAgYXNfbXR2c3JkKGRlc3QsIHNy Yy5yZWcpOwotKyAgICBhc194eHBlcm1kaShkZXN0LCBkZXN0LCBkZXN0LCAwKTsKLSsgIH0KLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JB UFBFUih2c3VidXdtKSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpzd2l6emxlSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7Ci0rICAvLyBXYXNtIGk4eDE2LnN3aXp6bGU6IHJlc3VsdFtpXSA9IChyaHNbaV0gPCAxNikg PyBsaHNbcmhzW2ldXSA6IDAuCi0rICAvLwotKyAgLy8gU3RyYXRlZ3k6IGJ1aWxkIGN0cmwgaW4g U2NyYXRjaFNpbWQxMjggKHdoaWNoIGNhbid0IGFsaWFzIGlucHV0cwotKyAgLy8gYmVjYXVzZSB2 MCBpcyBub24tYWxsb2NhdGFibGUpLiBVc2UgdnN1YnVicyhzcGxhdCgxNSksIHJocykgdG8KLSsg IC8vIHByb2R1Y2UgY3RybCA9IG1heCgwLCAxNSAtIHJocyk7IHRoZSBzYXR1cmF0aW9uIGNsYW1w cyBvdXQtb2YtcmFuZ2UKLSsgIC8vIGluZGljZXMgdG8gMCwgYW5kIHRob3NlIHBvc2l0aW9ucyBn ZXQgbWFza2VkIG9mZiBiZWxvdy4KLSsgIC8vCi0rICAvLyBUaGUgbWFzayBpcyBjb21wdXRlZCB2 aWEgdmNtcGd0dWIocmhzLCBzcGxhdCgxNSkpICsgeHhsbm9yIOKAlCAweEZGCi0rICAvLyB3aGVy ZSByaHMgPD0gMTUuIFJlZm9ybXVsYXRpbmcgInJocyA8IDE2IiBhcyAiIShyaHMgPiAxNSkiIGxl dHMgdXMKLSsgIC8vIHVzZSB2c3BsdGlzYiB3aXRoIGEgNS1iaXQgc2lnbmVkIGltbWVkaWF0ZSAo UDcrLCAxIGluc24sIG5vIEdQUgotKyAgLy8gc2NyYXRjaCkgZm9yIGJvdGggc3BsYXQtb2YtMTUg c2l0ZXMsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMKLSsgIC8vIG1vdmVQdHIoMHgwRjBGMEYwRikv bW92ZVB0cigweDEwMTAxMDEwKSArIHNwbGF0WDQgZGFuY2UuCi0rICAvLwotKyAgLy8gQWxpYXNp bmc6IGRlc3QgbWF5IGVxdWFsIGxocyAod2FzbSBiYXNlbGluZSBjYWxscyBzd2l6emxlSW50OHgx NigKLSsgIC8vIHJzZCwgcnMsIHJzZCk7IElvbidzIHVzZVJlZ2lzdGVyQXRTdGFydCBwZXJtaXRz IHRoZSBzYW1lKS4gV2hlbgotKyAgLy8gZGVzdCAhPSByaHMsIGN0cmwgY2FuIGJlIGJ1aWx0IGlu IHNjcmF0Y2ggYW5kIHRoZSBtYXNrIGNvbXB1dGVkCi0rICAvLyBhZnRlciB0aGUgcGVybXV0ZSAo cmhzIGlzIHN0aWxsIGFsaXZlKS4gV2hlbiBkZXN0ID09IHJocywgdGhlCi0rICAvLyBwZXJtdXRl IHdvdWxkIGNsb2JiZXIgcmhzIGJlZm9yZSB3ZSBjb3VsZCBjb21wdXRlIHRoZSBtYXNrLCBzbyB0 aGUKLSsgIC8vIG1hc2sgZ29lcyB0byB0aGUgcmVkIHpvbmUgZmlyc3QuCi0rICBTY3JhdGNoU2lt ZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgdWludDhfdCBzID0gc2NyYXRjaC5lbmNvZGlu ZygpICYgMzE7Ci0rICB1aW50OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMxOwotKyAgdWludDhf dCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKLSsgIHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2Rpbmco KSAmIDMxOwotKwotKyAgaWYgKGRlc3QgIT0gcmhzKSB7Ci0rICAgIGFzX3ZzcGx0aXNiKHMsIDE1 KTsKLSsgICAgYXNfdnN1YnVicyhzLCBzLCByKTsgICAvLyBzY3JhdGNoID0gY3RybAotKyAgICBh c192cGVybShkLCBsLCBsLCBzKTsgIC8vIGRlc3QgPSB2cGVybShsaHMsIGxocywgY3RybCkKLSsg ICAgYXNfdnNwbHRpc2IocywgMTUpOwotKyAgICBhc192Y21wZ3R1YihzLCByLCBzKTsgICAgICAg ICAgICAgLy8gc2NyYXRjaCA9IDB4RkYgd2hlcmUgcmhzID4gMTUKLSsgICAgYXNfeHhsYW5kYyhk ZXN0LCBkZXN0LCBzY3JhdGNoKTsgIC8vIGRlc3QgJj0gfnNjcmF0Y2ggKD0gYnl0ZXMtdG8ta2Vl cCkKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgLy8gZGVzdCA9PSByaHM6IHZwZXJtIGNsb2Ji ZXJzIHJocywgc28gYnVpbGQgdGhlIGJ5dGVzLXRvLXplcm8gbWFzayBmaXJzdAotKyAgLy8gYW5k IHN0YXNoIGl0LiBUaGUgeHhsYW5kYyBhdCB0aGUgZW5kIGNvbnN1bWVzIHRoZSB1bi1pbnZlcnRl ZCBmb3JtLgotKyAgYXNfdnNwbHRpc2IocywgMTUpOwotKyAgYXNfdmNtcGd0dWIocywgciwgcyk7 ICAvLyBzY3JhdGNoID0gMHhGRiB3aGVyZSByaHMgPiAxNQotKyAgUmVkWm9uZVN0YXNoU2ltZDEy OCgqdGhpcywgc2NyYXRjaCwgMCk7Ci0rICBhc192c3BsdGlzYihzLCAxNSk7Ci0rICBhc192c3Vi dWJzKHMsIHMsIHIpOyAgIC8vIHNjcmF0Y2ggPSBjdHJsCi0rICBhc192cGVybShkLCBsLCBsLCBz KTsgIC8vIGRlc3QgPSB2cGVybShsaHMsIGxocywgY3RybCkKLSsgIFJlZFpvbmVSZXN0b3JlU2lt ZDEyOCgqdGhpcywgMCwgc2NyYXRjaCk7Ci0rICBhc194eGxhbmRjKGRlc3QsIGRlc3QsIHNjcmF0 Y2gpOyAgLy8gZGVzdCAmPSB+c2NyYXRjaCAoPSBieXRlcy10by1rZWVwKQotK30KLSsvLyBTSU1E IDMtb3BlcmFuZCBhcml0aG1ldGljIChjb250aW51ZWQpLgotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmFkZEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBF bWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodmFkZHV3bSksIGxocywgcmhz LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkSW50NjR4MihGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZN WF9CSU5BUllfV1JBUFBFUih2YWRkdWRtKSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjphZGRTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVS KHZhZGRzaHMpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmFkZFNhdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0r ICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodmFkZHNicyksIGxocywg cmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZGl2RmxvYXQ2NHgyKEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dmRpdmRwKGRlc3Qs IGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluSW50MTZ4OChGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnkoKnRoaXMs IFZNWF9CSU5BUllfV1JBUFBFUih2bWluc2gpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6Om1pbkludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVn aXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1p bnN3KSwgbGhzLCByaHMsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxG bG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2 bXVsc3AoZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxG bG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX3h2 bXVsZHAoZGVzdCwgbGhzLCByaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxJ bnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIFplcm9TaW1kMTI4KCp0aGlzLCBzY3JhdGNo KTsKLSsgIEVtaXRWbXhUZXJuYXJ5KAotKyAgICAgICp0aGlzLAotKyAgICAgIFtdKEFzc2VtYmxl ciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwgdWludDhfdCB2cmMp IHsKLSsgICAgICAgIGEuYXNfdm1sYWRkdWhtKHZydCwgdnJhLCB2cmIsIHZyYyk7Ci0rICAgICAg fSwKLSsgICAgICBsaHMsIHJocywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Om5hcnJvd0ludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSB7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnBrc3dz cyksIHJocywgbGhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViRmxv YXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dnN1 YnNwKGRlc3QsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViRmxv YXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBhc194dnN1 YmRwKGRlc3QsIGxocywgcmhzKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViSW50 MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5h cnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3VidWhtKSwgbGhzLCByaHMsIGRlc3QpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9X UkFQUEVSKHZzdWJ1ZG0pLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnN1YkludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0r ICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnN1YnVibSksIGxocywg cmhzLCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViU2F0SW50MTZ4OChG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIEVtaXRWbXhCaW5hcnko KnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3Vic2hzKSwgbGhzLCByaHMsIGRlc3QpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFS WV9XUkFQUEVSKHZzdWJzYnMpLCBsaHMsIHJocywgZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OndpZGVuRG90SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgewotKyAgLy8gaTMyeDQuZG90X2kxNng4X3M6IHJlc3VsdFtrXSA9IGxoc1sya10q cmhzWzJrXSArIGxoc1syaysxXSpyaHNbMmsrMV0uCi0rICAvLyB2bXN1bXNobSBjb21wdXRlcyBl eGFjdGx5IHRoYXQgZm9yIGVhY2ggaTMyIGxhbmUgcGx1cyBhbiBhZGRlbmQgKFZSQykuCi0rICAv LyBXaXRoIFZSQyA9IDAsIHRoZSBhZGRlbmQgZGlzYXBwZWFycyBhbmQgd2UgZ2V0IHRoZSB3YXNt IHNwZWMgcmVzdWx0IGluCi0rICAvLyBhIHNpbmdsZSBpbnN0cnVjdGlvbi4geHhseG9yIHplcm9z IHRoZSBzY3JhdGNoIGluIDEgaW5zbiwgc28gdG90YWwgaXMKLSsgIC8vIDIgaW5zbnMgdnMgdGhl IG9sZCB2bXVsZXNoL3ZtdWxvc2gvdmFkZHV3bSB0cmlvLgotKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSBzY3JhdGNoKCp0aGlzKTsKLSsgIGFzX3h4bHhvcihzY3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNo KTsKLSsgIGFzX3Ztc3Vtc2htKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBsaHMuZW5jb2RpbmcoKSAm IDMxLCByaHMuZW5jb2RpbmcoKSAmIDMxLAotKyAgICAgICAgICAgICAgc2NyYXRjaC5lbmNvZGlu ZygpICYgMzEpOwotK30KLSsKLSsvLyBTSU1EIHZhcmlhYmxlLXNoaWZ0IGFuZCBGTUEgaGVscGVy cy4KLSsvLyBQYXR0ZXJuOiBzcGxhdCB0aGUgR1BSIHNoaWZ0IGNvdW50IGFjcm9zcyBhbGwgbGFu ZXMgb2YgYSBzY3JhdGNoIFZTUiwKLSsvLyB0aGVuIGlzc3VlIGEgdmVjdG9yLXNoaWZ0IG9uIGxo cyBhbmQgdGhlIHNwbGF0LiB2c2x7YixofSAvIHZzcntiLGh9IC8KLSsvLyB2c3Jhe2IsaH0gdXNl IHRoZSBsb3cgMy1vci00IGJpdHMgb2YgZWFjaCBsYW5lJ3Mgc2hpZnQgY291bnQsIGV4YWN0bHkK LSsvLyBtYXRjaGluZyB3YXNtIG1vZHVsby1OIHNoaWZ0IHNlbWFudGljcy4KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpsZWZ0U2hpZnRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3Rl ciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7Ci0rICBz cGxhdFgxNihyaHMsIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFS WV9XUkFQUEVSKHZzbGIpLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpyaWdodFNoaWZ0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIg cmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIHNw bGF0WDE2KHJocywgc2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZ X1dSQVBQRVIodnNyYWIpLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjp1bnNpZ25lZFJpZ2h0U2hpZnRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBS ZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRj aCgqdGhpcyk7Ci0rICBzcGxhdFgxNihyaHMsIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFyeSgq dGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmIpLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsZWZ0U2hpZnRJbnQxNng4KEZsb2F0UmVnaXN0ZXIg bGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgq dGhpcyk7Ci0rICBzcGxhdFg4KHJocywgc2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0aGlz LCBWTVhfQklOQVJZX1dSQVBQRVIodnNsaCksIGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJpZ2h0U2hpZnRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhz LCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRo aXMpOwotKyAgc3BsYXRYOChyaHMsIHNjcmF0Y2gpOwotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywg Vk1YX0JJTkFSWV9XUkFQUEVSKHZzcmFoKSwgbGhzLCBzY3JhdGNoLCBkZXN0KTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChGbG9hdFJlZ2lz dGVyIGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBTY3JhdGNoU2ltZDEyOFNj b3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgc3BsYXRYOChyaHMsIHNjcmF0Y2gpOwotKyAgRW1pdFZt eEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmgpLCBsaHMsIHNjcmF0Y2gsIGRl c3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsZWZ0U2hpZnRJbnQzMng0KEZsb2F0 UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUg c2NyYXRjaCgqdGhpcyk7Ci0rICBzcGxhdFg0KHJocywgc2NyYXRjaCk7Ci0rICBFbWl0Vm14Qmlu YXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNsdyksIGxocywgc2NyYXRjaCwgZGVzdCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxlZnRTaGlmdEludDY0eDIoRmxvYXRSZWdp c3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3Jh dGNoKCp0aGlzKTsKLSsgIHNwbGF0WDQocmhzLCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5hcnko KnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2xkKSwgbGhzLCBzY3JhdGNoLCBkZXN0KTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmlnaHRTaGlmdEludDMyeDQoRmxvYXRSZWdpc3Rl ciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRj aCgqdGhpcyk7Ci0rICBzcGxhdFg0KHJocywgc2NyYXRjaCk7Ci0rICBFbWl0Vm14QmluYXJ5KCp0 aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyYXcpLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0SW50NjR4MihGbG9hdFJlZ2lzdGVy IGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNo KCp0aGlzKTsKLSsgIHNwbGF0WDQocmhzLCBzY3JhdGNoKTsKLSsgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3JhZCksIGxocywgc2NyYXRjaCwgZGVzdCk7Ci0rfQot KwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkUmlnaHRTaGlmdEludDMyeDQoRmxvYXRS ZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKLSsgIHNwbGF0WDQocmhzLCBzY3JhdGNoKTsKLSsgIEVt aXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3J3KSwgbGhzLCBzY3JhdGNo LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRSaWdodFNoaWZ0 SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0r ICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOwotKyAgc3BsYXRYNChyaHMsIHNj cmF0Y2gpOwotKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmQp LCBsaHMsIHNjcmF0Y2gsIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbWFG bG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNyYzIsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkgewotKyAg YXNfeHZtYWRkYXNwKHNyY0Rlc3QsIHNyYzEsIHNyYzIpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpmbWFGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNy YzIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3Jj RGVzdCkgewotKyAgYXNfeHZtYWRkYWRwKHNyY0Rlc3QsIHNyYzEsIHNyYzIpOwotK30KLSsKLSsv L319fSBjaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZQotKwotK30gIC8vIG5hbWVzcGFjZSBqaXQK LSt9ICAvLyBuYW1lc3BhY2UganMKLSsKLSsjZW5kaWYgLyogaml0X3BwYzY0X01hY3JvQXNzZW1i bGVyX3BwYzY0X2lubF9oICovCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fz c2VtYmxlci1wcGM2NC5jcHAgYi9qcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0 LmNwcAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMDAwMC4uNzAyZmIzY2Q0 Y2JhCi0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVy LXBwYzY0LmNwcAotQEAgLTAsMCArMSwzNDY3IEBACi0rLyogLSotIE1vZGU6IEMrKzsgdGFiLXdp ZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotKyAq IHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKLSsgKiBUaGlzIFNvdXJjZSBDb2Rl IEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCi0rICog TGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVk IHdpdGggdGhpcwotKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxs YS5vcmcvTVBMLzIuMC8uICovCi0rCi0rI2luY2x1ZGUgImppdC9wcGM2NC9NYWNyb0Fzc2VtYmxl ci1wcGM2NC5oIgotKwotKyNpbmNsdWRlICJqaXQvQmFpbG91dHMuaCIKLSsjaW5jbHVkZSAiaml0 L0Jhc2VsaW5lRnJhbWUuaCIKLSsjaW5jbHVkZSAiaml0L0ZsdXNoSUNhY2hlLmgiCi0rI2luY2x1 ZGUgImppdC9KaXRGcmFtZXMuaCIKLSsjaW5jbHVkZSAiaml0L0ppdFJ1bnRpbWUuaCIKLSsjaW5j bHVkZSAiaml0L01hY3JvQXNzZW1ibGVyLmgiCi0rI2luY2x1ZGUgImppdC9Nb3ZlRW1pdHRlci5o IgotKyNpbmNsdWRlICJqaXQvcHBjNjQvU2hhcmVkSUNSZWdpc3RlcnMtcHBjNjQuaCIKLSsjaW5j bHVkZSAidm0vSml0QWN0aXZhdGlvbi5oIgotKyNpbmNsdWRlICJ2bS9KU0NvbnRleHQuaCIKLSsj aW5jbHVkZSAid2FzbS9XYXNtU3R1YnMuaCIKLSsKLSsjaW5jbHVkZSAiaml0L01hY3JvQXNzZW1i bGVyLWlubC5oIgotKwotK25hbWVzcGFjZSBqcyB7Ci0rbmFtZXNwYWNlIGppdCB7Ci0rCi0rTWFj cm9Bc3NlbWJsZXImIE1hY3JvQXNzZW1ibGVyUFBDNjQ6OmFzTWFzbSgpIHsKLSsgIHJldHVybiAq c3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXIqPih0aGlzKTsKLSt9Ci0rCi0rY29uc3QgTWFjcm9B c3NlbWJsZXImIE1hY3JvQXNzZW1ibGVyUFBDNjQ6OmFzTWFzbSgpIGNvbnN0IHsKLSsgIHJldHVy biAqc3RhdGljX2Nhc3Q8Y29uc3QgTWFjcm9Bc3NlbWJsZXIqPih0aGlzKTsKLSt9Ci0rCi0rLy8g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rLy8gT3V0LW9mLWxpbmUgZmFrZSBleGl0IGZyYW1lCi0rCi0rYm9vbCBNYWNyb0Fz c2VtYmxlclBQQzY0Q29tcGF0OjpidWlsZE9PTEZha2VFeGl0RnJhbWUodm9pZCogZmFrZVJldHVy bkFkZHIpIHsKLSsgIGFzTWFzbSgpLlB1c2goRnJhbWVEZXNjcmlwdG9yKEZyYW1lVHlwZTo6SW9u SlMpKTsKLSsgIGFzTWFzbSgpLlB1c2goSW1tUHRyKGZha2VSZXR1cm5BZGRyKSk7Ci0rICBhc01h c20oKS5QdXNoKEZyYW1lUG9pbnRlcik7Ci0rICByZXR1cm4gdHJ1ZTsKLSt9Ci0rCi0rLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rLy8gTG9hZCBpbnQzMiBvciBkb3VibGUgZnJvbSBtZW1vcnkKLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyUFBDNjRDb21wYXQ6OmxvYWRJbnQzMk9yRG91YmxlKGNvbnN0IEFkZHJlc3MmIHNy YywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRo aXMpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIExhYmVsIGVu ZDsKLSsKLSsgIC8vIExvYWQgdGhlIGJveGVkIHZhbHVlIGFuZCBzdGFzaCBpbiB0aGUgRlBSIGlt bWVkaWF0ZWx5LCB0aGVuIHJldXNlIHRoZQotKyAgLy8gR1BSIGZvciB0aGUgdGFnIHRlc3QuICBP bmx5IG9uZSBzY3JhdGNoIEdQUiBpcyBoZWxkIGhlcmUgc28gdGhhdAotKyAgLy8gYnJhbmNoVGVz dEludDMyIGNhbiBhY3F1aXJlIHRoZSBzZWNvbmQgb25lIGZvciB0aGUgSW1tVGFnIGNvbnN0YW50 LgotKyAgbG9hZFB0cihBZGRyZXNzKHNyYy5iYXNlLCBzcmMub2Zmc2V0KSwgc2NyYXRjaCk7Ci0r ICBhc19tdHZzcmQoZGVzdCwgc2NyYXRjaCk7Ci0rICB4X3NyZGkoc2NyYXRjaCwgc2NyYXRjaCwg SlNWQUxfVEFHX1NISUZUKTsKLSsgIGFzTWFzbSgpLmJyYW5jaFRlc3RJbnQzMihBc3NlbWJsZXI6 Ok5vdEVxdWFsLCBzY3JhdGNoLCAmZW5kKTsKLSsgIC8vIEl0IHdhcyBhbiBpbnQzMi4gIFJlY292 ZXIgdGhlIGJveGVkIHZhbHVlIGZyb20gdGhlIEZQUiwgc2lnbi1leHRlbmQKLSsgIC8vIHRoZSBs b3cgMzIgYml0cywgYW5kIGNvbnZlcnQgdG8gZG91YmxlLgotKyAgYXNfbWZ2c3JkKHNjcmF0Y2gs IGRlc3QpOwotKyAgYXNfZXh0c3coc2NyYXRjaCwgc2NyYXRjaCk7Ci0rICBhc19tdHZzcmQoZGVz dCwgc2NyYXRjaCk7Ci0rICBhc19mY2ZpZChkZXN0LCBkZXN0KTsKLSsKLSsgIGJpbmQoJmVuZCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6bG9hZEludDMyT3JEb3Vi bGUoY29uc3QgQmFzZUluZGV4JiBhZGRyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgTGFiZWwgZW5kOwotKwotKyAgY29tcHV0ZVNjYWxlZEFkZHJlc3MoYWRk ciwgc2NyYXRjaCk7Ci0rICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgYWRkci5vZmZzZXQpLCBz Y3JhdGNoKTsKLSsgIGFzX210dnNyZChkZXN0LCBzY3JhdGNoKTsKLSsgIHhfc3JkaShzY3JhdGNo LCBzY3JhdGNoLCBKU1ZBTF9UQUdfU0hJRlQpOwotKyAgYXNNYXNtKCkuYnJhbmNoVGVzdEludDMy KEFzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2gsICZlbmQpOwotKyAgYXNfbWZ2c3JkKHNjcmF0 Y2gsIGRlc3QpOwotKyAgYXNfZXh0c3coc2NyYXRjaCwgc2NyYXRjaCk7Ci0rICBhc19tdHZzcmQo ZGVzdCwgc2NyYXRjaCk7Ci0rICBhc19mY2ZpZChkZXN0LCBkZXN0KTsKLSsKLSsgIGJpbmQoJmVu ZCk7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKy8vIENvbnZlcnNpb24gZnVuY3Rpb25zCi0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojpjb252ZXJ0VUludDMyVG9Eb3VibGUoUmVnaXN0 ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gbXR2c3J3ejogVlNSW2Rlc3RdLmR3 MCA9IHplcm9fZXh0XzY0KHNyY1szMjo2M10pOyBQOCsgKElTQSAyLjA3KS4KLSsgIC8vIFJlcGxh Y2VzIHJsZGljbCArIG10dnNyZCAoMiBpbnNucyArIHNjcmF0Y2gpIHdpdGggMSBpbnNuLgotKyAg YXNfbXR2c3J3eihkZXN0LCBzcmMpOwotKyAgYXNfZmNmaWQoZGVzdCwgZGVzdCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6Y29udmVydFVJbnQzMlRvRmxvYXQzMihS ZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgLy8gbXR2c3J3eiArIGZjZmlk czsgc2FtZSByZWNpcGUgYXMgY29udmVydFVJbnQzMlRvRG91YmxlLgotKyAgYXNfbXR2c3J3eihk ZXN0LCBzcmMpOwotKyAgYXNfZmNmaWRzKGRlc3QsIGRlc3QpOwotK30KLSsKLSsvLyBIZWxwZXIg Zm9yIHRoZSBuZWdhdGl2ZS16ZXJvIGNoZWNrIGFmdGVyIGEgc3VjY2Vzc2Z1bCByb3VuZC10cmlw LgotKy8vIFByZWNvbmRpdGlvbjogYGRlc3RgIGhvbGRzIHRoZSBpbnRlZ2VyIHJvdW5kLXRyaXAg cmVzdWx0OyBpZiBpdCBlcXVhbHMKLSsvLyB6ZXJvLCB0aGVuIGBzcmNgIHdhcyBlaXRoZXIgKzAu MCBvciAtMC4wICh0aG9zZSBhcmUgdGhlIG9ubHkgZG91YmxlcwotKy8vIHRoYXQgcm91bmQtdHJp cCB0byBpbnQgMCkuIERpc3Rpbmd1aXNoIHRoZW0gYnkgaW5zcGVjdGluZyBzcmMncyBzaWduCi0r Ly8gYml0OiAtMC4wIGhhcyBpdHMgTVNCIHNldCwgc28gYW4gbWZ2c3JkLXRoZW4tc2lnbmVkLWNt cC1hZ2FpbnN0LXplcm8KLSsvLyBicmFuY2hlcyB0byBgZmFpbGAgb25seSBmb3IgLTAuMC4gTm9u LXplcm8gYGRlc3RgIHZhbHVlcyAoaW5jbHVkaW5nCi0rLy8gZXZlcnkgbmVnYXRpdmUgaW50ZWdl cikgc2tpcCB0aGUgY2hlY2sgZW50aXJlbHkuCi0rc3RhdGljIHZvaWQgRW1pdE5lZ2F0aXZlWmVy b0NoZWNrKE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQmIG1hc20sCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbCkgewotKyAgTGFiZWwg bm90WmVybzsKLSsgIG1hc20uYXNfY21wZGkoZGVzdCwgMCk7Ci0rICBtYXNtLm1hX2IoQXNzZW1i bGVyOjpOb3RFcXVhbCwgJm5vdFplcm8pOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMobWFzbSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbWFz bS5hc19tZnZzcmQoc2NyYXRjaCwgc3JjKTsKLSsgIG1hc20uYXNfY21wZGkoc2NyYXRjaCwgMCk7 Ci0rICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpMZXNzVGhhbiwgZmFpbCk7Ci0rICBtYXNtLmJpbmQo Jm5vdFplcm8pOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6OmNvbnZl cnREb3VibGVUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwgTGFiZWwqIGZh aWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29sIG5lZ2F0aXZlWmVyb0NoZWNrKSB7Ci0rICAvLyBUcnVuY2F0ZSB0byBpbnQzMiAocm91 bmQgdG93YXJkIHplcm8pLCBzaWduLWV4dGVuZCwgYW5kIHZlcmlmeQotKyAgLy8gZXhhY3RuZXNz IHZpYSByb3VuZC10cmlwIGNvbXBhcmUuIGZjdGl3eiB3cml0ZXMgdGhlIGludDMyIHRvIEJFCi0r ICAvLyBiaXRzIDMyLi42MyBvZiB0aGUgRlBSOyBtZnZzcmQgZXh0cmFjdHMgYW5kIGV4dHN3IHNp Z24tZXh0ZW5kcy4KLSsgIC8vIFRoZSBjb21wYXJlIGFsc28gY2F0Y2hlcyBOYU4gKHVub3JkZXJl ZCkgYW5kIEluZiAoc2F0dXJhdGVkIHRvCi0rICAvLyBJTlQzMl97TUlOLE1BWH0sIHdvbid0IHJv dW5kLXRyaXAgZXF1YWwpLgotKyAgYXNfZmN0aXd6KFNjcmF0Y2hEb3VibGVSZWcsIHNyYyk7Ci0r ICBhc19tZnZzcmQoZGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7Ci0rICBhc19leHRzdyhkZXN0LCBk ZXN0KTsKLSsgIGFzX210dnNyZChTY3JhdGNoRG91YmxlUmVnLCBkZXN0KTsKLSsgIGFzX2ZjZmlk KFNjcmF0Y2hEb3VibGVSZWcsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgYXNfZmNtcHUoU2NyYXRj aERvdWJsZVJlZywgc3JjKTsKLSsgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5v cmRlcmVkLCBmYWlsKTsKLSsKLSsgIGlmIChuZWdhdGl2ZVplcm9DaGVjaykgewotKyAgICBFbWl0 TmVnYXRpdmVaZXJvQ2hlY2soKnRoaXMsIHNyYywgZGVzdCwgZmFpbCk7Ci0rICB9Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6Y29udmVydERvdWJsZVRvUHRyKEZsb2F0 UmVnaXN0ZXIgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBmYWlsLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmVaZXJvQ2hlY2sp IHsKLSsgIC8vIFNhbWUgcGF0dGVybiBhcyBjb252ZXJ0RG91YmxlVG9JbnQzMiBidXQgdG8gaW50 NjQgKG5vIHNpZ24tZXh0ZW5kCi0rICAvLyBuZWVkZWQgc2luY2UgZmN0aWR6IGFscmVhZHkgcHJv ZHVjZXMgYSA2NC1iaXQgcmVzdWx0KS4KLSsgIGFzX2ZjdGlkeihTY3JhdGNoRG91YmxlUmVnLCBz cmMpOwotKyAgYXNfbWZ2c3JkKGRlc3QsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgYXNfbXR2c3Jk KFNjcmF0Y2hEb3VibGVSZWcsIGRlc3QpOwotKyAgYXNfZmNmaWQoU2NyYXRjaERvdWJsZVJlZywg U2NyYXRjaERvdWJsZVJlZyk7Ci0rICBhc19mY21wdShTY3JhdGNoRG91YmxlUmVnLCBzcmMpOwot KyAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZhaWwpOwotKwot KyAgaWYgKG5lZ2F0aXZlWmVyb0NoZWNrKSB7Ci0rICAgIEVtaXROZWdhdGl2ZVplcm9DaGVjaygq dGhpcywgc3JjLCBkZXN0LCBmYWlsKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl clBQQzY0Q29tcGF0Ojpjb252ZXJ0RmxvYXQzMlRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMYWJlbCogZmFpbCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlWmVyb0NoZWNrKSB7Ci0rICAvLyBT YW1lIGFzIGNvbnZlcnREb3VibGVUb0ludDMyIGJ1dCB0aGUgcm91bmQtdHJpcCB1c2VzIGZjZmlk cyBzbyB0aGUKLSsgIC8vIGNvbXBhcmlzb24gaGFwcGVucyBhdCBzaW5nbGUgcHJlY2lzaW9uICht YXRjaGVzIHNyYydzIGFjdHVhbCB3aWR0aCkuCi0rICBhc19mY3Rpd3ooU2NyYXRjaERvdWJsZVJl Zywgc3JjKTsKLSsgIGFzX21mdnNyZChkZXN0LCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgIGFzX2V4 dHN3KGRlc3QsIGRlc3QpOwotKyAgYXNfbXR2c3JkKFNjcmF0Y2hEb3VibGVSZWcsIGRlc3QpOwot KyAgYXNfZmNmaWRzKFNjcmF0Y2hEb3VibGVSZWcsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgYXNf ZmNtcHUoU2NyYXRjaERvdWJsZVJlZywgc3JjKTsKLSsgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVO b3RFcXVhbE9yVW5vcmRlcmVkLCBmYWlsKTsKLSsKLSsgIGlmIChuZWdhdGl2ZVplcm9DaGVjaykg ewotKyAgICBFbWl0TmVnYXRpdmVaZXJvQ2hlY2soKnRoaXMsIHNyYywgZGVzdCwgZmFpbCk7Ci0r ICB9Ci0rfQotKwotK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6dG9nZ2xl ZENhbGwoSml0Q29kZSogdGFyZ2V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVkKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgLy8gc3RhbnphKDgpICsgbXRjdHIvYmN0cmwoMikgPSAxMCBpbnN0cnVjdGlvbnMu Ci0rICBtX2J1ZmZlci5lbnRlck5vUG9vbChrTm9Qb29sUGF0Y2hhYmxlQnJhbmNoSW5zbnMpOwot KyAgQnVmZmVyT2Zmc2V0IGJvTG9hZCA9Ci0rICAgICAgZW1pdExvYWQ2NFN0YW56YShzY3JhdGNo LCAodWludDY0X3QpdWludHB0cl90KHRhcmdldC0+cmF3KCkpKTsKLSsgIENvZGVPZmZzZXQgb2Zm c2V0KGJvTG9hZC5nZXRPZmZzZXQoKSk7Ci0rICBhZGRQZW5kaW5nSnVtcChib0xvYWQsIEltbVB0 cih0YXJnZXQtPnJhdygpKSwgUmVsb2NhdGlvbktpbmQ6OkpJVENPREUpOwotKyAgaWYgKGVuYWJs ZWQpIHsKLSsgICAgeHNfbXRjdHIoc2NyYXRjaCk7Ci0rICAgIGFzX2JjdHIoTGlua0JpdDo6TGlu a0IpOwotKyAgfSBlbHNlIHsKLSsgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUlu c3QoTm9wSW5zdCk7Ci0rICB9Ci0rICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwotKyAgTU9aX0FT U0VSVF9JRighb29tKCksIG5leHRPZmZzZXQoKS5nZXRPZmZzZXQoKSAtIG9mZnNldC5vZmZzZXQo KSA9PQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2dnbGVkQ2FsbFNpemUobnVsbHB0 cikpOwotKyAgcmV0dXJuIG9mZnNldDsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rLy8gRXhjZXB0aW9u IGhhbmRsaW5nCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0OjpoYW5kbGVGYWls dXJlV2l0aEhhbmRsZXJUYWlsKAotKyAgICBMYWJlbCogcHJvZmlsZXJFeGl0VGFpbCwgTGFiZWwq IGJhaWxvdXRUYWlsLAotKyAgICB1aW50MzJfdCogcmV0dXJuVmFsdWVDaGVja09mZnNldCkgewot KyAgLy8gUm91bmQgc2l6ZW9mKFJlc3VtZUZyb21FeGNlcHRpb24pIHVwIHRvIEFCSVN0YWNrQWxp Z25tZW50LiBUaGUKLSsgIC8vIGNhbm9uaWNhbCAoc3ogKyBhbGlnbiAtIDEpICYgfihhbGlnbiAt IDEpIGZvcm0gaXMgZXhhY3Q6IHdoZW4gc3oKLSsgIC8vIGlzIGFscmVhZHkgYSBtdWx0aXBsZSBv ZiBgYWxpZ25gIHRoZSByb3VuZGluZyBpcyBhIG5vLW9wLiBUaGUKLSsgIC8vIHByZXZpb3VzIChz eiArIGFsaWduKSAmIH4oYWxpZ24gLSAxKSBvdmVyLWFsbG9jYXRlZCBieSBgYWxpZ25gCi0rICAv LyBieXRlcyB3aGVuZXZlciBzeiB3YXMgYWxyZWFkeSBhbGlnbmVkLgotKyAgaW50IHNpemUgPSAo c2l6ZW9mKFJlc3VtZUZyb21FeGNlcHRpb24pICsgQUJJU3RhY2tBbGlnbm1lbnQgLSAxKSAmCi0r ICAgICAgICAgICAgIH4oQUJJU3RhY2tBbGlnbm1lbnQgLSAxKTsKLSsgIGFzTWFzbSgpLnN1YlB0 cihJbW0zMihzaXplKSwgU3RhY2tQb2ludGVyKTsKLSsgIC8vIFVzZSByMyAoZmlyc3QgYXJndW1l bnQgcmVnaXN0ZXIpLgotKyAgbW92KFN0YWNrUG9pbnRlciwgcjMpOwotKwotKyAgdXNpbmcgRm4g PSB2b2lkICgqKShSZXN1bWVGcm9tRXhjZXB0aW9uKiByZmUpOwotKyAgYXNNYXNtKCkuc2V0dXBV bmFsaWduZWRBQklDYWxsKHI0KTsKLSsgIGFzTWFzbSgpLnBhc3NBQklBcmcocjMpOwotKyAgYXNN YXNtKCkuY2FsbFdpdGhBQkk8Rm4sIEhhbmRsZUV4Y2VwdGlvbj4oCi0rICAgICAgQUJJVHlwZTo6 R2VuZXJhbCwgQ2hlY2tVbnNhZmVDYWxsV2l0aEFCSTo6RG9udENoZWNrSGFzRXhpdEZyYW1lKTsK LSsKLSsgICpyZXR1cm5WYWx1ZUNoZWNrT2Zmc2V0ID0gYXNNYXNtKCkuY3VycmVudE9mZnNldCgp OwotKwotKyAgTGFiZWwgZW50cnlGcmFtZTsKLSsgIExhYmVsIGNhdGNoXzsKLSsgIExhYmVsIGZp bmFsbHk7Ci0rICBMYWJlbCByZXR1cm5CYXNlbGluZTsKLSsgIExhYmVsIHJldHVybklvbjsKLSsg IExhYmVsIGJhaWxvdXQ7Ci0rICBMYWJlbCB3YXNtSW50ZXJwRW50cnk7Ci0rICBMYWJlbCB3YXNt Q2F0Y2g7Ci0rCi0rICBsb2FkMzIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNl cHRpb246Om9mZnNldE9mS2luZCgpKSwgcjMpOwotKyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1i bGVyOjpFcXVhbCwgcjMsCi0rICAgICAgICAgICAgICAgICAgICBJbW0zMihFeGNlcHRpb25SZXN1 bWVLaW5kOjpFbnRyeUZyYW1lKSwgJmVudHJ5RnJhbWUpOwotKyAgYXNNYXNtKCkuYnJhbmNoMzIo QXNzZW1ibGVyOjpFcXVhbCwgcjMsIEltbTMyKEV4Y2VwdGlvblJlc3VtZUtpbmQ6OkNhdGNoKSwK LSsgICAgICAgICAgICAgICAgICAgICZjYXRjaF8pOwotKyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNz ZW1ibGVyOjpFcXVhbCwgcjMsIEltbTMyKEV4Y2VwdGlvblJlc3VtZUtpbmQ6OkZpbmFsbHkpLAot KyAgICAgICAgICAgICAgICAgICAgJmZpbmFsbHkpOwotKyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNz ZW1ibGVyOjpFcXVhbCwgcjMsCi0rICAgICAgICAgICAgICAgICAgICBJbW0zMihFeGNlcHRpb25S ZXN1bWVLaW5kOjpGb3JjZWRSZXR1cm5CYXNlbGluZSksCi0rICAgICAgICAgICAgICAgICAgICAm cmV0dXJuQmFzZWxpbmUpOwotKyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwg cjMsCi0rICAgICAgICAgICAgICAgICAgICBJbW0zMihFeGNlcHRpb25SZXN1bWVLaW5kOjpGb3Jj ZWRSZXR1cm5Jb24pLCAmcmV0dXJuSW9uKTsKLSsgIGFzTWFzbSgpLmJyYW5jaDMyKEFzc2VtYmxl cjo6RXF1YWwsIHIzLCBJbW0zMihFeGNlcHRpb25SZXN1bWVLaW5kOjpCYWlsb3V0KSwKLSsgICAg ICAgICAgICAgICAgICAgICZiYWlsb3V0KTsKLSsgIGFzTWFzbSgpLmJyYW5jaDMyKEFzc2VtYmxl cjo6RXF1YWwsIHIzLAotKyAgICAgICAgICAgICAgICAgICAgSW1tMzIoRXhjZXB0aW9uUmVzdW1l S2luZDo6V2FzbUludGVycEVudHJ5KSwKLSsgICAgICAgICAgICAgICAgICAgICZ3YXNtSW50ZXJw RW50cnkpOwotKyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgcjMsIEltbTMy KEV4Y2VwdGlvblJlc3VtZUtpbmQ6Oldhc21DYXRjaCksCi0rICAgICAgICAgICAgICAgICAgICAm d2FzbUNhdGNoKTsKLSsKLSsgIGJyZWFrcG9pbnQoKTsgIC8vIEludmFsaWQga2luZC4KLSsKLSsg IC8vIE5vIGV4Y2VwdGlvbiBoYW5kbGVyLiBSZXR1cm4gZXJyb3IgZnJvbSBlbnRyeSBmcmFtZS4K LSsgIGJpbmQoJmVudHJ5RnJhbWUpOwotKyAgYXNNYXNtKCkubW92ZVZhbHVlKE1hZ2ljVmFsdWUo SlNfSU9OX0VSUk9SKSwgSlNSZXR1cm5PcGVyYW5kKTsKLSsgIGxvYWRQdHIoQWRkcmVzcyhTdGFj a1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mRnJhbWVQb2ludGVyKCkpLAot KyAgICAgICAgICBGcmFtZVBvaW50ZXIpOwotKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRl ciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZTdGFja1BvaW50ZXIoKSksCi0rICAgICAg ICAgIFN0YWNrUG9pbnRlcik7Ci0rICByZXQoKTsKLSsKLSsgIC8vIENhdGNoIGhhbmRsZXIuCi0r ICBiaW5kKCZjYXRjaF8pOwotKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1l RnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZUYXJnZXQoKSksIHIzKTsKLSsgIGxvYWRQdHIoQWRkcmVz cyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mRnJhbWVQb2ludGVy KCkpLAotKyAgICAgICAgICBGcmFtZVBvaW50ZXIpOwotKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNr UG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZTdGFja1BvaW50ZXIoKSksCi0r ICAgICAgICAgIFN0YWNrUG9pbnRlcik7Ci0rICBqdW1wKHIzKTsKLSsKLSsgIC8vIEZpbmFsbHkg YmxvY2suCi0rICBiaW5kKCZmaW5hbGx5KTsKLSsgIFZhbHVlT3BlcmFuZCBleGNlcHRpb24gPSBW YWx1ZU9wZXJhbmQocjQpOwotKyAgbG9hZFZhbHVlKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1 bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkV4Y2VwdGlvbigpKSwKLSsgICAgICAgICAgICBleGNl cHRpb24pOwotKwotKyAgVmFsdWVPcGVyYW5kIGV4Y2VwdGlvblN0YWNrID0gVmFsdWVPcGVyYW5k KHI1KTsKLSsgIGxvYWRWYWx1ZSgKLSsgICAgICBBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1l RnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZFeGNlcHRpb25TdGFjaygpKSwKLSsgICAgICBleGNlcHRp b25TdGFjayk7Ci0rCi0rICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9t RXhjZXB0aW9uOjpvZmZzZXRPZlRhcmdldCgpKSwgcjMpOwotKyAgbG9hZFB0cihBZGRyZXNzKFN0 YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZGcmFtZVBvaW50ZXIoKSks Ci0rICAgICAgICAgIEZyYW1lUG9pbnRlcik7Ci0rICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2lu dGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZlN0YWNrUG9pbnRlcigpKSwKLSsgICAg ICAgICAgU3RhY2tQb2ludGVyKTsKLSsKLSsgIHB1c2hWYWx1ZShleGNlcHRpb24pOwotKyAgcHVz aFZhbHVlKGV4Y2VwdGlvblN0YWNrKTsKLSsgIHB1c2hWYWx1ZShCb29sZWFuVmFsdWUodHJ1ZSkp OwotKyAganVtcChyMyk7Ci0rCi0rICAvLyBGb3JjZWQgcmV0dXJuIGZyb20gYmFzZWxpbmUuCi0r ICBMYWJlbCBwcm9maWxpbmdJbnN0cnVtZW50YXRpb247Ci0rICBiaW5kKCZyZXR1cm5CYXNlbGlu ZSk7Ci0rICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9u OjpvZmZzZXRPZkZyYW1lUG9pbnRlcigpKSwKLSsgICAgICAgICAgRnJhbWVQb2ludGVyKTsKLSsg IGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNl dE9mU3RhY2tQb2ludGVyKCkpLAotKyAgICAgICAgICBTdGFja1BvaW50ZXIpOwotKyAgbG9hZFZh bHVlKEFkZHJlc3MoRnJhbWVQb2ludGVyLCBCYXNlbGluZUZyYW1lOjpyZXZlcnNlT2Zmc2V0T2ZS ZXR1cm5WYWx1ZSgpKSwKLSsgICAgICAgICAgICBKU1JldHVybk9wZXJhbmQpOwotKyAganVtcCgm cHJvZmlsaW5nSW5zdHJ1bWVudGF0aW9uKTsKLSsKLSsgIC8vIEZvcmNlZCByZXR1cm4gZnJvbSBJ b24uCi0rICBiaW5kKCZyZXR1cm5Jb24pOwotKyAgbG9hZFZhbHVlKEFkZHJlc3MoU3RhY2tQb2lu dGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkV4Y2VwdGlvbigpKSwKLSsgICAgICAg ICAgICBKU1JldHVybk9wZXJhbmQpOwotKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwg UmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZGcmFtZVBvaW50ZXIoKSksCi0rICAgICAgICAg IEZyYW1lUG9pbnRlcik7Ci0rICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVG cm9tRXhjZXB0aW9uOjpvZmZzZXRPZlN0YWNrUG9pbnRlcigpKSwKLSsgICAgICAgICAgU3RhY2tQ b2ludGVyKTsKLSsKLSsgIGJpbmQoJnByb2ZpbGluZ0luc3RydW1lbnRhdGlvbik7Ci0rICB7Ci0r ICAgIExhYmVsIHNraXBQcm9maWxpbmdJbnN0cnVtZW50YXRpb247Ci0rICAgIEFic29sdXRlQWRk cmVzcyBhZGRyZXNzT2ZFbmFibGVkKAotKyAgICAgICAgYXNNYXNtKCkucnVudGltZSgpLT5nZWNr b1Byb2ZpbGVyKCkuYWRkcmVzc09mRW5hYmxlZCgpKTsKLSsgICAgYXNNYXNtKCkuYnJhbmNoMzIo QXNzZW1ibGVyOjpFcXVhbCwgYWRkcmVzc09mRW5hYmxlZCwgSW1tMzIoMCksCi0rICAgICAgICAg ICAgICAgICAgICAgICZza2lwUHJvZmlsaW5nSW5zdHJ1bWVudGF0aW9uKTsKLSsgICAganVtcChw cm9maWxlckV4aXRUYWlsKTsKLSsgICAgYmluZCgmc2tpcFByb2ZpbGluZ0luc3RydW1lbnRhdGlv bik7Ci0rICB9Ci0rCi0rICB4c19tcihTdGFja1BvaW50ZXIsIEZyYW1lUG9pbnRlcik7Ci0rICAv LyBQb3AgRlAgZnJvbSBzdGFjaywgdGhlbiByZXR1cm4gKHBvcCBMUiArIGJscikuCi0rICBsb2Fk UHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCAwKSwgRnJhbWVQb2ludGVyKTsKLSsgIGFzTWFzbSgp LmFkZFB0cihJbW0zMihzaXplb2Yodm9pZCopKSwgU3RhY2tQb2ludGVyKTsKLSsgIHJldCgpOwot KwotKyAgLy8gQmFpbG91dC4KLSsgIGJpbmQoJmJhaWxvdXQpOwotKyAgbG9hZFB0cihBZGRyZXNz KFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZCYWlsb3V0SW5mbygp KSwKLSsgICAgICAgICAgcjUpOwotKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVz dW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZTdGFja1BvaW50ZXIoKSksCi0rICAgICAgICAgIFN0 YWNrUG9pbnRlcik7Ci0rICB4c19saShSZXR1cm5SZWcsIDEpOwotKyAganVtcChiYWlsb3V0VGFp bCk7Ci0rCi0rICAvLyBXYXNtIGludGVycCBlbnRyeS4KLSsgIGJpbmQoJndhc21JbnRlcnBFbnRy eSk7Ci0rICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9u OjpvZmZzZXRPZkZyYW1lUG9pbnRlcigpKSwKLSsgICAgICAgICAgRnJhbWVQb2ludGVyKTsKLSsg IGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNl dE9mU3RhY2tQb2ludGVyKCkpLAotKyAgICAgICAgICBTdGFja1BvaW50ZXIpOwotKyAgbW92ZVB0 cihJbW1Xb3JkKHdhc206OkludGVycEZhaWxJbnN0YW5jZVJlZyksIEluc3RhbmNlUmVnKTsKLSsg IHJldCgpOwotKwotKyAgLy8gV2FzbSBjYXRjaC4KLSsgIGJpbmQoJndhc21DYXRjaCk7Ci0rICB3 YXNtOjpHZW5lcmF0ZUp1bXBUb0NhdGNoSGFuZGxlcihhc01hc20oKSwgU3RhY2tQb2ludGVyLCBy NCwgcjUsIHI2KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2xhbXBEb3VibGVUb1Vp bnQ4KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyIG91dHB1dCkgewotKyAgU2NyYXRjaERv dWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7Ci0rCi0rICBpZiAoSGFzUE9XRVI5KCkpIHsK LSsgICAgLy8gUDkgeHNtYXhqZHAgdXNlcyBKYXZhL0pTIHNlbWFudGljcyAoSVNBIHYzLjBCKTog YW55IE5hTgotKyAgICAvLyBpcyB0cmVhdGVkIGFzICJsZXNzIHRoYW4gYW55IG51bWJlciB0aGF0 IGlzIG5vdCBhIE5hTiIsIHNvCi0rICAgIC8vIHhzbWF4amRwKGlucHV0LCAwKSBjb2xsYXBzZXMg e05hTiwgLUluZiwg4omkIDB9IHRvIDAgaW4gb25lIGluc24g4oCUCi0rICAgIC8vIHRoZSAi4omk IDAgb3IgTmFOIOKGkiAwIiBicmFuY2ggZGFuY2UgZGlzYXBwZWFycy4KLSsgICAgLy8KLSsgICAg Ly8gQWZ0ZXIgdGhlIG1heCwgZmN0aWQgKHJvdW5kLXRvLW5lYXJlc3QtZXZlbiBwZXIgRlBTQ1Ig ZGVmYXVsdCwKLSsgICAgLy8gbWF0Y2hlcyBFQ01BIFVpbnQ4Q2xhbXBlZEFycmF5J3Mgcm91bmQt aGFsZi10by1ldmVuKSBzYXR1cmF0ZXMKLSsgICAgLy8gb3V0LW9mLWludDY0IHZhbHVlcyB0byBJ TlQ2NF9NQVguIFJlbWFpbmluZyB1cHBlciBjbGFtcAotKyAgICAvLyAob3V0cHV0ID4gMjU1IOKG kiAyNTUpIGlzIG9uZSBjbXBkaSArIGlzZWwuCi0rICAgIHplcm9Eb3VibGUoZnBzY3JhdGNoKTsK LSsgICAgYXNfeHNtYXhqZHAoZnBzY3JhdGNoLCBpbnB1dCwgZnBzY3JhdGNoKTsKLSsgICAgYXNf ZmN0aWQoZnBzY3JhdGNoLCBmcHNjcmF0Y2gpOwotKyAgICBhc19tZnZzcmQob3V0cHV0LCBmcHNj cmF0Y2gpOwotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICAgIFJlZ2lzdGVyIG1heDI1NSA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgeHNfbGkobWF4MjU1 LCAyNTUpOwotKyAgICBhc19jbXBkaShvdXRwdXQsIDI1NSk7Ci0rICAgIGFzX2lzZWwob3V0cHV0 LCBtYXgyNTUsIG91dHB1dCwgR3JlYXRlclRoYW4pOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0r ICAvLyBQT1dFUjggZmFsbGJhY2s6IHhzbWF4amRwIGlzIHVuYXZhaWxhYmxlLCBzbyBmaWx0ZXIg TmFOIGV4cGxpY2l0bHkKLSsgIC8vIGJlZm9yZSBmY3RpZC4gUGVyIFBvd2VyIElTQSwgZmN0aWQg bWFwcyBOYU4gdG8gSU5UNjRfTUFYLCB3aGljaAotKyAgLy8gd291bGQgY2xhbXAgdG8gMjU1IGlu c3RlYWQgb2YgdGhlIHNwZWMtcmVxdWlyZWQgMC4KLSsgIExhYmVsIHBvc2l0aXZlLCBiZWxvdzI1 NSwgZG9uZTsKLSsgIHplcm9Eb3VibGUoZnBzY3JhdGNoKTsKLSsgIGJyYW5jaERvdWJsZShEb3Vi bGVHcmVhdGVyVGhhbiwgaW5wdXQsIGZwc2NyYXRjaCwgJnBvc2l0aXZlKTsKLSsgIHsKLSsgICAg bW92ZTMyKEltbTMyKDApLCBvdXRwdXQpOwotKyAgICBqdW1wKCZkb25lKTsKLSsgIH0KLSsKLSsg IGJpbmQoJnBvc2l0aXZlKTsKLSsKLSsgIGxvYWRDb25zdGFudERvdWJsZSgyNTUuMCwgZnBzY3Jh dGNoKTsKLSsgIGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgaW5wdXQsIGZwc2NyYXRjaCwg JmJlbG93MjU1KTsKLSsgIHsKLSsgICAgbW92ZTMyKEltbTMyKDI1NSksIG91dHB1dCk7Ci0rICAg IGp1bXAoJmRvbmUpOwotKyAgfQotKwotKyAgYmluZCgmYmVsb3cyNTUpOwotKwotKyAgYXNfZmN0 aWQoZnBzY3JhdGNoLCBpbnB1dCk7Ci0rICBhc19tZnZzcmQob3V0cHV0LCBmcHNjcmF0Y2gpOwot KyAgYmluZCgmZG9uZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YkZyb21TdGFj a1B0cihJbW0zMiBpbW0zMikgewotKyAgaWYgKGltbTMyLnZhbHVlKSB7Ci0rICAgIGFzTWFzbSgp LnN1YlB0cihpbW0zMiwgU3RhY2tQb2ludGVyKTsKLSsgIH0KLSt9Ci0rCi0rLy97e3sgY2hlY2tf bWFjcm9hc3NlbWJsZXJfc3R5bGUKLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3aWRlbkludDMy KFJlZ2lzdGVyIHIpIHsKLSsgIG1vdmUzMlRvNjRTaWduRXh0ZW5kKHIsIFJlZ2lzdGVyNjQocikp OwotK30KLSsKLSsvLyBTdGFjayBvcGVyYXRpb25zLgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlB1 c2goUmVnaXN0ZXIgcmVnKSB7Ci0rICBwdXNoKHJlZyk7Ci0rICBhZGp1c3RGcmFtZShpbnQzMl90 KHNpemVvZihpbnRwdHJfdCkpKTsKLSt9Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UHVzaChjb25z dCBJbW0zMiBpbW0pIHsKLSsgIHB1c2goaW1tKTsKLSsgIGFkanVzdEZyYW1lKGludDMyX3Qoc2l6 ZW9mKGludHB0cl90KSkpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQdXNoKGNvbnN0 IEltbVdvcmQgaW1tKSB7Ci0rICBwdXNoKGltbSk7Ci0rICBhZGp1c3RGcmFtZShpbnQzMl90KHNp emVvZihpbnRwdHJfdCkpKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UHVzaChjb25z dCBJbW1QdHIgaW1tKSB7Ci0rICBQdXNoKEltbVdvcmQodWludHB0cl90KGltbS52YWx1ZSkpKTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UHVzaChjb25zdCBJbW1HQ1B0ciBwdHIpIHsK LSsgIHB1c2gocHRyKTsKLSsgIGFkanVzdEZyYW1lKGludDMyX3Qoc2l6ZW9mKGludHB0cl90KSkp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQdXNoQm94ZWQoRmxvYXRSZWdpc3RlciBy ZWcpIHsKLSsgIHN1YkZyb21TdGFja1B0cihJbW0zMihzaXplb2YoZG91YmxlKSkpOwotKyAgYm94 RG91YmxlKHJlZywgQWRkcmVzcyhnZXRTdGFja1BvaW50ZXIoKSwgMCkpOwotKyAgYWRqdXN0RnJh bWUoc2l6ZW9mKGRvdWJsZSkpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQb3AoUmVn aXN0ZXIgcmVnKSB7Ci0rICBwb3AocmVnKTsKLSsgIGFkanVzdEZyYW1lKC1pbnQzMl90KHNpemVv ZihpbnRwdHJfdCkpKTsKLSt9Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UHVzaFJlZ3NJbk1hc2so TGl2ZVJlZ2lzdGVyU2V0IHNldCkgewotKyAgaW50MzJfdCBkaWZmID0KLSsgICAgICBzZXQuZ3By cygpLnNpemUoKSAqIHNpemVvZihpbnRwdHJfdCkgKyBzZXQuZnB1cygpLmdldFB1c2hTaXplSW5C eXRlcygpOwotKyAgY29uc3QgaW50MzJfdCByZXNlcnZlZCA9IGRpZmY7Ci0rCi0rICByZXNlcnZl U3RhY2socmVzZXJ2ZWQpOwotKyAgZm9yIChHZW5lcmFsUmVnaXN0ZXJCYWNrd2FyZEl0ZXJhdG9y IGl0ZXIoc2V0LmdwcnMoKSk7IGl0ZXIubW9yZSgpOyArK2l0ZXIpIHsKLSsgICAgZGlmZiAtPSBz aXplb2YoaW50cHRyX3QpOwotKyAgICBzdG9yZVB0cigqaXRlciwgQWRkcmVzcyhTdGFja1BvaW50 ZXIsIGRpZmYpKTsKLSsgIH0KLSsKLSsgIC8vIE5hdHVyYWwgcGVyLWtpbmQgc2xvdCDigJQgOCBi eXRlcyBmb3IgU2luZ2xlL0RvdWJsZSB2aWEgc3RmZCwgMTYgYnl0ZXMKLSsgIC8vIGZvciBTaW1k MTI4IHZpYSBzdHh2eC4gUmVnaXN0ZXJEdW1wOjpGUFVBcnJheSBpcyBzaXplZCAzMiDDlyA4ID0g MjU2Ci0rICAvLyBieXRlcyAoc2l6ZW9mKFJlZ2lzdGVyQ29udGVudCkgaXMgOCDigJQgbm8gdjEy OCBpbiB0aGUgdW5pb24pLCBzbwotKyAgLy8gZl9LJ3Mgc3RmZCBzbG90IGxhbmRzIGF0IHRoZSBy aWdodCBvZmZzZXQuIEJhaWxvdXQgQWxsUmVncyBleGNsdWRlcwotKyAgLy8gU2ltZDEyOCAoSW9u IGhhcyBubyBTSU1EIGxpdmUpLCBzbyB0aGUgRlAgcmVnaW9uIGluIGJhaWxvdXQgZnJhbWVzCi0r ICAvLyBpcyBzdHJpY3RseSBGbG9hdC1vbmx5LgotKyAgZm9yIChGbG9hdFJlZ2lzdGVyQmFja3dh cmRJdGVyYXRvciBpdGVyKHNldC5mcHVzKCkucmVkdWNlU2V0Rm9yUHVzaCgpKTsKLSsgICAgICAg aXRlci5tb3JlKCk7ICsraXRlcikgewotKyAgICBGbG9hdFJlZ2lzdGVyIHJlZyA9ICppdGVyOwot KyAgICBkaWZmIC09IHJlZy5zaXplKCk7Ci0rICAgIGlmIChyZWcuaXNTaW1kMTI4KCkpIHsKLSsg ICAgICBzdG9yZVVuYWxpZ25lZFNpbWQxMjgocmVnLCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgZGlm ZikpOwotKyAgICB9IGVsc2UgewotKyAgICAgIHN0b3JlRG91YmxlKHJlZy5hc0RvdWJsZSgpLCBB ZGRyZXNzKFN0YWNrUG9pbnRlciwgZGlmZikpOwotKyAgICB9Ci0rICB9Ci0rICBNT1pfQVNTRVJU KGRpZmYgPT0gMCk7Ci0rfQotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlBvcFJlZ3NJbk1hc2tJZ25v cmUoTGl2ZVJlZ2lzdGVyU2V0IHNldCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExpdmVSZWdpc3RlclNldCBpZ25vcmUpIHsKLSsgIGludDMyX3QgZGlmZiA9Ci0r ICAgICAgc2V0LmdwcnMoKS5zaXplKCkgKiBzaXplb2YoaW50cHRyX3QpICsgc2V0LmZwdXMoKS5n ZXRQdXNoU2l6ZUluQnl0ZXMoKTsKLSsgIGNvbnN0IGludDMyX3QgcmVzZXJ2ZWQgPSBkaWZmOwot KwotKyAgZm9yIChHZW5lcmFsUmVnaXN0ZXJCYWNrd2FyZEl0ZXJhdG9yIGl0ZXIoc2V0LmdwcnMo KSk7IGl0ZXIubW9yZSgpOyArK2l0ZXIpIHsKLSsgICAgZGlmZiAtPSBzaXplb2YoaW50cHRyX3Qp OwotKyAgICBpZiAoIWlnbm9yZS5oYXMoKml0ZXIpKSB7Ci0rICAgICAgbG9hZFB0cihBZGRyZXNz KFN0YWNrUG9pbnRlciwgZGlmZiksICppdGVyKTsKLSsgICAgfQotKyAgfQotKwotKyAgLy8gTmF0 dXJhbCBwZXIta2luZCBzbG90LiBTZWUgUHVzaFJlZ3NJbk1hc2sgY29tbWVudC4KLSsgIGZvciAo RmxvYXRSZWdpc3RlckJhY2t3YXJkSXRlcmF0b3IgaXRlcihzZXQuZnB1cygpLnJlZHVjZVNldEZv clB1c2goKSk7Ci0rICAgICAgIGl0ZXIubW9yZSgpOyArK2l0ZXIpIHsKLSsgICAgRmxvYXRSZWdp c3RlciByZWcgPSAqaXRlcjsKLSsgICAgZGlmZiAtPSByZWcuc2l6ZSgpOwotKyAgICBpZiAoIWln bm9yZS5oYXMocmVnKSkgewotKyAgICAgIGlmIChyZWcuaXNTaW1kMTI4KCkpIHsKLSsgICAgICAg IGxvYWRVbmFsaWduZWRTaW1kMTI4KEFkZHJlc3MoU3RhY2tQb2ludGVyLCBkaWZmKSwgcmVnKTsK LSsgICAgICB9IGVsc2UgewotKyAgICAgICAgbG9hZERvdWJsZShBZGRyZXNzKFN0YWNrUG9pbnRl ciwgZGlmZiksIHJlZy5hc0RvdWJsZSgpKTsKLSsgICAgICB9Ci0rICAgIH0KLSsgIH0KLSsgIE1P Wl9BU1NFUlQoZGlmZiA9PSAwKTsKLSsgIGZyZWVTdGFjayhyZXNlcnZlZCk7Ci0rfQotKwotKy8v IENhbGwgb3BlcmF0aW9ucy4KLStDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpjYWxsKFJlZ2lz dGVyIHJlZykgewotKyAgLy8gRUxGdjIgQUJJOiByMTIgbXVzdCBob2xkIHRoZSB0YXJnZXQgYWRk cmVzcyBhdCBmdW5jdGlvbiBlbnRyeQotKyAgLy8gc28gdGhlIGNhbGxlZSBjYW4gY29tcHV0ZSBp dHMgVE9DIHBvaW50ZXIgZnJvbSByMTIuCi0rICBpZiAocmVnICE9IENhbGxSZWcpIHsKLSsgICAg bW92ZVB0cihyZWcsIENhbGxSZWcpOwotKyAgfQotKyAgeHNfbXRjdHIoQ2FsbFJlZyk7Ci0rICBh c19iY3RyKExpbmtCKTsKLSsgIHJldHVybiBDb2RlT2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7Ci0r fQotK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OmNhbGwoTGFiZWwqIGxhYmVsKSB7Ci0rICBp ZiAobGFiZWwtPmJvdW5kKCkpIHsKLSsgICAgLy8gT3BlbiB0aGUgbm8tcG9vbCB3aW5kb3cgQkVG T1JFIGNvbXB1dGluZyB0aGUgZGlzcGxhY2VtZW50LgotKyAgICAvLyBlbnRlck5vUG9vbCgpIGNh biBpdHNlbGYgdHJpZ2dlciBhIHBlbmRpbmcgcG9vbCBmbHVzaCwgYWR2YW5jaW5nCi0rICAgIC8v IGN1cnJlbnRPZmZzZXQoKS4gQSBwcmUtZmx1c2ggZGlzcGxhY2VtZW50IGVtaXR0ZWQgYXQgdGhl IHBvc3QtZmx1c2gKLSsgICAgLy8gcG9zaXRpb24gd291bGQgb3ZlcnNob290IHRoZSB0YXJnZXQg YnkgcG9vbFNpemUgYnl0ZXMuCi0rICAgIG1fYnVmZmVyLmVudGVyTm9Qb29sKGtOb1Bvb2xQYXRj aGFibGVCcmFuY2hJbnNucyk7Ci0rICAgIGludDMyX3Qgb2Zmc2V0ID0gbGFiZWwtPm9mZnNldCgp IC0gY3VycmVudE9mZnNldCgpOwotKyAgICAvLyBDYWxsIGluc3RydWN0aW9uIGdvZXMgYXQgaW5z dFs5XSBpbiB0aGUgMTAtd29yZCBzdGFuemEuCi0rICAgIGludDMyX3QgY2FsbE9mZnNldCA9IG9m ZnNldCAtIDkgKiAoaW50MzJfdClzaXplb2YodWludDMyX3QpOwotKyAgICBpZiAoSk9mZkltbTI2 OjpJc0luUmFuZ2UoY2FsbE9mZnNldCkpIHsKLSsgICAgICAvLyBTaG9ydDogOSBub3BzICsgYmwg PSAxMCBpbnN0cnVjdGlvbnMuCi0rICAgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICAgIHdy aXRlSW5zdChOb3BJbnN0KTsKLSsgICAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgICAgd3Jp dGVJbnN0KE5vcEluc3QpOwotKyAgICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgICB3cml0 ZUluc3QoTm9wSW5zdCk7Ci0rICAgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICAgIHdyaXRl SW5zdChOb3BJbnN0KTsKLSsgICAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgICAgYXNfYihK T2ZmSW1tMjYoY2FsbE9mZnNldCksIFJlbGF0aXZlQnJhbmNoLCBMaW5rQik7Ci0rICAgICAgbV9i dWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgICAgICByZXR1cm4gQ29kZU9mZnNldChjdXJyZW50T2Zm c2V0KCkpOwotKyAgICB9Ci0rICAgIC8vIExvbmcgY2FsbCB0byBib3VuZCBsYWJlbDogc3Rhbnph KDgpICsgbXRjdHIgKyBiY3RybCA9IDEwIGluc3RydWN0aW9ucy4KLSsgICAgQnVmZmVyT2Zmc2V0 IGJvID0KLSsgICAgICAgIGVtaXRMb2FkNjRTdGFuemEoU2Vjb25kU2NyYXRjaFJlZywgTGFiZWxC YXNlOjpJTlZBTElEX09GRlNFVCk7Ci0rICAgIHhzX210Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOwot KyAgICBhc19iY3RyKExpbmtCKTsKLSsgICAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKLSsgICAg YWRkTG9uZ0p1bXAoYm8sIEJ1ZmZlck9mZnNldChsYWJlbC0+b2Zmc2V0KCkpKTsKLSsgICAgcmV0 dXJuIENvZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKTsKLSsgIH0KLSsgIC8vIEVtaXQgYSBDYWxs VGFnIHN0YW56YTogdHJhcCArIGNoYWluICsgOCBub3BzICgxMCBpbnN0cnVjdGlvbnMgdG90YWwp LgotKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBhdGNoYWJsZUJyYW5jaEluc25zKTsK LSsgIEJ1ZmZlck9mZnNldCBibyA9IHhzX3RyYXBfdGFnZ2VkKENhbGxUYWcpOwotKyAgd3JpdGVJ bnN0KGxhYmVsLT51c2VkKCkgPyBsYWJlbC0+b2Zmc2V0KCkgOiBMYWJlbEJhc2U6OklOVkFMSURf T0ZGU0VUKTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsK LSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRl SW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJ bnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7 Ci0rICBpZiAoIW9vbSgpKSB7Ci0rICAgIGxhYmVsLT51c2UoYm8uZ2V0T2Zmc2V0KCkpOwotKyAg fQotKyAgcmV0dXJuIENvZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKTsKLSt9Ci0rQ29kZU9mZnNl dCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbChjb25zdCBBZGRyZXNzJiBhZGRyKSB7Ci0rICBsb2FkUHRy KGFkZHIsIENhbGxSZWcpOwotKyAgcmV0dXJuIGNhbGwoQ2FsbFJlZyk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmNhbGwoSW1tUHRyIHRhcmdldCkgewotKyAgdWludDY0X3QgYWRkciA9 IHVpbnRwdHJfdCh0YXJnZXQudmFsdWUpOwotKyAgLy8gc3RhbnphKDgpICsgbXRjdHIgKyBiY3Ry bCA9IDEwIGluc3RydWN0aW9ucy4KLSsgIG1fYnVmZmVyLmVudGVyTm9Qb29sKGtOb1Bvb2xQYXRj aGFibGVCcmFuY2hJbnNucyk7Ci0rICBCdWZmZXJPZmZzZXQgYm8gPSBlbWl0TG9hZDY0U3Rhbnph KENhbGxSZWcsIGFkZHIpOwotKyAgYWRkUGVuZGluZ0p1bXAoYm8sIHRhcmdldCwgUmVsb2NhdGlv bktpbmQ6OkhBUkRDT0RFRCk7Ci0rICB4c19tdGN0cihDYWxsUmVnKTsKLSsgIGFzX2JjdHIoTGlu a0IpOwotKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKLSt9Ci0rCi0rQ29kZU9mZnNldCBNYWNy b0Fzc2VtYmxlcjo6Y2FsbCh3YXNtOjpTeW1ib2xpY0FkZHJlc3MgdGFyZ2V0KSB7Ci0rICBtb3Zl UHRyKHRhcmdldCwgQ2FsbFJlZyk7Ci0rICByZXR1cm4gY2FsbChDYWxsUmVnKTsKLSt9Ci0rCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbFdpdGhBQklOb1Byb2ZpbGVyKGNvbnN0IEFkZHJlc3Mm IGZ1biwgQUJJVHlwZSByZXN1bHQpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBs b2FkUHRyKGZ1biwgc2NyYXRjaCk7Ci0rCi0rICB1aW50MzJfdCBzdGFja0FkanVzdDsKLSsgIGNh bGxXaXRoQUJJUHJlKCZzdGFja0FkanVzdCk7Ci0rICBjYWxsKHNjcmF0Y2gpOwotKyAgY2FsbFdp dGhBQklQb3N0KHN0YWNrQWRqdXN0LCByZXN1bHQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjYWxsV2l0aEFCSVByZSh1aW50MzJfdCogc3RhY2tBZGp1c3QsIGJvb2wgY2FsbEZyb21X YXNtKSB7Ci0rICBNT1pfQVNTRVJUKGluQ2FsbF8pOwotKyAgdWludDMyX3Qgc3RhY2tGb3JDYWxs ID0gYWJpQXJnc18uc3RhY2tCeXRlc0NvbnN1bWVkU29GYXIoKTsKLSsKLSsgIC8vIFJlc2VydmUg cGxhY2UgZm9yIExSIHNhdmUuCi0rICBzdGFja0ZvckNhbGwgKz0gc2l6ZW9mKGludHB0cl90KTsK LSsKLSsgIGlmIChkeW5hbWljQWxpZ25tZW50XykgewotKyAgICBzdGFja0ZvckNhbGwgKz0gQ29t cHV0ZUJ5dGVBbGlnbm1lbnQoc3RhY2tGb3JDYWxsLCBBQklTdGFja0FsaWdubWVudCk7Ci0rICB9 IGVsc2UgewotKyAgICB1aW50MzJfdCBhbGlnbm1lbnRBdFByb2xvZ3VlID0gY2FsbEZyb21XYXNt ID8gc2l6ZW9mKHdhc206OkZyYW1lKSA6IDA7Ci0rICAgIHN0YWNrRm9yQ2FsbCArPSBDb21wdXRl Qnl0ZUFsaWdubWVudCgKLSsgICAgICAgIHN0YWNrRm9yQ2FsbCArIGZyYW1lUHVzaGVkKCkgKyBh bGlnbm1lbnRBdFByb2xvZ3VlLCBBQklTdGFja0FsaWdubWVudCk7Ci0rICB9Ci0rCi0rICAqc3Rh Y2tBZGp1c3QgPSBzdGFja0ZvckNhbGw7Ci0rICByZXNlcnZlU3RhY2soc3RhY2tGb3JDYWxsKTsK LSsKLSsgIC8vIFNhdmUgTFIuIFJlc3RvcmUgaXQgaW4gY2FsbFdpdGhBQklQb3N0LgotKyAgewot KyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIHhzX21mbHIoc2NyYXRjaCk7Ci0r ICAgIHN0b3JlUHRyKHNjcmF0Y2gsIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBzdGFja0ZvckNhbGwg LSBzaXplb2YoaW50cHRyX3QpKSk7Ci0rICB9Ci0rCi0rICAvLyBQb3NpdGlvbiBhbGwgYXJndW1l bnRzLgotKyAgewotKyAgICBlbm91Z2hNZW1vcnlfICY9IG1vdmVSZXNvbHZlcl8ucmVzb2x2ZSgp OwotKyAgICBpZiAoIWVub3VnaE1lbW9yeV8pIHsKLSsgICAgICByZXR1cm47Ci0rICAgIH0KLSsK LSsgICAgTW92ZUVtaXR0ZXIgZW1pdHRlcigqdGhpcyk7Ci0rICAgIGVtaXR0ZXIuZW1pdChtb3Zl UmVzb2x2ZXJfKTsKLSsgICAgZW1pdHRlci5maW5pc2goKTsKLSsgIH0KLSsKLSsgIGFzc2VydFN0 YWNrQWxpZ25tZW50KEFCSVN0YWNrQWxpZ25tZW50KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6Y2FsbFdpdGhBQklQb3N0KHVpbnQzMl90IHN0YWNrQWRqdXN0LCBBQklUeXBlIHJlc3Vs dCkgewotKyAgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGxvYWRQdHIo QWRkcmVzcyhTdGFja1BvaW50ZXIsIHN0YWNrQWRqdXN0IC0gc2l6ZW9mKGludHB0cl90KSksIHNj cmF0Y2gpOwotKyAgICB4c19tdGxyKHNjcmF0Y2gpOwotKyAgfQotKwotKyAgaWYgKGR5bmFtaWNB bGlnbm1lbnRfKSB7Ci0rICAgIC8vIFJlc3RvcmUgU1AgZnJvbSBzdGFjayAoYXMgc3RvcmVkIGlu IHNldHVwVW5hbGlnbmVkQUJJQ2FsbCkuCi0rICAgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50 ZXIsIHN0YWNrQWRqdXN0KSwgU3RhY2tQb2ludGVyKTsKLSsgICAgYWRqdXN0RnJhbWUoLXN0YWNr QWRqdXN0KTsKLSsgIH0gZWxzZSB7Ci0rICAgIGZyZWVTdGFjayhzdGFja0FkanVzdCk7Ci0rICB9 Ci0rCi0rI2lmZGVmIERFQlVHCi0rICBNT1pfQVNTRVJUKGluQ2FsbF8pOwotKyAgaW5DYWxsXyA9 IGZhbHNlOwotKyNlbmRpZgotK30KLSsKLSsvLyBWYWx1ZSBvcGVyYXRpb25zLgotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om1vdmVWYWx1ZShjb25zdCBWYWx1ZU9wZXJhbmQmIHNyYywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVPcGVyYW5kJiBkZXN0KSB7Ci0rICBp ZiAoc3JjLnZhbHVlUmVnKCkgIT0gZGVzdC52YWx1ZVJlZygpKSB7Ci0rICAgIG1vdmVQdHIoc3Jj LnZhbHVlUmVnKCksIGRlc3QudmFsdWVSZWcoKSk7Ci0rICB9Ci0rfQotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6Om1vdmVWYWx1ZShjb25zdCBWYWx1ZSYgc3JjLCBjb25zdCBWYWx1ZU9wZXJhbmQmIGRl c3QpIHsKLSsgIGlmICghc3JjLmlzR0NUaGluZygpKSB7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChz cmMuYXNSYXdCaXRzKCkpLCBkZXN0LnZhbHVlUmVnKCkpOwotKyAgICByZXR1cm47Ci0rICB9Ci0r ICBDb2RlT2Zmc2V0IG9mZiA9IG1vdldpdGhQYXRjaChJbW1Xb3JkKHNyYy5hc1Jhd0JpdHMoKSks IGRlc3QudmFsdWVSZWcoKSk7Ci0rICB3cml0ZURhdGFSZWxvY2F0aW9uKG9mZiwgc3JjKTsKLSt9 Ci0rCi0rLy8gQnJhbmNoIG9wZXJhdGlvbnMuCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNo VGVzdFZhbHVlKENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIGxocywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWUmIHJocywgTGFiZWwq IGxhYmVsKSB7Ci0rICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVh bCk7Ci0rICBNT1pfQVNTRVJUKCFyaHMuaXNOYU4oKSk7Ci0rCi0rICBpZiAoIXJocy5pc0dDVGhp bmcoKSkgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Ci0r ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIE1PWl9BU1NFUlQo bGhzLnZhbHVlUmVnKCkgIT0gc2NyYXRjaCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChyaHMuYXNS YXdCaXRzKCkpLCBzY3JhdGNoKTsKLSsgICAgYnJhbmNoUHRyKGNvbmQsIGxocy52YWx1ZVJlZygp LCBzY3JhdGNoLCBsYWJlbCk7Ci0rICB9IGVsc2UgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICAgIE1PWl9BU1NFUlQobGhzLnZhbHVlUmVnKCkgIT0gc2NyYXRjaCk7Ci0rICAg IG1vdmVWYWx1ZShyaHMsIFZhbHVlT3BlcmFuZChzY3JhdGNoKSk7Ci0rICAgIGJyYW5jaFB0cihj b25kLCBsaHMudmFsdWVSZWcoKSwgc2NyYXRjaCwgbGFiZWwpOwotKyAgfQotK30KLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TmFOVmFsdWUoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZh bHVlT3BlcmFuZCYgdmFsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciB0ZW1wLCBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBF cXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r ICBNT1pfQVNTRVJUKHZhbC52YWx1ZVJlZygpICE9IHNjcmF0Y2gpOwotKwotKyAgLy8gU3RyaXAg dGhlIElFRUUgc2lnbiBiaXQgKExTQi1udW1iZXJpbmcgYml0IDYzID0gUFBDLW51bWJlcmluZyBi aXQgMCkKLSsgIC8vIHdpdGggcmxkaWNsIFNIPTAsIE1CPTE6IHJvdGF0ZSBieSB6ZXJvIChuby1v cCkgdGhlbiBrZWVwIGJpdHMgMS4uNjMgb2YKLSsgIC8vIFBQQy1udW1iZXJpbmcsIGNsZWFyaW5n IGJpdCAwLiBSb3RhdGluZyBieSAxIGluc3RlYWQgd291bGQgYWxzbyBzaGlmdAotKyAgLy8gdGhl IHF1aWV0LU5hTiBiaXQgb3V0IG9mIHBvc2l0aW9uIGFuZCBjYXVzZSAxLjUgKDB4M0ZGOC4uLikg YW5kIE5hTgotKyAgLy8gKDB4N0ZGOC4uLikgdG8gY29sbGlkZSBhZnRlciBtYXNraW5nIOKAlCBi dWcgMTk0MzcwNCBQUEM2NCByZWdyZXNzaW9uLgotKyAgYXNfcmxkaWNsKHRlbXAsIHZhbC52YWx1 ZVJlZygpLCAwLCAxKTsKLSsKLSsgIC8vIExvYWQgY2Fub25pY2FsIE5hTiAod2l0aCBzaWduIGJp dCAwKSBhbmQgc3RyaXAgaXRzIHNpZ24gYml0IHRvby4KLSsgIHN0YXRpY19hc3NlcnQoSlM6OmRl dGFpbDo6Q2Fub25pY2FsaXplZE5hTlNpZ25CaXQgPT0gMCk7Ci0rICBtb3ZlVmFsdWUoRG91Ymxl VmFsdWUoSlM6OkdlbmVyaWNOYU4oKSksIFZhbHVlT3BlcmFuZChzY3JhdGNoKSk7Ci0rICBhc19y bGRpY2woc2NyYXRjaCwgc2NyYXRjaCwgMCwgMSk7Ci0rCi0rICBicmFuY2hQdHIoY29uZCwgdGVt cCwgc2NyYXRjaCwgbGFiZWwpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQ dHJJbk51cnNlcnlDaHVuayhDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgcHRyLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXAsIExhYmVs KiBsYWJlbCkgewotKyAgTU9aX0FTU0VSVChjb25kID09IEFzc2VtYmxlcjo6RXF1YWwgfHwgY29u ZCA9PSBBc3NlbWJsZXI6Ok5vdEVxdWFsKTsKLSsgIE1PWl9BU1NFUlQocHRyICE9IHRlbXApOwot KyAgTU9aX0FTU0VSVCh0ZW1wICE9IEludmFsaWRSZWcpOwotKwotKyAgYW5kUHRyKEltbTMyKGlu dDMyX3QofmdjOjpDaHVua01hc2spKSwgcHRyLCB0ZW1wKTsKLSsgIGJyYW5jaFB0cihJbnZlcnRD b25kaXRpb24oY29uZCksIEFkZHJlc3ModGVtcCwgZ2M6OkNodW5rU3RvcmVCdWZmZXJPZmZzZXQp LAotKyAgICAgICAgICAgIEltbVdvcmQoMCksIGxhYmVsKTsKLSt9Ci0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVmFsdWVJc051cnNlcnlDZWxsKENvbmRpdGlvbiBjb25kLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUs IFJlZ2lzdGVyIHRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgYnJhbmNoVmFsdWVJc051cnNlcnlDZWxsSW1wbChj b25kLCB2YWx1ZSwgdGVtcCwgbGFiZWwpOwotK30KLSsKLSsvLyBQYXRjaGluZyAvIG5lYXIgYWRk cmVzcyBvcGVyYXRpb25zLgotK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6Om5vcFBhdGNoYWJs ZVRvQ2FsbCgpIHsKLSsgIC8vIEVtaXQgMTAgbm9wcyB0aGF0IGNhbiBiZSBwYXRjaGVkIHRvIGEg Y2FsbCBzdGFuemE6Ci0rICAvLyA4IGxvYWQ2NCBub3BzICsgbXRjdHIgbm9wICsgYmN0cmwgbm9w Ci0rICAvLyBSZXR1cm4gb2Zmc2V0IEFGVEVSIHRoZSBzdGFuemEgKD0gdGhlIHJldHVybiBhZGRy ZXNzKS4KLSsgIG1fYnVmZmVyLmVudGVyTm9Qb29sKGtOb1Bvb2xQYXRjaGFibGVCcmFuY2hJbnNu cyk7Ci0rICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICB3 cml0ZUluc3QoTm9wSW5zdCk7Ci0rICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICB3cml0ZUluc3Qo Tm9wSW5zdCk7Ci0rICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICB3cml0ZUluc3QoTm9wSW5zdCk7 Ci0rICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICB3cml0 ZUluc3QoTm9wSW5zdCk7Ci0rICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwotKyAgcmV0dXJuIENv ZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKTsKLSt9Ci0rQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxl cjo6bW92ZU5lYXJBZGRyZXNzV2l0aFBhdGNoKFJlZ2lzdGVyIGRlc3QpIHsKLSsgIENvZGVPZmZz ZXQgb2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7Ci0rICBlbWl0TG9hZDY0U3RhbnphKGRlc3QsIDAp OwotKyAgcmV0dXJuIG9mZnNldDsKLSt9Ci0rLy8gc3RhdGljCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6cGF0Y2hOZWFyQWRkcmVzc01vdmUoQ29kZUxvY2F0aW9uTGFiZWwgbG9jLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdl dCkgewotKyAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKWxvYy5yYXcoKTsKLSsg IFVwZGF0ZUxvYWQ2NFZhbHVlKGluc3QsICh1aW50NjRfdCl0YXJnZXQucmF3KCkpOwotK30KLSsK LSsvLyBSZXR1cm4gYWRkcmVzcyBvcGVyYXRpb25zIChsaW5rIHJlZ2lzdGVyIGFyY2hpdGVjdHVy ZXMpLgotKy8vCi0rLy8gTm90ZTogdGhlc2UgTVVTVCBkZWNyZW1lbnQgU1AgYnkgZXhhY3RseSA4 IGJ5dGVzLiB3YXNtOjpGcmFtZSBpcyAxNiBieXRlcwotKy8vIChjYWxsZXJGUF8gKyByZXR1cm5B ZGRyZXNzXykgYW5kIEdlbmVyYXRlQ2FsbGFibGVQcm9sb2d1ZSBwYWlycyB0aGlzIHdpdGgKLSsv LyBwdXNoKEZyYW1lUG9pbnRlcikgdG8gbWF0Y2ggdGhhdCBsYXlvdXQgZXhhY3RseSDigJQgYSAx Ni1ieXRlIGRlY3JlbWVudCBoZXJlCi0rLy8gd291bGQgaW5zZXJ0IDggYnl0ZXMgb2YgcGFkZGlu ZyBhbmQgYnJlYWsgRlAtY2hhaW4gdW53aW5kaW5nLiBUaGUgOC1ieXRlCi0rLy8gaW50ZXJtZWRp YXRlIG1pc2FsaWdubWVudCBiZXR3ZWVuIHRoaXMgc2F2ZSBhbmQgdGhlIGZvbGxvd2luZyBwdXNo KEZQKSBpcwotKy8vIG5ldmVyIG9ic2VydmVkIGJ5IGEgQyBjYWxsIChubyBpbnRlcnZlbmluZyB0 cmFuc2l0aW9uKSwgYW5kIGFueSBjYWxsZXIgdGhhdAotKy8vIGRvZXMgbWFrZSBhIEMgY2FsbCBh ZnRlciBwdXNoUmV0dXJuQWRkcmVzcyByb3V0ZXMgdGhyb3VnaAotKy8vIHNldHVwVW5hbGlnbmVk QUJJQ2FsbCB3aGljaCByZS1hbGlnbnMuCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHVzaFJldHVy bkFkZHJlc3MoKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgeHNfbWZscihzY3Jh dGNoKTsKLSsgIHB1c2goc2NyYXRjaCk7Ci0rfQotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBvcFJl dHVybkFkZHJlc3MoKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgcG9wKHNjcmF0 Y2gpOwotKyAgeHNfbXRscihzY3JhdGNoKTsKLSt9Ci0rCi0rLy8gQUJJIHNldHVwLgotK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnNldHVwVW5hbGlnbmVkQUJJQ2FsbChSZWdpc3RlciBzY3JhdGNoKSB7 Ci0rICBNT1pfQVNTRVJUKCFJc0NvbXBpbGluZ1dhc20oKSwgIndhc20gc2hvdWxkIG9ubHkgdXNl IGFsaWduZWQgQUJJIGNhbGxzIik7Ci0rICBzZXR1cE5hdGl2ZUFCSUNhbGwoKTsKLSsgIGR5bmFt aWNBbGlnbm1lbnRfID0gdHJ1ZTsKLSsKLSsgIG1vdmVQdHIoU3RhY2tQb2ludGVyLCBzY3JhdGNo KTsKLSsKLSsgIC8vIEZvcmNlIHNwIHRvIGJlIGFsaWduZWQuCi0rICBzdWJQdHIoSW1tMzIoc2l6 ZW9mKHVpbnRwdHJfdCkpLCBTdGFja1BvaW50ZXIpOwotKyAgYW5kUHRyKEltbTMyKH4oQUJJU3Rh Y2tBbGlnbm1lbnQgLSAxKSksIFN0YWNrUG9pbnRlcik7Ci0rICBzdG9yZVB0cihzY3JhdGNoLCBB ZGRyZXNzKFN0YWNrUG9pbnRlciwgMCkpOwotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBBcml0aG1l dGljIGhlbHBlcnMuCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZmxleGlibGVEaXZNb2QzMihS ZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIGRpdk91dHB1dCwgUmVnaXN0ZXIgcmVtT3V0cHV0LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Vuc2lnbmVkLCBjb25zdCBM aXZlUmVnaXN0ZXJTZXQmKSB7Ci0rICBNT1pfQVNTRVJUKGxocyAhPSBkaXZPdXRwdXQgJiYgbGhz ICE9IHJlbU91dHB1dCwgImxocyBpcyBwcmVzZXJ2ZWQiKTsKLSsgIE1PWl9BU1NFUlQocmhzICE9 IGRpdk91dHB1dCAmJiByaHMgIT0gcmVtT3V0cHV0LCAicmhzIGlzIHByZXNlcnZlZCIpOwotKwot KyAgLy8gUFBDNjQgaGFzIG5vIG1vZHVsdXMgaW5zdHJ1Y3Rpb24uIENvbXB1dGU6IHJlbSA9IGxo cyAtIChsaHMvcmhzKSpyaHMKLSsgIC8vIFBQQzY0IGRpdncoSU5UMzJfTUlOLCAtMSkgaXMgdW5k ZWZpbmVkOyBxdW90aWVudD1JTlQzMl9NSU4sIHJlbWFpbmRlcj0wLgotKyAgTGFiZWwgZG9uZTsK LSsgIGlmICghaXNVbnNpZ25lZCkgewotKyAgICBMYWJlbCBub3RNaW5PdmVyZmxvdzsKLSsgICAg YnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgSW1tV29yZChJTlQzMl9NSU4pLCAm bm90TWluT3ZlcmZsb3cpOwotKyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmhz LCBJbW1Xb3JkKC0xKSwgJm5vdE1pbk92ZXJmbG93KTsKLSsgICAgbW92ZTMyKEltbTMyKElOVDMy X01JTiksIGRpdk91dHB1dCk7Ci0rICAgIG1vdmUzMihJbW0zMigwKSwgcmVtT3V0cHV0KTsKLSsg ICAganVtcCgmZG9uZSk7Ci0rICAgIGJpbmQoJm5vdE1pbk92ZXJmbG93KTsKLSsgIH0KLSsgIGlm IChpc1Vuc2lnbmVkKSB7Ci0rICAgIGFzX2Rpdnd1KGRpdk91dHB1dCwgbGhzLCByaHMpOwotKyAg fSBlbHNlIHsKLSsgICAgYXNfZGl2dyhkaXZPdXRwdXQsIGxocywgcmhzKTsKLSsgIH0KLSsgIGFz X2V4dHN3KGRpdk91dHB1dCwgZGl2T3V0cHV0KTsKLSsgIGlmIChIYXNQT1dFUjkoKSkgewotKyAg ICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICAgIGFzX21vZHV3KHJlbU91dHB1dCwgbGhzLCByaHMp OwotKyAgICB9IGVsc2UgewotKyAgICAgIGFzX21vZHN3KHJlbU91dHB1dCwgbGhzLCByaHMpOwot KyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBhc19tdWxsdyhyZW1PdXRwdXQsIGRpdk91dHB1dCwg cmhzKTsKLSsgICAgYXNfc3ViZihyZW1PdXRwdXQsIHJlbU91dHB1dCwgbGhzKTsKLSsgIH0KLSsg IGFzX2V4dHN3KHJlbU91dHB1dCwgcmVtT3V0cHV0KTsKLSsgIGJpbmQoJmRvbmUpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzaGlmdEluZGV4MzJBbmRBZGQoUmVnaXN0ZXIgaW5kZXhU ZW1wMzIsIGludCBzaGlmdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgcG9pbnRlcikgewotKyAgaWYgKElzU2hpZnRJblNjYWxlUmFuZ2Uoc2hpZnQp KSB7Ci0rICAgIGNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKAotKyAgICAgICAgQmFzZUluZGV4KHBv aW50ZXIsIGluZGV4VGVtcDMyLCBTaGlmdFRvU2NhbGUoc2hpZnQpKSwgcG9pbnRlcik7Ci0rICAg IHJldHVybjsKLSsgIH0KLSsgIGxzaGlmdDMyKEltbTMyKHNoaWZ0KSwgaW5kZXhUZW1wMzIpOwot KyAgYWRkUHRyKGluZGV4VGVtcDMyLCBwb2ludGVyKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6Y29udmVydEludDY0VG9Eb3VibGUoUmVnaXN0ZXI2NCBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgYXNfbXR2c3JkKGRlc3QsIHNyYy5yZWcpOwotKyAgYXNfZmNmaWQoZGVzdCwg ZGVzdCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5lYXJieUludERvdWJsZShSb3Vu ZGluZ01vZGUgbW9kZSwgRmxvYXRSZWdpc3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgc3dpdGNoIChtb2RlKSB7 Ci0rICAgIGNhc2UgUm91bmRpbmdNb2RlOjpOZWFyZXN0VGllc1RvRXZlbjogewotKyAgICAgIC8v IFBQQzY0J3MgZnJpbiByb3VuZHMgdGllcyBhd2F5IGZyb20gemVybywgTk9UIHRvIGV2ZW4gKElT QSB2My4xKS4KLSsgICAgICAvLyBVc2UgZmN0aWQrZmNmaWQgd2hpY2ggdXNlcyBGUFNDUiBSTiAo ZGVmYXVsdCA9IHJvdW5kLXRvLW5lYXJlc3QtZXZlbikuCi0rICAgICAgLy8gR3VhcmQ6IGlmIHxz cmN8ID49IDJeNTIsIHZhbHVlIGlzIGFscmVhZHkgaW50ZWdyYWwgKG9yIE5hTi9JbmYpIOKAlAot KyAgICAgIC8vIGp1c3QgY29weSBzcmMuIFRoaXMgcHJlc2VydmVzIE5hTiwgSW5mLCBhbmQgLTAu Ci0rICAgICAgLy8gQ2hlY2sgdmlhIGludGVnZXIgZXhwb25lbnQgZXh0cmFjdGlvbiB0byBhdm9p ZCBGUCB0ZW1wIGNvbmZsaWN0cy4KLSsgICAgICBMYWJlbCBkb25lOwotKyAgICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgICAgIG1vdmVEb3VibGUoc3JjLCBTY3JhdGNoRG91YmxlUmVn KTsKLSsgICAgICBpZiAoc3JjICE9IGRlc3QpIHsKLSsgICAgICAgIG1vdmVEb3VibGUoc3JjLCBk ZXN0KTsKLSsgICAgICB9Ci0rICAgICAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgICAgICAvLyB4 c3hleHBkcCBsYXlzIHRoZSAxMS1iaXQgYmlhc2VkIGV4cG9uZW50IGluIFhULmR3MCB3aXRoIHRo ZQotKyAgICAgICAgLy8gcmVzdCB6ZXJvZWQsIHNvIG1mdnNyZCByZWFkcyBpdCBkaXJlY3RseSDi gJQgZHJvcHMgdGhlCi0rICAgICAgICAvLyBzcmRpK2FuZGkuIG1hc2tpbmcgcGFpci4KLSsgICAg ICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgZXhwU2NyYXRjaCgqdGhpcyk7Ci0rICAgICAgICBhc194 c3hleHBkcChleHBTY3JhdGNoLCBTY3JhdGNoRG91YmxlUmVnKTsKLSsgICAgICAgIGFzX21mdnNy ZChzY3JhdGNoLCBleHBTY3JhdGNoKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgYXNfbWZ2 c3JkKHNjcmF0Y2gsIFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgICAgICAgeF9zcmRpKHNjcmF0Y2gs IHNjcmF0Y2gsIDUyKTsKLSsgICAgICAgIGFzX2FuZGlfcmMoc2NyYXRjaCwgc2NyYXRjaCwgMHg3 RkYpOwotKyAgICAgIH0KLSsgICAgICAvLyBCaWFzZWQgZXhwb25lbnQgPj0gMTA3NSAoPSAxMDIz KzUyKSBtZWFucyB8dmFsfCA+PSAyXjUyLgotKyAgICAgIC8vIEFsc28gY2F0Y2hlcyBJbmYgKGV4 cD0yMDQ3KSBhbmQgTmFOIChleHA9MjA0NykuCi0rICAgICAgbWFfY21wKHNjcmF0Y2gsIEltbTMy KDEwNzUpLCBBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCk7Ci0rICAgICAgbWFfYihBc3Nl bWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgJmRvbmUpOwotKyAgICAgIGFzX2ZjdGlkKGRlc3Qs IFNjcmF0Y2hEb3VibGVSZWcpOwotKyAgICAgIGFzX2ZjZmlkKGRlc3QsIGRlc3QpOwotKyAgICAg IGFzX2ZjcHNnbihkZXN0LCBTY3JhdGNoRG91YmxlUmVnLCBkZXN0KTsKLSsgICAgICBiaW5kKCZk b25lKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIFJvdW5kaW5nTW9kZTo6VG93 YXJkc1plcm86Ci0rICAgICAgYXNfZnJpeihkZXN0LCBzcmMpOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIFJvdW5kaW5nTW9kZTo6VXA6Ci0rICAgICAgYXNfZnJpcChkZXN0LCBzcmMpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIFJvdW5kaW5nTW9kZTo6RG93bjoKLSsgICAgICBhc19mcmlt KGRlc3QsIHNyYyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NS QVNIKCJVbmV4cGVjdGVkIHJvdW5kaW5nIG1vZGUiKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6bmVhcmJ5SW50RmxvYXQzMihSb3VuZGluZ01vZGUgbW9kZSwgRmxvYXRSZWdp c3RlciBzcmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKLSsgIC8vIFBQQyBGUCByb3VuZGluZyBpbnN0cnVjdGlvbnMgb3BlcmF0 ZSBvbiBkb3VibGUtcHJlY2lzaW9uLgotKyAgLy8gRm9yIHNpbmdsZS1wcmVjaXNpb24sIHdlIHJv dW5kIGFzIGRvdWJsZSB0aGVuIHJvdW5kIGJhY2sgdG8gc2luZ2xlLgotKyAgLy8gVGhlIGZyc3Ag aW5zdHJ1Y3Rpb24gaGFuZGxlcyB0aGUgZG91YmxlLT5zaW5nbGUgY29udmVyc2lvbi4KLSsgIG5l YXJieUludERvdWJsZShtb2RlLCBzcmMsIGRlc3QpOwotKyAgYXNfZnJzcChkZXN0LCBkZXN0KTsK LSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rLy8gRmFyIGp1bXAgc3VwcG9ydC4KLSsKLStDb2RlT2Zmc2V0 IE1hY3JvQXNzZW1ibGVyOjpmYXJKdW1wV2l0aFBhdGNoKCkgewotKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKLSsKLSsgIC8vIHN0YW56YSg4KSArIG10Y3RyICsgYmN0ciA9IDEwIGluc3RydWN0 aW9ucy4KLSsgIENvZGVPZmZzZXQgbG9hZE9mZnNldChjdXJyZW50T2Zmc2V0KCkpOwotKyAgbV9i dWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBhdGNoYWJsZUJyYW5jaEluc25zKTsKLSsgIGVtaXRM b2FkNjRTdGFuemEoc2NyYXRjaCwgMCk7Ci0rICB4c19tdGN0cihzY3JhdGNoKTsKLSsgIGFzX2Jj dHIoKTsKLSsgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7Ci0rCi0rICByZXR1cm4gbG9hZE9mZnNl dDsKLSt9Ci0rCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Zmx1c2goKSB7IEFz c2VtYmxlcjo6Zmx1c2goKTsgfQotKwotKy8vIFdhc20gc3VwcG9ydC4KLSsKLStGYXVsdGluZ0Nv ZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6Ondhc21UcmFwSW5zdHJ1Y3Rpb24oKSB7Ci0rICBtX2J1 ZmZlci5mbHVzaFBvb2woKTsgIC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAotKyAgRmF1 bHRpbmdDb2RlT2Zmc2V0IGZjbyA9IEZhdWx0aW5nQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkp OwotKyAgeHNfdHJhcCgpOwotKyAgcmV0dXJuIGZjbzsKLSt9Ci0rCi0rLy8gUFBDNjQgU2xvd0Nh bGxNYXJrZXI6IGBvcmkgcjAsIHIwLCAwYCAtLSBhIE5PUC1saWtlIGluc3RydWN0aW9uCi0rLy8g dGhhdCB3b24ndCBhcHBlYXIgaW4gbm9ybWFsIGNvZGUgZ2VuZXJhdGlvbi4KLSsvLyBvcmkgcjAs IHIwLCAwID0gMHg2MDAwMDAwMCAtLSB0aGF0J3MgYWN0dWFsbHkgUFBDX25vcC4KLSsvLyBVc2Ug YSBkaXN0aW5ndWlzaGFibGUgZW5jb2Rpbmc6IGBvcmkgcjEyLCByMTIsIDBgID0gMHg2MThDMDAw MAotK3N0YXRpYyBjb25zdCBpbnQzMl90IFNsb3dDYWxsTWFya2VyID0gMHg2MThDMDAwMDsKLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtTWFya0NhbGxBc1Nsb3coKSB7Ci0rICAvLyBFbWl0 OiBvcmkgcjEyLCByMTIsIDAKLSsgIGFzX29yaShDYWxsUmVnLCBDYWxsUmVnLCAwKTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUNoZWNrU2xvd0NhbGxzaXRlKFJlZ2lzdGVyIHJh XywgTGFiZWwqIG5vdFNsb3csCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHRlbXAxLCBSZWdpc3RlciB0ZW1wMikgewotKyAgTU9aX0FTU0VSVChy YV8gIT0gdGVtcDIpOwotKyAgbG9hZDMyKEFkZHJlc3MocmFfLCAwKSwgdGVtcDIpOwotKyAgYnJh bmNoMzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcDIsIEltbTMyKFNsb3dDYWxsTWFya2VyKSwg bm90U2xvdyk7Ci0rfQotKwotK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6Ondhc21NYXJrZWRT bG93Q2FsbChjb25zdCB3YXNtOjpDYWxsU2l0ZURlc2MmIGRlc2MsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVyIHJlZykgewotKyAg Q29kZU9mZnNldCBvZmZzZXQgPSBjYWxsKGRlc2MsIHJlZyk7Ci0rICB3YXNtTWFya0NhbGxBc1Ns b3coKTsKLSsgIHJldHVybiBvZmZzZXQ7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIEFkZGl0aW9u YWwgc3RhY2sgb3BlcmF0aW9ucy4KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQdXNoKEZsb2F0 UmVnaXN0ZXIgZikgewotKyAgcHVzaChmKTsKLSsgIGFkanVzdEZyYW1lKGludDMyX3Qoc2l6ZW9m KGRvdWJsZSkpKTsKLSt9Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UG9wKEZsb2F0UmVnaXN0ZXIg ZikgewotKyAgcG9wKGYpOwotKyAgYWRqdXN0RnJhbWUoLWludDMyX3Qoc2l6ZW9mKGRvdWJsZSkp KTsKLSt9Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UG9wKGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFs KSB7Ci0rICBwb3BWYWx1ZSh2YWwpOwotKyAgYWRqdXN0RnJhbWUoLWludDMyX3Qoc2l6ZW9mKFZh bHVlKSkpOwotK30KLSsKLSsvLyBzdGF0aWMKLStzaXplX3QgTWFjcm9Bc3NlbWJsZXI6OlB1c2hS ZWdzSW5NYXNrU2l6ZUluQnl0ZXMoTGl2ZVJlZ2lzdGVyU2V0IHNldCkgewotKyAgcmV0dXJuIHNl dC5ncHJzKCkuc2l6ZSgpICogc2l6ZW9mKGludHB0cl90KSArIHNldC5mcHVzKCkuZ2V0UHVzaFNp emVJbkJ5dGVzKCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlUmVnc0luTWFz ayhMaXZlUmVnaXN0ZXJTZXQgc2V0LCBBZGRyZXNzIGRlc3QsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKLSsgIEZsb2F0UmVnaXN0ZXJT ZXQgZnB1U2V0KHNldC5mcHVzKCkucmVkdWNlU2V0Rm9yUHVzaCgpKTsKLSsgIG1vemlsbGE6OkRl YnVnT25seTx1bnNpZ25lZD4gbnVtRnB1ID0gZnB1U2V0LnNpemUoKTsKLSsgIG1vemlsbGE6OkRl YnVnT25seTxpbnQzMl90PiBkaWZmRiA9IGZwdVNldC5nZXRQdXNoU2l6ZUluQnl0ZXMoKTsKLSsg IG1vemlsbGE6OkRlYnVnT25seTxpbnQzMl90PiBkaWZmRyA9IHNldC5ncHJzKCkuc2l6ZSgpICog c2l6ZW9mKGludHB0cl90KTsKLSsKLSsgIE1PWl9BU1NFUlQoZGVzdC5vZmZzZXQgPj0gZGlmZkcg KyBkaWZmRik7Ci0rCi0rICBmb3IgKEdlbmVyYWxSZWdpc3RlckJhY2t3YXJkSXRlcmF0b3IgaXRl cihzZXQuZ3BycygpKTsgaXRlci5tb3JlKCk7ICsraXRlcikgewotKyAgICBkaWZmRyAtPSBzaXpl b2YoaW50cHRyX3QpOwotKyAgICBkZXN0Lm9mZnNldCAtPSBzaXplb2YoaW50cHRyX3QpOwotKyAg ICBzdG9yZVB0cigqaXRlciwgZGVzdCk7Ci0rICB9Ci0rICBNT1pfQVNTRVJUKGRpZmZHID09IDAp OwotKwotKyAgLy8gTmF0dXJhbCBwZXIta2luZCBzbG90LiBTZWUgUHVzaFJlZ3NJbk1hc2sgY29t bWVudC4KLSsgIGZvciAoRmxvYXRSZWdpc3RlckJhY2t3YXJkSXRlcmF0b3IgaXRlcihmcHVTZXQp OyBpdGVyLm1vcmUoKTsgKytpdGVyKSB7Ci0rICAgIEZsb2F0UmVnaXN0ZXIgcmVnID0gKml0ZXI7 Ci0rICAgIGRpZmZGIC09IHJlZy5zaXplKCk7Ci0rICAgIG51bUZwdSAtPSAxOwotKyAgICBkZXN0 Lm9mZnNldCAtPSByZWcuc2l6ZSgpOwotKyAgICBpZiAocmVnLmlzU2ltZDEyOCgpKSB7Ci0rICAg ICAgc3RvcmVVbmFsaWduZWRTaW1kMTI4KHJlZywgZGVzdCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAg ICAgc3RvcmVEb3VibGUocmVnLmFzRG91YmxlKCksIGRlc3QpOwotKyAgICB9Ci0rICB9Ci0rICBN T1pfQVNTRVJUKGRpZmZGID09IDApOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmcmVl U3RhY2tUbyh1aW50MzJfdCBmcmFtZVB1c2hlZCkgewotKyAgTU9aX0FTU0VSVChmcmFtZVB1c2hl ZCA8PSBmcmFtZVB1c2hlZF8pOwotKyAgLy8gU1AgPSBGUCAtIGZyYW1lUHVzaGVkCi0rICBtb3Zl UHRyKEZyYW1lUG9pbnRlciwgU3RhY2tQb2ludGVyKTsKLSsgIGlmIChmcmFtZVB1c2hlZCkgewot KyAgICBzdWJQdHIoSW1tMzIoZnJhbWVQdXNoZWQpLCBTdGFja1BvaW50ZXIpOwotKyAgfQotKyAg ZnJhbWVQdXNoZWRfID0gZnJhbWVQdXNoZWQ7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIEFkZGl0 aW9uYWwgY2FsbCAvIHBhdGNoIG9wZXJhdGlvbnMuCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 Y2FsbChKaXRDb2RlKiBjKSB7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKwotKyAgdWlu dDY0X3QgYWRkciA9IHVpbnRwdHJfdChjLT5yYXcoKSk7Ci0rICBCdWZmZXJPZmZzZXQgYm8gPSBl bWl0TG9hZDY0U3RhbnphKHNjcmF0Y2gsIGFkZHIpOwotKyAgYWRkUGVuZGluZ0p1bXAoYm8sIElt bVB0cihjLT5yYXcoKSksIFJlbG9jYXRpb25LaW5kOjpKSVRDT0RFKTsKLSsKLSsgIGNhbGxKaXRO b1Byb2ZpbGVyKHNjcmF0Y2gpOwotK30KLSsKLStDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpj YWxsV2l0aFBhdGNoKCkgewotKyAgLy8gRW1pdCBhIENhbGxUYWctc2l6ZWQgc3RhbnphIG9mIG5v cHMuIFdpbGwgYmUgcGF0Y2hlZCBieSBwYXRjaENhbGwuCi0rICAvLyBSZXR1cm4gb2Zmc2V0IEFG VEVSIHRoZSBzdGFuemEgKD0gdGhlIHJldHVybiBhZGRyZXNzIHdoZW4gYmwgZXhlY3V0ZXMpLgot KyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBhdGNoYWJsZUJyYW5jaEluc25zKTsKLSsg IHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5z dChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0 KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdy aXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgIHdyaXRlSW5zdChO b3BJbnN0KTsKLSsgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7Ci0rICByZXR1cm4gQ29kZU9mZnNl dChjdXJyZW50T2Zmc2V0KCkpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRjaENh bGwodWludDMyX3QgY2FsbGVyT2Zmc2V0LCB1aW50MzJfdCBjYWxsZWVPZmZzZXQpIHsKLSsgIC8v IGNhbGxlck9mZnNldCBwb2ludHMgQUZURVIgdGhlIDEwLWluc3RydWN0aW9uIHN0YW56YSAodGhl IHJldHVybiBhZGRyZXNzKS4KLSsgIC8vIFN1YnRyYWN0IHRvIGZpbmQgdGhlIHN0YW56YSBzdGFy dC4gVGhlIGBibGAgZ29lcyBhdCBpbnN0WzldLgotKyAgdWludDMyX3Qgc3RhbnphU3RhcnQgPSBj YWxsZXJPZmZzZXQgLSAxMCAqIHNpemVvZih1aW50MzJfdCk7Ci0rICBJbnN0cnVjdGlvbiogaTAg PSAoSW5zdHJ1Y3Rpb24qKShtX2J1ZmZlci5nZXRJbnN0KEJ1ZmZlck9mZnNldChzdGFuemFTdGFy dCkpKTsKLSsgIC8vIGJsIG9mZnNldCBpcyByZWxhdGl2ZSB0byBpbnN0WzldLCB3aGljaCBpcyBh dCBzdGFuemFTdGFydCArIDM2LgotKyAgaW50cHRyX3QgYmxBZGRyID0gKGludHB0cl90KXN0YW56 YVN0YXJ0ICsgOSAqIChpbnRwdHJfdClzaXplb2YodWludDMyX3QpOwotKyAgaW50cHRyX3QgY2Fs bE9mZnNldCA9IChpbnRwdHJfdCljYWxsZWVPZmZzZXQgLSBibEFkZHI7Ci0rICBpZiAoSk9mZklt bTI2OjpJc0luUmFuZ2UoY2FsbE9mZnNldCkpIHsKLSsgICAgaTBbMF0ubWFrZU5vcCgpOwotKyAg ICBpMFsxXS5tYWtlTm9wKCk7Ci0rICAgIGkwWzJdLm1ha2VOb3AoKTsKLSsgICAgaTBbM10ubWFr ZU5vcCgpOwotKyAgICBpMFs0XS5tYWtlTm9wKCk7Ci0rICAgIGkwWzVdLm1ha2VOb3AoKTsKLSsg ICAgaTBbNl0ubWFrZU5vcCgpOwotKyAgICBpMFs3XS5tYWtlTm9wKCk7Ci0rICAgIGkwWzhdLm1h a2VOb3AoKTsKLSsgICAgaTBbOV0uc2V0RGF0YShQUENfYiB8IEpPZmZJbW0yNihjYWxsT2Zmc2V0 KS5lbmNvZGUoKSB8IExpbmtCKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGFkZExvbmdKdW1wKEJ1ZmZl ck9mZnNldChzdGFuemFTdGFydCksIEJ1ZmZlck9mZnNldChjYWxsZWVPZmZzZXQpKTsKLSsgICAg V3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMoaTAsIFNlY29uZFNjcmF0Y2hSZWcsIExhYmVsQmFzZTo6 SU5WQUxJRF9PRkZTRVQpOwotKyAgICBpMFs4XS5tYWtlT3BfbXRjdHIoU2Vjb25kU2NyYXRjaFJl Zyk7Ci0rICAgIGkwWzldLm1ha2VPcF9iY3RyKExpbmtCKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6cGF0Y2hGYXJKdW1wKENvZGVPZmZzZXQgZmFySnVtcCwgdWludDMyX3Qg dGFyZ2V0T2Zmc2V0KSB7Ci0rICBJbnN0cnVjdGlvbiogaW5zdCA9Ci0rICAgICAgKEluc3RydWN0 aW9uKiltX2J1ZmZlci5nZXRJbnN0KEJ1ZmZlck9mZnNldChmYXJKdW1wLm9mZnNldCgpKSk7Ci0r ICAvLyBFeHRyYWN0IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBmcm9tIHRoZSBleGlzdGluZyBz dGFuemEuIEJvdGggc2hhcGVzCi0rICAvLyBlbmNvZGUgckQgYXQgTEUgYml0cyBbMjEuLjI1XSBv ZiB0aGVpciBmaXJzdCAicmVnaXN0ZXItdG91Y2hpbmciIHNsb3Q6Ci0rICAvLyBQOCA9IG1mbHIg ckQgYXQgWzJdLCBQOSsgPSBhZGRwY2lzIHJEIGF0IFswXS4gTWFqb3Igb3Bjb2RlIG9mIHNsb3Qg WzBdCi0rICAvLyBkaXN0aW5ndWlzaGVzICgzMSA9IG1mc3ByLCAxOSA9IGFkZHBjaXMpLgotKyAg dWludDMyX3QgaTAgPSBpbnN0WzBdLmVuY29kZSgpOwotKyAgdWludDMyX3QgcmVnQ29kZSA9ICgo KGkwID4+IDI2KSAmIDB4M2YpID09IDE5KQotKyAgICAgICAgICAgICAgICAgICAgICAgICA/ICgo aTAgPj4gMjEpICYgMHgxZikKLSsgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKGluc3RbMl0u ZW5jb2RlKCkgPj4gMjEpICYgMHgxZik7Ci0rICBSZWdpc3RlciByZWcgPSBSZWdpc3Rlcjo6RnJv bUNvZGUocmVnQ29kZSk7Ci0rICBXcml0ZUxvYWQ2NEluc3RydWN0aW9ucyhpbnN0LCByZWcsIExh YmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOwotKyAgYWRkTG9uZ0p1bXAoQnVmZmVyT2Zmc2V0KGZh ckp1bXAub2Zmc2V0KCkpLCBCdWZmZXJPZmZzZXQodGFyZ2V0T2Zmc2V0KSk7Ci0rfQotKwotKy8v IHN0YXRpYwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBhdGNoRmFySnVtcCh1aW50OF90KiBmYXJK dW1wLCB1aW50OF90KiB0YXJnZXQpIHsKLSsgIFVwZGF0ZUxvYWQ2NFZhbHVlKChJbnN0cnVjdGlv biopZmFySnVtcCwgKHVpbnQ2NF90KSh1aW50cHRyX3QpdGFyZ2V0KTsKLSsgIEZsdXNoSUNhY2hl KGZhckp1bXAsIDggKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKLSt9Ci0rCi0rLy8gc3RhdGljCi0r dm9pZCBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hOb3BUb0NhbGwodWludDhfdCogY2FsbHNpdGUsIHVp bnQ4X3QqIHRhcmdldCkgewotKyAgLy8gY2FsbHNpdGUgcG9pbnRzIEFGVEVSIHRoZSAxMC1pbnN0 cnVjdGlvbiBzdGFuemEuIFN1YnRyYWN0IHRvIGZpbmQgc3RhcnQuCi0rICBJbnN0cnVjdGlvbiog aW5zdCA9IChJbnN0cnVjdGlvbiopY2FsbHNpdGUgLSAxMDsKLSsgIFdyaXRlTG9hZDY0SW5zdHJ1 Y3Rpb25zKGluc3QsIFNlY29uZFNjcmF0Y2hSZWcsICh1aW50NjRfdCkodWludHB0cl90KXRhcmdl dCk7Ci0rICBpbnN0WzhdLm1ha2VPcF9tdGN0cihTZWNvbmRTY3JhdGNoUmVnKTsKLSsgIGluc3Rb OV0ubWFrZU9wX2JjdHIoTGlua0IpOwotKyAgRmx1c2hJQ2FjaGUoaW5zdCwgMTAgKiBzaXplb2Yo SW5zdHJ1Y3Rpb24pKTsKLSt9Ci0rCi0rLy8gc3RhdGljCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 cGF0Y2hDYWxsVG9Ob3AodWludDhfdCogY2FsbHNpdGUpIHsKLSsgIC8vIGNhbGxzaXRlIHBvaW50 cyBBRlRFUiB0aGUgMTAtaW5zdHJ1Y3Rpb24gc3RhbnphLiBTdWJ0cmFjdCB0byBmaW5kIHN0YXJ0 LgotKyAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKWNhbGxzaXRlIC0gMTA7Ci0r ICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLSsgICAgaW5zdFtpXS5tYWtlTm9wKCk7 Ci0rICB9Ci0rICBGbHVzaElDYWNoZShpbnN0LCAxMCAqIHNpemVvZihJbnN0cnVjdGlvbikpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRjaE1vdmUzMihDb2RlT2Zmc2V0IG9mZnNl dCwgSW1tMzIgbikgewotKyAgLy8gUGF0Y2ggYW4gOC1pbnN0cnVjdGlvbiBsb2FkNjQgc2VxdWVu Y2Ugd2l0aCBhIDMyLWJpdCB2YWx1ZS4KLSsgIEluc3RydWN0aW9uKiBpbnN0ID0KLSsgICAgICAo SW5zdHJ1Y3Rpb24qKW1fYnVmZmVyLmdldEluc3QoQnVmZmVyT2Zmc2V0KG9mZnNldC5vZmZzZXQo KSkpOwotKyAgVXBkYXRlTG9hZDY0VmFsdWUoaW5zdCwgdWludDY0X3QoaW50NjRfdChuLnZhbHVl KSkpOwotK30KLSsKLSt1aW50MzJfdCBNYWNyb0Fzc2VtYmxlcjo6cHVzaEZha2VSZXR1cm5BZGRy ZXNzKFJlZ2lzdGVyIHNjcmF0Y2gpIHsKLSsgIENvZGVMYWJlbCBjbDsKLSsKLSsgIC8vIFVzZSBt b3YoQ29kZUxhYmVsKiwgUmVnaXN0ZXIpIHdoaWNoIGFsd2F5cyBlbWl0cyBhIGZ1bGwgOC1pbnN0 cnVjdGlvbgotKyAgLy8gbG9hZDY0IHNlcXVlbmNlICh2aWEgTk9QcyArIFdyaXRlTG9hZDY0SW5z dHJ1Y3Rpb25zKS4gVGhpcyBpcyBjcml0aWNhbAotKyAgLy8gYmVjYXVzZSBtb3ZlUHRyKEltbVdv cmQoMCkpIHdvdWxkIG9wdGltaXplIHRvIGEgc2luZ2xlIGxpIGluc3RydWN0aW9uLAotKyAgLy8g YnV0IHByb2Nlc3NDb2RlTGFiZWxzLT5CaW5kLT5VcGRhdGVMb2FkNjRWYWx1ZSBleHBlY3RzIHRo ZSBmdWxsCi0rICAvLyA4LWluc3RydWN0aW9uIGxpdGVyYWwgcG9vbCBzZXF1ZW5jZSBhdCB0aGUg cGF0Y2hBdCBvZmZzZXQuCi0rICBtb3YoJmNsLCBzY3JhdGNoKTsKLSsKLSsgIFB1c2goc2NyYXRj aCk7Ci0rCi0rICBiaW5kKCZjbCk7Ci0rICB1aW50MzJfdCByZXRBZGRyID0gY3VycmVudE9mZnNl dCgpOwotKwotKyAgYWRkQ29kZUxhYmVsKGNsKTsKLSsgIHJldHVybiByZXRBZGRyOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjYWxsV2l0aEFCSU5vUHJvZmlsZXIoUmVnaXN0ZXIgZnVu LCBBQklUeXBlIHJlc3VsdCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIC8vIFNh dmUgZnVuIHRvIHNjcmF0Y2ggc2luY2UgZnVuIG1pZ2h0IGJlIGNsb2JiZXJlZCBieSBjYWxsV2l0 aEFCSVByZS4KLSsgIG1vdmVQdHIoZnVuLCBzY3JhdGNoKTsKLSsKLSsgIHVpbnQzMl90IHN0YWNr QWRqdXN0OwotKyAgY2FsbFdpdGhBQklQcmUoJnN0YWNrQWRqdXN0KTsKLSsgIGNhbGwoc2NyYXRj aCk7Ci0rICBjYWxsV2l0aEFCSVBvc3Qoc3RhY2tBZGp1c3QsIHJlc3VsdCk7Ci0rfQotKwotKy8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKy8vIEFkZGl0aW9uYWwgYXJpdGhtZXRpYyBoZWxwZXJzLgotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmZsZXhpYmxlUmVtYWluZGVyMzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciBy aHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBk ZXN0LCBib29sIGlzVW5zaWduZWQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBMaXZlUmVnaXN0ZXJTZXQmKSB7Ci0rICAvLyByZW0gPSBsaHMgLSAobGhz L3JocykqcmhzCi0rICAvLyBQUEM2NCBkaXZ3KElOVDMyX01JTiwgLTEpIGlzIHVuZGVmaW5lZDsg cmVzdWx0IGlzIDAuCi0rICBMYWJlbCBkb25lOwotKyAgaWYgKCFpc1Vuc2lnbmVkKSB7Ci0rICAg IExhYmVsIG5vdE1pbk92ZXJmbG93OwotKyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVh bCwgbGhzLCBJbW1Xb3JkKElOVDMyX01JTiksICZub3RNaW5PdmVyZmxvdyk7Ci0rICAgIGJyYW5j aFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluT3ZlcmZs b3cpOwotKyAgICBtb3ZlMzIoSW1tMzIoMCksIGRlc3QpOwotKyAgICBqdW1wKCZkb25lKTsKLSsg ICAgYmluZCgmbm90TWluT3ZlcmZsb3cpOwotKyAgfQotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0r ICAgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgICAgYXNfbW9kdXcoZGVzdCwgbGhzLCByaHMpOwot KyAgICB9IGVsc2UgewotKyAgICAgIGFzX21vZHN3KGRlc3QsIGxocywgcmhzKTsKLSsgICAgfQot KyAgfSBlbHNlIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBpZiAoaXNV bnNpZ25lZCkgewotKyAgICAgIGFzX2Rpdnd1KHNjcmF0Y2gsIGxocywgcmhzKTsKLSsgICAgfSBl bHNlIHsKLSsgICAgICBhc19kaXZ3KHNjcmF0Y2gsIGxocywgcmhzKTsKLSsgICAgfQotKyAgICBh c19tdWxsdyhzY3JhdGNoLCBzY3JhdGNoLCByaHMpOwotKyAgICBhc19zdWJmKGRlc3QsIHNjcmF0 Y2gsIGxocyk7Ci0rICB9Ci0rICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSsgIGJpbmQoJmRvbmUp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4aWJsZVF1b3RpZW50UHRyKFJlZ2lz dGVyIGxocywgUmVnaXN0ZXIgcmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgZGVzdCwgYm9vbCBpc1Vuc2lnbmVkLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGl2ZVJlZ2lzdGVyU2V0JikgewotKyAg Ly8gUFBDNjQgZGl2ZChJTlQ2NF9NSU4sIC0xKSBpcyB1bmRlZmluZWQ7IHJldHVybiBJTlQ2NF9N SU4gdG8gbWF0Y2gKLSsgIC8vIEFSTTY0L0xvb25nQXJjaDY0IGhhcmR3YXJlIHNkaXYgYmVoYXZp b3IuCi0rICBMYWJlbCBkb25lOwotKyAgaWYgKCFpc1Vuc2lnbmVkKSB7Ci0rICAgIExhYmVsIG5v dE1pbk92ZXJmbG93OwotKyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJ bW1Xb3JkKElOVDY0X01JTiksICZub3RNaW5PdmVyZmxvdyk7Ci0rICAgIGJyYW5jaFB0cihBc3Nl bWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluT3ZlcmZsb3cpOwotKyAg ICBtb3ZlUHRyKEltbVdvcmQoSU5UNjRfTUlOKSwgZGVzdCk7Ci0rICAgIGp1bXAoJmRvbmUpOwot KyAgICBiaW5kKCZub3RNaW5PdmVyZmxvdyk7Ci0rICB9Ci0rICBpZiAoaXNVbnNpZ25lZCkgewot KyAgICBhc19kaXZkdShkZXN0LCBsaHMsIHJocyk7Ci0rICB9IGVsc2UgewotKyAgICBhc19kaXZk KGRlc3QsIGxocywgcmhzKTsKLSsgIH0KLSsgIGJpbmQoJmRvbmUpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpmbGV4aWJsZVJlbWFpbmRlclB0cihSZWdpc3RlciBsaHMsIFJlZ2lzdGVy IHJocywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciBkZXN0LCBib29sIGlzVW5zaWduZWQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgTGl2ZVJlZ2lzdGVyU2V0JikgewotKyAgLy8gcmVtID0gbGhzIC0g KGxocy9yaHMpKnJocwotKyAgLy8gUFBDNjQgZGl2ZChJTlQ2NF9NSU4sIC0xKSBpcyB1bmRlZmlu ZWQ7IHJlc3VsdCBpcyAwLgotKyAgTGFiZWwgZG9uZTsKLSsgIGlmICghaXNVbnNpZ25lZCkgewot KyAgICBMYWJlbCBub3RNaW5PdmVyZmxvdzsKLSsgICAgYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90 RXF1YWwsIGxocywgSW1tV29yZChJTlQ2NF9NSU4pLCAmbm90TWluT3ZlcmZsb3cpOwotKyAgICBi cmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmhzLCBJbW1Xb3JkKC0xKSwgJm5vdE1pbk92 ZXJmbG93KTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKDApLCBkZXN0KTsKLSsgICAganVtcCgmZG9u ZSk7Ci0rICAgIGJpbmQoJm5vdE1pbk92ZXJmbG93KTsKLSsgIH0KLSsgIGlmIChIYXNQT1dFUjko KSkgewotKyAgICBpZiAoaXNVbnNpZ25lZCkgewotKyAgICAgIGFzX21vZHVkKGRlc3QsIGxocywg cmhzKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc19tb2RzZChkZXN0LCBsaHMsIHJocyk7Ci0r ICAgIH0KLSsgIH0gZWxzZSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAg aWYgKGlzVW5zaWduZWQpIHsKLSsgICAgICBhc19kaXZkdShzY3JhdGNoLCBsaHMsIHJocyk7Ci0r ICAgIH0gZWxzZSB7Ci0rICAgICAgYXNfZGl2ZChzY3JhdGNoLCBsaHMsIHJocyk7Ci0rICAgIH0K LSsgICAgYXNfbXVsbGQoc2NyYXRjaCwgc2NyYXRjaCwgcmhzKTsKLSsgICAgYXNfc3ViZihkZXN0 LCBzY3JhdGNoLCBsaHMpOwotKyAgfQotKyAgYmluZCgmZG9uZSk7Ci0rfQotKwotKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKy8vIFJvdW5kaW5nIGhlbHBlcnMuCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Zmxvb3JE b3VibGVUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbCkgewotKyAgU2NyYXRj aERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKwotKyAgLy8gUm91bmQgdG93YXJkIG5lZ2F0aXZlIGluZmluaXR5LCB0aGVuIGNvbnZl cnQgdG8gaW50NjQuCi0rICBhc19mcmltKGZwc2NyYXRjaCwgc3JjKTsKLSsgIGFzX2ZjdGlkeihm cHNjcmF0Y2gsIGZwc2NyYXRjaCk7Ci0rICBhc19tZnZzcmQoZGVzdCwgZnBzY3JhdGNoKTsKLSsK LSsgIC8vIENoZWNrIGlmIHJlc3VsdCBmaXRzIGluIGludDMyLgotKyAgYXNfZXh0c3coc2NyYXRj aCwgZGVzdCk7Ci0rICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwotKyAgbWFfYihOb3RFcXVhbCwg ZmFpbCk7Ci0rCi0rICAvLyBDaGVjayBmb3IgLTAgYW5kIE5hTiB3aGVuIHJlc3VsdCBpcyB6ZXJv LgotKyAgTGFiZWwgbm90WmVybzsKLSsgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAgbWFfYihOb3RF cXVhbCwgJm5vdFplcm8pOwotKyAgewotKyAgICAvLyBJZiB0b3AgMiBiaXRzIG9mIHNyYyBhcmUg c2V0LCBpdCdzIG5lZ2F0aXZlIG9yIE5hTi4KLSsgICAgYXNfbWZ2c3JkKGRlc3QsIHNyYyk7Ci0r ICAgIC8vIHJsZGljbC4gPSB4X3NyZGkgKyByZWNvcmQgZm9ybTogZGVzdCA9IHRvcCAyIGJpdHMs IENSMFtlcV09KGRlc3Q9PTApLgotKyAgICAvLyBGb2xkcyB0aGUgZXhwbGljaXQgY21wZGkgc3Jj LDAgdGhhdCB3b3VsZCBvdGhlcndpc2UgZHJpdmUgdGhlIGJyYW5jaC4KLSsgICAgYXNfcmxkaWNs X3JjKGRlc3QsIGRlc3QsIDIsIDYyKTsKLSsgICAgbWFfYihOb3RFcXVhbCwgZmFpbCk7Ci0rICB9 Ci0rICBiaW5kKCZub3RaZXJvKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Zmxvb3JG bG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsKSB7Ci0rICBTY3Jh dGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKLSsgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rCi0rICAvLyBQUEMgRlAgcm91bmRpbmcgd29ya3Mgb24gZG91Ymxlcy4gU2luZ2xl LXByZWNpc2lvbiBGUFJzIGFyZQotKyAgLy8gYWxyZWFkeSBpbiBkb3VibGUtd2lkdGggcmVnaXN0 ZXJzLCBzbyBmcmltIHdvcmtzIGZpbmUuCi0rICBhc19mcmltKGZwc2NyYXRjaCwgc3JjKTsKLSsg IGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7Ci0rICBhc19tZnZzcmQoZGVzdCwgZnBz Y3JhdGNoKTsKLSsKLSsgIC8vIENoZWNrIGlmIHJlc3VsdCBmaXRzIGluIGludDMyLgotKyAgYXNf ZXh0c3coc2NyYXRjaCwgZGVzdCk7Ci0rICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwotKyAgbWFf YihOb3RFcXVhbCwgZmFpbCk7Ci0rCi0rICAvLyBDaGVjayBmb3IgLTAgYW5kIE5hTiB3aGVuIHJl c3VsdCBpcyB6ZXJvLgotKyAgTGFiZWwgbm90WmVybzsKLSsgIGFzX2NtcGRpKGRlc3QsIDApOwot KyAgbWFfYihOb3RFcXVhbCwgJm5vdFplcm8pOwotKyAgewotKyAgICAvLyBzcmMgaXMgaGVsZCBp biB0aGUgRlBSIGFzIGEgNjQtYml0IGRvdWJsZSAobGZzIHdpZGVucyBmbG9hdDMyIHRvCi0rICAg IC8vIGRvdWJsZSBvbiBsb2FkKSwgc28gdGhlIHNhbWUgdG9wLTItYml0cyBjaGVjayB1c2VkIGZv ciBkb3VibGVzCi0rICAgIC8vIGFwcGxpZXM6IGJpdCA2MyA9IHNpZ24sIGJpdCA2MiA9IGV4cG9u ZW50IE1TQi4gTm9uemVybyBtZWFucyAtMCwKLSsgICAgLy8gwrFJbmYsIE5hTiwgb3IgYSBsYXJn ZSBtYWduaXR1ZGUg4oCUIG5vbmUgb2Ygd2hpY2ggaXMgKzAuCi0rICAgIGFzX21mdnNyZChkZXN0 LCBzcmMpOwotKyAgICAvLyBybGRpY2wuID0geF9zcmRpICsgcmVjb3JkIGZvcm06IGRlc3QgPSB0 b3AgMiBiaXRzLCBDUjBbZXFdPShkZXN0PT0wKS4KLSsgICAgLy8gRm9sZHMgdGhlIGV4cGxpY2l0 IGNtcGRpIHNyYywwIHRoYXQgd291bGQgb3RoZXJ3aXNlIGRyaXZlIHRoZSBicmFuY2guCi0rICAg IGFzX3JsZGljbF9yYyhkZXN0LCBkZXN0LCAyLCA2Mik7Ci0rICAgIG1hX2IoTm90RXF1YWwsIGZh aWwpOwotKyAgfQotKyAgYmluZCgmbm90WmVybyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmNlaWxEb3VibGVUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsKSB7Ci0r ICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKLSsgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rCi0rICBhc19mcmlwKGZwc2NyYXRjaCwgc3JjKTsKLSsgIGFzX2ZjdGlk eihmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7Ci0rICBhc19tZnZzcmQoZGVzdCwgZnBzY3JhdGNoKTsK LSsKLSsgIC8vIENoZWNrIGlmIHJlc3VsdCBmaXRzIGluIGludDMyLgotKyAgYXNfZXh0c3coc2Ny YXRjaCwgZGVzdCk7Ci0rICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwotKyAgbWFfYihOb3RFcXVh bCwgZmFpbCk7Ci0rCi0rICAvLyBDaGVjayBmb3IgKC0xLCAtMF0gYW5kIE5hTiB3aGVuIHJlc3Vs dCBpcyB6ZXJvLgotKyAgTGFiZWwgbm90WmVybzsKLSsgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAg bWFfYihOb3RFcXVhbCwgJm5vdFplcm8pOwotKyAgewotKyAgICAvLyBJZiBiaW5hcnkgdmFsdWUg aXMgbm90IHplcm8sIGlucHV0IHdhcyBub3QgMCAoY291bGQgYmUgLTAgb3IgTmFOKS4KLSsgICAg YXNfbWZ2c3JkKGRlc3QsIHNyYyk7Ci0rICAgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAgICBtYV9i KE5vdEVxdWFsLCBmYWlsKTsKLSsgIH0KLSsgIGJpbmQoJm5vdFplcm8pOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjpjZWlsRmxvYXQzMlRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMsIFJl Z2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBmYWlsKSB7Ci0rICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsK LSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rCi0rICBhc19mcmlwKGZwc2NyYXRjaCwgc3Jj KTsKLSsgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7Ci0rICBhc19tZnZzcmQoZGVz dCwgZnBzY3JhdGNoKTsKLSsKLSsgIC8vIENoZWNrIGlmIHJlc3VsdCBmaXRzIGluIGludDMyLgot KyAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7Ci0rICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwot KyAgbWFfYihOb3RFcXVhbCwgZmFpbCk7Ci0rCi0rICAvLyBDaGVjayBmb3IgKC0xLCAtMF0gYW5k IE5hTiB3aGVuIHJlc3VsdCBpcyB6ZXJvLgotKyAgTGFiZWwgbm90WmVybzsKLSsgIGFzX2NtcGRp KGRlc3QsIDApOwotKyAgbWFfYihOb3RFcXVhbCwgJm5vdFplcm8pOwotKyAgewotKyAgICBhc19t ZnZzcmQoZGVzdCwgc3JjKTsKLSsgICAgYXNfY21wZGkoZGVzdCwgMCk7Ci0rICAgIG1hX2IoTm90 RXF1YWwsIGZhaWwpOwotKyAgfQotKyAgYmluZCgmbm90WmVybyk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnRydW5jRG91YmxlVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgZGVzdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwq IGZhaWwpIHsKLSsgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOwotKyAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsKLSsgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIHNyYyk7 Ci0rICBhc19tZnZzcmQoZGVzdCwgZnBzY3JhdGNoKTsKLSsKLSsgIC8vIENoZWNrIGlmIHJlc3Vs dCBmaXRzIGluIGludDMyLgotKyAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7Ci0rICBhc19jbXBk KGRlc3QsIHNjcmF0Y2gpOwotKyAgbWFfYihOb3RFcXVhbCwgZmFpbCk7Ci0rCi0rICAvLyBDaGVj ayBmb3IgLTAgYW5kIE5hTiB3aGVuIHJlc3VsdCBpcyB6ZXJvLgotKyAgTGFiZWwgbm90WmVybzsK LSsgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAgbWFfYihOb3RFcXVhbCwgJm5vdFplcm8pOwotKyAg ewotKyAgICBhc19tZnZzcmQoZGVzdCwgc3JjKTsKLSsgICAgLy8gcmxkaWNsLiA9IHhfc3JkaSAr IHJlY29yZCBmb3JtOiBkZXN0ID0gdG9wIDIgYml0cywgQ1IwW2VxXT0oZGVzdD09MCkuCi0rICAg IC8vIEZvbGRzIHRoZSBleHBsaWNpdCBjbXBkaSBzcmMsMCB0aGF0IHdvdWxkIG90aGVyd2lzZSBk cml2ZSB0aGUgYnJhbmNoLgotKyAgICBhc19ybGRpY2xfcmMoZGVzdCwgZGVzdCwgMiwgNjIpOwot KyAgICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKLSsgIH0KLSsgIGJpbmQoJm5vdFplcm8pOwotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0cnVuY0Zsb2F0MzJUb0ludDMyKEZsb2F0UmVnaXN0 ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGZhaWwpIHsKLSsgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2go YXNNYXNtKCkpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwot KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsKLSsgIGFzX2ZjdGlkeihm cHNjcmF0Y2gsIHNyYyk7Ci0rICBhc19tZnZzcmQoZGVzdCwgZnBzY3JhdGNoKTsKLSsKLSsgIC8v IENoZWNrIGlmIHJlc3VsdCBmaXRzIGluIGludDMyLgotKyAgYXNfZXh0c3coc2NyYXRjaCwgZGVz dCk7Ci0rICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwotKyAgbWFfYihOb3RFcXVhbCwgZmFpbCk7 Ci0rCi0rICAvLyBDaGVjayBmb3IgLTAgYW5kIE5hTiB3aGVuIHJlc3VsdCBpcyB6ZXJvLgotKyAg TGFiZWwgbm90WmVybzsKLSsgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAgbWFfYihOb3RFcXVhbCwg Jm5vdFplcm8pOwotKyAgewotKyAgICBhc19tZnZzcmQoZGVzdCwgc3JjKTsKLSsgICAgLy8gcmxk aWNsLiA9IHhfc3JkaSArIHJlY29yZCBmb3JtOiBkZXN0ID0gdG9wIDIgYml0cywgQ1IwW2VxXT0o ZGVzdD09MCkuCi0rICAgIC8vIEZvbGRzIHRoZSBleHBsaWNpdCBjbXBkaSBzcmMsMCB0aGF0IHdv dWxkIG90aGVyd2lzZSBkcml2ZSB0aGUgYnJhbmNoLgotKyAgICBhc19ybGRpY2xfcmMoZGVzdCwg ZGVzdCwgMiwgNjIpOwotKyAgICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKLSsgIH0KLSsgIGJpbmQo Jm5vdFplcm8pOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3VuZERvdWJsZVRvSW50 MzIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCwgTGFiZWwqIGZhaWwpIHsK LSsgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOwotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsKLSsgIExhYmVsIG5lZ2F0aXZlLCBlbmQsIHBlcmZvcm1Sb3VuZDsK LSsKLSsgIC8vIEJyYW5jaCBmb3IgbmVnYXRpdmUgaW5wdXRzLgotKyAgemVyb0RvdWJsZShmcHNj cmF0Y2gpOwotKyAgYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgc3JjLCBm cHNjcmF0Y2gsICZwZXJmb3JtUm91bmQpOwotKwotKyAgLy8gSW5wdXQgaXMgbmVnYXRpdmUuCi0r ICBsb2FkQ29uc3RhbnREb3VibGUoLTAuNSwgZnBzY3JhdGNoKTsKLSsgIGJyYW5jaERvdWJsZShE b3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIHNyYywgZnBzY3JhdGNoLCBmYWlsKTsKLSsgIGp1bXAo JnBlcmZvcm1Sb3VuZCk7Ci0rCi0rICBiaW5kKCZwZXJmb3JtUm91bmQpOwotKyAgewotKyAgICBs b2FkQ29uc3RhbnREb3VibGUoR2V0QmlnZ2VzdE51bWJlckxlc3NUaGFuKDAuNSksIHRlbXApOwot KyAgICBhc19mYWRkKGZwc2NyYXRjaCwgc3JjLCB0ZW1wKTsKLSsgICAgYXNfZnJpbShmcHNjcmF0 Y2gsIGZwc2NyYXRjaCk7Ci0rICAgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7Ci0r ICAgIGFzX21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOwotKwotKyAgICAvLyBDaGVjayBpZiByZXN1 bHQgZml0cyBpbiBpbnQzMi4KLSsgICAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7Ci0rICAgIGFz X2NtcGQoZGVzdCwgc2NyYXRjaCk7Ci0rICAgIG1hX2IoTm90RXF1YWwsIGZhaWwpOwotKyAgfQot KyAgYmluZCgmZW5kKTsKLSsKLSsgIC8vIENoZWNrIGZvciAtMCBhbmQgTmFOIHdoZW4gcmVzdWx0 IGlzIHplcm8uCi0rICBMYWJlbCBub3RaZXJvOwotKyAgYXNfY21wZGkoZGVzdCwgMCk7Ci0rICBt YV9iKE5vdEVxdWFsLCAmbm90WmVybyk7Ci0rICB7Ci0rICAgIGFzX21mdnNyZChkZXN0LCBzcmMp OwotKyAgICBhc19jbXBkaShkZXN0LCAwKTsKLSsgICAgbWFfYihOb3RFcXVhbCwgZmFpbCk7Ci0r ICB9Ci0rICBiaW5kKCZub3RaZXJvKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cm91 bmRGbG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCwg TGFiZWwqIGZhaWwpIHsKLSsgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkp OwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsKLSsgIExhYmVsIG5lZ2F0aXZlLCBlbmQs IHBlcmZvcm1Sb3VuZDsKLSsKLSsgIC8vIEJyYW5jaCBmb3Igbm9uLW5lZ2F0aXZlIGlucHV0cy4K LSsgIGxvYWRDb25zdGFudEZsb2F0MzIoMC4wZiwgZnBzY3JhdGNoKTsKLSsgIGJyYW5jaEZsb2F0 KERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgc3JjLCBmcHNjcmF0Y2gsICZwZXJmb3JtUm91bmQp OwotKwotKyAgLy8gSW5wdXQgaXMgbmVnYXRpdmUuCi0rICBsb2FkQ29uc3RhbnRGbG9hdDMyKC0w LjVmLCBmcHNjcmF0Y2gpOwotKyAgYnJhbmNoRmxvYXQoRG91YmxlR3JlYXRlclRoYW5PckVxdWFs LCBzcmMsIGZwc2NyYXRjaCwgZmFpbCk7Ci0rICBqdW1wKCZwZXJmb3JtUm91bmQpOwotKwotKyAg YmluZCgmcGVyZm9ybVJvdW5kKTsKLSsgIHsKLSsgICAgbG9hZENvbnN0YW50RmxvYXQzMihmbG9h dChHZXRCaWdnZXN0TnVtYmVyTGVzc1RoYW4oMC41KSksIHRlbXApOwotKyAgICBhc19mYWRkcyhm cHNjcmF0Y2gsIHNyYywgdGVtcCk7Ci0rICAgIGFzX2ZyaW0oZnBzY3JhdGNoLCBmcHNjcmF0Y2gp OwotKyAgICBhc19mY3RpZHooZnBzY3JhdGNoLCBmcHNjcmF0Y2gpOwotKyAgICBhc19tZnZzcmQo ZGVzdCwgZnBzY3JhdGNoKTsKLSsKLSsgICAgLy8gQ2hlY2sgaWYgcmVzdWx0IGZpdHMgaW4gaW50 MzIuCi0rICAgIGFzX2V4dHN3KHNjcmF0Y2gsIGRlc3QpOwotKyAgICBhc19jbXBkKGRlc3QsIHNj cmF0Y2gpOwotKyAgICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKLSsgIH0KLSsgIGJpbmQoJmVuZCk7 Ci0rCi0rICAvLyBDaGVjayBmb3IgLTAgYW5kIE5hTiB3aGVuIHJlc3VsdCBpcyB6ZXJvLgotKyAg TGFiZWwgbm90WmVybzsKLSsgIGFzX2NtcGRpKGRlc3QsIDApOwotKyAgbWFfYihOb3RFcXVhbCwg Jm5vdFplcm8pOwotKyAgewotKyAgICBhc19tZnZzcmQoZGVzdCwgc3JjKTsKLSsgICAgYXNfY21w ZGkoZGVzdCwgMCk7Ci0rICAgIG1hX2IoTm90RXF1YWwsIGZhaWwpOwotKyAgfQotKyAgYmluZCgm bm90WmVybyk7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIEZQIGNvbnZlcnNpb24gLyBjb3B5LXNp Z24uCi0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29udmVydEludFB0clRvRG91YmxlKFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICBjb252ZXJ0SW50NjRUb0RvdWJsZShS ZWdpc3RlcjY0KHNyYyksIGRlc3QpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb3B5 U2lnbkRvdWJsZShGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBvdXRwdXQpIHsKLSsg IC8vIGZjcHNnbiBmcnQsIGZyYSwgZnJiOiBjb3BpZXMgc2lnbiBvZiBmcmEgdG8gbWFnbml0dWRl IG9mIGZyYi4KLSsgIC8vIGxocyA9IG1hZ25pdHVkZSBzb3VyY2UsIHJocyA9IHNpZ24gc291cmNl LgotKyAgYXNfZmNwc2duKG91dHB1dCwgcmhzLCBsaHMpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpjb3B5U2lnbkZsb2F0MzIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IG91dHB1dCkgewotKyAgYXNfZmNwc2duKG91dHB1dCwgcmhzLCBsaHMpOwotK30KLSsKLSsvLyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsvLyBHQyAvIG51cnNlcnkgaGVscGVycy4KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy Ojpsb2FkU3RvcmVCdWZmZXIoUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBidWZmZXIpIHsKLSsgIGFu ZFB0cihJbW0zMihpbnQzMl90KH5nYzo6Q2h1bmtNYXNrKSksIHB0ciwgYnVmZmVyKTsKLSsgIGxv YWRQdHIoQWRkcmVzcyhidWZmZXIsIGdjOjpDaHVua1N0b3JlQnVmZmVyT2Zmc2V0KSwgYnVmZmVy KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVmFsdWVJc051cnNlcnlDZWxs KENvbmRpdGlvbiBjb25kLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wLCBMYWJlbCogbGFiZWwpIHsKLSsg IGJyYW5jaFZhbHVlSXNOdXJzZXJ5Q2VsbEltcGwoY29uZCwgYWRkcmVzcywgdGVtcCwgbGFiZWwp OwotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hWYWx1ZUlzTnVyc2VyeUNlbGxJbXBsKENvbmRpdGlvbiBjb25kLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgdmFsdWUsIFJl Z2lzdGVyIHRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIE1PWl9BU1NFUlQoY29uZCA9PSBBc3NlbWJsZXI6 OkVxdWFsIHx8IGNvbmQgPT0gQXNzZW1ibGVyOjpOb3RFcXVhbCk7Ci0rICBNT1pfQVNTRVJUKHRl bXAgIT0gSW52YWxpZFJlZyk7Ci0rICBMYWJlbCBkb25lOwotKyAgYnJhbmNoVGVzdEdDVGhpbmco QXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICBjb25kID09 IEFzc2VtYmxlcjo6RXF1YWwgPyAmZG9uZSA6IGxhYmVsKTsKLSsKLSsgIGdldEdDVGhpbmdWYWx1 ZUNodW5rKHZhbHVlLCB0ZW1wKTsKLSsgIGxvYWRQdHIoQWRkcmVzcyh0ZW1wLCBnYzo6Q2h1bmtT dG9yZUJ1ZmZlck9mZnNldCksIHRlbXApOwotKyAgYnJhbmNoUHRyKEludmVydENvbmRpdGlvbihj b25kKSwgdGVtcCwgSW1tV29yZCgwKSwgbGFiZWwpOwotKwotKyAgYmluZCgmZG9uZSk7Ci0rfQot KwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKy8vIFRlbXBsYXRlIGluc3RhbnRpYXRpb25zLgotKwotK3RlbXBsYXRl IDx0eXBlbmFtZSBUPgotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlVW5ib3hlZFZhbHVlKGNv bnN0IENvbnN0YW50T3JSZWdpc3RlciYgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTUlSVHlwZSB2YWx1ZVR5cGUsIGNvbnN0IFQmIGRlc3QpIHsKLSsgIE1P Wl9BU1NFUlQodmFsdWVUeXBlIDwgTUlSVHlwZTo6VmFsdWUpOwotKwotKyAgaWYgKHZhbHVlVHlw ZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKLSsgICAgYm94RG91YmxlKHZhbHVlLnJlZygpLnR5cGVk UmVnKCkuZnB1KCksIGRlc3QpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBpZiAodmFsdWUu Y29uc3RhbnQoKSkgewotKyAgICBzdG9yZVZhbHVlKHZhbHVlLnZhbHVlKCksIGRlc3QpOwotKyAg fSBlbHNlIHsKLSsgICAgc3RvcmVWYWx1ZShWYWx1ZVR5cGVGcm9tTUlSVHlwZSh2YWx1ZVR5cGUp LCB2YWx1ZS5yZWcoKS50eXBlZFJlZygpLmdwcigpLAotKyAgICAgICAgICAgICAgIGRlc3QpOwot KyAgfQotK30KLSsKLSt0ZW1wbGF0ZSB2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdG9yZVVuYm94ZWRW YWx1ZShjb25zdCBDb25zdGFudE9yUmVnaXN0ZXImIHZhbHVlLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JUlR5cGUgdmFsdWVUeXBlLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3Mm IGRlc3QpOwotK3RlbXBsYXRlIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlVW5ib3hlZFZhbHVl KAotKyAgICBjb25zdCBDb25zdGFudE9yUmVnaXN0ZXImIHZhbHVlLCBNSVJUeXBlIHZhbHVlVHlw ZSwKLSsgICAgY29uc3QgQmFzZU9iamVjdEVsZW1lbnRJbmRleCYgZGVzdCk7Ci0rCi0rLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rLy8gTWlzYyBzdHVicy4KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21tZW50KGNv bnN0IGNoYXIqIG1zZykge30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGVjdWxhdGlvbkJh cnJpZXIoKSB7Ci0rICAvLyBpc3luYyBwcm92aWRlcyBleGVjdXRpb24gc3luY2hyb25pemF0aW9u OiBkaXNjYXJkcyBwcmVmZXRjaGVkCi0rICAvLyBpbnN0cnVjdGlvbnMgYW5kIGZvcmNlcyBhIHJl ZmV0Y2grcmVleGVjdXRlIHBhc3QgdGhlIGJhcnJpZXIuCi0rICAvLyBObyBpbnN0cnVjdGlvbiBm b2xsb3dpbmcgaXN5bmMgbWF5IGJlZ2luIChhcmNoaXRlY3R1cmFsbHkpIHVudGlsCi0rICAvLyBp c3luYyBjb21wbGV0ZXMsIGJsb2NraW5nIHNwZWN1bGF0aXZlIGJ5cGFzcyDigJQgZXhhY3RseSB0 aGUKLSsgIC8vIFNwZWN0cmUgdjEgZ3VhcmFudGVlIG5lZWRlZCBhZnRlciBhIEMgY2FsbCByZXR1 cm5zIGEgdmFsdWUgdGhhdAotKyAgLy8gbWF5IGluZmx1ZW5jZSBzdWJzZXF1ZW50IGxvYWRzLiBS ZWFjaGFibGUgZnJvbSBzaGFyZWQKLSsgIC8vIENvZGVHZW5lcmF0b3IgdW5kZXIgSml0T3B0aW9u cy5zcGVjdHJlSml0VG9DeHhDYWxscy4KLSsgIGFzX2lzeW5jKCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmF0b21pY1BhdXNlKCkgeyBub3AoKTsgfQotKwotK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmVudGVyRmFrZUV4aXRGcmFtZUZvcldhc20oUmVnaXN0ZXIgY3hyZWcsIFJlZ2lzdGVy IHNjcmF0Y2gsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFeGl0RnJhbWVUeXBlIHR5cGUpIHsKLSsgIGVudGVyRmFrZUV4aXRGcmFtZShjeHJlZywgc2Ny YXRjaCwgdHlwZSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Cb3VuZHNDaGVj azMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBpbmRleCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBib3VuZHNDaGVja0xpbWl0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgewotKyAgbWFfY21w KGluZGV4LCBib3VuZHNDaGVja0xpbWl0LCBjb25kKTsKLSsgIG1hX2IoY29uZCwgbGFiZWwpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQm91bmRzQ2hlY2szMihDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXIgaW5kZXgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQWRkcmVzcyBib3VuZHNDaGVja0xpbWl0LCBMYWJlbCogbGFiZWwpIHsKLSsgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBsb2FkMzIoYm91bmRzQ2hlY2tMaW1pdCwgc2NyYXRjaCk7 Ci0rICBtYV9jbXAoaW5kZXgsIHNjcmF0Y2gsIGNvbmQpOwotKyAgbWFfYihjb25kLCBsYWJlbCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Cb3VuZHNDaGVjazY0KENvbmRpdGlv biBjb25kLCBSZWdpc3RlcjY0IGluZGV4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyNjQgYm91bmRzQ2hlY2tMaW1pdCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKLSsgIG1hX2NtcChpbmRleC5y ZWcsIGJvdW5kc0NoZWNrTGltaXQucmVnLCBjb25kKTsKLSsgIG1hX2IoY29uZCwgbGFiZWwpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQm91bmRzQ2hlY2s2NChDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXI2NCBpbmRleCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBZGRyZXNzIGJvdW5kc0NoZWNrTGltaXQsIExhYmVsKiBsYWJlbCkgewotKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIGxvYWRQdHIoYm91bmRzQ2hlY2tMaW1pdCwgc2NyYXRj aCk7Ci0rICBtYV9jbXAoaW5kZXgucmVnLCBzY3JhdGNoLCBjb25kKTsKLSsgIG1hX2IoY29uZCwg bGFiZWwpOwotK30KLSsKLStDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjptb3ZlMzJXaXRoUGF0 Y2goUmVnaXN0ZXIgZGVzdCkgewotKyAgQ29kZU9mZnNldCBvZmZzZXQoY3VycmVudE9mZnNldCgp KTsKLSsgIGVtaXRMb2FkNjRTdGFuemEoZGVzdCwgMCk7Ci0rICByZXR1cm4gb2Zmc2V0OwotK30K LSsKLStDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpzdWIzMkZyb21NZW1BbmRCcmFuY2hJZk5l Z2F0aXZlV2l0aFBhdGNoKAotKyAgICBBZGRyZXNzIGFkZHJlc3MsIExhYmVsKiBsYWJlbCkgewot KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBhZGRy ZXNzLmJhc2UpOwotKyAgbG9hZDMyKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgLy8gU3VidHJhY3Qg YSBwbGFjZWhvbGRlciB2YWx1ZSAod2lsbCBiZSBwYXRjaGVkKS4KLSsgIC8vIFVzZSBhZGRpIHdp dGggcG9zaXRpdmUgcGxhY2Vob2xkZXIgKDEyOCksIHdoaWNoIHdpbGwgYmUgcGF0Y2hlZCB0bwot KyAgLy8gYWRkaSB3aXRoIG5lZ2F0aXZlIHZhbHVlLiBUaGUgaW1tZWRpYXRlIGlzIGluIHRoZSBh ZGRpIGluc3RydWN0aW9uLgotKyAgYXNfYWRkaShzY3JhdGNoLCBzY3JhdGNoLCAxMjgpOwotKyAg Q29kZU9mZnNldCBwYXRjaFBvaW50ID0gQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpOwotKyAg c3RvcmUzMihzY3JhdGNoLCBhZGRyZXNzKTsKLSsgIC8vIEJyYW5jaCBpZiByZXN1bHQgaXMgbmVn YXRpdmUgKHNpZ25lZCkuCi0rICBhc19jbXB3aShzY3JhdGNoLCAwKTsKLSsgIG1hX2IoTGVzc1Ro YW4sIGxhYmVsKTsKLSsgIHJldHVybiBwYXRjaFBvaW50OwotK30KLSsKLStib29sIE1hY3JvQXNz ZW1ibGVyOjpjb252ZXJ0VUludDY0VG9Eb3VibGVOZWVkc1RlbXAoKSB7IHJldHVybiBmYWxzZTsg fQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGwoSW1tV29yZCBpbW0pIHsgY2FsbChJbW1Q dHIoKHZvaWQqKWltbS52YWx1ZSkpOyB9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29udmVy dFVJbnQ2NFRvRG91YmxlKFJlZ2lzdGVyNjQgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXApIHsK LSsgIE1PWl9BU1NFUlQodGVtcCA9PSBSZWdpc3Rlcjo6SW52YWxpZCgpKTsKLSsgIC8vIFBPV0VS NysgaGFzIGZjZmlkdSAodW5zaWduZWQgaTY0IOKGkiBmNjQpIGFzIGEgc2luZ2xlIGluc3RydWN0 aW9uOyBubwotKyAgLy8gc2lnbi1zcGxpdCAvIGJyYW5jaCAvIEdQUiBzY3JhdGNoIG5lZWRlZC4K LSsgIGFzX210dnNyZChkZXN0LCBzcmMucmVnKTsKLSsgIGFzX2ZjZmlkdShkZXN0LCBkZXN0KTsK LSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29udmVydEludDY0VG9GbG9hdDMyKFJlZ2lz dGVyNjQgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgIGFzX210dnNyZChkZXN0LCBzcmMu cmVnKTsKLSsgIGFzX2ZjZmlkcyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6Y29udmVydFVJbnQ2NFRvRmxvYXQzMihSZWdpc3RlcjY0IHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgdGVtcCkgewotKyAgTU9aX0FTU0VSVCh0ZW1wID09IFJlZ2lzdGVyOjpJbnZhbGlkKCkp OwotKyAgLy8gUE9XRVI3KyBoYXMgZmNmaWR1cyAodW5zaWduZWQgaTY0IOKGkiBmMzIpIGFzIGEg c2luZ2xlIGluc3RydWN0aW9uLgotKyAgYXNfbXR2c3JkKGRlc3QsIHNyYy5yZWcpOwotKyAgYXNf ZmNmaWR1cyhkZXN0LCBkZXN0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZmxleGli bGVRdW90aWVudDMyKAotKyAgICBSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIg ZGVzdCwgYm9vbCBpc1Vuc2lnbmVkLAotKyAgICBjb25zdCBMaXZlUmVnaXN0ZXJTZXQmIHZvbGF0 aWxlTGl2ZVJlZ3MpIHsKLSsgIC8vIFBQQzY0IGRpdncoSU5UMzJfTUlOLCAtMSkgaXMgdW5kZWZp bmVkOyByZXR1cm4gSU5UMzJfTUlOIHRvIG1hdGNoCi0rICAvLyBBUk02NC9Mb29uZ0FyY2g2NCBo YXJkd2FyZSBzZGl2IGJlaGF2aW9yLgotKyAgTGFiZWwgZG9uZTsKLSsgIGlmICghaXNVbnNpZ25l ZCkgewotKyAgICBMYWJlbCBub3RNaW5PdmVyZmxvdzsKLSsgICAgYnJhbmNoUHRyKEFzc2VtYmxl cjo6Tm90RXF1YWwsIGxocywgSW1tV29yZChJTlQzMl9NSU4pLCAmbm90TWluT3ZlcmZsb3cpOwot KyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmhzLCBJbW1Xb3JkKC0xKSwgJm5v dE1pbk92ZXJmbG93KTsKLSsgICAgbW92ZTMyKEltbTMyKElOVDMyX01JTiksIGRlc3QpOwotKyAg ICBqdW1wKCZkb25lKTsKLSsgICAgYmluZCgmbm90TWluT3ZlcmZsb3cpOwotKyAgfQotKyAgaWYg KGlzVW5zaWduZWQpIHsKLSsgICAgYXNfZGl2d3UoZGVzdCwgbGhzLCByaHMpOwotKyAgfSBlbHNl IHsKLSsgICAgYXNfZGl2dyhkZXN0LCBsaHMsIHJocyk7Ci0rICB9Ci0rICBhc19leHRzdyhkZXN0 LCBkZXN0KTsKLSsgIGJpbmQoJmRvbmUpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpv b2xXYXNtVHJ1bmNhdGVDaGVja0YzMlRvSTMyKAotKyAgICBGbG9hdFJlZ2lzdGVyIGlucHV0LCBS ZWdpc3RlciBvdXRwdXQsIFRydW5jRmxhZ3MgZmxhZ3MsCi0rICAgIGNvbnN0IHdhc206OlRyYXBT aXRlRGVzYyYgdHJhcFNpdGVEZXNjLCBMYWJlbCogcmVqb2luKSB7Ci0rICBvdXRPZkxpbmVXYXNt VHJ1bmNhdGVUb0ludDMyQ2hlY2soaW5wdXQsIG91dHB1dCwgTUlSVHlwZTo6RmxvYXQzMiwgZmxh Z3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqb2luLCB0cmFwU2l0 ZURlc2MpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpvb2xXYXNtVHJ1bmNhdGVDaGVj a0YzMlRvSTY0KAotKyAgICBGbG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlcjY0IG91dHB1dCwg VHJ1bmNGbGFncyBmbGFncywKLSsgICAgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0 ZURlc2MsIExhYmVsKiByZWpvaW4pIHsKLSsgIG91dE9mTGluZVdhc21UcnVuY2F0ZVRvSW50NjRD aGVjayhpbnB1dCwgb3V0cHV0LCBNSVJUeXBlOjpGbG9hdDMyLCBmbGFncywKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZWpvaW4sIHRyYXBTaXRlRGVzYyk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9vbFdhc21UcnVuY2F0ZUNoZWNrRjY0VG9JMzIoCi0rICAg IEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyIG91dHB1dCwgVHJ1bmNGbGFncyBmbGFncywK LSsgICAgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MsIExhYmVsKiByZWpv aW4pIHsKLSsgIG91dE9mTGluZVdhc21UcnVuY2F0ZVRvSW50MzJDaGVjayhpbnB1dCwgb3V0cHV0 LCBNSVJUeXBlOjpEb3VibGUsIGZsYWdzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlam9pbiwgdHJhcFNpdGVEZXNjKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6b29sV2FzbVRydW5jYXRlQ2hlY2tGNjRUb0k2NCgKLSsgICAgRmxvYXRSZWdpc3RlciBpbnB1 dCwgUmVnaXN0ZXI2NCBvdXRwdXQsIFRydW5jRmxhZ3MgZmxhZ3MsCi0rICAgIGNvbnN0IHdhc206 OlRyYXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNjLCBMYWJlbCogcmVqb2luKSB7Ci0rICBvdXRPZkxp bmVXYXNtVHJ1bmNhdGVUb0ludDY0Q2hlY2soaW5wdXQsIG91dHB1dCwgTUlSVHlwZTo6RG91Ymxl LCBmbGFncywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWpvaW4sIHRy YXBTaXRlRGVzYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6b3V0 T2ZMaW5lV2FzbVRydW5jYXRlVG9JbnQzMkNoZWNrKAotKyAgICBGbG9hdFJlZ2lzdGVyIGlucHV0 LCBSZWdpc3RlciBvdXRwdXQsIE1JUlR5cGUgZnJvbVR5cGUsIFRydW5jRmxhZ3MgZmxhZ3MsCi0r ICAgIExhYmVsKiByZWpvaW4sIGNvbnN0IHdhc206OlRyYXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNj KSB7Ci0rICBib29sIGlzVW5zaWduZWQgPSBmbGFncyAmIFRSVU5DX1VOU0lHTkVEOwotKyAgYm9v bCBpc1NhdHVyYXRpbmcgPSBmbGFncyAmIFRSVU5DX1NBVFVSQVRJTkc7Ci0rCi0rICBpZiAoaXNT YXR1cmF0aW5nKSB7Ci0rICAgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkp OwotKyAgICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7Ci0rICAgICAgYXNNYXNt KCkubG9hZENvbnN0YW50RG91YmxlKDAuMCwgZnBzY3JhdGNoKTsKLSsgICAgfSBlbHNlIHsKLSsg ICAgICBhc01hc20oKS5sb2FkQ29uc3RhbnRGbG9hdDMyKDAuMGYsIGZwc2NyYXRjaCk7Ci0rICAg IH0KLSsKLSsgICAgaWYgKGlzVW5zaWduZWQpIHsKLSsgICAgICAvLyBJZiBpbnB1dCA8IDAgb3Ig TmFOLCBvdXRwdXQgPSAwOyBlbHNlIG91dHB1dCA9IFVJTlQzMl9NQVguCi0rICAgICAgTGFiZWwg bm90TmVnT3JOYU47Ci0rICAgICAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgewot KyAgICAgICAgYXNNYXNtKCkuYnJhbmNoRG91YmxlKEFzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRo YW5PckVxdWFsLCBpbnB1dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHNjcmF0 Y2gsICZub3ROZWdPck5hTik7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGFzTWFzbSgpLmJy YW5jaEZsb2F0KEFzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBpbnB1dCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwc2NyYXRjaCwgJm5vdE5lZ09yTmFOKTsKLSsg ICAgICB9Ci0rICAgICAgYXNNYXNtKCkubW92ZTMyKEltbTMyKDApLCBvdXRwdXQpOwotKyAgICAg IGFzTWFzbSgpLmp1bXAocmVqb2luKTsKLSsgICAgICBhc01hc20oKS5iaW5kKCZub3ROZWdPck5h Tik7Ci0rICAgICAgYXNNYXNtKCkubW92ZTMyKEltbTMyKFVJTlQzMl9NQVgpLCBvdXRwdXQpOwot KyAgICB9IGVsc2UgewotKyAgICAgIC8vIFNpZ25lZDogTmFOIC0+IDAsIG5lZ2F0aXZlIG92ZXJm bG93IC0+IElOVDMyX01JTiwKLSsgICAgICAvLyBwb3NpdGl2ZSBvdmVyZmxvdyBhbHJlYWR5IHNh dHVyYXRlZCB0byBJTlQzMl9NQVguCi0rICAgICAgTGFiZWwgbm90TmFOLCBkb25lOwotKyAgICAg IGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKLSsgICAgICAgIGFzTWFzbSgpLmJy YW5jaERvdWJsZShBc3NlbWJsZXI6OkRvdWJsZU9yZGVyZWQsIGlucHV0LCBpbnB1dCwgJm5vdE5h Tik7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGFzTWFzbSgpLmJyYW5jaEZsb2F0KEFzc2Vt Ymxlcjo6RG91YmxlT3JkZXJlZCwgaW5wdXQsIGlucHV0LCAmbm90TmFOKTsKLSsgICAgICB9Ci0r ICAgICAgYXNNYXNtKCkubW92ZTMyKEltbTMyKDApLCBvdXRwdXQpOwotKyAgICAgIGFzTWFzbSgp Lmp1bXAocmVqb2luKTsKLSsKLSsgICAgICBhc01hc20oKS5iaW5kKCZub3ROYU4pOwotKyAgICAg IGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKLSsgICAgICAgIGFzTWFzbSgpLmJy YW5jaERvdWJsZShBc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgaW5wdXQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBzY3JhdGNoLCByZWpvaW4pOwotKyAgICAg IH0gZWxzZSB7Ci0rICAgICAgICBhc01hc20oKS5icmFuY2hGbG9hdChBc3NlbWJsZXI6OkRvdWJs ZUdyZWF0ZXJUaGFuT3JFcXVhbCwgaW5wdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmcHNjcmF0Y2gsIHJlam9pbik7Ci0rICAgICAgfQotKyAgICAgIGFzTWFzbSgpLm1vdmUzMihJ bW0zMihJTlQzMl9NSU4pLCBvdXRwdXQpOwotKyAgICB9Ci0rCi0rICAgIE1PWl9BU1NFUlQocmVq b2luLT5ib3VuZCgpKTsKLSsgICAgYXNNYXNtKCkuanVtcChyZWpvaW4pOwotKyAgICByZXR1cm47 Ci0rICB9Ci0rCi0rICBMYWJlbCBpbnB1dElzTmFOOwotKyAgaWYgKGZyb21UeXBlID09IE1JUlR5 cGU6OkRvdWJsZSkgewotKyAgICBhc01hc20oKS5icmFuY2hEb3VibGUoQXNzZW1ibGVyOjpEb3Vi bGVVbm9yZGVyZWQsIGlucHV0LCBpbnB1dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICZp bnB1dElzTmFOKTsKLSsgIH0gZWxzZSB7Ci0rICAgIGFzTWFzbSgpLmJyYW5jaEZsb2F0KEFzc2Vt Ymxlcjo6RG91YmxlVW5vcmRlcmVkLCBpbnB1dCwgaW5wdXQsICZpbnB1dElzTmFOKTsKLSsgIH0K LSsKLSsgIGFzTWFzbSgpLndhc21UcmFwKHdhc206OlRyYXA6OkludGVnZXJPdmVyZmxvdywgdHJh cFNpdGVEZXNjKTsKLSsgIGFzTWFzbSgpLmJpbmQoJmlucHV0SXNOYU4pOwotKyAgYXNNYXNtKCku d2FzbVRyYXAod2FzbTo6VHJhcDo6SW52YWxpZENvbnZlcnNpb25Ub0ludGVnZXIsIHRyYXBTaXRl RGVzYyk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6b3V0T2ZMaW5l V2FzbVRydW5jYXRlVG9JbnQ2NENoZWNrKAotKyAgICBGbG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdp c3RlcjY0IG91dHB1dF8sIE1JUlR5cGUgZnJvbVR5cGUsIFRydW5jRmxhZ3MgZmxhZ3MsCi0rICAg IExhYmVsKiByZWpvaW4sIGNvbnN0IHdhc206OlRyYXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNjKSB7 Ci0rICBib29sIGlzVW5zaWduZWQgPSBmbGFncyAmIFRSVU5DX1VOU0lHTkVEOwotKyAgYm9vbCBp c1NhdHVyYXRpbmcgPSBmbGFncyAmIFRSVU5DX1NBVFVSQVRJTkc7Ci0rCi0rICBpZiAoaXNTYXR1 cmF0aW5nKSB7Ci0rICAgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOwot KyAgICBSZWdpc3RlciBvdXRwdXQgPSBvdXRwdXRfLnJlZzsKLSsKLSsgICAgaWYgKGZyb21UeXBl ID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICAgIGFzTWFzbSgpLmxvYWRDb25zdGFudERvdWJs ZSgwLjAsIGZwc2NyYXRjaCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgYXNNYXNtKCkubG9hZENv bnN0YW50RmxvYXQzMigwLjBmLCBmcHNjcmF0Y2gpOwotKyAgICB9Ci0rCi0rICAgIGlmIChpc1Vu c2lnbmVkKSB7Ci0rICAgICAgTGFiZWwgbm90TmVnT3JOYU47Ci0rICAgICAgaWYgKGZyb21UeXBl ID09IE1JUlR5cGU6OkRvdWJsZSkgewotKyAgICAgICAgYXNNYXNtKCkuYnJhbmNoRG91YmxlKEFz c2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBpbnB1dCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmcHNjcmF0Y2gsICZub3ROZWdPck5hTik7Ci0rICAgICAgfSBlbHNl IHsKLSsgICAgICAgIGFzTWFzbSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxlcjo6RG91YmxlR3JlYXRl clRoYW5PckVxdWFsLCBpbnB1dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwc2Ny YXRjaCwgJm5vdE5lZ09yTmFOKTsKLSsgICAgICB9Ci0rICAgICAgYXNNYXNtKCkubW92ZVB0cihJ bW1Xb3JkKDApLCBvdXRwdXQpOwotKyAgICAgIGFzTWFzbSgpLmp1bXAocmVqb2luKTsKLSsgICAg ICBhc01hc20oKS5iaW5kKCZub3ROZWdPck5hTik7Ci0rICAgICAgYXNNYXNtKCkubW92ZVB0cihJ bW1Xb3JkKFVJTlQ2NF9NQVgpLCBvdXRwdXQpOwotKyAgICB9IGVsc2UgewotKyAgICAgIExhYmVs IG5vdE5hTjsKLSsgICAgICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7Ci0rICAg ICAgICBhc01hc20oKS5icmFuY2hEb3VibGUoQXNzZW1ibGVyOjpEb3VibGVPcmRlcmVkLCBpbnB1 dCwgaW5wdXQsICZub3ROYU4pOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBhc01hc20oKS5i cmFuY2hGbG9hdChBc3NlbWJsZXI6OkRvdWJsZU9yZGVyZWQsIGlucHV0LCBpbnB1dCwgJm5vdE5h Tik7Ci0rICAgICAgfQotKyAgICAgIGFzTWFzbSgpLm1vdmVQdHIoSW1tV29yZCgwKSwgb3V0cHV0 KTsKLSsgICAgICBhc01hc20oKS5qdW1wKHJlam9pbik7Ci0rCi0rICAgICAgYXNNYXNtKCkuYmlu ZCgmbm90TmFOKTsKLSsgICAgICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7Ci0r ICAgICAgICBhc01hc20oKS5icmFuY2hEb3VibGUoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhh bk9yRXF1YWwsIGlucHV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwc2NyYXRj aCwgcmVqb2luKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgYXNNYXNtKCkuYnJhbmNoRmxv YXQoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnBzY3JhdGNoLCByZWpvaW4pOwotKyAgICAgIH0KLSsgICAg ICBhc01hc20oKS5tb3ZlUHRyKEltbVdvcmQoSU5UNjRfTUlOKSwgb3V0cHV0KTsKLSsgICAgfQot KwotKyAgICBNT1pfQVNTRVJUKHJlam9pbi0+Ym91bmQoKSk7Ci0rICAgIGFzTWFzbSgpLmp1bXAo cmVqb2luKTsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgTGFiZWwgaW5wdXRJc05hTjsKLSsg IGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKLSsgICAgYXNNYXNtKCkuYnJhbmNo RG91YmxlKEFzc2VtYmxlcjo6RG91YmxlVW5vcmRlcmVkLCBpbnB1dCwgaW5wdXQsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAmaW5wdXRJc05hTik7Ci0rICB9IGVsc2UgewotKyAgICBhc01h c20oKS5icmFuY2hGbG9hdChBc3NlbWJsZXI6OkRvdWJsZVVub3JkZXJlZCwgaW5wdXQsIGlucHV0 LCAmaW5wdXRJc05hTik7Ci0rICB9Ci0rCi0rICBhc01hc20oKS53YXNtVHJhcCh3YXNtOjpUcmFw OjpJbnRlZ2VyT3ZlcmZsb3csIHRyYXBTaXRlRGVzYyk7Ci0rICBhc01hc20oKS5iaW5kKCZpbnB1 dElzTmFOKTsKLSsgIGFzTWFzbSgpLndhc21UcmFwKHdhc206OlRyYXA6OkludmFsaWRDb252ZXJz aW9uVG9JbnRlZ2VyLCB0cmFwU2l0ZURlc2MpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy OjpQb3BTdGFja1B0cigpIHsKLSsgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIDApLCBT dGFja1BvaW50ZXIpOwotKyAgYWRqdXN0RnJhbWUoLWludDMyX3Qoc2l6ZW9mKGludHB0cl90KSkp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRjaFN1YjMyRnJvbU1lbUFuZEJyYW5j aElmTmVnYXRpdmUoQ29kZU9mZnNldCBvZmZzZXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbTMyIGltbSkgewotKyAgaW50MzJf dCB2YWwgPSBpbW0udmFsdWU7Ci0rICBNT1pfUkVMRUFTRV9BU1NFUlQodmFsID49IDEgJiYgdmFs IDw9IDEyNyk7Ci0rICAvLyBQYXRjaCB0aGUgYWRkaSBpbnN0cnVjdGlvbiB0aGF0J3MgcmlnaHQg YmVmb3JlIHBhdGNoUG9pbnQuCi0rICAvLyBhZGRpIGlzIDEgaW5zdHJ1Y3Rpb24gYmVmb3JlIHRo ZSBDb2RlT2Zmc2V0ICh3aGljaCBpcyBhZnRlciB0aGUgYWRkaSkuCi0rICBJbnN0cnVjdGlvbiog aW5zdCA9Ci0rICAgICAgKEluc3RydWN0aW9uKiltX2J1ZmZlci5nZXRJbnN0KEJ1ZmZlck9mZnNl dChvZmZzZXQub2Zmc2V0KCkgLSA0KSk7Ci0rICAvLyBSZXdyaXRlIHRoZSBpbW1lZGlhdGUgZmll bGQgdG8gLXZhbC4KLSsgIC8vIFBQQyBhZGRpOiBvcGNvZGUoNikgfCBSVCg1KSB8IFJBKDUpIHwg U0koMTYpCi0rICB1aW50MzJfdCBpbnN0V29yZCA9IGluc3QtPmVuY29kZSgpOwotKyAgdWludDMy X3QgYmFzZSA9IGluc3RXb3JkICYgMHhmZmZmMDAwMDsKLSsgIGluc3QtPnNldERhdGEoYmFzZSB8 ICh1aW50MTZfdCkoLXZhbCAmIDB4ZmZmZikpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVy Ojp3YXNtVHJ1bmNhdGVEb3VibGVUb0ludDMyKEZsb2F0UmVnaXN0ZXIgaW5wdXQsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlz U2F0dXJhdGluZywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsKiBvb2xFbnRyeSkgewotKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChh c01hc20oKSk7Ci0rICAvLyBDbGVhciBWWENWSSAoYml0IDIzKSBiZWZvcmUgdGhlIGNvbnZlcnNp b24gc28gd2UgY2FuIGRldGVjdCBvdmVyZmxvdy4KLSsgIGFzX210ZnNiMCgyMyk7Ci0rICBhc19m Y3Rpd3ooZnBzY3JhdGNoLCBpbnB1dCk7Ci0rICBhc19tZnZzcmQob3V0cHV0LCBmcHNjcmF0Y2gp OwotKyAgYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOwotKyAgLy8gTW92ZSBGUFNDUiBmaWVsZCA1 ICh3aGljaCBjb250YWlucyBWWENWSSkgdG8gQ1IwLgotKyAgLy8gSWYgdGhlIGNvbnZlcnNpb24g d2FzIGludmFsaWQgKE5hTiBvciBvdXQtb2YtcmFuZ2UpLCBWWENWST0xIOKGkiBTTyBzZXQuCi0r ICBhc19tY3JmcyhjcjAsIDUpOwotKyAgbWFfYihTT0JpdCwgb29sRW50cnkpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtVHJ1bmNhdGVEb3VibGVUb1VJbnQzMihGbG9hdFJlZ2lz dGVyIGlucHV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIG91dHB1dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sIGlzU2F0dXJhdGluZywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb29sRW50cnkpIHsKLSsgIFNjcmF0Y2hE b3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOwotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgIC8vIEFsd2F5cyBjaGVjayBmb3IgTmFOIOKAlCB0aGUgb29sIGhhbmRsZXIgY2xhbXBz IGZvciBzYXR1cmF0aW5nIG1vZGUuCi0rICBhc19mY21wdShpbnB1dCwgaW5wdXQpOwotKyAgbWFf YihEb3VibGVVbm9yZGVyZWQsIG9vbEVudHJ5KTsKLSsgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGlu cHV0KTsKLSsgIGFzX21mdnNyZChvdXRwdXQsIGZwc2NyYXRjaCk7Ci0rICB4X3NyZGkoc2NyYXRj aCwgb3V0cHV0LCAzMik7Ci0rICBhc19leHRzdyhvdXRwdXQsIG91dHB1dCk7Ci0rICBhc19jbXBk aShzY3JhdGNoLCAwKTsKLSsgIG1hX2IoTm90RXF1YWwsIG9vbEVudHJ5KTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVRydW5jYXRlRmxvYXQzMlRvSW50MzIoRmxvYXRSZWdpc3Rl ciBpbnB1dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBvdXRwdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBpc1NhdHVyYXRpbmcsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG9vbEVudHJ5KSB7Ci0rICBTY3JhdGNoRG91 YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKLSsgIGFzX210ZnNiMCgyMyk7Ci0rICBhc19m Y3Rpd3ooZnBzY3JhdGNoLCBpbnB1dCk7Ci0rICBhc19tZnZzcmQob3V0cHV0LCBmcHNjcmF0Y2gp OwotKyAgYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOwotKyAgYXNfbWNyZnMoY3IwLCA1KTsKLSsg IG1hX2IoU09CaXQsIG9vbEVudHJ5KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2Fz bVRydW5jYXRlRmxvYXQzMlRvVUludDMyKEZsb2F0UmVnaXN0ZXIgaW5wdXQsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp c1NhdHVyYXRpbmcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBvb2xFbnRyeSkgewotKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRj aChhc01hc20oKSk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 Ci0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgYXNfZmNtcHUoaW5w dXQsIGlucHV0KTsKLSsgIG1hX2IoRG91YmxlVW5vcmRlcmVkLCBvb2xFbnRyeSk7Ci0rICBhc19m Y3RpZHooZnBzY3JhdGNoLCBpbnB1dCk7Ci0rICBhc19tZnZzcmQob3V0cHV0LCBmcHNjcmF0Y2gp OwotKyAgeF9zcmRpKHNjcmF0Y2gsIG91dHB1dCwgMzIpOwotKyAgYXNfZXh0c3cob3V0cHV0LCBv dXRwdXQpOwotKyAgYXNfY21wZGkoc2NyYXRjaCwgMCk7Ci0rICBtYV9iKE5vdEVxdWFsLCBvb2xF bnRyeSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21UcnVuY2F0ZURvdWJsZVRv SW50NjQoCi0rICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LCBib29s IGlzU2F0dXJhdGluZywgTGFiZWwqIG9vbEVudHJ5LAotKyAgICBMYWJlbCogb29sUmVqb2luLCBG bG9hdFJlZ2lzdGVyIHRlbXBEb3VibGUpIHsKLSsgIE1PWl9BU1NFUlQodGVtcERvdWJsZS5pc0lu dmFsaWQoKSk7Ci0rICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKLSsg IGFzX210ZnNiMCgyMyk7Ci0rICBhc19mY3RpZHooZnBzY3JhdGNoLCBpbnB1dCk7Ci0rICBhc19t ZnZzcmQob3V0cHV0LnJlZywgZnBzY3JhdGNoKTsKLSsgIGFzX21jcmZzKGNyMCwgNSk7Ci0rICBt YV9iKFNPQml0LCBvb2xFbnRyeSk7Ci0rICBpZiAoaXNTYXR1cmF0aW5nKSB7Ci0rICAgIGJpbmQo b29sUmVqb2luKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVRydW5j YXRlRmxvYXQzMlRvSW50NjQoCi0rICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQg b3V0cHV0LCBib29sIGlzU2F0dXJhdGluZywgTGFiZWwqIG9vbEVudHJ5LAotKyAgICBMYWJlbCog b29sUmVqb2luLCBGbG9hdFJlZ2lzdGVyIHRlbXBGbG9hdCkgewotKyAgTU9aX0FTU0VSVCh0ZW1w RmxvYXQuaXNJbnZhbGlkKCkpOwotKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01h c20oKSk7Ci0rICBhc19tdGZzYjAoMjMpOwotKyAgYXNfZmN0aWR6KGZwc2NyYXRjaCwgaW5wdXQp OwotKyAgYXNfbWZ2c3JkKG91dHB1dC5yZWcsIGZwc2NyYXRjaCk7Ci0rICBhc19tY3JmcyhjcjAs IDUpOwotKyAgbWFfYihTT0JpdCwgb29sRW50cnkpOwotKyAgaWYgKGlzU2F0dXJhdGluZykgewot KyAgICBiaW5kKG9vbFJlam9pbik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Ondhc21UcnVuY2F0ZURvdWJsZVRvVUludDY0KAotKyAgICBGbG9hdFJlZ2lzdGVyIGlucHV0LCBS ZWdpc3RlcjY0IG91dHB1dCwgYm9vbCBpc1NhdHVyYXRpbmcsIExhYmVsKiBvb2xFbnRyeSwKLSsg ICAgTGFiZWwqIG9vbFJlam9pbiwgRmxvYXRSZWdpc3RlciB0ZW1wRG91YmxlKSB7Ci0rICBNT1pf QVNTRVJUKHRlbXBEb3VibGUuaXNJbnZhbGlkKCkpOwotKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZw c2NyYXRjaChhc01hc20oKSk7Ci0rICBhc19tdGZzYjAoMjMpOwotKyAgYXNfZmN0aWR1eihmcHNj cmF0Y2gsIGlucHV0KTsKLSsgIGFzX21mdnNyZChvdXRwdXQucmVnLCBmcHNjcmF0Y2gpOwotKyAg YXNfbWNyZnMoY3IwLCA1KTsKLSsgIG1hX2IoU09CaXQsIG9vbEVudHJ5KTsKLSsgIGlmIChpc1Nh dHVyYXRpbmcpIHsKLSsgICAgYmluZChvb2xSZWpvaW4pOwotKyAgfQotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjp3YXNtVHJ1bmNhdGVGbG9hdDMyVG9VSW50NjQoCi0rICAgIEZsb2F0UmVn aXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LCBib29sIGlzU2F0dXJhdGluZywgTGFiZWwq IG9vbEVudHJ5LAotKyAgICBMYWJlbCogb29sUmVqb2luLCBGbG9hdFJlZ2lzdGVyIHRlbXBGbG9h dCkgewotKyAgTU9aX0FTU0VSVCh0ZW1wRmxvYXQuaXNJbnZhbGlkKCkpOwotKyAgU2NyYXRjaERv dWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7Ci0rICBhc19tdGZzYjAoMjMpOwotKyAgYXNf ZmN0aWR1eihmcHNjcmF0Y2gsIGlucHV0KTsKLSsgIGFzX21mdnNyZChvdXRwdXQucmVnLCBmcHNj cmF0Y2gpOwotKyAgYXNfbWNyZnMoY3IwLCA1KTsKLSsgIG1hX2IoU09CaXQsIG9vbEVudHJ5KTsK LSsgIGlmIChpc1NhdHVyYXRpbmcpIHsKLSsgICAgYmluZChvb2xSZWpvaW4pOwotKyAgfQotK30K LSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6OnByb2ZpbGVyRW50ZXJGcmFtZShS ZWdpc3RlciBmcmFtZVB0ciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7Ci0rICBhc01hc20oKS5sb2FkSlNDb250 ZXh0KHNjcmF0Y2gpOwotKyAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gsIG9mZnNldG9mKEpTQ29u dGV4dCwgcHJvZmlsaW5nQWN0aXZhdGlvbl8pKSwgc2NyYXRjaCk7Ci0rICBzdG9yZVB0cihmcmFt ZVB0ciwKLSsgICAgICAgICAgIEFkZHJlc3Moc2NyYXRjaCwgSml0QWN0aXZhdGlvbjo6b2Zmc2V0 T2ZMYXN0UHJvZmlsaW5nRnJhbWUoKSkpOwotKyAgc3RvcmVQdHIoSW1tUHRyKG51bGxwdHIpLAot KyAgICAgICAgICAgQWRkcmVzcyhzY3JhdGNoLCBKaXRBY3RpdmF0aW9uOjpvZmZzZXRPZkxhc3RQ cm9maWxpbmdDYWxsU2l0ZSgpKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENv bXBhdDo6cHJvZmlsZXJFeGl0RnJhbWUoKSB7Ci0rICBqdW1wKGFzTWFzbSgpLnJ1bnRpbWUoKS0+ aml0UnVudGltZSgpLT5nZXRQcm9maWxlckV4aXRGcmFtZVRhaWwoKSk7Ci0rfQotKwotK3ZvaWQg TWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6bWFfbW9kX21hc2soUmVnaXN0ZXIgc3JjLCBSZWdp c3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgaG9sZCwgUmVnaXN0ZXIgcmVtYWluLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzaGlmdCwgTGFiZWwqIG5lZ1plcm8pIHsKLSsg IC8vIENvbXB1dGUgeCAlICgoMTw8c2hpZnQpIC0gMSkgYnkgZGlnaXQtc3VtbWluZyBpbiBiYXNl IGIgPSAxPDxzaGlmdC4KLSsgIC8vIFNpbmNlIGIgJSAoYi0xKSA9PSAxLCB4ICUgKGItMSkgPT0g c3VtIG9mIGJhc2UtYiBkaWdpdHMgb2YgeCwgbW9kIChiLTEpLgotKyAgaW50MzJfdCBtYXNrID0g KDEgPDwgc2hpZnQpIC0gMTsKLSsgIExhYmVsIGhlYWQsIG5lZ2F0aXZlLCBzdW1TaWduZWQsIGRv bmU7Ci0rCi0rICBhc19vcl8ocmVtYWluLCBzcmMsIHNyYyk7ICAvLyBtb3ZlIHNyYyAtPiByZW1h aW4KLSsgIHhzX2xpKGRlc3QsIDApOwotKwotKyAgLy8gQ2hlY2sgc2lnbiAoMzItYml0IHNpZ25l ZCBjb21wYXJpc29uKQotKyAgYXNfY21wd2kocmVtYWluLCAwKTsKLSsgIG1hX2IoQXNzZW1ibGVy OjpMZXNzVGhhbiwgJm5lZ2F0aXZlKTsKLSsgIHhzX2xpKGhvbGQsIDEpOwotKyAganVtcCgmaGVh ZCk7Ci0rCi0rICBiaW5kKCZuZWdhdGl2ZSk7Ci0rICB4c19saShob2xkLCAtMSk7Ci0rICBhc19u ZWcocmVtYWluLCByZW1haW4pOwotKyAgYXNfcmxkaWNsKHJlbWFpbiwgcmVtYWluLCAwLCAzMik7 Ci0rCi0rICBiaW5kKCZoZWFkKTsKLSsgIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoYXNNYXNtKCkpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OwotKwotKyAgICAvLyBFeHRyYWN0IGJvdHRvbSAnc2hpZnQnIGJpdHM6IHNjcmF0Y2ggPSByZW1h aW4gJiBtYXNrCi0rICAgIG1vdmUzMihJbW0zMihtYXNrKSwgc2NyYXRjaCk7Ci0rICAgIGFzX2Fu ZF8oc2NyYXRjaCwgcmVtYWluLCBzY3JhdGNoKTsKLSsKLSsgICAgLy8gQWRkIHRvIGFjY3VtdWxh dG9yCi0rICAgIGFzX2FkZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSsKLSsgICAgLy8gVHJpYWwg c3VidHJhY3Rpb246IHNjcmF0Y2ggPSBkZXN0IC0gbWFzawotKyAgICBtb3ZlMzIoSW1tMzIobWFz ayksIHNjcmF0Y2gpOwotKyAgICBhc19zdWJmKHNjcmF0Y2gsIHNjcmF0Y2gsIGRlc3QpOyAgLy8g c2NyYXRjaCA9IGRlc3QgLSBzY3JhdGNoCi0rCi0rICAgIC8vIElmIChkZXN0IC0gbWFzaykgPiAw LCBrZWVwIHRoZSBzdWJ0cmFjdGVkIHZhbHVlCi0rICAgIGFzX2NtcHdpKHNjcmF0Y2gsIDApOwot KyAgICBtYV9iKEFzc2VtYmxlcjo6TGVzc1RoYW4sICZzdW1TaWduZWQpOwotKyAgICBhc19vcl8o ZGVzdCwgc2NyYXRjaCwgc2NyYXRjaCk7ICAvLyBkZXN0ID0gc2NyYXRjaAotKyAgICBiaW5kKCZz dW1TaWduZWQpOwotKwotKyAgICAvLyBTaGlmdCBvdXQgdGhlIGJpdHMgd2UganVzdCBwcm9jZXNz ZWQKLSsgICAgeF9zcndpKHJlbWFpbiwgcmVtYWluLCBzaGlmdCk7Ci0rCi0rICAgIC8vIENvbnRp bnVlIGlmIHJlbWFpbiAhPSAwCi0rICAgIGFzX2NtcHdpKHJlbWFpbiwgMCk7Ci0rICAgIG1hX2Io QXNzZW1ibGVyOjpOb3RFcXVhbCwgJmhlYWQpOwotKyAgfQotKwotKyAgLy8gSWYgaW5wdXQgd2Fz IG5lZ2F0aXZlLCBuZWdhdGUgcmVzdWx0Ci0rICBhc19jbXB3aShob2xkLCAwKTsKLSsgIG1hX2Io QXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsICZkb25lKTsKLSsKLSsgIGlmIChuZWdaZXJv ICE9IG51bGxwdHIpIHsKLSsgICAgYXNfY21wd2koZGVzdCwgMCk7Ci0rICAgIG1hX2IoQXNzZW1i bGVyOjpFcXVhbCwgbmVnWmVybyk7Ci0rICB9Ci0rCi0rICBhc19uZWcoZGVzdCwgZGVzdCk7Ci0r ICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSsKLSsgIGJpbmQoJmRvbmUpOwotK30KLSsKLSsvLyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsvLyBBdG9taWMgb3BlcmF0aW9ucy4KLSsKLSt0ZW1wbGF0ZSA8dHlw ZW5hbWUgVD4KLStzdGF0aWMgdm9pZCBDb21wYXJlRXhjaGFuZ2UoTWFjcm9Bc3NlbWJsZXImIG1h c20sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vz c0Rlc2MqIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NhbGFyOjpUeXBl IHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBUJiBtZW0sIFJlZ2lzdGVyIG9sZHZhbCwgUmVnaXN0ZXIgbmV3dmFsLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNl dFRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBS ZWdpc3RlciBvdXRwdXQpIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20p OwotKyAgYm9vbCBzaWduRXh0ZW5kID0gU2NhbGFyOjppc1NpZ25lZEludFR5cGUodHlwZSk7Ci0r ICB1bnNpZ25lZCBuYnl0ZXMgPSBTY2FsYXI6OmJ5dGVTaXplKHR5cGUpOwotKwotKyAgc3dpdGNo IChuYnl0ZXMpIHsKLSsgICAgY2FzZSAxOgotKyAgICBjYXNlIDI6Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2UgNDoKLSsgICAgICBNT1pfQVNTRVJUKHZhbHVlVGVtcCA9PSBJbnZhbGlkUmVnKTsK LSsgICAgICBNT1pfQVNTRVJUKG9mZnNldFRlbXAgPT0gSW52YWxpZFJlZyk7Ci0rICAgICAgTU9a X0FTU0VSVChtYXNrVGVtcCA9PSBJbnZhbGlkUmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVm YXVsdDoKLSsgICAgICBNT1pfQ1JBU0goKTsKLSsgIH0KLSsKLSsgIExhYmVsIGFnYWluLCBlbmQ7 Ci0rCi0rICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbWFzbS5jb21w dXRlRWZmZWN0aXZlQWRkcmVzcyhtZW0sIHNjcmF0Y2gpOwotKwotKyAgaWYgKG5ieXRlcyA9PSA0 KSB7Ci0rICAgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKLSsgICAgbWFzbS5iaW5k KCZhZ2Fpbik7Ci0rCi0rICAgIGlmIChhY2Nlc3MpIHsKLSsgICAgICBtYXNtLmZsdXNoQnVmZmVy KCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKLSsgICAgICBtYXNtLmFwcGVuZCgq YWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkF0b21pYywKLSsgICAgICAgICAgICAgICAg ICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKLSsgICAgfQotKwot KyAgICBtYXNtLmFzX2x3YXJ4KG91dHB1dCwgcjAsIHNjcmF0Y2gpOwotKyAgICAvLyBtYV9jbXAo Li4uLCBpczMyYml0PXRydWUpIGVtaXRzIGNtcHcsIHdoaWNoIGNvbXBhcmVzIG9ubHkgYml0cwot KyAgICAvLyAzMjo2MyAobG93IDMyKSBvZiBib3RoIG9wZXJhbmRzIHBlciBJU0EgdjMuMEIuIFRo ZSB1cHBlcgotKyAgICAvLyAzMiBiaXRzIG9mIG9sZHZhbCBhcmUgaWdub3JlZCwgc28gbm8gY2Fu b25pY2FsaXNpbmcgZXh0c3cgbmVlZGVkLgotKyAgICBtYXNtLm1hX2NtcChvdXRwdXQsIG9sZHZh bCwgQXNzZW1ibGVyOjpOb3RFcXVhbCwgLyogaXMzMmJpdCAqLyB0cnVlKTsKLSsgICAgbWFzbS5t YV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZlbmQpOwotKyAgICBtYXNtLmFzX3N0d2N4KG5ld3Zh bCwgcjAsIHNjcmF0Y2gpOwotKyAgICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJmFn YWluKTsKLSsKLSsgICAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7Ci0rICAgIG1hc20u YmluZCgmZW5kKTsKLSsgICAgLy8gbHdhcnggemVyby1leHRlbmRzOyBzaWduLWV4dGVuZCBmb3Ig MzItYml0IGNhbm9uaWNhbCBmb3JtLgotKyAgICBtYXNtLmFzX2V4dHN3KG91dHB1dCwgb3V0cHV0 KTsKLSsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgLy8gU3ViLXdvcmQgKDEgb3IgMiBieXRl KSBjb21wYXJlLWV4Y2hhbmdlIHZpYSBuYXRpdmUgbGJhcngvbGhhcnggKwotKyAgLy8gc3RiY3gu L3N0aGN4LiBQT1dFUjcrICh3ZWxsIGJlbG93IG91ciBQT1dFUjggYmFzZWxpbmUpLiBSZXBsYWNl cyB0aGUgcHJpb3IKLSsgIC8vIHJvdW5kLWRvd24tdG8td29yZAotKyAgLy8gKyBtYXNrICsgUk1X IGRhbmNlLiBsWGFyeCB6ZXJvLWV4dGVuZHMgdGhlIGxvYWRlZCBieXRlL2hhbGY7IHN0WGN4LiBz dG9yZXMKLSsgIC8vIG9ubHkgdGhlIGxvdyA4LzE2IGJpdHMgb2YgUlMsIHNvIG5vIHByZS1tYXNr aW5nIGlzIG5lZWRlZCBvbiB0aGUgc3RvcmUKLSsgIC8vIHNpZGUuIG9mZnNldFRlbXAgLyBtYXNr VGVtcCBhcmUgc3RpbGwgYWxsb2NhdGVkIGJ5IHRoZSBsb3dlcmluZyBidXQgdW51c2VkCi0rICAv LyBoZXJlLgotKyAgKHZvaWQpb2Zmc2V0VGVtcDsKLSsgICh2b2lkKW1hc2tUZW1wOwotKwotKyAg bWFzbS5tZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMpOwotKwotKyAgbWFzbS5iaW5kKCZhZ2Fpbik7 Ci0rCi0rICBpZiAoYWNjZXNzKSB7Ci0rICAgIG1hc20uZmx1c2hCdWZmZXIoKTsgIC8vIHNlZSBj b21tZW50IGluIHdhc21Mb2FkSW1wbAotKyAgICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpU cmFwTWFjaGluZUluc246OkF0b21pYywKLSsgICAgICAgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zm c2V0KG1hc20uY3VycmVudE9mZnNldCgpKSk7Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKG5ieXRlcykg ewotKyAgICBjYXNlIDE6Ci0rICAgICAgbWFzbS5hc19sYmFyeChvdXRwdXQsIHIwLCBzY3JhdGNo KTsKLSsgICAgICBpZiAoc2lnbkV4dGVuZCkgewotKyAgICAgICAgbWFzbS5hc19leHRzYih2YWx1 ZVRlbXAsIG9sZHZhbCk7Ci0rICAgICAgICBtYXNtLmFzX2V4dHNiKG91dHB1dCwgb3V0cHV0KTsK LSsgICAgICB9IGVsc2UgewotKyAgICAgICAgbWFzbS5hc19hbmRpX3JjKHZhbHVlVGVtcCwgb2xk dmFsLCAweGZmKTsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgMjoKLSsgICAg ICBtYXNtLmFzX2xoYXJ4KG91dHB1dCwgcjAsIHNjcmF0Y2gpOwotKyAgICAgIGlmIChzaWduRXh0 ZW5kKSB7Ci0rICAgICAgICBtYXNtLmFzX2V4dHNoKHZhbHVlVGVtcCwgb2xkdmFsKTsKLSsgICAg ICAgIG1hc20uYXNfZXh0c2gob3V0cHV0LCBvdXRwdXQpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAg ICAgICBtYXNtLmFzX3Jsd2lubSh2YWx1ZVRlbXAsIG9sZHZhbCwgMCwgMTYsIDMxKTsKLSsgICAg ICB9Ci0rICAgICAgYnJlYWs7Ci0rICB9Ci0rCi0rICBtYXNtLm1hX2NtcChvdXRwdXQsIHZhbHVl VGVtcCwgQXNzZW1ibGVyOjpOb3RFcXVhbCwgLyogaXMzMmJpdCAqLyB0cnVlKTsKLSsgIG1hc20u bWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmZW5kKTsKLSsKLSsgIGlmIChuYnl0ZXMgPT0gMSkg ewotKyAgICBtYXNtLmFzX3N0YmN4KG5ld3ZhbCwgcjAsIHNjcmF0Y2gpOwotKyAgfSBlbHNlIHsK LSsgICAgbWFzbS5hc19zdGhjeChuZXd2YWwsIHIwLCBzY3JhdGNoKTsKLSsgIH0KLSsgIG1hc20u bWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4pOwotKwotKyAgbWFzbS5tZW1vcnlCYXJy aWVyQWZ0ZXIoc3luYyk7Ci0rCi0rICBtYXNtLmJpbmQoJmVuZCk7Ci0rfQotKwotK3RlbXBsYXRl IDx0eXBlbmFtZSBUPgotK3N0YXRpYyB2b2lkIENvbXBhcmVFeGNoYW5nZTY0KE1hY3JvQXNzZW1i bGVyJiBtYXNtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206Ok1l bW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT eW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgVCYgbWVtLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyNjQgZXhwZWN0LCBSZWdpc3RlcjY0IHJlcGxhY2UsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKLSsgIE1PWl9BU1NF UlQoZXhwZWN0ICE9IG91dHB1dCAmJiByZXBsYWNlICE9IG91dHB1dCk7Ci0rICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKG1lbSwgc2NyYXRjaCk7 Ci0rCi0rICBMYWJlbCB0cnlBZ2FpbjsKLSsgIExhYmVsIGV4aXQ7Ci0rCi0rICBtYXNtLm1lbW9y eUJhcnJpZXJCZWZvcmUoc3luYyk7Ci0rCi0rICBtYXNtLmJpbmQoJnRyeUFnYWluKTsKLSsKLSsg IGlmIChhY2Nlc3MpIHsKLSsgICAgbWFzbS5mbHVzaEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQg aW4gd2FzbUxvYWRJbXBsCi0rICAgIG1hc20uYXBwZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNo aW5lSW5zbjo6QXRvbWljLAotKyAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFz bS5jdXJyZW50T2Zmc2V0KCkpKTsKLSsgIH0KLSsKLSsgIG1hc20uYXNfbGRhcngob3V0cHV0LnJl ZywgcjAsIHNjcmF0Y2gpOwotKwotKyAgbWFzbS5tYV9jbXAob3V0cHV0LnJlZywgZXhwZWN0LnJl ZywgQXNzZW1ibGVyOjpOb3RFcXVhbCk7Ci0rICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVh bCwgJmV4aXQpOwotKyAgbWFzbS5hc19zdGRjeChyZXBsYWNlLnJlZywgcjAsIHNjcmF0Y2gpOwot KyAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZ0cnlBZ2Fpbik7Ci0rCi0rICBtYXNt Lm1lbW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKLSsKLSsgIG1hc20uYmluZCgmZXhpdCk7Ci0rfQot KwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3N0YXRpYyB2b2lkIEF0b21pY0V4Y2hhbmdlKE1h Y3JvQXNzZW1ibGVyJiBtYXNtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdh c206Ok1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICBTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgVCYgbWVtLCBSZWdpc3RlciB2YWx1ZSwgUmVnaXN0ZXIgdmFs dWVUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAs IFJlZ2lzdGVyIG1hc2tUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG91dHB1dCkgewotKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICBi b29sIHNpZ25FeHRlbmQgPSBTY2FsYXI6OmlzU2lnbmVkSW50VHlwZSh0eXBlKTsKLSsgIHVuc2ln bmVkIG5ieXRlcyA9IFNjYWxhcjo6Ynl0ZVNpemUodHlwZSk7Ci0rCi0rICBzd2l0Y2ggKG5ieXRl cykgewotKyAgICBjYXNlIDE6Ci0rICAgIGNhc2UgMjoKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSA0OgotKyAgICAgIE1PWl9BU1NFUlQodmFsdWVUZW1wID09IEludmFsaWRSZWcpOwotKyAgICAg IE1PWl9BU1NFUlQob2Zmc2V0VGVtcCA9PSBJbnZhbGlkUmVnKTsKLSsgICAgICBNT1pfQVNTRVJU KG1hc2tUZW1wID09IEludmFsaWRSZWcpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0Ogot KyAgICAgIE1PWl9DUkFTSCgpOwotKyAgfQotKwotKyAgTGFiZWwgYWdhaW47Ci0rCi0rICBSZWdp c3RlciBtZW1UZW1wID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgbWFzbS5jb21wdXRlRWZmZWN0aXZl QWRkcmVzcyhtZW0sIG1lbVRlbXApOwotKwotKyAgaWYgKG5ieXRlcyA9PSA0KSB7Ci0rICAgIG1h c20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKLSsgICAgbWFzbS5iaW5kKCZhZ2Fpbik7Ci0r Ci0rICAgIGlmIChhY2Nlc3MpIHsKLSsgICAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUg Y29tbWVudCBpbiB3YXNtTG9hZEltcGwKLSsgICAgICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNt OjpUcmFwTWFjaGluZUluc246OkF0b21pYywKLSsgICAgICAgICAgICAgICAgICBGYXVsdGluZ0Nv ZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKLSsgICAgfQotKwotKyAgICBtYXNtLmFz X2x3YXJ4KG91dHB1dCwgcjAsIG1lbVRlbXApOwotKyAgICBtYXNtLmFzX3N0d2N4KHZhbHVlLCBy MCwgbWVtVGVtcCk7Ci0rICAgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4p OwotKwotKyAgICBtYXNtLm1lbW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKLSsgICAgLy8gbHdhcngg emVyby1leHRlbmRzOyBzaWduLWV4dGVuZCBmb3IgMzItYml0IGNhbm9uaWNhbCBmb3JtLgotKyAg ICBtYXNtLmFzX2V4dHN3KG91dHB1dCwgb3V0cHV0KTsKLSsKLSsgICAgcmV0dXJuOwotKyAgfQot KwotKyAgLy8gU3ViLXdvcmQgZXhjaGFuZ2UgdmlhIG5hdGl2ZSBsYmFyeC9saGFyeCArIHN0YmN4 Li9zdGhjeC4gKFBPV0VSNyspLgotKyAgLy8gdmFsdWVUZW1wIC8gb2Zmc2V0VGVtcCAvIG1hc2tU ZW1wIGFyZSBzdGlsbCBhbGxvY2F0ZWQgYnkgdGhlIGxvd2VyaW5nIGJ1dAotKyAgLy8gdW51c2Vk IGhlcmUuCi0rICAodm9pZCl2YWx1ZVRlbXA7Ci0rICAodm9pZClvZmZzZXRUZW1wOwotKyAgKHZv aWQpbWFza1RlbXA7Ci0rCi0rICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZvcmUoc3luYyk7Ci0rCi0r ICBtYXNtLmJpbmQoJmFnYWluKTsKLSsKLSsgIGlmIChhY2Nlc3MpIHsKLSsgICAgbWFzbS5mbHVz aEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCi0rICAgIG1hc20uYXBw ZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWljLAotKyAgICAgICAgICAg ICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKLSsgIH0KLSsK LSsgIGlmIChuYnl0ZXMgPT0gMSkgewotKyAgICBtYXNtLmFzX2xiYXJ4KG91dHB1dCwgcjAsIG1l bVRlbXApOwotKyAgICBtYXNtLmFzX3N0YmN4KHZhbHVlLCByMCwgbWVtVGVtcCk7Ci0rICB9IGVs c2UgewotKyAgICBtYXNtLmFzX2xoYXJ4KG91dHB1dCwgcjAsIG1lbVRlbXApOwotKyAgICBtYXNt LmFzX3N0aGN4KHZhbHVlLCByMCwgbWVtVGVtcCk7Ci0rICB9Ci0rICBtYXNtLm1hX2IoQXNzZW1i bGVyOjpOb3RFcXVhbCwgJmFnYWluKTsKLSsKLSsgIGlmIChzaWduRXh0ZW5kKSB7Ci0rICAgIGlm IChuYnl0ZXMgPT0gMSkgewotKyAgICAgIG1hc20uYXNfZXh0c2Iob3V0cHV0LCBvdXRwdXQpOwot KyAgICB9IGVsc2UgewotKyAgICAgIG1hc20uYXNfZXh0c2gob3V0cHV0LCBvdXRwdXQpOwotKyAg ICB9Ci0rICB9Ci0rICAvLyBVbnNpZ25lZDogbGJhcngvbGhhcnggYWxyZWFkeSB6ZXJvLWV4dGVu ZDsgb3V0cHV0IGlzIGNhbm9uaWNhbC4KLSsKLSsgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5 bmMpOwotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLStzdGF0aWMgdm9pZCBBdG9taWNF eGNoYW5nZTY0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMsIGNvbnN0IFQmIG1lbSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUsIFJlZ2lzdGVyNjQg b3V0cHV0KSB7Ci0rICBNT1pfQVNTRVJUKHZhbHVlICE9IG91dHB1dCk7Ci0rICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKG1lbSwgc2NyYXRj aCk7Ci0rCi0rICBMYWJlbCB0cnlBZ2FpbjsKLSsKLSsgIG1hc20ubWVtb3J5QmFycmllckJlZm9y ZShzeW5jKTsKLSsKLSsgIG1hc20uYmluZCgmdHJ5QWdhaW4pOwotKwotKyAgaWYgKGFjY2Vzcykg ewotKyAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZElt cGwKLSsgICAgbWFzbS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJbnNuOjpBdG9t aWMsCi0rICAgICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChtYXNtLmN1cnJlbnRPZmZz ZXQoKSkpOwotKyAgfQotKwotKyAgbWFzbS5hc19sZGFyeChvdXRwdXQucmVnLCByMCwgc2NyYXRj aCk7Ci0rCi0rICBtYXNtLmFzX3N0ZGN4KHZhbHVlLnJlZywgcjAsIHNjcmF0Y2gpOwotKyAgbWFz bS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZ0cnlBZ2Fpbik7Ci0rCi0rICBtYXNtLm1lbW9y eUJhcnJpZXJBZnRlcihzeW5jKTsKLSt9Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0rc3Rh dGljIHZvaWQgQXRvbWljRmV0Y2hPcChNYWNyb0Fzc2VtYmxlciYgbWFzbSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgIFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5jaHJvbml6YXRp b24gc3luYywgQXRvbWljT3Agb3AsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU JiBtZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCkgewotKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICBib29sIHNpZ25FeHRlbmQgPSBTY2FsYXI6 OmlzU2lnbmVkSW50VHlwZSh0eXBlKTsKLSsgIHVuc2lnbmVkIG5ieXRlcyA9IFNjYWxhcjo6Ynl0 ZVNpemUodHlwZSk7Ci0rCi0rICBzd2l0Y2ggKG5ieXRlcykgewotKyAgICBjYXNlIDE6Ci0rICAg IGNhc2UgMjoKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSA0OgotKyAgICAgIE1PWl9BU1NFUlQo dmFsdWVUZW1wID09IEludmFsaWRSZWcpOwotKyAgICAgIE1PWl9BU1NFUlQob2Zmc2V0VGVtcCA9 PSBJbnZhbGlkUmVnKTsKLSsgICAgICBNT1pfQVNTRVJUKG1hc2tUZW1wID09IEludmFsaWRSZWcp OwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSCgpOwotKyAg fQotKwotKyAgTGFiZWwgYWdhaW47Ci0rCi0rICBSZWdpc3RlciBtZW1UZW1wID0gdGVtcHMuQWNx dWlyZSgpOwotKyAgbWFzbS5jb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhtZW0sIG1lbVRlbXApOwot KwotKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsKLSsgIGlmIChuYnl0 ZXMgPT0gNCkgewotKyAgICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZvcmUoc3luYyk7Ci0rICAgIG1h c20uYmluZCgmYWdhaW4pOwotKwotKyAgICBpZiAoYWNjZXNzKSB7Ci0rICAgICAgbWFzbS5mbHVz aEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCi0rICAgICAgbWFzbS5h cHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJbnNuOjpBdG9taWMsCi0rICAgICAgICAg ICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KG1hc20uY3VycmVudE9mZnNldCgpKSk7Ci0rICAg IH0KLSsKLSsgICAgbWFzbS5hc19sd2FyeChvdXRwdXQsIHIwLCBtZW1UZW1wKTsKLSsKLSsgICAg c3dpdGNoIChvcCkgewotKyAgICAgIGNhc2UgQXRvbWljT3A6OkFkZDoKLSsgICAgICAgIG1hc20u YXNfYWRkKHNjcmF0Y2gsIG91dHB1dCwgdmFsdWUpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAg Y2FzZSBBdG9taWNPcDo6U3ViOgotKyAgICAgICAgbWFzbS5hc19zdWJmKHNjcmF0Y2gsIHZhbHVl LCBvdXRwdXQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBBdG9taWNPcDo6QW5kOgot KyAgICAgICAgbWFzbS5hc19hbmRfKHNjcmF0Y2gsIG91dHB1dCwgdmFsdWUpOwotKyAgICAgICAg YnJlYWs7Ci0rICAgICAgY2FzZSBBdG9taWNPcDo6T3I6Ci0rICAgICAgICBtYXNtLmFzX29yXyhz Y3JhdGNoLCBvdXRwdXQsIHZhbHVlKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgQXRv bWljT3A6OlhvcjoKLSsgICAgICAgIG1hc20uYXNfeG9yXyhzY3JhdGNoLCBvdXRwdXQsIHZhbHVl KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICBNT1pfQ1JBU0go KTsKLSsgICAgfQotKwotKyAgICBtYXNtLmFzX3N0d2N4KHNjcmF0Y2gsIHIwLCBtZW1UZW1wKTsK LSsgICAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZhZ2Fpbik7Ci0rCi0rICAgIG1h c20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOwotKyAgICAvLyBsd2FyeCB6ZXJvLWV4dGVuZHM7 IHNpZ24tZXh0ZW5kIGZvciAzMi1iaXQgY2Fub25pY2FsIGZvcm0uCi0rICAgIG1hc20uYXNfZXh0 c3cob3V0cHV0LCBvdXRwdXQpOwotKwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICAvLyBTdWIt d29yZCBmZXRjaC1hbmQtb3AgdmlhIG5hdGl2ZSBsYmFyeC9saGFyeCArIHN0YmN4Li9zdGhjeC4g KFBPV0VSNyspLgotKyAgLy8gYG91dHB1dGAgaG9sZHMgdGhlIHByZS1vcCBsb2FkZWQgdmFsdWUg KHJldHVybmVkIHRvIGNhbGxlcik7IGB2YWx1ZVRlbXBgCi0rICAvLyBpcyB0aGUgcG9zdC1vcCB2 YWx1ZSB3ZSBjb25kaXRpb24tc3RvcmUuIHN0WGN4LiBvbmx5IHN0b3JlcyBsb3cgOC8xNiBiaXRz Ci0rICAvLyBvZiBSUywgc28gbm8gcHJlLW1hc2sgb2YgdmFsdWVUZW1wIGlzIG5lZWRlZC4KLSsg IC8vIG9mZnNldFRlbXAgLyBtYXNrVGVtcCBhcmUgc3RpbGwgYWxsb2NhdGVkIGJ5IHRoZSBsb3dl cmluZyBidXQgdW51c2VkOyB0aGUKLSsgIC8vIGxvY2FsIGBzY3JhdGNoYCBpcyBvbmx5IHVzZWQg aW4gdGhlIDQtYnl0ZSBicmFuY2ggYWJvdmUuCi0rICAodm9pZClvZmZzZXRUZW1wOwotKyAgKHZv aWQpbWFza1RlbXA7Ci0rCi0rICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZvcmUoc3luYyk7Ci0rCi0r ICBtYXNtLmJpbmQoJmFnYWluKTsKLSsKLSsgIGlmIChhY2Nlc3MpIHsKLSsgICAgbWFzbS5mbHVz aEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCi0rICAgIG1hc20uYXBw ZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWljLAotKyAgICAgICAgICAg ICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKLSsgIH0KLSsK LSsgIGlmIChuYnl0ZXMgPT0gMSkgewotKyAgICBtYXNtLmFzX2xiYXJ4KG91dHB1dCwgcjAsIG1l bVRlbXApOwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hc19saGFyeChvdXRwdXQsIHIwLCBtZW1U ZW1wKTsKLSsgIH0KLSsKLSsgIHN3aXRjaCAob3ApIHsKLSsgICAgY2FzZSBBdG9taWNPcDo6QWRk OgotKyAgICAgIG1hc20uYXNfYWRkKHZhbHVlVGVtcCwgb3V0cHV0LCB2YWx1ZSk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgQXRvbWljT3A6OlN1YjoKLSsgICAgICBtYXNtLmFzX3N1YmYodmFs dWVUZW1wLCB2YWx1ZSwgb3V0cHV0KTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBdG9taWNP cDo6QW5kOgotKyAgICAgIG1hc20uYXNfYW5kXyh2YWx1ZVRlbXAsIG91dHB1dCwgdmFsdWUpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEF0b21pY09wOjpPcjoKLSsgICAgICBtYXNtLmFzX29y Xyh2YWx1ZVRlbXAsIG91dHB1dCwgdmFsdWUpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEF0 b21pY09wOjpYb3I6Ci0rICAgICAgbWFzbS5hc194b3JfKHZhbHVlVGVtcCwgb3V0cHV0LCB2YWx1 ZSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCk7Ci0r ICB9Ci0rCi0rICBpZiAobmJ5dGVzID09IDEpIHsKLSsgICAgbWFzbS5hc19zdGJjeCh2YWx1ZVRl bXAsIHIwLCBtZW1UZW1wKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20uYXNfc3RoY3godmFsdWVU ZW1wLCByMCwgbWVtVGVtcCk7Ci0rICB9Ci0rICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVh bCwgJmFnYWluKTsKLSsKLSsgIGlmIChzaWduRXh0ZW5kKSB7Ci0rICAgIGlmIChuYnl0ZXMgPT0g MSkgewotKyAgICAgIG1hc20uYXNfZXh0c2Iob3V0cHV0LCBvdXRwdXQpOwotKyAgICB9IGVsc2Ug ewotKyAgICAgIG1hc20uYXNfZXh0c2gob3V0cHV0LCBvdXRwdXQpOwotKyAgICB9Ci0rICB9Ci0r ICAvLyBVbnNpZ25lZDogbGJhcngvbGhhcnggYWxyZWFkeSB6ZXJvLWV4dGVuZDsgb3V0cHV0IGlz IGNhbm9uaWNhbC4KLSsKLSsgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOwotK30KLSsK LSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLStzdGF0aWMgdm9pZCBBdG9taWNGZXRjaE9wNjQoTWFj cm9Bc3NlbWJsZXImIG1hc20sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdh c206Ok1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLCBSZWdpc3RlcjY0IHZhbHVlLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiBtZW0sIFJlZ2lzdGVyNjQgdGVt cCwgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKLSsgIE1PWl9BU1NFUlQodmFsdWUgIT0gb3V0cHV0KTsK LSsgIE1PWl9BU1NFUlQodmFsdWUgIT0gdGVtcCk7Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhtYXNtKTsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r ICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKG1lbSwgc2NyYXRjaCk7Ci0rCi0rICBMYWJl bCB0cnlBZ2FpbjsKLSsKLSsgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKLSsKLSsg IG1hc20uYmluZCgmdHJ5QWdhaW4pOwotKwotKyAgaWYgKGFjY2VzcykgewotKyAgICBtYXNtLmZs dXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKLSsgICAgbWFzbS5h cHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJbnNuOjpBdG9taWMsCi0rICAgICAgICAg ICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChtYXNtLmN1cnJlbnRPZmZzZXQoKSkpOwotKyAgfQot KwotKyAgbWFzbS5hc19sZGFyeChvdXRwdXQucmVnLCByMCwgc2NyYXRjaCk7Ci0rCi0rICBzd2l0 Y2ggKG9wKSB7Ci0rICAgIGNhc2UgQXRvbWljT3A6OkFkZDoKLSsgICAgICBtYXNtLmFzX2FkZCh0 ZW1wLnJlZywgb3V0cHV0LnJlZywgdmFsdWUucmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgY2Fz ZSBBdG9taWNPcDo6U3ViOgotKyAgICAgIG1hc20uYXNfc3ViZih0ZW1wLnJlZywgdmFsdWUucmVn LCBvdXRwdXQucmVnKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBBdG9taWNPcDo6QW5kOgot KyAgICAgIG1hc20uYXNfYW5kXyh0ZW1wLnJlZywgb3V0cHV0LnJlZywgdmFsdWUucmVnKTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSBBdG9taWNPcDo6T3I6Ci0rICAgICAgbWFzbS5hc19vcl8o dGVtcC5yZWcsIG91dHB1dC5yZWcsIHZhbHVlLnJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2UgQXRvbWljT3A6OlhvcjoKLSsgICAgICBtYXNtLmFzX3hvcl8odGVtcC5yZWcsIG91dHB1dC5y ZWcsIHZhbHVlLnJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9a X0NSQVNIKCk7Ci0rICB9Ci0rCi0rICBtYXNtLmFzX3N0ZGN4KHRlbXAucmVnLCByMCwgc2NyYXRj aCk7Ci0rICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJnRyeUFnYWluKTsKLSsKLSsg IG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOwotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KLStzdGF0aWMgdm9pZCBBdG9taWNFZmZlY3RPcChNYWNyb0Fzc2VtYmxlciYgbWFzbSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNj KiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NhbGFyOjpUeXBlIHR5cGUs IFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBUJiBtZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciB2YWx1ZVRlbXAs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0 ZXIgbWFza1RlbXApIHsKLSsgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwot KyAgdW5zaWduZWQgbmJ5dGVzID0gU2NhbGFyOjpieXRlU2l6ZSh0eXBlKTsKLSsKLSsgIHN3aXRj aCAobmJ5dGVzKSB7Ci0rICAgIGNhc2UgMToKLSsgICAgY2FzZSAyOgotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIDQ6Ci0rICAgICAgTU9aX0FTU0VSVCh2YWx1ZVRlbXAgPT0gSW52YWxpZFJlZyk7 Ci0rICAgICAgTU9aX0FTU0VSVChvZmZzZXRUZW1wID09IEludmFsaWRSZWcpOwotKyAgICAgIE1P Wl9BU1NFUlQobWFza1RlbXAgPT0gSW52YWxpZFJlZyk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRl ZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCk7Ci0rICB9Ci0rCi0rICBMYWJlbCBhZ2FpbjsKLSsK LSsgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICBtYXNtLmNvbXB1dGVF ZmZlY3RpdmVBZGRyZXNzKG1lbSwgc2NyYXRjaCk7Ci0rCi0rICBSZWdpc3RlciBzY3JhdGNoMiA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsKLSsgIGlmIChuYnl0ZXMgPT0gNCkgewotKyAgICBtYXNtLm1l bW9yeUJhcnJpZXJCZWZvcmUoc3luYyk7Ci0rICAgIG1hc20uYmluZCgmYWdhaW4pOwotKwotKyAg ICBpZiAoYWNjZXNzKSB7Ci0rICAgICAgbWFzbS5mbHVzaEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1l bnQgaW4gd2FzbUxvYWRJbXBsCi0rICAgICAgbWFzbS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJh cE1hY2hpbmVJbnNuOjpBdG9taWMsCi0rICAgICAgICAgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zm c2V0KG1hc20uY3VycmVudE9mZnNldCgpKSk7Ci0rICAgIH0KLSsKLSsgICAgbWFzbS5hc19sd2Fy eChzY3JhdGNoMiwgcjAsIHNjcmF0Y2gpOwotKwotKyAgICBzd2l0Y2ggKG9wKSB7Ci0rICAgICAg Y2FzZSBBdG9taWNPcDo6QWRkOgotKyAgICAgICAgbWFzbS5hc19hZGQoc2NyYXRjaDIsIHNjcmF0 Y2gyLCB2YWx1ZSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEF0b21pY09wOjpTdWI6 Ci0rICAgICAgICBtYXNtLmFzX3N1YmYoc2NyYXRjaDIsIHZhbHVlLCBzY3JhdGNoMik7Ci0rICAg ICAgICBicmVhazsKLSsgICAgICBjYXNlIEF0b21pY09wOjpBbmQ6Ci0rICAgICAgICBtYXNtLmFz X2FuZF8oc2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7Ci0rICAgICAgICBicmVhazsKLSsgICAg ICBjYXNlIEF0b21pY09wOjpPcjoKLSsgICAgICAgIG1hc20uYXNfb3JfKHNjcmF0Y2gyLCBzY3Jh dGNoMiwgdmFsdWUpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBBdG9taWNPcDo6WG9y OgotKyAgICAgICAgbWFzbS5hc194b3JfKHNjcmF0Y2gyLCBzY3JhdGNoMiwgdmFsdWUpOwotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIE1PWl9DUkFTSCgpOwotKyAg ICB9Ci0rCi0rICAgIG1hc20uYXNfc3R3Y3goc2NyYXRjaDIsIHIwLCBzY3JhdGNoKTsKLSsgICAg bWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZhZ2Fpbik7Ci0rCi0rICAgIG1hc20ubWVt b3J5QmFycmllckFmdGVyKHN5bmMpOwotKwotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICAvLyBT dWItd29yZCBlZmZlY3Qtb25seSBvcCB2aWEgbmF0aXZlIGxiYXJ4L2xoYXJ4ICsgc3RiY3guL3N0 aGN4LiAoUE9XRVI3KykuCi0rICAvLyBObyBvdXRwdXQgdG8gcmV0dXJuOyBzY3JhdGNoMiBob2xk cyB0aGUgbG9hZCtvcCtzdG9yZSB2YWx1ZS4KLSsgIC8vIHZhbHVlVGVtcCAvIG9mZnNldFRlbXAg LyBtYXNrVGVtcCBhcmUgc3RpbGwgYWxsb2NhdGVkIGJ5IHRoZSBsb3dlcmluZyBidXQKLSsgIC8v IHVudXNlZCBoZXJlLgotKyAgKHZvaWQpdmFsdWVUZW1wOwotKyAgKHZvaWQpb2Zmc2V0VGVtcDsK LSsgICh2b2lkKW1hc2tUZW1wOwotKwotKyAgbWFzbS5tZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMp OwotKwotKyAgbWFzbS5iaW5kKCZhZ2Fpbik7Ci0rCi0rICBpZiAoYWNjZXNzKSB7Ci0rICAgIG1h c20uZmx1c2hCdWZmZXIoKTsgIC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAotKyAgICBt YXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkF0b21pYywKLSsgICAg ICAgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KG1hc20uY3VycmVudE9mZnNldCgpKSk7Ci0r ICB9Ci0rCi0rICBpZiAobmJ5dGVzID09IDEpIHsKLSsgICAgbWFzbS5hc19sYmFyeChzY3JhdGNo MiwgcjAsIHNjcmF0Y2gpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFzbS5hc19saGFyeChzY3JhdGNo MiwgcjAsIHNjcmF0Y2gpOwotKyAgfQotKwotKyAgc3dpdGNoIChvcCkgewotKyAgICBjYXNlIEF0 b21pY09wOjpBZGQ6Ci0rICAgICAgbWFzbS5hc19hZGQoc2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1 ZSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXRvbWljT3A6OlN1YjoKLSsgICAgICBtYXNt LmFzX3N1YmYoc2NyYXRjaDIsIHZhbHVlLCBzY3JhdGNoMik7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGNhc2UgQXRvbWljT3A6OkFuZDoKLSsgICAgICBtYXNtLmFzX2FuZF8oc2NyYXRjaDIsIHNjcmF0 Y2gyLCB2YWx1ZSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQXRvbWljT3A6Ok9yOgotKyAg ICAgIG1hc20uYXNfb3JfKHNjcmF0Y2gyLCBzY3JhdGNoMiwgdmFsdWUpOwotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIEF0b21pY09wOjpYb3I6Ci0rICAgICAgbWFzbS5hc194b3JfKHNjcmF0Y2gy LCBzY3JhdGNoMiwgdmFsdWUpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAg IE1PWl9DUkFTSCgpOwotKyAgfQotKwotKyAgaWYgKG5ieXRlcyA9PSAxKSB7Ci0rICAgIG1hc20u YXNfc3RiY3goc2NyYXRjaDIsIHIwLCBzY3JhdGNoKTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20u YXNfc3RoY3goc2NyYXRjaDIsIHIwLCBzY3JhdGNoKTsKLSsgIH0KLSsgIG1hc20ubWFfYihBc3Nl bWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4pOwotKwotKyAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIo c3luYyk7Ci0rfQotKwotKy8vIFB1YmxpYyBNYWNyb0Fzc2VtYmxlciBtZXRob2RzLgotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVFeGNoYW5nZShTY2FsYXI6OlR5cGUgdHlwZSwgU3lu Y2hyb25pemF0aW9uIHN5bmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgb2xkdmFsLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBuZXd2YWwsIFJlZ2lzdGVyIHZhbHVlVGVtcCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVt cCwgUmVnaXN0ZXIgbWFza1RlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIG91dHB1dCkgewotKyAgQ29tcGFyZUV4Y2hhbmdlKCp0aGlzLCBudWxscHRy LCB0eXBlLCBzeW5jLCBtZW0sIG9sZHZhbCwgbmV3dmFsLCB2YWx1ZVRlbXAsCi0rICAgICAgICAg ICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmNvbXBhcmVFeGNoYW5nZShTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25p emF0aW9uIHN5bmMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciBvbGR2YWwsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG5ld3ZhbCwgUmVnaXN0ZXIgdmFsdWVUZW1wLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBS ZWdpc3RlciBtYXNrVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBDb21wYXJlRXhjaGFuZ2UoKnRoaXMsIG51bGxwdHIsIHR5 cGUsIHN5bmMsIG1lbSwgb2xkdmFsLCBuZXd2YWwsIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAg ICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6Y29tcGFyZUV4Y2hhbmdlNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIGNvbnN0IEFk ZHJlc3MmIG1lbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlcjY0IGV4cGVjdCwgUmVnaXN0ZXI2NCByZXBsYWNlLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0KSB7Ci0rICBDb21wYXJlRXhjaGFu Z2U2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgbWVtLCBleHBlY3QsIHJlcGxhY2UsIG91dHB1dCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVFeGNoYW5nZTY0KFN5bmNocm9u aXphdGlvbiBzeW5jLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0IGV4cGVjdCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHJlcGxhY2UsIFJlZ2lzdGVyNjQgb3V0 cHV0KSB7Ci0rICBDb21wYXJlRXhjaGFuZ2U2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgbWVtLCBl eHBlY3QsIHJlcGxhY2UsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondh c21Db21wYXJlRXhjaGFuZ2UoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYg bWVtLCBSZWdpc3RlciBvbGR2YWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBuZXd2YWwsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lz dGVyIG1hc2tUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBDb21wYXJlRXhjaGFuZ2UoKnRoaXMsICZhY2Nlc3MsIGFj Y2Vzcy50eXBlKCksIGFjY2Vzcy5zeW5jKCksIG1lbSwgb2xkdmFsLAotKyAgICAgICAgICAgICAg ICAgIG5ld3ZhbCwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0KTsKLSt9 Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUNvbXBhcmVFeGNoYW5nZShjb25zdCB3YXNt OjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIgb2xkdmFsLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbmV3dmFsLCBS ZWdpc3RlciB2YWx1ZVRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCkgewotKyAgQ29t cGFyZUV4Y2hhbmdlKCp0aGlzLCAmYWNjZXNzLCBhY2Nlc3MudHlwZSgpLCBhY2Nlc3Muc3luYygp LCBtZW0sIG9sZHZhbCwKLSsgICAgICAgICAgICAgICAgICBuZXd2YWwsIHZhbHVlVGVtcCwgb2Zm c2V0VGVtcCwgbWFza1RlbXAsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Ondhc21Db21wYXJlRXhjaGFuZ2U2NChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nl c3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFk ZHJlc3MmIG1lbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXI2NCBleHBlY3QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyNjQgcmVwbGFjZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKLSsgIENvbXBhcmVFeGNoYW5nZTY0 KCp0aGlzLCAmYWNjZXNzLCBhY2Nlc3Muc3luYygpLCBtZW0sIGV4cGVjdCwgcmVwbGFjZSwKLSsg ICAgICAgICAgICAgICAgICAgIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Ondhc21Db21wYXJlRXhjaGFuZ2U2NChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nl c3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJh c2VJbmRleCYgbWVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlcjY0IGV4cGVjdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXI2NCByZXBsYWNlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkgewotKyAgQ29tcGFyZUV4Y2hhbmdl NjQoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy5zeW5jKCksIG1lbSwgZXhwZWN0LCByZXBsYWNlLAot KyAgICAgICAgICAgICAgICAgICAgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YXRvbWljRXhjaGFuZ2UoU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5j LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1l bSwgUmVnaXN0ZXIgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciBvdXRwdXQp IHsKLSsgIEF0b21pY0V4Y2hhbmdlKCp0aGlzLCBudWxscHRyLCB0eXBlLCBzeW5jLCBtZW0sIHZh bHVlLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAgICBtYXNrVGVtcCwg b3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRXhjaGFuZ2UoU2Nh bGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciB2YWx1ZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAs IFJlZ2lzdGVyIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkgewotKyAgQXRvbWljRXhjaGFu Z2UoKnRoaXMsIG51bGxwdHIsIHR5cGUsIHN5bmMsIG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zm c2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgIG1hc2tUZW1wLCBvdXRwdXQpOwotK30KLSsKLSt2 b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFeGNoYW5nZTY0KFN5bmNocm9uaXphdGlvbiBzeW5j LCBjb25zdCBBZGRyZXNzJiBtZW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlcjY0IHZhbHVlLCBSZWdpc3RlcjY0IG91dHB1dCkgewotKyAgQXRvbWljRXhj aGFuZ2U2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgbWVtLCB2YWx1ZSwgb3V0cHV0KTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRXhjaGFuZ2U2NChTeW5jaHJvbml6YXRpb24g c3luYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJ bmRleCYgbWVtLCBSZWdpc3RlcjY0IHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKLSsgIEF0b21pY0V4Y2hhbmdlNjQoKnRo aXMsIG51bGxwdHIsIHN5bmMsIG1lbSwgdmFsdWUsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Ondhc21BdG9taWNFeGNoYW5nZShjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NE ZXNjJiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVt cCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFz a1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkgewotKyAgQXRvbWljRXhjaGFuZ2UoKnRoaXMsICZhY2Nl c3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vzcy5zeW5jKCksIG1lbSwgdmFsdWUsCi0rICAgICAgICAg ICAgICAgICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRwdXQpOwotK30KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQXRvbWljRXhjaGFuZ2UoY29uc3Qgd2FzbTo6TWVt b3J5QWNjZXNzRGVzYyYgYWNjZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0 ZXIgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkgewotKyAgQXRvbWljRXhjaGFuZ2Uo KnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vzcy5zeW5jKCksIG1lbSwgdmFsdWUs Ci0rICAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRw dXQpOwotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLStzdGF0aWMgdm9pZCBXYXNtQXRv bWljRXhjaGFuZ2U2NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgbWVtLCBSZWdpc3RlcjY0IHZh bHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0 KSB7Ci0rICBBdG9taWNFeGNoYW5nZTY0KG1hc20sICZhY2Nlc3MsIGFjY2Vzcy5zeW5jKCksIG1l bSwgdmFsdWUsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21BdG9t aWNFeGNoYW5nZTY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0s IFJlZ2lzdGVyNjQgc3JjLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyNjQgb3V0cHV0KSB7Ci0rICBXYXNtQXRvbWljRXhjaGFuZ2U2NCgqdGhpcywg YWNjZXNzLCBtZW0sIHNyYywgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 d2FzbUF0b21pY0V4Y2hhbmdlNjQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNz LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJ bmRleCYgbWVtLCBSZWdpc3RlcjY0IHNyYywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkgewotKyAgV2FzbUF0b21pY0V4Y2hhbmdl NjQoKnRoaXMsIGFjY2VzcywgbWVtLCBzcmMsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmF0b21pY0ZldGNoT3AoU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlv biBzeW5jLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Agb3As IFJlZ2lzdGVyIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCkgewot KyAgQXRvbWljRmV0Y2hPcCgqdGhpcywgbnVsbHB0ciwgdHlwZSwgc3luYywgb3AsIG1lbSwgdmFs dWUsIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91 dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0ZldGNoT3AoU2NhbGFy OjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIHZh bHVlVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9m ZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBBdG9taWNGZXRjaE9wKCp0aGlzLCBudWxs cHRyLCB0eXBlLCBzeW5jLCBvcCwgbWVtLCB2YWx1ZSwgdmFsdWVUZW1wLAotKyAgICAgICAgICAg ICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YXRvbWljRmV0Y2hPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBv cCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1 ZSwgY29uc3QgQWRkcmVzcyYgbWVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlcjY0IHRlbXAsIFJlZ2lzdGVyNjQgb3V0cHV0KSB7Ci0rICBBdG9taWNGZXRj aE9wNjQoKnRoaXMsIG51bGxwdHIsIHN5bmMsIG9wLCB2YWx1ZSwgbWVtLCB0ZW1wLCBvdXRwdXQp OwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNGZXRjaE9wNjQoU3luY2hyb25p emF0aW9uIHN5bmMsIEF0b21pY09wIG9wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlcjY0IHZhbHVlLCBjb25zdCBCYXNlSW5kZXgmIG1lbSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0 IG91dHB1dCkgewotKyAgQXRvbWljRmV0Y2hPcDY0KCp0aGlzLCBudWxscHRyLCBzeW5jLCBvcCwg dmFsdWUsIG1lbSwgdGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YXRvbWljRWZmZWN0T3A2NChTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHZhbHVlLCBjb25z dCBBZGRyZXNzJiBtZW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlcjY0IHRlbXApIHsKLSsgIEF0b21pY0ZldGNoT3A2NCgqdGhpcywgbnVsbHB0ciwgc3lu Yywgb3AsIHZhbHVlLCBtZW0sIHRlbXAsIHRlbXApOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyOjphdG9taWNFZmZlY3RPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUs IGNvbnN0IEJhc2VJbmRleCYgbWVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXI2NCB0ZW1wKSB7Ci0rICBBdG9taWNGZXRjaE9wNjQoKnRoaXMsIG51bGxw dHIsIHN5bmMsIG9wLCB2YWx1ZSwgbWVtLCB0ZW1wLCB0ZW1wKTsKLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6d2FzbUF0b21pY0ZldGNoT3AoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVz YyYgYWNjZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21p Y09wIG9wLCBSZWdpc3RlciB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIHZhbHVlVGVtcCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdp c3RlciBtYXNrVGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBvdXRwdXQpIHsKLSsgIEF0b21pY0ZldGNoT3AoKnRoaXMsICZhY2Nlc3MsIGFjY2Vz cy50eXBlKCksIGFjY2Vzcy5zeW5jKCksIG9wLCBtZW0sIHZhbHVlLAotKyAgICAgICAgICAgICAg ICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRwdXQpOwotK30KLSsKLSt2b2lk IE1hY3JvQXNzZW1ibGVyOjp3YXNtQXRvbWljRmV0Y2hPcChjb25zdCB3YXNtOjpNZW1vcnlBY2Nl c3NEZXNjJiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVt cCwgUmVnaXN0ZXIgbWFza1RlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBBdG9taWNGZXRjaE9wKCp0aGlzLCAmYWNjZXNz LCBhY2Nlc3MudHlwZSgpLCBhY2Nlc3Muc3luYygpLCBvcCwgbWVtLCB2YWx1ZSwKLSsgICAgICAg ICAgICAgICAgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0KTsKLSt9Ci0r Ci0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0ZldGNoT3A2NChjb25zdCB3YXNtOjpN ZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXI2 NCB0ZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXI2NCBvdXRwdXQpIHsKLSsgIEF0b21pY0ZldGNoT3A2NCgqdGhpcywgJmFjY2VzcywgYWNjZXNz LnN5bmMoKSwgb3AsIHZhbHVlLCBtZW0sIHRlbXAsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Ondhc21BdG9taWNGZXRjaE9wNjQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNz RGVzYyYgYWNjZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXRvbWljT3Agb3AsIFJlZ2lzdGVyNjQgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXI2NCB0ZW1wLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRw dXQpIHsKLSsgIEF0b21pY0ZldGNoT3A2NCgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnN5bmMoKSwg b3AsIHZhbHVlLCBtZW0sIHRlbXAsIG91dHB1dCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Ondhc21BdG9taWNFZmZlY3RPcChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nl c3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b21pY09wIG9w LCBSZWdpc3RlciB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wKSB7Ci0r ICBBdG9taWNFZmZlY3RPcCgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnR5cGUoKSwgYWNjZXNzLnN5 bmMoKSwgb3AsIG1lbSwgdmFsdWUsCi0rICAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9mZnNl dFRlbXAsIG1hc2tUZW1wKTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21p Y0VmZmVjdE9wKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZh bHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNl SW5kZXgmIG1lbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCkgewotKyAgQXRvbWljRWZm ZWN0T3AoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vzcy5zeW5jKCksIG9wLCBt ZW0sIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNr VGVtcCk7Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIEpTIGF0b21pYyBvcGVyYXRp b25zLgotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgotK3N0YXRpYyB2b2lkIENvbXBhcmVFeGNo YW5nZUpTKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLCBjb25zdCBU JiBtZW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2xkdmFsLCBS ZWdpc3RlciBuZXd2YWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg dmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91dHB1dCkgewotKyAgaWYgKGFycmF5VHlwZSA9 PSBTY2FsYXI6OlVpbnQzMikgewotKyAgICBtYXNtLmNvbXBhcmVFeGNoYW5nZShhcnJheVR5cGUs IHN5bmMsIG1lbSwgb2xkdmFsLCBuZXd2YWwsIHZhbHVlVGVtcCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIHRlbXApOwotKyAgICBtYXNtLmNvbnZlcnRV SW50MzJUb0RvdWJsZSh0ZW1wLCBvdXRwdXQuZnB1KCkpOwotKyAgfSBlbHNlIHsKLSsgICAgbWFz bS5jb21wYXJlRXhjaGFuZ2UoYXJyYXlUeXBlLCBzeW5jLCBtZW0sIG9sZHZhbCwgbmV3dmFsLCB2 YWx1ZVRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1w LCBvdXRwdXQuZ3ByKCkpOwotKyAgfQotK30KLSsKLSt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLStz dGF0aWMgdm9pZCBBdG9taWNFeGNoYW5nZUpTKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBTY2FsYXI6 OlR5cGUgYXJyYXlUeXBlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25p emF0aW9uIHN5bmMsIGNvbnN0IFQmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0 ZXIgdGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91dHB1 dCkgewotKyAgaWYgKGFycmF5VHlwZSA9PSBTY2FsYXI6OlVpbnQzMikgewotKyAgICBtYXNtLmF0 b21pY0V4Y2hhbmdlKGFycmF5VHlwZSwgc3luYywgbWVtLCB2YWx1ZSwgdmFsdWVUZW1wLCBvZmZz ZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUZW1wLCB0ZW1wKTsKLSsgICAg bWFzbS5jb252ZXJ0VUludDMyVG9Eb3VibGUodGVtcCwgb3V0cHV0LmZwdSgpKTsKLSsgIH0gZWxz ZSB7Ci0rICAgIG1hc20uYXRvbWljRXhjaGFuZ2UoYXJyYXlUeXBlLCBzeW5jLCBtZW0sIHZhbHVl LCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgbWFza1Rl bXAsIG91dHB1dC5ncHIoKSk7Ci0rICB9Ci0rfQotKwotK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgot K3N0YXRpYyB2b2lkIEF0b21pY0ZldGNoT3BKUyhNYWNyb0Fzc2VtYmxlciYgbWFzbSwgU2NhbGFy OjpUeXBlIGFycmF5VHlwZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25p emF0aW9uIHN5bmMsIEF0b21pY09wIG9wLCBSZWdpc3RlciB2YWx1ZSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgVCYgbWVtLCBSZWdpc3RlciB2YWx1ZVRlbXAsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tU ZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wLCBBbnlSZWdp c3RlciBvdXRwdXQpIHsKLSsgIGlmIChhcnJheVR5cGUgPT0gU2NhbGFyOjpVaW50MzIpIHsKLSsg ICAgbWFzbS5hdG9taWNGZXRjaE9wKGFycmF5VHlwZSwgc3luYywgb3AsIHZhbHVlLCBtZW0sIHZh bHVlVGVtcCwgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUZW1wLCB0 ZW1wKTsKLSsgICAgbWFzbS5jb252ZXJ0VUludDMyVG9Eb3VibGUodGVtcCwgb3V0cHV0LmZwdSgp KTsKLSsgIH0gZWxzZSB7Ci0rICAgIG1hc20uYXRvbWljRmV0Y2hPcChhcnJheVR5cGUsIHN5bmMs IG9wLCB2YWx1ZSwgbWVtLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAg ICAgICAgICBtYXNrVGVtcCwgb3V0cHV0LmdwcigpKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNYWNy b0Fzc2VtYmxlcjo6Y29tcGFyZUV4Y2hhbmdlSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3lu YywgY29uc3QgQWRkcmVzcyYgbWVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIG9sZHZhbCwgUmVnaXN0ZXIgbmV3dmFsLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zm c2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBbnlSZWdpc3RlciBvdXRwdXQpIHsKLSsgIENvbXBhcmVFeGNoYW5nZUpTKCp0 aGlzLCBhcnJheVR5cGUsIHN5bmMsIG1lbSwgb2xkdmFsLCBuZXd2YWwsIHZhbHVlVGVtcCwKLSsg ICAgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wLCB0ZW1wLCBvdXRwdXQpOwot K30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlRXhjaGFuZ2VKUyhTY2FsYXI6OlR5 cGUgYXJyYXlUeXBlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5 bmNocm9uaXphdGlvbiBzeW5jLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciBvbGR2YWwsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbmV3dmFsLCBSZWdpc3RlciB2YWx1 ZVRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg b2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCwgQW55UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBD b21wYXJlRXhjaGFuZ2VKUygqdGhpcywgYXJyYXlUeXBlLCBzeW5jLCBtZW0sIG9sZHZhbCwgbmV3 dmFsLCB2YWx1ZVRlbXAsCi0rICAgICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVt cCwgdGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRXhj aGFuZ2VKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMsIGNvbnN0IEFkZHJlc3MmIG1lbSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBS ZWdpc3RlciB2YWx1ZVRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXAsIEFueVJlZ2lzdGVyIG91dHB1 dCkgewotKyAgQXRvbWljRXhjaGFuZ2VKUygqdGhpcywgYXJyYXlUeXBlLCBzeW5jLCBtZW0sIHZh bHVlLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAgICAgIG1hc2tUZW1w LCB0ZW1wLCBvdXRwdXQpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFeGNo YW5nZUpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciB2YWx1ZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVt cCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBBdG9taWNF eGNoYW5nZUpTKCp0aGlzLCBhcnJheVR5cGUsIHN5bmMsIG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwg b2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgbWFza1RlbXAsIHRlbXAsIG91dHB1dCk7 Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0ZldGNoT3BKUyhTY2FsYXI6OlR5 cGUgYXJyYXlUeXBlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5j aHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0 ZXIgb2Zmc2V0VGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIHRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91dHB1dCkgewotKyAgQXRvbWljRmV0Y2hPcEpTKCp0 aGlzLCBhcnJheVR5cGUsIHN5bmMsIG9wLCB2YWx1ZSwgbWVtLCB2YWx1ZVRlbXAsIG9mZnNldFRl bXAsCi0rICAgICAgICAgICAgICAgICAgbWFza1RlbXAsIHRlbXAsIG91dHB1dCk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0ZldGNoT3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlU eXBlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRp b24gc3luYywgQXRvbWljT3Agb3AsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBCYXNlSW5kZXgmIG1lbSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZz ZXRUZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBt YXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQW55UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBBdG9taWNGZXRjaE9wSlMoKnRoaXMsIGFy cmF5VHlwZSwgc3luYywgb3AsIHZhbHVlLCBtZW0sIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKLSsg ICAgICAgICAgICAgICAgICBtYXNrVGVtcCwgdGVtcCwgb3V0cHV0KTsKLSt9Ci0rCi0rdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YXRvbWljRWZmZWN0T3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5 bmMsIEF0b21pY09wIG9wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRU ZW1wLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFz a1RlbXApIHsKLSsgIEF0b21pY0VmZmVjdE9wKCp0aGlzLCBudWxscHRyLCBhcnJheVR5cGUsIHN5 bmMsIG9wLCBtZW0sIHZhbHVlLCB2YWx1ZVRlbXAsCi0rICAgICAgICAgICAgICAgICBvZmZzZXRU ZW1wLCBtYXNrVGVtcCk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0VmZmVj dE9wSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBBZGRy ZXNzJiBtZW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCkgewotKyAgQXRvbWljRWZmZWN0T3Ao KnRoaXMsIG51bGxwdHIsIGFycmF5VHlwZSwgc3luYywgb3AsIG1lbSwgdmFsdWUsIHZhbHVlVGVt cCwKLSsgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKLSt9Ci0rCi0rLy8g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rLy8gV2FzbSBhZGRyZXNzIG9mZnNldCBjYXJyeSB0ZXN0cy4KLSsK LSt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6Om1hX2FkZDMyVGVzdENhcnJ5KENvbmRp dGlvbiBjb25kLCBSZWdpc3RlciByZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJzLCBJbW0zMiBpbW0sCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb3ZlcmZsb3cpIHsK LSsgIE1PWl9BU1NFUlQoY29uZCA9PSBBc3NlbWJsZXI6OkNhcnJ5U2V0IHx8IGNvbmQgPT0gQXNz ZW1ibGVyOjpDYXJyeUNsZWFyKTsKLSsgIGlmIChyZCAhPSBycykgewotKyAgICBhc01hc20oKS5t b3ZlMzIocnMsIHJkKTsKLSsgICAgYXNNYXNtKCkuYWRkMzIoaW1tLCByZCk7Ci0rICAgIGFzX2Nt cGx3KHJkLCBycyk7Ci0rICB9IGVsc2UgewotKyAgICAvLyB2aXNpdFdhc21BZGRPZmZzZXQgdXNl cyB1c2VSZWdpc3RlckF0U3RhcnQsIHNvIHRoZSBMSVIgYWxsb2NhdG9yIG1heQotKyAgICAvLyBj b2xsYXBzZSByZCBvbnRvIHJzLiBtb3ZlMzIgKyBhZGQzMiB3b3VsZCBjbG9iYmVyIHJzIGJlZm9y ZSB0aGUKLSsgICAgLy8gY29tcGFyZTsgc2F2ZSBycyB0byBhIHNjcmF0Y2ggZmlyc3QuCi0rICAg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgYXNNYXNtKCkubW92ZTMyKHJzLCBzY3JhdGNo KTsKLSsgICAgYXNNYXNtKCkuYWRkMzIoaW1tLCByZCk7Ci0rICAgIGFzX2NtcGx3KHJkLCBzY3Jh dGNoKTsKLSsgIH0KLSsgIG1hX2IoY29uZCA9PSBBc3NlbWJsZXI6OkNhcnJ5U2V0ID8gTGVzc1Ro YW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIG92ZXJmbG93KTsKLSt9Ci0rCi0rdm9pZCBNYWNyb0Fz c2VtYmxlclBQQzY0Q29tcGF0OjptYV9hZGRQdHJUZXN0Q2FycnkoQ29uZGl0aW9uIGNvbmQsIFJl Z2lzdGVyIHJkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHJzLCBJbW1Xb3JkIGltbSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogb3ZlcmZsb3cpIHsKLSsgIE1PWl9B U1NFUlQoY29uZCA9PSBBc3NlbWJsZXI6OkNhcnJ5U2V0IHx8IGNvbmQgPT0gQXNzZW1ibGVyOjpD YXJyeUNsZWFyKTsKLSsgIGlmIChyZCAhPSBycykgewotKyAgICBhc01hc20oKS5tb3ZlUHRyKHJz LCByZCk7Ci0rICAgIGFzTWFzbSgpLmFkZFB0cihJbW1Xb3JkKGltbS52YWx1ZSksIHJkKTsKLSsg ICAgYXNfY21wbGQocmQsIHJzKTsKLSsgIH0gZWxzZSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKLSsgICAgYXNNYXNtKCkubW92ZVB0cihycywgc2NyYXRjaCk7Ci0rICAgIGFzTWFzbSgp LmFkZFB0cihJbW1Xb3JkKGltbS52YWx1ZSksIHJkKTsKLSsgICAgYXNfY21wbGQocmQsIHNjcmF0 Y2gpOwotKyAgfQotKyAgbWFfYihjb25kID09IEFzc2VtYmxlcjo6Q2FycnlTZXQgPyBMZXNzVGhh biA6IEdyZWF0ZXJUaGFuT3JFcXVhbCwgb3ZlcmZsb3cpOwotK30KLSsKLSsvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsvLyBXYXNtIGxvYWQvc3RvcmUgaGVscGVycy4KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyUFBDNjRDb21wYXQ6Ondhc21Qcm9iZUxhc3RCeXRlKAotKyAgICBjb25zdCB3YXNtOjpNZW1v cnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJlZ2lzdGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0cikg ewotKyAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGNvbnN0IHVu c2lnbmVkIHNpemUgPSBTY2FsYXI6OmJ5dGVTaXplKGFjY2Vzcy50eXBlKCkpOwotKyAgaWYgKHNp emUgPD0gMSkgewotKyAgICByZXR1cm47Ci0rICB9Ci0rICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7Ci0rICBSZWdpc3RlciBwcm9iZUFkZHIgPSB0ZW1wcy5BY3F1aXJl KCk7Ci0rICAvLyBzaXplIGlzIGF0IG1vc3QgMTYgKFNpbWQxMjgpLCB3ZWxsIHdpdGhpbiB0aGUg aW50MTZfdCByYW5nZSBvZiBhc19hZGRpLgotKyAgYXNfYWRkaShwcm9iZUFkZHIsIHB0ciwgaW50 MTZfdChzaXplIC0gMSkpOwotKyAgLy8gUmVjb3JkIHRoZSBwcm9iZSBhcyBhIHdhc20gdHJhcCBz aXRlIHNvIGl0cyBTSUdTRUdWIGRpc3BhdGNoZXMKLSsgIC8vIHRocm91Z2ggdGhlIHdhc20gc2ln bmFsIGhhbmRsZXIgdGhlIHNhbWUgd2F5IHRoZSByZWFsIGFjY2VzcyB3b3VsZC4KLSsgIG1fYnVm ZmVyLmZsdXNoUG9vbCgpOwotKyAgYXBwZW5kKGFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJbnNu OjpMb2FkOCwKLSsgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKSk7 Ci0rICAvLyBQcm9iaW5nIDEtYnl0ZSBsb2FkOyByZXN1bHQgZGlzY2FyZGVkLgotKyAgYXNfbGJ6 eChwcm9iZUFkZHIsIG1lbW9yeUJhc2UsIHByb2JlQWRkcik7Ci0rfQotKwotK3ZvaWQgTWFjcm9B c3NlbWJsZXJQUEM2NENvbXBhdDo6d2FzbUxvYWRJbXBsKAotKyAgICBjb25zdCB3YXNtOjpNZW1v cnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJlZ2lzdGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwK LSsgICAgUmVnaXN0ZXIgcHRyU2NyYXRjaCwgQW55UmVnaXN0ZXIgb3V0cHV0KSB7Ci0rICBhY2Nl c3MuYXNzZXJ0T2Zmc2V0SW5HdWFyZFBhZ2VzKCk7Ci0rICB1aW50MzJfdCBvZmZzZXQgPSBhY2Nl c3Mub2Zmc2V0MzIoKTsKLSsgIE1PWl9BU1NFUlRfSUYob2Zmc2V0LCBwdHJTY3JhdGNoICE9IElu dmFsaWRSZWcpOwotKwotKyAgaWYgKG9mZnNldCkgewotKyAgICBhc01hc20oKS5hZGRQdHIoSW1t V29yZChvZmZzZXQpLCBwdHJTY3JhdGNoKTsKLSsgICAgcHRyID0gcHRyU2NyYXRjaDsKLSsgIH0K LSsKLSsgIHdhc21Qcm9iZUxhc3RCeXRlKGFjY2VzcywgbWVtb3J5QmFzZSwgcHRyKTsKLSsKLSsg IGFzTWFzbSgpLm1lbW9yeUJhcnJpZXJCZWZvcmUoYWNjZXNzLnN5bmMoKSk7Ci0rICAvLyBGbHVz aCBhbnkgcGVuZGluZyBjb25zdGFudCBwb29sIGVudHJpZXMgYmVmb3JlIHJlY29yZGluZyB0aGUg dHJhcCBzaXRlLAotKyAgLy8gb3RoZXJ3aXNlIGEgcG9vbCBib2R5IGluc2VydGVkIGJldHdlZW4g dGhlIHJlY29yZGVkIG9mZnNldCBhbmQgdGhlCi0rICAvLyBlbWl0dGVkIGxvYWQgc2hpZnRzIHRo ZSBsb2FkIGFuZCBsZWF2ZXMgdGhlIHBvb2wgZ3VhcmQgYnJhbmNoIGF0IHRoZQotKyAgLy8gcmVj b3JkZWQgb2Zmc2V0IChTdW1tYXJpemVUcmFwSW5zdHJ1Y3Rpb24gdGhlbiByZWplY3RzIHRoZSB0 cmFwIHNpdGUpLgotKyAgbV9idWZmZXIuZmx1c2hQb29sKCk7Ci0rICBhcHBlbmQoYWNjZXNzLCB3 YXNtOjpUcmFwTWFjaGluZUluc25Gb3JMb2FkKFNjYWxhcjo6Ynl0ZVNpemUoYWNjZXNzLnR5cGUo KSkpLAotKyAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpKTsKLSsK LSsgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewotKyAgICBjYXNlIFNjYWxhcjo6SW50ODoKLSsg ICAgICBhc19sYnp4KG91dHB1dC5ncHIoKSwgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICBhc19l eHRzYihvdXRwdXQuZ3ByKCksIG91dHB1dC5ncHIoKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2UgU2NhbGFyOjpVaW50ODoKLSsgICAgICBhc19sYnp4KG91dHB1dC5ncHIoKSwgbWVtb3J5QmFz ZSwgcHRyKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OkludDE2OgotKyAgICAg IGFzX2xoYXgob3V0cHV0LmdwcigpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIFNjYWxhcjo6VWludDE2OgotKyAgICAgIGFzX2xoengob3V0cHV0LmdwcigpLCBt ZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6SW50MzI6 Ci0rICAgIGNhc2UgU2NhbGFyOjpVaW50MzI6Ci0rICAgICAgYXNfbHd6eChvdXRwdXQuZ3ByKCks IG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAgYXNfZXh0c3cob3V0cHV0LmdwcigpLCBvdXRwdXQu Z3ByKCkpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6RmxvYXQ2NDoKLSsgICAg ICBpZiAoYWNjZXNzLmlzWmVyb0V4dGVuZFNpbWQxMjhMb2FkKCkgfHwgYWNjZXNzLmlzU3BsYXRT aW1kMTI4TG9hZCgpIHx8Ci0rICAgICAgICAgIGFjY2Vzcy5pc1dpZGVuU2ltZDEyOExvYWQoKSkg ewotKyAgICAgICAgLy8gbGZkeCBpcyBYLWZvcm0gc2NhbGFyIEZQIOKAlCBlbmNvZGVzIG9ubHkg NS1iaXQgRlJULCBzbyBhCi0rICAgICAgICAvLyBTaW1kMTI4IGRlc3QgKGVuY29kaW5nIDMyKykg Y29ycnVwdHMgdGhlIG9wY29kZS4gQnJpZGdlCi0rICAgICAgICAvLyB0aHJvdWdoIFNjcmF0Y2hE b3VibGVSZWcgKEZQUiBmMCwgZW5jb2RpbmcgMCkuCi0rICAgICAgICBTY3JhdGNoRG91YmxlU2Nv cGUgZHNjcmF0Y2goYXNNYXNtKCkpOwotKyAgICAgICAgYXNfbGZkeChkc2NyYXRjaCwgbWVtb3J5 QmFzZSwgcHRyKTsKLSsgICAgICAgIGlmIChhY2Nlc3MuaXNaZXJvRXh0ZW5kU2ltZDEyOExvYWQo KSkgewotKyAgICAgICAgICAvLyBMb2FkZWQgdmFsdWUgZ29lcyB0byBCRSBkdzEgKD0gTEUgZHcw ID0gbGFuZSAwKTsgQkUgZHcwID0gMC4KLSsgICAgICAgICAgYXNfeHhseG9yKFNjcmF0Y2hTaW1k MTI4UmVnLCBTY3JhdGNoU2ltZDEyOFJlZywgU2NyYXRjaFNpbWQxMjhSZWcpOwotKyAgICAgICAg ICBhc194eHBlcm1kaShvdXRwdXQuZnB1KCksIFNjcmF0Y2hTaW1kMTI4UmVnLCBkc2NyYXRjaCwg MCk7Ci0rICAgICAgICB9IGVsc2UgaWYgKGFjY2Vzcy5pc1NwbGF0U2ltZDEyOExvYWQoKSkgewot KyAgICAgICAgICBhc194eHBlcm1kaShvdXRwdXQuZnB1KCksIGRzY3JhdGNoLCBkc2NyYXRjaCwg MCk7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAvLyB3aWRlbjogcGxhY2UgbG9hZGVk IDY0IGJpdHMgaW4gTEUgZHcwICg9IEJFIGR3MSkgZm9yIHdpZGVuTG93LgotKyAgICAgICAgICBh c194eHBlcm1kaShvdXRwdXQuZnB1KCksIGRzY3JhdGNoLCBkc2NyYXRjaCwgMik7Ci0rICAgICAg ICAgIHN3aXRjaCAoYWNjZXNzLndpZGVuU2ltZE9wKCkpIHsKLSsgICAgICAgICAgICBjYXNlIHdh c206OlNpbWRPcDo6VjEyOExvYWQ4eDhTOgotKyAgICAgICAgICAgICAgYXNNYXNtKCkud2lkZW5M b3dJbnQ4eDE2KG91dHB1dC5mcHUoKSwgb3V0cHV0LmZwdSgpKTsKLSsgICAgICAgICAgICAgIGJy ZWFrOwotKyAgICAgICAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9hZDh4OFU6Ci0rICAg ICAgICAgICAgICBhc01hc20oKS51bnNpZ25lZFdpZGVuTG93SW50OHgxNihvdXRwdXQuZnB1KCks IG91dHB1dC5mcHUoKSk7Ci0rICAgICAgICAgICAgICBicmVhazsKLSsgICAgICAgICAgICBjYXNl IHdhc206OlNpbWRPcDo6VjEyOExvYWQxNng0UzoKLSsgICAgICAgICAgICAgIGFzTWFzbSgpLndp ZGVuTG93SW50MTZ4OChvdXRwdXQuZnB1KCksIG91dHB1dC5mcHUoKSk7Ci0rICAgICAgICAgICAg ICBicmVhazsKLSsgICAgICAgICAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOExvYWQxNng0VToK LSsgICAgICAgICAgICAgIGFzTWFzbSgpLnVuc2lnbmVkV2lkZW5Mb3dJbnQxNng4KG91dHB1dC5m cHUoKSwgb3V0cHV0LmZwdSgpKTsKLSsgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9hZDMyeDJTOgotKyAgICAgICAgICAgICAgYXNNYXNt KCkud2lkZW5Mb3dJbnQzMng0KG91dHB1dC5mcHUoKSwgb3V0cHV0LmZwdSgpKTsKLSsgICAgICAg ICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9hZDMy eDJVOgotKyAgICAgICAgICAgICAgYXNNYXNtKCkudW5zaWduZWRXaWRlbkxvd0ludDMyeDQob3V0 cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCkpOwotKyAgICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAg ICAgICAgZGVmYXVsdDoKLSsgICAgICAgICAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCB3aWRl biBvcCIpOwotKyAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIHsKLSsgICAg ICAgIGFzX2xmZHgob3V0cHV0LmZwdSgpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIH0KLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OkZsb2F0MzI6Ci0rICAgICAgaWYgKGFjY2Vz cy5pc1plcm9FeHRlbmRTaW1kMTI4TG9hZCgpKSB7Ci0rICAgICAgICAvLyB2MTI4LmxvYWQzMl96 ZXJvOiBsb2FkIDMyIHJhdyBiaXRzIGludG8gbGFuZSAwLCB6ZXJvIHRoZSByZXN0LgotKyAgICAg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwotKyAgICAgICAgUmVn aXN0ZXIgdG1wID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAgICAgYXNfbHd6eCh0bXAsIG1lbW9y eUJhc2UsIHB0cik7Ci0rICAgICAgICBhc194eGx4b3Iob3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1 KCksIG91dHB1dC5mcHUoKSk7Ci0rICAgICAgICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgICAg ICAgYXNfbXR2c3J3cyhTY3JhdGNoU2ltZDEyOFJlZywgdG1wKTsKLSsgICAgICAgICAgYXNfeHhp bnNlcnR3KG91dHB1dC5mcHUoKSwgU2NyYXRjaFNpbWQxMjhSZWcsIDEyKTsKLSsgICAgICAgIH0g ZWxzZSB7Ci0rICAgICAgICAgIC8vIFBPV0VSODogbXR2c3JkIHB1dHMgdmFsdWUgaW4gQkUgZHcw IGxvdyAzMiBiaXRzLgotKyAgICAgICAgICAvLyB4eHBlcm1kaShkZXN0LCB6ZXJvLCBzY3JhdGNo LCAwKSA9IHt6ZXJvW2R3MF0sIHNjcmF0Y2hbZHcwXX0KLSsgICAgICAgICAgLy8gaW4gQkUsIHBs YWNpbmcgdGhlIHZhbHVlIGluIExFIHdvcmQgMCB3aXRoIHRoZSByZXN0IHplcm8uCi0rICAgICAg ICAgIGFzX210dnNyZChTY3JhdGNoU2ltZDEyOFJlZywgdG1wKTsKLSsgICAgICAgICAgYXNfeHhw ZXJtZGkob3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCksIFNjcmF0Y2hTaW1kMTI4UmVnLCAwKTsK LSsgICAgICAgIH0KLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgYXNfbGZzeChvdXRwdXQuZnB1 KCksIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IFNjYWxhcjo6U2ltZDEyODoKLSsgICAgICBpZiAoSGFzUE9XRVI5KCkpIHsKLSsgICAgICAgIGFz X2x4dngob3V0cHV0LmZwdSgpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIH0gZWxzZSB7Ci0r ICAgICAgICBhc19seHZkMngob3V0cHV0LmZwdSgpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAg ICAgYXNfeHhwZXJtZGkob3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCksIG91dHB1dC5mcHUoKSwg Mik7Ci0rICAgICAgfQotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9D UkFTSCgidW5leHBlY3RlZCBhcnJheSB0eXBlIik7Ci0rICB9Ci0rCi0rICBhc01hc20oKS5tZW1v cnlCYXJyaWVyQWZ0ZXIoYWNjZXNzLnN5bmMoKSk7Ci0rfQotKwotK3ZvaWQgTWFjcm9Bc3NlbWJs ZXJQUEM2NENvbXBhdDo6d2FzbVN0b3JlSW1wbCgKLSsgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNj ZXNzRGVzYyYgYWNjZXNzLCBBbnlSZWdpc3RlciB2YWx1ZSwKLSsgICAgUmVnaXN0ZXIgbWVtb3J5 QmFzZSwgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJTY3JhdGNoKSB7Ci0rICBhY2Nlc3MuYXNz ZXJ0T2Zmc2V0SW5HdWFyZFBhZ2VzKCk7Ci0rICB1aW50MzJfdCBvZmZzZXQgPSBhY2Nlc3Mub2Zm c2V0MzIoKTsKLSsgIE1PWl9BU1NFUlRfSUYob2Zmc2V0LCBwdHJTY3JhdGNoICE9IEludmFsaWRS ZWcpOwotKwotKyAgaWYgKG9mZnNldCkgewotKyAgICBhc01hc20oKS5hZGRQdHIoSW1tV29yZChv ZmZzZXQpLCBwdHJTY3JhdGNoKTsKLSsgICAgcHRyID0gcHRyU2NyYXRjaDsKLSsgIH0KLSsKLSsg IHdhc21Qcm9iZUxhc3RCeXRlKGFjY2VzcywgbWVtb3J5QmFzZSwgcHRyKTsKLSsKLSsgIGFzTWFz bSgpLm1lbW9yeUJhcnJpZXJCZWZvcmUoYWNjZXNzLnN5bmMoKSk7Ci0rICAvLyBSZWNvcmQgdHJh cCBzaXRlIGF0IHRoZSBmYXVsdGluZyBtZW1vcnkgaW5zdHJ1Y3Rpb24uIEZvciBQOCBTaW1kMTI4 Ci0rICAvLyBzdG9yZSwgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uIChzdHh2ZDJ4KSBpcyBhZnRl ciBhIGJ5dGUtc3dhcAotKyAgLy8gKHh4cGVybWRpKSwgc28gd2UgZGVmZXIgdGhlIHRyYXAgc2l0 ZSByZWNvcmRpbmcuCi0rICAvLyBGbHVzaCBwb29sIGZpcnN0OyBzZWUgY29tbWVudCBpbiB3YXNt TG9hZEltcGwuCi0rICBpZiAoYWNjZXNzLnR5cGUoKSAhPSBTY2FsYXI6OlNpbWQxMjggfHwgSGFz UE9XRVI5KCkpIHsKLSsgICAgbV9idWZmZXIuZmx1c2hQb29sKCk7Ci0rICAgIGFwcGVuZChhY2Nl c3MsCi0rICAgICAgICAgICB3YXNtOjpUcmFwTWFjaGluZUluc25Gb3JTdG9yZShTY2FsYXI6OmJ5 dGVTaXplKGFjY2Vzcy50eXBlKCkpKSwKLSsgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChj dXJyZW50T2Zmc2V0KCkpKTsKLSsgIH0KLSsKLSsgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgewot KyAgICBjYXNlIFNjYWxhcjo6SW50ODoKLSsgICAgY2FzZSBTY2FsYXI6OlVpbnQ4OgotKyAgICAg IGFzX3N0YngodmFsdWUuZ3ByKCksIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAgYnJlYWs7Ci0r ICAgIGNhc2UgU2NhbGFyOjpJbnQxNjoKLSsgICAgY2FzZSBTY2FsYXI6OlVpbnQxNjoKLSsgICAg ICBhc19zdGh4KHZhbHVlLmdwcigpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIGJyZWFrOwot KyAgICBjYXNlIFNjYWxhcjo6SW50MzI6Ci0rICAgIGNhc2UgU2NhbGFyOjpVaW50MzI6Ci0rICAg ICAgYXNfc3R3eCh2YWx1ZS5ncHIoKSwgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICBicmVhazsK LSsgICAgY2FzZSBTY2FsYXI6OkludDY0OgotKyAgICAgIGFzX3N0ZHgodmFsdWUuZ3ByKCksIG1l bW9yeUJhc2UsIHB0cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpGbG9hdDY0 OgotKyAgICAgIGFzX3N0ZmR4KHZhbHVlLmZwdSgpLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6RmxvYXQzMjoKLSsgICAgICBhc19zdGZzeCh2YWx1 ZS5mcHUoKSwgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2Fs YXI6OlNpbWQxMjg6Ci0rICAgICAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgICAgICBhc19zdHh2 eCh2YWx1ZS5mcHUoKSwgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAg ICAgYXNfeHhwZXJtZGkoU2NyYXRjaFNpbWQxMjhSZWcsIHZhbHVlLmZwdSgpLCB2YWx1ZS5mcHUo KSwgMik7Ci0rICAgICAgICBtX2J1ZmZlci5mbHVzaFBvb2woKTsgIC8vIHNlZSBjb21tZW50IGlu IHdhc21Mb2FkSW1wbAotKyAgICAgICAgYXBwZW5kKGFjY2VzcywKLSsgICAgICAgICAgICAgICB3 YXNtOjpUcmFwTWFjaGluZUluc25Gb3JTdG9yZShTY2FsYXI6OmJ5dGVTaXplKGFjY2Vzcy50eXBl KCkpKSwKLSsgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQoY3VycmVudE9mZnNldCgp KSk7Ci0rICAgICAgICBhc19zdHh2ZDJ4KFNjcmF0Y2hTaW1kMTI4UmVnLCBtZW1vcnlCYXNlLCBw dHIpOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pf Q1JBU0goInVuZXhwZWN0ZWQgYXJyYXkgdHlwZSIpOwotKyAgfQotKwotKyAgYXNNYXNtKCkubWVt b3J5QmFycmllckFmdGVyKGFjY2Vzcy5zeW5jKCkpOwotK30KLSsKLSt2b2lkIE1hY3JvQXNzZW1i bGVyUFBDNjRDb21wYXQ6Ondhc21Mb2FkSTY0SW1wbCgKLSsgICAgY29uc3Qgd2FzbTo6TWVtb3J5 QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlciBtZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIsCi0r ICAgIFJlZ2lzdGVyIHB0clNjcmF0Y2gsIFJlZ2lzdGVyNjQgb3V0cHV0KSB7Ci0rICB1aW50MzJf dCBvZmZzZXQgPSBhY2Nlc3Mub2Zmc2V0MzIoKTsKLSsgIE1PWl9BU1NFUlRfSUYob2Zmc2V0LCBw dHJTY3JhdGNoICE9IEludmFsaWRSZWcpOwotKwotKyAgaWYgKG9mZnNldCkgewotKyAgICBhc01h c20oKS5hZGRQdHIoSW1tV29yZChvZmZzZXQpLCBwdHJTY3JhdGNoKTsKLSsgICAgcHRyID0gcHRy U2NyYXRjaDsKLSsgIH0KLSsKLSsgIHdhc21Qcm9iZUxhc3RCeXRlKGFjY2VzcywgbWVtb3J5QmFz ZSwgcHRyKTsKLSsKLSsgIGFzTWFzbSgpLm1lbW9yeUJhcnJpZXJCZWZvcmUoYWNjZXNzLnN5bmMo KSk7Ci0rICBtX2J1ZmZlci5mbHVzaFBvb2woKTsgIC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2Fk SW1wbAotKyAgYXBwZW5kKGFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJbnNuRm9yTG9hZChTY2Fs YXI6OmJ5dGVTaXplKGFjY2Vzcy50eXBlKCkpKSwKLSsgICAgICAgICBGYXVsdGluZ0NvZGVPZmZz ZXQoY3VycmVudE9mZnNldCgpKSk7Ci0rCi0rICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKLSsg ICAgY2FzZSBTY2FsYXI6OkludDg6Ci0rICAgICAgYXNfbGJ6eChvdXRwdXQucmVnLCBtZW1vcnlC YXNlLCBwdHIpOwotKyAgICAgIGFzX2V4dHNiKG91dHB1dC5yZWcsIG91dHB1dC5yZWcpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6VWludDg6Ci0rICAgICAgYXNfbGJ6eChvdXRw dXQucmVnLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxh cjo6SW50MTY6Ci0rICAgICAgYXNfbGhheChvdXRwdXQucmVnLCBtZW1vcnlCYXNlLCBwdHIpOwot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6VWludDE2OgotKyAgICAgIGFzX2xoengo b3V0cHV0LnJlZywgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBT Y2FsYXI6OkludDMyOgotKyAgICAgIGFzX2x3engob3V0cHV0LnJlZywgbWVtb3J5QmFzZSwgcHRy KTsKLSsgICAgICBhc19leHRzdyhvdXRwdXQucmVnLCBvdXRwdXQucmVnKTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSBTY2FsYXI6OlVpbnQzMjoKLSsgICAgICBhc19sd3p4KG91dHB1dC5yZWcs IG1lbW9yeUJhc2UsIHB0cik7Ci0rICAgICAgLy8gWmVyby1leHRlbmRlZCBieSBsd3p4IGFscmVh ZHkKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OkludDY0OgotKyAgICAgIGFzX2xk eChvdXRwdXQucmVnLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZh dWx0OgotKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBhcnJheSB0eXBlIik7Ci0rICB9Ci0r Ci0rICBhc01hc20oKS5tZW1vcnlCYXJyaWVyQWZ0ZXIoYWNjZXNzLnN5bmMoKSk7Ci0rfQotKwot K3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6d2FzbVN0b3JlSTY0SW1wbCgKLSsgICAg Y29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlcjY0IHZhbHVlLCBS ZWdpc3RlciBtZW1vcnlCYXNlLAotKyAgICBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0 Y2gpIHsKLSsgIHVpbnQzMl90IG9mZnNldCA9IGFjY2Vzcy5vZmZzZXQzMigpOwotKyAgTU9aX0FT U0VSVF9JRihvZmZzZXQsIHB0clNjcmF0Y2ggIT0gSW52YWxpZFJlZyk7Ci0rCi0rICBpZiAob2Zm c2V0KSB7Ci0rICAgIGFzTWFzbSgpLmFkZFB0cihJbW1Xb3JkKG9mZnNldCksIHB0clNjcmF0Y2gp OwotKyAgICBwdHIgPSBwdHJTY3JhdGNoOwotKyAgfQotKwotKyAgd2FzbVByb2JlTGFzdEJ5dGUo YWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIpOwotKwotKyAgYXNNYXNtKCkubWVtb3J5QmFycmllckJl Zm9yZShhY2Nlc3Muc3luYygpKTsKLSsgIG1fYnVmZmVyLmZsdXNoUG9vbCgpOyAgLy8gc2VlIGNv bW1lbnQgaW4gd2FzbUxvYWRJbXBsCi0rICBhcHBlbmQoYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGlu ZUluc25Gb3JTdG9yZShTY2FsYXI6OmJ5dGVTaXplKGFjY2Vzcy50eXBlKCkpKSwKLSsgICAgICAg ICBGYXVsdGluZ0NvZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKSk7Ci0rCi0rICBzd2l0Y2ggKGFj Y2Vzcy50eXBlKCkpIHsKLSsgICAgY2FzZSBTY2FsYXI6OkludDg6Ci0rICAgIGNhc2UgU2NhbGFy OjpVaW50ODoKLSsgICAgICBhc19zdGJ4KHZhbHVlLnJlZywgbWVtb3J5QmFzZSwgcHRyKTsKLSsg ICAgICBicmVhazsKLSsgICAgY2FzZSBTY2FsYXI6OkludDE2OgotKyAgICBjYXNlIFNjYWxhcjo6 VWludDE2OgotKyAgICAgIGFzX3N0aHgodmFsdWUucmVnLCBtZW1vcnlCYXNlLCBwdHIpOwotKyAg ICAgIGJyZWFrOwotKyAgICBjYXNlIFNjYWxhcjo6SW50MzI6Ci0rICAgIGNhc2UgU2NhbGFyOjpV aW50MzI6Ci0rICAgICAgYXNfc3R3eCh2YWx1ZS5yZWcsIG1lbW9yeUJhc2UsIHB0cik7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIGNhc2UgU2NhbGFyOjpJbnQ2NDoKLSsgICAgICBhc19zdGR4KHZhbHVl LnJlZywgbWVtb3J5QmFzZSwgcHRyKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsg ICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgYXJyYXkgdHlwZSIpOwotKyAgfQotKwotKyAgYXNN YXNtKCkubWVtb3J5QmFycmllckFmdGVyKGFjY2Vzcy5zeW5jKCkpOwotK30KLSsKLSt2b2lkIE1h Y3JvQXNzZW1ibGVyOjp3YXNtTG9hZChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nl c3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWVtb3J5QmFzZSwg UmVnaXN0ZXIgcHRyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHB0 clNjcmF0Y2gsIEFueVJlZ2lzdGVyIG91dHB1dCkgewotKyAgd2FzbUxvYWRJbXBsKGFjY2Vzcywg bWVtb3J5QmFzZSwgcHRyLCBwdHJTY3JhdGNoLCBvdXRwdXQpOwotK30KLSsKLSt2b2lkIE1hY3Jv QXNzZW1ibGVyOjp3YXNtTG9hZEk2NChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nl c3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWVtb3J5QmFz ZSwgUmVnaXN0ZXIgcHRyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIHB0clNjcmF0Y2gsIFJlZ2lzdGVyNjQgb3V0cHV0KSB7Ci0rICB3YXNtTG9hZEk2NEltcGwo YWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIsIHB0clNjcmF0Y2gsIG91dHB1dCk7Ci0rfQotKwotK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21TdG9yZShjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNj JiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIHZh bHVlLCBSZWdpc3RlciBtZW1vcnlCYXNlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0Y2gpIHsKLSsgIHdhc21TdG9yZUltcGwo YWNjZXNzLCB2YWx1ZSwgbWVtb3J5QmFzZSwgcHRyLCBwdHJTY3JhdGNoKTsKLSt9Ci0rCi0rdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVN0b3JlSTY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rl c2MmIGFjY2VzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2 NCB2YWx1ZSwgUmVnaXN0ZXIgbWVtb3J5QmFzZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJTY3JhdGNoKSB7Ci0rICB3YXNtU3Rv cmVJNjRJbXBsKGFjY2VzcywgdmFsdWUsIG1lbW9yeUJhc2UsIHB0ciwgcHRyU2NyYXRjaCk7Ci0r fQotKwotKy8vfX19IGNoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlCi0rCi0rfSAgLy8gbmFtZXNw YWNlIGppdAotK30gIC8vIG5hbWVzcGFjZSBqcwotKwotKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1E Ci0rLy8gc3RhdGljCi0rYm9vbCBNYWNyb0Fzc2VtYmxlcjo6TXVzdE1hc2tTaGlmdENvdW50U2lt ZDEyOCh3YXNtOjpTaW1kT3Agb3AsIGludDMyX3QqIG1hc2spIHsKLSsgIHJldHVybiBmYWxzZTsK LSt9Ci0rI2VuZGlmCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fzc2VtYmxl ci1wcGM2NC5oIGIvanMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5oCi1uZXcg ZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi5iYzIxNDNiNjc0NjUKLS0tLSAv ZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQuaAot QEAgLTAsMCArMSwyMDMxIEBACi0rLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRl bnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotKyAqIHZpbTogc2V0IHRz PTggc3RzPTIgZXQgc3c9MiB0dz04MDoKLSsgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3Vi amVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCi0rICogTGljZW5zZSwgdi4g Mi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwot KyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIu MC8uICovCi0rCi0rI2lmbmRlZiBqaXRfcHBjNjRfTWFjcm9Bc3NlbWJsZXJfcHBjNjRfaAotKyNk ZWZpbmUgaml0X3BwYzY0X01hY3JvQXNzZW1ibGVyX3BwYzY0X2gKLSsKLSsjaW5jbHVkZSAiaml0 L01vdmVSZXNvbHZlci5oIgotKyNpbmNsdWRlICJqaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0Lmgi Ci0rI2luY2x1ZGUgIndhc20vV2FzbUJ1aWx0aW5zLmgiCi0rCi0rbmFtZXNwYWNlIGpzIHsKLStu YW1lc3BhY2Ugaml0IHsKLSsKLStpbmxpbmUgYm9vbCBpc19pbnROKGludDY0X3QgeCwgdW5zaWdu ZWQgbikgewotKyAgTU9aX0FTU0VSVCgoMCA8IG4pICYmIChuIDwgNjQpKTsKLSsgIGludDY0X3Qg bGltaXQgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8PCAobiAtIDEpOwotKyAgcmV0dXJuICgt bGltaXQgPD0geCkgJiYgKHggPCBsaW1pdCk7Ci0rfQotKwotK2lubGluZSBib29sIGlzX3VpbnRO KHVpbnQ2NF90IHgsIHVuc2lnbmVkIG4pIHsKLSsgIE1PWl9BU1NFUlQoKDAgPCBuKSAmJiAobiA8 IDY0KSk7Ci0rICByZXR1cm4gISh4ID4+IG4pOwotK30KLSsKLSsvLyBlbnRlck5vUG9vbCgpIGd1 YXJkIHNpemVzLiBJbmhpYml0aW5nIHRoZSBjb25zdGFudCBwb29sIGtlZXBzIHRoZXNlCi0rLy8g c3RhbnphcyBhdCBhIGZpeGVkIGluc3RydWN0aW9uIGNvdW50LCB3aGljaCBwYXRjaGVycyBhbmQg bG9uZy1icmFuY2gKLSsvLyByZXNvbHZlcnMgcmVseSBvbi4gRWFjaCBjb25zdGFudCBuYW1lcyBh IGRpc3RpbmN0IHN0YW56YSBzaGFwZTsgc2VlCi0rLy8gdGhlIGVtaXR0aW5nIGNhbGwgc2l0ZSBm b3IgdGhlIGV4YWN0IGxheW91dC4KLSsvLwotKy8vIGtOb1Bvb2xMb2FkNjRTdGFuemFJbnNucyAo OCk6IGVtaXRMb2FkNjRTdGFuemEgYm9keSDigJQgOCBOT1BzIHRoYXQKLSsvLyAgIFdyaXRlTG9h ZDY0SW5zdHJ1Y3Rpb25zIGxhdGVyIG92ZXJ3cml0ZXMgaW4gcGxhY2UuIFR3byBzaGFwZXMgc2hh cmUKLSsvLyAgIHRoZSBzYW1lIDgtc2xvdCBmb290cHJpbnQgd2l0aCB0aGUgLnF1YWQgZml4ZWQg YXQgc2xvdHMgWzYuLjddOgotKy8vICAgICAtIFBPV0VSOSsgKEhhc1BPV0VSOSgpKTogYWRkcGNp cyArIGxkICsgYiArIDMgTk9QcyAoMiBkeW5hbWljIGluc25zLAotKy8vICAgICAgIG5vIExSIGNs b2JiZXIpLiBQcmVmZXJyZWQgcGF0aC4KLSsvLyAgICAgLSBQT1dFUjggZmFsbGJhY2s6IG1mbHIv YmNsL21mbHIvbXRsci9sZC9iIExSLWJvdW5jaW5nIHNlcXVlbmNlCi0rLy8gICAgICAgKDYgZHlu YW1pYyBpbnNucywgUkFTLXRocmFzaGluZyDigJQga2VwdCBvbmx5IGJlY2F1c2UgUDggaGFzIG5v Ci0rLy8gICAgICAgYWRkcGNpcykuCi0rLy8KLSsvLyBrTm9Qb29sUGF0Y2hhYmxlQnJhbmNoSW5z bnMgKDEwKTogcGF0Y2hhYmxlIGZhciBjYWxsIC8ganVtcCAvCi0rLy8gICB1bmNvbmRpdGlvbmFs IGJyYW5jaC4gVGhyZWUgYWx0ZXJuYXRpdmUgc2hhcGVzLCBhbGwgZml0dGluZyB0aGUKLSsvLyAg IHNhbWUgYnVkZ2V0OgotKy8vICAgICAtIGxvYWQ2NCBzdGFuemEgKDgpICsgbXRjdHIgKyBiY3Ry W2xdICA9IDEwICAoYm91bmQgY2FsbC9qdW1wKQotKy8vICAgICAtIDkgTk9QcyArIGJsICAgICAg ICAgICAgICAgICAgICAgICAgICA9IDEwICAoc2hvcnQgYm91bmQgY2FsbCkKLSsvLyAgICAgLSB4 c190cmFwX3RhZ2dlZChUQUcpICsgY2hhaW4gKyA4IE5PUHMgPSAxMCAgKGZ3ZC1yZWYgc3Rhbnph KQotKy8vCi0rLy8ga05vUG9vbENvbmRMb25nQnJhbmNoSW5zbnNQOE1heCAoMTQpOiBjb25kaXRp b25hbCBsb25nIGJyYW5jaCwgUE9XRVI4Ci0rLy8gICBPdmVyZmxvdyB3b3JzdCBjYXNlLiBQT1dF UjggaGFzIG5vIG1jcnhyeCBzbyBvdmVyZmxvdy9jYXJyeSB0ZXN0IGlzCi0rLy8gICBtZnhlcity bHdpbm0rbXRjcmYgKDMgaW5zbnMpIG9uIHRvcCBvZiB0aGUgYmFzZSBzaGFwZS4gQnVkZ2V0ID0K LSsvLyAgIDMgKFhFUiBpbnNwZWN0aW9uKSArIDEgKGJjKSArIDggKGxvYWQ2NCBzdGFuemEpICsg MiAobXRjdHIrYmN0cikgPSAxNC4KLStzdGF0aWMgY29uc3RleHByIHNpemVfdCBrTm9Qb29sTG9h ZDY0U3RhbnphSW5zbnMgPSA4OwotK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtOb1Bvb2xQYXRj aGFibGVCcmFuY2hJbnNucyA9IDEwOwotK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtOb1Bvb2xD b25kTG9uZ0JyYW5jaEluc25zUDhNYXggPSAxNDsKLSsKLStlbnVtIExvYWRTdG9yZVNpemUgewot KyAgU2l6ZUJ5dGUgPSA4LAotKyAgU2l6ZUhhbGZXb3JkID0gMTYsCi0rICBTaXplV29yZCA9IDMy LAotKyAgU2l6ZURvdWJsZSA9IDY0Ci0rfTsKLSsKLStlbnVtIExvYWRTdG9yZUV4dGVuc2lvbiB7 IFplcm9FeHRlbmQgPSAwLCBTaWduRXh0ZW5kID0gMSB9OwotKwotK3N0YXRpYyBSZWdpc3RlciBD YWxsUmVnID0gcjEyOwotKwotK3N0cnVjdCBJbW1TaGlmdGVkVGFnIDogcHVibGljIEltbVdvcmQg ewotKyAgZXhwbGljaXQgSW1tU2hpZnRlZFRhZyhKU1ZhbHVlU2hpZnRlZFRhZyBzaHRhZykgOiBJ bW1Xb3JkKCh1aW50cHRyX3Qpc2h0YWcpIHt9Ci0rICBleHBsaWNpdCBJbW1TaGlmdGVkVGFnKEpT VmFsdWVUeXBlIHR5cGUpCi0rICAgICAgOiBJbW1Xb3JkKCgodWludHB0cl90KUpTVkFMX1RZUEVf VE9fU0hJRlRFRF9UQUcodHlwZSkpKSB7fQotK307Ci0rCi0rc3RydWN0IEltbVRhZyA6IHB1Ymxp YyBJbW0zMiB7Ci0rICBleHBsaWNpdCBJbW1UYWcoSlNWYWx1ZVRhZyB0YWcpIDogSW1tMzIodGFn KSB7fQotK307Ci0rCi0rY2xhc3MgU2NyYXRjaFRhZ1Njb3BlIHsKLSsgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzXzsKLSsgIFJlZ2lzdGVyIHNjcmF0Y2hfOwotKyAgYm9vbCBvd25lZF87 Ci0rICBtb3ppbGxhOjpEZWJ1Z09ubHk8Ym9vbD4gcmVsZWFzZWRfOwotKwotKyBwdWJsaWM6Ci0r ICBTY3JhdGNoVGFnU2NvcGUoQXNzZW1ibGVyJiBtYXNtLCBjb25zdCBWYWx1ZU9wZXJhbmQmKQot KyAgICAgIDogdGVtcHNfKG1hc20pLCBvd25lZF8odHJ1ZSksIHJlbGVhc2VkXyhmYWxzZSkgewot KyAgICBzY3JhdGNoXyA9IHRlbXBzXy5BY3F1aXJlKCk7Ci0rICB9Ci0rCi0rICBvcGVyYXRvciBS ZWdpc3RlcigpIHsKLSsgICAgTU9aX0FTU0VSVCghcmVsZWFzZWRfKTsKLSsgICAgcmV0dXJuIHNj cmF0Y2hfOwotKyAgfQotKwotKyAgdm9pZCByZWxlYXNlKCkgewotKyAgICBNT1pfQVNTRVJUKCFy ZWxlYXNlZF8pOwotKyAgICByZWxlYXNlZF8gPSB0cnVlOwotKyAgICBpZiAob3duZWRfKSB7Ci0r ICAgICAgdGVtcHNfLlJlbGVhc2Uoc2NyYXRjaF8pOwotKyAgICAgIG93bmVkXyA9IGZhbHNlOwot KyAgICB9Ci0rICB9Ci0rCi0rICB2b2lkIHJlYWNxdWlyZSgpIHsKLSsgICAgTU9aX0FTU0VSVChy ZWxlYXNlZF8pOwotKyAgICByZWxlYXNlZF8gPSBmYWxzZTsKLSsgICAgaWYgKCFvd25lZF8pIHsK LSsgICAgICBzY3JhdGNoXyA9IHRlbXBzXy5BY3F1aXJlKCk7Ci0rICAgICAgb3duZWRfID0gdHJ1 ZTsKLSsgICAgfQotKyAgfQotK307Ci0rCi0rY2xhc3MgU2NyYXRjaFRhZ1Njb3BlUmVsZWFzZSB7 Ci0rICBTY3JhdGNoVGFnU2NvcGUqIHRzXzsKLSsKLSsgcHVibGljOgotKyAgZXhwbGljaXQgU2Ny YXRjaFRhZ1Njb3BlUmVsZWFzZShTY3JhdGNoVGFnU2NvcGUqIHRzKSA6IHRzXyh0cykgewotKyAg ICB0c18tPnJlbGVhc2UoKTsKLSsgIH0KLSsgIH5TY3JhdGNoVGFnU2NvcGVSZWxlYXNlKCkgeyB0 c18tPnJlYWNxdWlyZSgpOyB9Ci0rfTsKLSsKLStjbGFzcyBNYWNyb0Fzc2VtYmxlclBQQzY0IDog cHVibGljIEFzc2VtYmxlciB7Ci0rIHByb3RlY3RlZDoKLSsgIE1hY3JvQXNzZW1ibGVyJiBhc01h c20oKTsKLSsgIGNvbnN0IE1hY3JvQXNzZW1ibGVyJiBhc01hc20oKSBjb25zdDsKLSt9OwotKwot K2NsYXNzIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJQ UEM2NCB7Ci0rIHB1YmxpYzoKLSsgIHVzaW5nIE1hY3JvQXNzZW1ibGVyUFBDNjQ6Ok1hY3JvQXNz ZW1ibGVyUFBDNjQ7Ci0rCi0rICBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0KCkge30KLSsKLSsg IGJvb2wgYnVpbGRPT0xGYWtlRXhpdEZyYW1lKHZvaWQqIGZha2VSZXR1cm5BZGRyKTsKLSsKLSsg IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAgLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMKLSsKLSsgIHZvaWQgY29udmVy dEJvb2xUb0ludDMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBhc19ybHdp bm0oZGVzdCwgc3JjLCAwLCAzMSwgMzEpOwotKyAgfQotKyAgdm9pZCBjb252ZXJ0SW50MzJUb0Rv dWJsZShSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgICAvLyBtdHZzcndh OiBWU1JbZGVzdF0uZHcwID0gc2lnbl9leHRfNjQoc3JjWzMyOjYzXSk7IFA4KyAoSVNBIDIuMDcp LgotKyAgICAvLyBSZXBsYWNlcyBleHRzdyArIG10dnNyZCAoMiBpbnNucyArIHNjcmF0Y2ggR1BS KSB3aXRoIDEgaW5zbi4KLSsgICAgYXNfbXR2c3J3YShkZXN0LCBzcmMpOwotKyAgICBhc19mY2Zp ZChkZXN0LCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoY29uc3Qg QWRkcmVzcyYgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgLy8gbGZpd2F4IChQNysp OiBGUFIuZHdbMF0gPSBzaWduX2V4dF82NChNRU1bYWRkciwgNF0pLiBYLWZvcm0gaW5kZXhlZAot KyAgICAvLyDigJQgbm8gaW1tZWRpYXRlIG9mZnNldCwgc28gd2hlbiBvZmZzZXQgIT0gMCB3ZSBh ZGQgaXQgaW50byBhIHNjcmF0Y2gKLSsgICAgLy8gZmlyc3QuIFJlcGxhY2VzIGx3eiArIGV4dHN3 ICsgbXR2c3JkIHdpdGggbGZpd2F4IChvbmUgaW5zbikgcGx1cwotKyAgICAvLyBvcHRpb25hbCBh ZGRyZXNzIGFkZC4KLSsgICAgaWYgKHNyYy5vZmZzZXQgPT0gMCkgewotKyAgICAgIGFzX2xmaXdh eChkZXN0LCByMCwgc3JjLmJhc2UpOwotKyAgICB9IGVsc2UgewotKyAgICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgICAgIGlmIChpc19pbnROKHNyYy5vZmZzZXQsIDE2KSkgewotKyAg ICAgICAgYXNfYWRkaShzY3JhdGNoLCBzcmMuYmFzZSwgc3JjLm9mZnNldCk7Ci0rICAgICAgICBh c19sZml3YXgoZGVzdCwgcjAsIHNjcmF0Y2gpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAv LyBYLWZvcm0gaW5kZXhlZDogbGZpd2F4IGNvbXB1dGVzIGJhc2UgKyBzY3JhdGNoIGRpcmVjdGx5 LCBubyBhZGQuCi0rICAgICAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIHNjcmF0Y2gp OwotKyAgICAgICAgYXNfbGZpd2F4KGRlc3QsIHNyYy5iYXNlLCBzY3JhdGNoKTsKLSsgICAgICB9 Ci0rICAgIH0KLSsgICAgYXNfZmNmaWQoZGVzdCwgZGVzdCk7Ci0rICB9Ci0rICB2b2lkIGNvbnZl cnRJbnQzMlRvRG91YmxlKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBjb21wdXRlU2NhbGVkQWRkcmVz cyhzcmMsIHNjcmF0Y2gpOwotKyAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShBZGRyZXNzKHNjcmF0 Y2gsIHNyYy5vZmZzZXQpLCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgY29udmVydFVJbnQzMlRvRG91 YmxlKFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KTsKLSsgIHZvaWQgY29udmVydFVJ bnQzMlRvRmxvYXQzMihSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCk7Ci0rICB2b2lk IGNvbnZlcnREb3VibGVUb0Zsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgewotKyAgICBhc19mcnNwKGRlc3QsIHNyYyk7Ci0rICB9Ci0rICAvLyBQT1dFUjkgRlAx NiBjb252ZXJzaW9ucyAoMSBpbnNuIGVhY2gpLiBDYWxsZXIgbXVzdCBoYXZlIHZlcmlmaWVkCi0r ICAvLyBIYXNQT1dFUjkoKSDigJQgU3VwcG9ydHNGbG9hdHs2NCwzMn1UbzE2IGdhdGVzIHRoYXQu IFBQQzY0IEZQUnMgaG9sZAotKyAgLy8gZG91YmxlcyBpbnRlcm5hbGx5OyBhbiAiRlAzMi1pbi1G UFIiIGlzIGp1c3QgdGhlIEZQMzIgdmFsdWUgc3RvcmVkCi0rICAvLyBhcyBleGFjdCBGUDY0LCBz byB4c2N2ZHBocC94c2N2aHBkcCB3b3JrIGZvciBib3RoIEZQMzLihpRGUDE2IGFuZAotKyAgLy8g RlA2NOKGlEZQMTYgKEZQMTYgZml0cyBleGFjdGx5IGluIEZQMzIgd2hpY2ggZml0cyBleGFjdGx5 IGluIEZQNjQpLgotKyAgdm9pZCBjb252ZXJ0RG91YmxlVG9GbG9hdDE2KEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgTU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7 Ci0rICAgIGFzX3hzY3ZkcGhwKGRlc3QsIHNyYyk7Ci0rICB9Ci0rICB2b2lkIGNvbnZlcnRGbG9h dDE2VG9Eb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAg ICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKLSsgICAgYXNfeHNjdmhwZHAoZGVzdCwgc3JjKTsK LSsgIH0KLSsgIHZvaWQgY29udmVydEZsb2F0MzJUb0Zsb2F0MTYoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKLSsg ICAgYXNfeHNjdmRwaHAoZGVzdCwgc3JjKTsKLSsgIH0KLSsgIHZvaWQgY29udmVydEZsb2F0MTZU b0Zsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgICBN T1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKLSsgICAgYXNfeHNjdmhwZHAoZGVzdCwgc3JjKTsKLSsg IH0KLSsgIHZvaWQgY29udmVydEludDMyVG9GbG9hdDE2KFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdp c3RlciBkZXN0KSB7Ci0rICAgIE1PWl9BU1NFUlQoSGFzUE9XRVI5KCkpOwotKyAgICBjb252ZXJ0 SW50MzJUb0Zsb2F0MzIoc3JjLCBkZXN0KTsKLSsgICAgY29udmVydEZsb2F0MzJUb0Zsb2F0MTYo ZGVzdCwgZGVzdCk7Ci0rICB9Ci0rICB2b2lkIGNvbnZlcnREb3VibGVUb0ludDMyKEZsb2F0UmVn aXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LCBMYWJlbCogZmFpbCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZVplcm9DaGVjayA9IHRydWUpOwotKyAgdm9pZCBjb252 ZXJ0RG91YmxlVG9QdHIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBm YWlsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZVplcm9DaGVjayA9 IHRydWUpOwotKyAgdm9pZCBjb252ZXJ0RmxvYXQzMlRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBmYWlsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYm9vbCBuZWdhdGl2ZVplcm9DaGVjayA9IHRydWUpOwotKyAgdm9pZCBjb252ZXJ0RmxvYXQz MlRvRG91YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAg Ly8gUFBDNjQgRlBScyBob2xkIGV2ZXJ5IEZQMzIgdmFsdWUgaW4gaXRzIEZQNjQtZXF1aXZhbGVu dCByZXByZXNlbnRhdGlvbiwKLSsgICAgLy8gc28gZjY0LnByb21vdGVfZjMyIGlzIGNvbmNlcHR1 YWxseSBhIG5vLW9wIGV4Y2VwdCB0aGF0IHdhc20gcmVxdWlyZXMKLSsgICAgLy8gc05hTiBpbnB1 dHMgdG8gYmUgcXVpZXRlZC4gZnJzcCAoUm91bmQgdG8gU2luZ2xlLVByZWNpc2lvbikgaXMgdGhl Ci0rICAgIC8vIGlkZW50aXR5IGZvciBTUC1yZXByZXNlbnRhYmxlIGlucHV0cyBidXQgYXBwbGll cyBJRUVFIE5hTi1xdWlldGluZyBhcwotKyAgICAvLyBhIHNpZGUgZWZmZWN0LCByZXBsYWNpbmcg dGhlIHByaW9yIGZtciArIGZjbXB1ICsgYnJhbmNoICsgY2Fub25pY2FsLQotKyAgICAvLyBOYU4t bG9hZCAoNSsgaW5zbnMgKyBzY3JhdGNoIEdQUikgd2l0aCBhIHNpbmdsZSBpbnN0cnVjdGlvbi4g UmVzdWx0Ci0rICAgIC8vIG1hdGNoZXMgd2hhdCB4ODYgdmN2dHNzMnNkIC8gQVJNIGZjdnQgcHJv ZHVjZS4KLSsgICAgYXNfZnJzcChkZXN0LCBzcmMpOwotKyAgfQotKyAgdm9pZCBjb252ZXJ0SW50 MzJUb0Zsb2F0MzIoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgLy8g bXR2c3J3YSArIGZjZmlkczsgc2FtZSByZWNpcGUgYXMgY29udmVydEludDMyVG9Eb3VibGUoUmVn aXN0ZXIpLgotKyAgICBhc19tdHZzcndhKGRlc3QsIHNyYyk7Ci0rICAgIGFzX2ZjZmlkcyhkZXN0 LCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgY29udmVydEludDMyVG9GbG9hdDMyKGNvbnN0IEFkZHJl c3MmIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIC8vIGxmaXdheCArIGZjZmlkczsg c2FtZSByZWNpcGUgYXMgY29udmVydEludDMyVG9Eb3VibGUoQWRkcmVzcykuCi0rICAgIGlmIChz cmMub2Zmc2V0ID09IDApIHsKLSsgICAgICBhc19sZml3YXgoZGVzdCwgcjAsIHNyYy5iYXNlKTsK LSsgICAgfSBlbHNlIHsKLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhp cyk7Ci0rICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICBp ZiAoaXNfaW50TihzcmMub2Zmc2V0LCAxNikpIHsKLSsgICAgICAgIGFzX2FkZGkoc2NyYXRjaCwg c3JjLmJhc2UsIHNyYy5vZmZzZXQpOwotKyAgICAgICAgYXNfbGZpd2F4KGRlc3QsIHIwLCBzY3Jh dGNoKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgbW92ZVB0cihJbW1Xb3JkKHNyYy5vZmZz ZXQpLCBzY3JhdGNoKTsKLSsgICAgICAgIGFzX2xmaXdheChkZXN0LCBzcmMuYmFzZSwgc2NyYXRj aCk7Ci0rICAgICAgfQotKyAgICB9Ci0rICAgIGFzX2ZjZmlkcyhkZXN0LCBkZXN0KTsKLSsgIH0K LSsKLSsgIC8vIFBPV0VSOSBGUDE2IGxvYWQ6IGx4c2loenggd3JpdGVzIHRoZSAyIG1lbW9yeSBi eXRlcyBkaXJlY3RseSBpbnRvCi0rICAvLyBkd1swXSBsb3cgMTYgYml0cyB3aXRoIHRoZSByZXN0 IHplcm9lZCDigJQgbWF0Y2hpbmcgdGhlIGxheW91dCB0aGF0Ci0rICAvLyB4c2N2aHBkcCBleHBl Y3RzLCBpbiBhIHNpbmdsZSBpbnN0cnVjdGlvbi4KLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2Fk RmxvYXQxNihjb25zdCBBZGRyZXNzJiBhZGRyLCBGbG9hdFJlZ2lzdGVyIGRlc3QsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCkgewotKyAgICBNT1pfQVNT RVJUKEhhc1BPV0VSOSgpKTsKLSsgICAgaWYgKGFkZHIub2Zmc2V0ID09IDApIHsKLSsgICAgICBy ZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2x4c2loengoZGVzdCwgcjAsIGFkZHIuYmFzZSku Z2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIGlmIChpc19pbnROKGFkZHIub2Zmc2V0LCAxNikp IHsKLSsgICAgICBhc19hZGRpKHRlbXAsIGFkZHIuYmFzZSwgYWRkci5vZmZzZXQpOwotKyAgICAg IHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHhzaWh6eChkZXN0LCByMCwgdGVtcCkuZ2V0 T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIG1vdmVQdHIoSW1tV29yZChhZGRyLm9mZnNldCksIHRl bXApOwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2x4c2loengoZGVzdCwgYWRk ci5iYXNlLCB0ZW1wKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQg bG9hZEZsb2F0MTYoY29uc3QgQmFzZUluZGV4JiBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wKSB7Ci0rICAgIE1P Wl9BU1NFUlQoSGFzUE9XRVI5KCkpOwotKyAgICBjb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhzcmMs IHRlbXApOwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2x4c2loengoZGVzdCwg cjAsIHRlbXApLmdldE9mZnNldCgpKTsKLSsgIH0KLSsKLSsgIC8vID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAgLy8gRWZm ZWN0aXZlIGFkZHJlc3MgY29tcHV0YXRpb24KLSsKLSsgIHZvaWQgY29tcHV0ZVNjYWxlZEFkZHJl c3MoY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGlmIChh ZGRyZXNzLnNjYWxlID09IFRpbWVzT25lKSB7Ci0rICAgICAgYXNfYWRkKGRlc3QsIGFkZHJlc3Mu YmFzZSwgYWRkcmVzcy5pbmRleCk7Ci0rICAgIH0gZWxzZSBpZiAoZGVzdCAhPSBhZGRyZXNzLmJh c2UgJiYgZGVzdCAhPSBhZGRyZXNzLmluZGV4KSB7Ci0rICAgICAgeF9zbGRpKGRlc3QsIGFkZHJl c3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwotKyAgICAgIGFzX2FkZChkZXN0LCBhZGRyZXNzLmJh c2UsIGRlc3QpOwotKyAgICB9IGVsc2UgewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKCp0aGlzKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OwotKyAgICAgIHhfc2xkaShzY3JhdGNoLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsK LSsgICAgICBhc19hZGQoZGVzdCwgYWRkcmVzcy5iYXNlLCBzY3JhdGNoKTsKLSsgICAgfQotKyAg fQotKwotKyAgdm9pZCBjb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhjb25zdCBBZGRyZXNzJiBhZGRy ZXNzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGlmIChhZGRyZXNzLm9mZnNldCA9PSAwKSB7Ci0r ICAgICAgaWYgKGRlc3QgIT0gYWRkcmVzcy5iYXNlKSB7Ci0rICAgICAgICB4c19tcihkZXN0LCBh ZGRyZXNzLmJhc2UpOwotKyAgICAgIH0KLSsgICAgfSBlbHNlIGlmIChpc19pbnROKGFkZHJlc3Mu b2Zmc2V0LCAxNikpIHsKLSsgICAgICBhc19hZGRpKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVz cy5vZmZzZXQpOwotKyAgICB9IGVsc2UgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKGFkZHJl c3Mub2Zmc2V0LCAzNCkpIHsKLSsgICAgICAvLyBTaW5nbGUtaW5zbiAzNC1iaXQtc2lnbmVkIHJl ZytpbW0gYWRkLiBBdm9pZHMgdGhlIHNjcmF0Y2ggR1BSLgotKyAgICAgIGFzX3BhZGRpKGRlc3Qs IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIC8qUj0qL2ZhbHNlKTsKLSsgICAgfSBlbHNl IHsKLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgICAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICBNT1pfQVNTRVJUKHNj cmF0Y2ggIT0gZGVzdCk7Ci0rICAgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwg c2NyYXRjaCk7Ci0rICAgICAgYXNfYWRkKGRlc3QsIGFkZHJlc3MuYmFzZSwgc2NyYXRjaCk7Ci0r ICAgIH0KLSsgIH0KLSsgIHZvaWQgY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MoY29uc3QgQmFzZUlu ZGV4JiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNz KGFkZHJlc3MsIGRlc3QpOwotKyAgICBpZiAoYWRkcmVzcy5vZmZzZXQpIHsKLSsgICAgICBpZiAo aXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7Ci0rICAgICAgICBhc19hZGRpKGRlc3QsIGRl c3QsIGFkZHJlc3Mub2Zmc2V0KTsKLSsgICAgICB9IGVsc2UgaWYgKEhhc1BPV0VSMTAoKSAmJiBp c19pbnROKGFkZHJlc3Mub2Zmc2V0LCAzNCkpIHsKLSsgICAgICAgIGFzX3BhZGRpKGRlc3QsIGRl c3QsIGFkZHJlc3Mub2Zmc2V0LCAvKlI9Ki9mYWxzZSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAg ICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgICAgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgICBNT1pfQVNTRVJUKHNjcmF0 Y2ggIT0gZGVzdCk7Ci0rICAgICAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBz Y3JhdGNoKTsKLSsgICAgICAgIGFzX2FkZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSsgICAgICB9 Ci0rICAgIH0KLSsgIH0KLSsKLSsgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAgLy8gTW92ZSBpbnN0cnVjdGlvbnMK LSsKLSsgIHZvaWQgbW92KFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeyB4c19tcihkZXN0 LCBzcmMpOyB9Ci0rICB2b2lkIG1vdihJbW1Xb3JkIGltbSwgUmVnaXN0ZXIgZGVzdCkgeyBtb3Zl UHRyKGltbSwgZGVzdCk7IH0KLSsgIHZvaWQgbW92KEltbVB0ciBpbW0sIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgICAgbW92KEltbVdvcmQodWludHB0cl90KGltbS52YWx1ZSkpLCBkZXN0KTsKLSsgIH0K LSsgIC8vIEVtaXQgYW4gOC1pbnN0cnVjdGlvbiBOT1Agc3RhbnphIGZvciBhIHBhdGNoYWJsZSA2 NC1iaXQgbG9hZC4KLSsgIC8vIFBvb2wgZmx1c2hlcyBhcmUgaW5oaWJpdGVkIGR1cmluZyBlbWlz c2lvbiB0byBwcmV2ZW50IHBvb2wgZGF0YQotKyAgLy8gZnJvbSBiZWluZyBpbnNlcnRlZCBtaWQt c3RhbnphLgotKyAgQnVmZmVyT2Zmc2V0IGVtaXRMb2FkNjRTdGFuemEoUmVnaXN0ZXIgZGVzdCwg dWludDY0X3QgdmFsdWUpIHsKLSsgICAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbExvYWQ2 NFN0YW56YUluc25zKTsKLSsgICAgQnVmZmVyT2Zmc2V0IGJvID0gd3JpdGVJbnN0KE5vcEluc3Qp OwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsg ICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdy aXRlSW5zdChOb3BJbnN0KTsKLSsgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUlu c3QoTm9wSW5zdCk7Ci0rICAgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7Ci0rICAgIC8vIElmIGFu eSBvZiB0aGUgOCB3cml0ZUluc3QgY2FsbHMgaGl0IE9PTSwgb25seSBzb21lIG9mIHRoZSBzdGFu emEKLSsgICAgLy8gd2FzIHJlc2VydmVkIGluIHRoZSBidWZmZXIuIFdyaXRlTG9hZDY0SW5zdHJ1 Y3Rpb25zIHdyaXRlcyAzMiBieXRlcwotKyAgICAvLyB1bmNvbmRpdGlvbmFsbHksIHNvIGNhbGxp bmcgaXQgaGVyZSB3b3VsZCBvdmVyZmxvdyB0aGUgVmVjdG9yJ3MKLSsgICAgLy8gYmFja2luZyBz dG9yZSBhbmQgY29ycnVwdCB0aGUgbmV4dCBoZWFwIGNodW5rJ3MgbWV0YWRhdGEsIHN1cmZhY2lu ZwotKyAgICAvLyBsYXRlciBhcyBhIG1hbGxvYy1kZXRlY3RlZCBmcmVlLXRpbWUgY3Jhc2guCi0r ICAgIGlmIChtX2J1ZmZlci5vb20oKSkgewotKyAgICAgIHJldHVybiBibzsKLSsgICAgfQotKyAg ICBXcml0ZUxvYWQ2NEluc3RydWN0aW9ucygoSW5zdHJ1Y3Rpb24qKWVkaXRTcmMoYm8pLCBkZXN0 LCB2YWx1ZSk7Ci0rICAgIHJldHVybiBibzsKLSsgIH0KLSsKLSsgIHZvaWQgbW92KENvZGVMYWJl bCogbGFiZWwsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgQnVmZmVyT2Zmc2V0IGJvID0gZW1pdExv YWQ2NFN0YW56YShkZXN0LCBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKLSsgICAgbGFiZWwt PnBhdGNoQXQoKS0+YmluZChiby5nZXRPZmZzZXQoKSk7Ci0rICAgIGxhYmVsLT5zZXRMaW5rTW9k ZShDb2RlTGFiZWw6Ok1vdmVJbW1lZGlhdGUpOwotKyAgfQotKyAgdm9pZCBtb3YoUmVnaXN0ZXIg c3JjLCBBZGRyZXNzIGRlc3QpIHsgc3RvcmVQdHIoc3JjLCBkZXN0KTsgfQotKyAgdm9pZCBtb3Yo QWRkcmVzcyBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsgbG9hZFB0cihzcmMsIGRlc3QpOyB9Ci0rCi0r ICB2b2lkIG1vdmUzMihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgaWYgKGlzX2lu dE4oaW1tLnZhbHVlLCAxNikpIHsKLSsgICAgICB4c19saShkZXN0LCAoaW50MTZfdClpbW0udmFs dWUpOwotKyAgICB9IGVsc2UgaWYgKGlzX3VpbnROKCh1aW50MzJfdClpbW0udmFsdWUsIDE2KSkg ewotKyAgICAgIHhzX2xpKGRlc3QsIDApOwotKyAgICAgIGFzX29yaShkZXN0LCBkZXN0LCAodWlu dDE2X3QpaW1tLnZhbHVlKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICB4c19saXMoZGVzdCwgKGlu dDE2X3QpKCh1aW50MzJfdClpbW0udmFsdWUgPj4gMTYpKTsKLSsgICAgICBpZiAoaW1tLnZhbHVl ICYgMHhmZmZmKSB7Ci0rICAgICAgICBhc19vcmkoZGVzdCwgZGVzdCwgKHVpbnQxNl90KWltbS52 YWx1ZSk7Ci0rICAgICAgfQotKyAgICB9Ci0rICB9Ci0rICB2b2lkIG1vdmUzMihSZWdpc3RlciBz cmMsIFJlZ2lzdGVyIGRlc3QpIHsgYXNfZXh0c3coZGVzdCwgc3JjKTsgfQotKwotKyAgdm9pZCBt b3ZlUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBpZiAoc3JjICE9IGRl c3QpIHsKLSsgICAgICB4c19tcihkZXN0LCBzcmMpOwotKyAgICB9Ci0rICB9Ci0rICB2b2lkIG1v dmVQdHIoSW1tV29yZCBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgaWYgKGltbS52YWx1ZSA9 PSAwKSB7Ci0rICAgICAgeHNfbGkoZGVzdCwgMCk7Ci0rICAgIH0gZWxzZSBpZiAoaXNfaW50Tigo aW50cHRyX3QpaW1tLnZhbHVlLCAxNikpIHsKLSsgICAgICB4c19saShkZXN0LCAoaW50MTZfdClp bW0udmFsdWUpOwotKyAgICB9IGVsc2UgaWYgKGlzX3VpbnROKGltbS52YWx1ZSwgMTYpKSB7Ci0r ICAgICAgeHNfbGkoZGVzdCwgMCk7Ci0rICAgICAgYXNfb3JpKGRlc3QsIGRlc3QsICh1aW50MTZf dClpbW0udmFsdWUpOwotKyAgICB9IGVsc2UgaWYgKGlzX2ludE4oKGludHB0cl90KWltbS52YWx1 ZSwgMzIpKSB7Ci0rICAgICAgLy8gMzItYml0IHNpZ25lZDogbGlzICsgb3JpICgyIGluc3RydWN0 aW9ucykuCi0rICAgICAgeHNfbGlzKGRlc3QsIChpbnQxNl90KSgodWludDMyX3QpaW1tLnZhbHVl ID4+IDE2KSk7Ci0rICAgICAgaWYgKGltbS52YWx1ZSAmIDB4RkZGRikgewotKyAgICAgICAgYXNf b3JpKGRlc3QsIGRlc3QsICh1aW50MTZfdClpbW0udmFsdWUpOwotKyAgICAgIH0KLSsgICAgfSBl bHNlIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50cHRyX3QpaW1tLnZhbHVlLCAzNCkp IHsKLSsgICAgICAvLyBQT1dFUjEwIHNpbmdsZS1pbnN0cnVjdGlvbiAzNC1iaXQgc2lnbmVkIGlt bWVkaWF0ZS4gUmVwbGFjZXMgdGhlCi0rICAgICAgLy8gNS1pbnNuIGZhbGxiYWNrIGZvciB2YWx1 ZXMgaW4gKDMzLTM0KS1iaXQgc2lnbmVkIHJhbmdlLgotKyAgICAgIC8vIDggYnl0ZXMgdnMgMjAg Ynl0ZXM7IG9uZSBzbG90IHRlbXAgcmVnaXN0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KLSsgICAg ICBhc19wYWRkaShkZXN0LCByMCwgKGludDY0X3QpaW1tLnZhbHVlLCAvKlI9Ki9mYWxzZSk7Ci0r ICAgIH0gZWxzZSB7Ci0rICAgICAgLy8gRnVsbCA2NC1iaXQ6IEdDQy1zdHlsZSBsaXMrb3JpK2xp cytvcmkrcmxkaW1pICg1IGluc3RydWN0aW9ucykuCi0rICAgICAgLy8gTm8gTFIgY2xvYmJlciwg bm8gZW1iZWRkZWQgZGF0YSDigJQgcHVyZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZS4KLSsgICAgICB1 aW50MzJfdCBsbzMyID0gKHVpbnQzMl90KShpbW0udmFsdWUpOwotKyAgICAgIHVpbnQzMl90IGhp MzIgPSAodWludDMyX3QpKGltbS52YWx1ZSA+PiAzMik7Ci0rICAgICAgUmVnaXN0ZXIgdGVtcCA9 IChkZXN0ICE9IFNlY29uZFNjcmF0Y2hSZWcpID8gU2Vjb25kU2NyYXRjaFJlZwotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNhdmVkU2NyYXRjaFJl Z2lzdGVyOwotKyAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKDUgKiBzaXplb2YodWludDMyX3Qp KTsKLSsgICAgICB4c19saXMoZGVzdCwgKGludDE2X3QpKGxvMzIgPj4gMTYpKTsKLSsgICAgICBh c19vcmkoZGVzdCwgZGVzdCwgbG8zMiAmIDB4RkZGRik7Ci0rICAgICAgeHNfbGlzKHRlbXAsIChp bnQxNl90KShoaTMyID4+IDE2KSk7Ci0rICAgICAgYXNfb3JpKHRlbXAsIHRlbXAsIGhpMzIgJiAw eEZGRkYpOwotKyAgICAgIGFzX3JsZGltaShkZXN0LCB0ZW1wLCAzMiwgMCk7Ci0rICAgIH0KLSsg IH0KLSsgIHZvaWQgbW92ZVB0cihJbW1QdHIgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIG1v dmVQdHIoSW1tV29yZCh1aW50cHRyX3QoaW1tLnZhbHVlKSksIGRlc3QpOwotKyAgfQotKwotKyAg Ly8gTG9hZCBhIDY0LWJpdCBGUFIgY29uc3RhbnQgZnJvbSB0aGUgaW5saW5lIGNvbnN0YW50IHBv b2wuCi0rICAvLyBQT1dFUjk6IDIgaW5zdHJ1Y3Rpb25zIChhZGRwY2lzICsgbGZkKSAtLSBubyBh bGlnbm1lbnQgY29uc3RyYWludC4KLSsgIC8vIFBPV0VSMTA6IDEgcHJlZml4ZWQgaW5zdHJ1Y3Rp b24gKHBsZmQsIDIgc2xvdHMpLCBvciAzIHNsb3RzIGluIHRoZQotKyAgLy8gICAobG9hZEFkZHIg JiA2MykgPT0gNjAgYWxpZ25tZW50LWxlYWRpbmctbm9wIGNhc2UuIFJlc2VydmUgMyB0bwotKyAg Ly8gICBjb3ZlciBib3RoIGNhc2VzIGNvbnNlcnZhdGl2ZWx5LgotKyAgLy8gUE9XRVI4OiBub3Qg dXNlZCAtLSBsb2FkQ29uc3RhbnREb3VibGUgaW5saW5lcyB0aGUgY29uc3RhbnQuCi0rICBCdWZm ZXJPZmZzZXQgbG9hZEZyb21Qb29sRmxvYXQ2NChGbG9hdFJlZ2lzdGVyIGRlc3QsIGRvdWJsZSB2 YWx1ZSkgewotKyAgICBzaXplX3Qgc2xvdHMgPSBIYXNQT1dFUjEwKCkgPyAzIDogMjsKLSsgICAg dWludDMyX3QgaGludCA9ICh1aW50MzJfdChkZXN0LmVuY29kaW5nKCkpIDw8IDE2KSB8Ci0rICAg ICAgICAgICAgICAgICAgICAodWludDMyX3QoUG9vbExvYWRGUFI2NCkgPDwgMjEpIHwgMHhGMDAw MDAwMDsKLSsgICAgdWludDMyX3QgaW5zdFszXSA9IHtoaW50LCBOb3BJbnN0LCBOb3BJbnN0fTsK LSsgICAgcmV0dXJuIG1fYnVmZmVyLmFsbG9jRW50cnkoc2xvdHMsIDIsICh1aW50OF90KilpbnN0 LCAodWludDhfdCopJnZhbHVlKTsKLSsgIH0KLSsgIC8vIExvYWQgYSAzMi1iaXQgRlBSIGNvbnN0 YW50IGZyb20gdGhlIGlubGluZSBjb25zdGFudCBwb29sLgotKyAgLy8gU2FtZSBzaGFwZSBhcyBs b2FkRnJvbVBvb2xGbG9hdDY0IChhYm92ZSkuIGxmcy9wbGZzIGF1dG8tZXhwYW5kIHRoZQotKyAg Ly8gMzItYml0IHNpbmdsZS1wcmVjaXNpb24gdmFsdWUgdG8gZG91YmxlIGluIHRoZSBGUFIsIHNv IG5vIGZvbGxvdy11cAotKyAgLy8geHNjdnNwZHBuIGlzIG5lZWRlZC4KLSsgIEJ1ZmZlck9mZnNl dCBsb2FkRnJvbVBvb2xGbG9hdDMyKEZsb2F0UmVnaXN0ZXIgZGVzdCwgZmxvYXQgdmFsdWUpIHsK LSsgICAgc2l6ZV90IHNsb3RzID0gSGFzUE9XRVIxMCgpID8gMyA6IDI7Ci0rICAgIHVpbnQzMl90 IGhpbnQgPSAodWludDMyX3QoZGVzdC5lbmNvZGluZygpKSA8PCAxNikgfAotKyAgICAgICAgICAg ICAgICAgICAgKHVpbnQzMl90KFBvb2xMb2FkRlBSMzIpIDw8IDIxKSB8IDB4RjAwMDAwMDA7Ci0r ICAgIHVpbnQzMl90IGluc3RbM10gPSB7aGludCwgTm9wSW5zdCwgTm9wSW5zdH07Ci0rICAgIHJl dHVybiBtX2J1ZmZlci5hbGxvY0VudHJ5KHNsb3RzLCAxLCAodWludDhfdCopaW5zdCwgKHVpbnQ4 X3QqKSZ2YWx1ZSk7Ci0rICB9Ci0rICAvLyBMb2FkIGEgMTI4LWJpdCBTSU1EIGNvbnN0YW50IGZy b20gdGhlIGlubGluZSBjb25zdGFudCBwb29sLgotKyAgLy8gUGVyLWFyY2ggc2xvdCByZXNlcnZh dGlvbiAtLSB0aGUgcGF0Y2hlciB3cml0ZXMgb25seSB0aGUgc2xvdHMKLSsgIC8vIGVhY2ggbWlj cm8tYXJjaCBhY3R1YWxseSBuZWVkczoKLSsgIC8vICAgUDg6IDUgKGJjbCArIG1mbHIgKyBhZGRp ICsgbHh2ZDJ4ICsgeHhwZXJtZGkpCi0rICAvLyAgIFA5OiAzIChhZGRwY2lzICsgYWRkaSArIGx4 dngpIC0tIG5vIExSIHRvdWNoLCBubyBSQVMgaGF6YXJkCi0rICAvLyAgIFAxMDogMyAoYWxpZ25t ZW50LXNhZmU6IHByZWZpeCArIHN1ZmZpeCArIDEgcmVzZXJ2ZSBmb3IgdGhlCi0rICAvLyAgICAg ICAgICAobG9hZEFkZHIgJiA2MykgPT0gNjAgbGVhZGluZy1ub3AgY2FzZSkKLSsgIC8vIFBvb2wg ZW50cnkgaXMgNCDDlyA0LWJ5dGUgd29yZHMgPSAxNiBieXRlcy4gUDkgdXNlcwotKyAgLy8gU2F2 ZWRTY3JhdGNoUmVnaXN0ZXIgKHIxNikgYXMgdGhlIFBDIGJhc2U7IFAxMCBlbWl0cyBhIHNpbmds ZQotKyAgLy8gUEMtcmVsYXRpdmUgcGx4diB3aXRoIG5vIHNjcmF0Y2ggYW5kIG5vIExSIHRvdWNo LiBPbmx5IFA4IHN0aWxsCi0rICAvLyBjbG9iYmVycyBMUiAoY29ycmVjdG5lc3Mtb25seSBmYWxs YmFjazsgbGl2ZSBieSBkZXNpZ24pLgotKyAgQnVmZmVyT2Zmc2V0IGxvYWRGcm9tUG9vbFNpbWQx MjgoRmxvYXRSZWdpc3RlciBkZXN0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgU2ltZENvbnN0YW50JiB2KSB7Ci0rICAgIHNpemVfdCBzbG90czsKLSsgICAgaWYg KEhhc1BPV0VSMTAoKSkgewotKyAgICAgIHNsb3RzID0gMzsKLSsgICAgfSBlbHNlIGlmIChIYXNQ T1dFUjkoKSkgewotKyAgICAgIHNsb3RzID0gMzsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBzbG90 cyA9IDU7Ci0rICAgIH0KLSsgICAgLy8gU2ltZDEyOCBlbmNvZGluZyBpcyAzMi02MzsgbWFzayB0 byA1IGJpdHMgZm9yIGhpbnQuCi0rICAgIC8vIFBhdGNoQ29uc3RhbnRQb29sTG9hZCBzZXRzIFRY IGJpdCB1bmNvbmRpdGlvbmFsbHkgZm9yIFNpbWQxMjguCi0rICAgIHVpbnQzMl90IGhpbnQgPSAo KHVpbnQzMl90KGRlc3QuZW5jb2RpbmcoKSkgJiAweDFGKSA8PCAxNikgfAotKyAgICAgICAgICAg ICAgICAgICAgKHVpbnQzMl90KFBvb2xMb2FkU2ltZDEyOCkgPDwgMjEpIHwgMHhGMDAwMDAwMDsK LSsgICAgdWludDMyX3QgaW5zdFs1XSA9IHtoaW50LCBOb3BJbnN0LCBOb3BJbnN0LCBOb3BJbnN0 LCBOb3BJbnN0fTsKLSsgICAgcmV0dXJuIG1fYnVmZmVyLmFsbG9jRW50cnkoc2xvdHMsIDQsICh1 aW50OF90KilpbnN0LCAodWludDhfdCopdi5ieXRlcygpKTsKLSsgIH0KLSsgIHZvaWQgbW92ZVB0 cih3YXNtOjpTeW1ib2xpY0FkZHJlc3MgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIEJ1ZmZl ck9mZnNldCBibyA9IGVtaXRMb2FkNjRTdGFuemEoZGVzdCwgKHVpbnQ2NF90KS0xKTsKLSsgICAg YXBwZW5kKHdhc206OlN5bWJvbGljQWNjZXNzKENvZGVPZmZzZXQoYm8uZ2V0T2Zmc2V0KCkpLCBp bW0pKTsKLSsgIH0KLSsgIHZvaWQgbW92ZVB0cihJbW1HQ1B0ciBpbW0sIFJlZ2lzdGVyIGRlc3Qp IHsKLSsgICAgQnVmZmVyT2Zmc2V0IGJvID0gZW1pdExvYWQ2NFN0YW56YShkZXN0LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl1aW50cHRyX3QoaW1t LnZhbHVlKSk7Ci0rICAgIEFzc2VtYmxlcjo6d3JpdGVEYXRhUmVsb2NhdGlvbihibywgaW1tKTsK LSsgIH0KLSsKLSsgIHZvaWQgbW92ZUZsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkgewotKyAgICBpZiAoc3JjICE9IGRlc3QpIHsKLSsgICAgICBhc19mbXIoZGVz dCwgc3JjKTsKLSsgICAgfQotKyAgfQotKyAgdm9pZCBtb3ZlRG91YmxlKEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgaWYgKHNyYyAhPSBkZXN0KSB7Ci0rICAg ICAgYXNfZm1yKGRlc3QsIHNyYyk7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIC8vID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAg Ly8gQnJhbmNoIGZ1bmN0aW9ucwotKwotKyAgdm9pZCBicmFuY2goSml0Q29kZSogYykgewotKyAg ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIEJ1ZmZlck9mZnNldCBibyA9IGVtaXRMb2Fk NjRTdGFuemEoc2NyYXRjaCwgKHVpbnQ2NF90KXVpbnRwdHJfdChjLT5yYXcoKSkpOwotKyAgICBh ZGRQZW5kaW5nSnVtcChibywgSW1tUHRyKGMtPnJhdygpKSwgUmVsb2NhdGlvbktpbmQ6OkpJVENP REUpOwotKyAgICB4c19tdGN0cihzY3JhdGNoKTsKLSsgICAgYXNfYmN0cigpOwotKyAgfQotKyAg dm9pZCBicmFuY2goY29uc3QgUmVnaXN0ZXIgcmVnKSB7Ci0rICAgIHhzX210Y3RyKHJlZyk7Ci0r ICAgIGFzX2JjdHIoKTsKLSsgIH0KLSsKLSsgIHZvaWQganVtcChMYWJlbCogbGFiZWwpIHsKLSsg ICAgaWYgKGxhYmVsLT5ib3VuZCgpKSB7Ci0rICAgICAgLy8gT3BlbiB0aGUgbm8tcG9vbCB3aW5k b3cgQkVGT1JFIGNvbXB1dGluZyB0aGUgZGlzcGxhY2VtZW50LiBUaGUKLSsgICAgICAvLyBlbnRl ck5vUG9vbCgpIGNhbGwgaXRzZWxmIGNhbiB0cmlnZ2VyIGEgcG9vbCBmbHVzaCwgd2hpY2ggYWR2 YW5jZXMKLSsgICAgICAvLyBjdXJyZW50T2Zmc2V0KCkuIENvbXB1dGluZyB0aGUgZGlzcGxhY2Vt ZW50IGFnYWluc3QgdGhlIHByZS1mbHVzaAotKyAgICAgIC8vIG9mZnNldCBhbmQgdGhlbiBlbWl0 dGluZyB0aGUgYiBhdCB0aGUgcG9zdC1mbHVzaCBvZmZzZXQgd291bGQgbGFuZAotKyAgICAgIC8v IHRoZSBicmFuY2ggKHBvb2xTaXplKSBieXRlcyBwYXN0IHRoZSBpbnRlbmRlZCB0YXJnZXQuCi0r ICAgICAgbV9idWZmZXIuZW50ZXJOb1Bvb2woMik7Ci0rICAgICAgaW50MzJfdCBvZmZzZXQgPSBs YWJlbC0+b2Zmc2V0KCkgLSBjdXJyZW50T2Zmc2V0KCk7Ci0rICAgICAgaWYgKEpPZmZJbW0yNjo6 SXNJblJhbmdlKG9mZnNldCkpIHsKLSsgICAgICAgIGFzX2Iob2Zmc2V0KTsKLSsgICAgICAgIHdy aXRlSW5zdChOb3BJbnN0KTsKLSsgICAgICAgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7Ci0rICAg ICAgICByZXR1cm47Ci0rICAgICAgfQotKyAgICAgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7Ci0r ICAgICAgLy8gTG9uZyBqdW1wIHRvIGJvdW5kIGxhYmVsLgotKyAgICAgIEJ1ZmZlck9mZnNldCBi byA9Ci0rICAgICAgICAgIGVtaXRMb2FkNjRTdGFuemEoU2Vjb25kU2NyYXRjaFJlZywgTGFiZWxC YXNlOjpJTlZBTElEX09GRlNFVCk7Ci0rICAgICAgeHNfbXRjdHIoU2Vjb25kU2NyYXRjaFJlZyk7 Ci0rICAgICAgYXNfYmN0cigpOwotKyAgICAgIGFkZExvbmdKdW1wKGJvLCBCdWZmZXJPZmZzZXQo bGFiZWwtPm9mZnNldCgpKSk7Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rICAgIC8vIFVuYm91 bmQgbGFiZWw6IGVtaXQgdHJhcC10YWdnZWQgc3RhbnphICgxMCBzbG90cykuCi0rICAgIG1fYnVm ZmVyLmVudGVyTm9Qb29sKGtOb1Bvb2xQYXRjaGFibGVCcmFuY2hJbnNucyk7Ci0rICAgIEJ1ZmZl ck9mZnNldCBibyA9IHhzX3RyYXBfdGFnZ2VkKEJUYWcpOwotKyAgICB3cml0ZUluc3QobGFiZWwt PnVzZWQoKSA/IGxhYmVsLT5vZmZzZXQoKSA6IExhYmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOwot KyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAg d3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdyaXRl SW5zdChOb3BJbnN0KTsKLSsgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUluc3Qo Tm9wSW5zdCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgbV9idWZmZXIubGVhdmVO b1Bvb2woKTsKLSsgICAgaWYgKCFvb20oKSkgewotKyAgICAgIGxhYmVsLT51c2UoYm8uZ2V0T2Zm c2V0KCkpOwotKyAgICB9Ci0rICB9Ci0rICB2b2lkIGp1bXAoUmVnaXN0ZXIgcmVnKSB7Ci0rICAg IHhzX210Y3RyKHJlZyk7Ci0rICAgIGFzX2JjdHIoKTsKLSsgIH0KLSsgIHZvaWQganVtcChjb25z dCBBZGRyZXNzJiBhZGRyZXNzKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAg bG9hZFB0cihhZGRyZXNzLCBzY3JhdGNoKTsKLSsgICAgeHNfbXRjdHIoc2NyYXRjaCk7Ci0rICAg IGFzX2JjdHIoKTsKLSsgIH0KLSsgIHZvaWQganVtcChKaXRDb2RlKiBjb2RlKSB7IGJyYW5jaChj b2RlKTsgfQotKyAgdm9pZCBqdW1wKEltbVB0ciBwdHIpIHsKLSsgICAgQnVmZmVyT2Zmc2V0IGJv ID0KLSsgICAgICAgIGVtaXRMb2FkNjRTdGFuemEoU2Vjb25kU2NyYXRjaFJlZywgKHVpbnQ2NF90 KXVpbnRwdHJfdChwdHIudmFsdWUpKTsKLSsgICAgYWRkUGVuZGluZ0p1bXAoYm8sIHB0ciwgUmVs b2NhdGlvbktpbmQ6OkhBUkRDT0RFRCk7Ci0rICAgIHhzX210Y3RyKFNlY29uZFNjcmF0Y2hSZWcp OwotKyAgICBhc19iY3RyKCk7Ci0rICB9Ci0rICB2b2lkIGp1bXAoVHJhbXBvbGluZVB0ciBjb2Rl KSB7IGp1bXAoSW1tUHRyKGNvZGUudmFsdWUpKTsgfQotKwotKyAgLy8gQ29uZGl0aW9uYWwgYnJh bmNoIHRvIGxhYmVsLiBBc3N1bWVzIGEgY29tcGFyZSBpbnN0cnVjdGlvbiBoYXMgYWxyZWFkeQot KyAgLy8gYmVlbiBlbWl0dGVkIHRoYXQgc2V0cyBDUjAuCi0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUg Q29uZFQ+Ci0rICB2b2lkIG1hX2IoQ29uZFQgY29uZCwgTGFiZWwqIGxhYmVsKSB7Ci0rICAgIGlm IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8Q29uZFQsIENvbmRpdGlvbj4pIHsKLSsgICAgICBp ZiAoY29uZCA9PSBBbHdheXMpIHsKLSsgICAgICAgIGp1bXAobGFiZWwpOwotKyAgICAgICAgcmV0 dXJuOwotKyAgICAgIH0KLSsgICAgfQotKyAgICBpZiAobGFiZWwtPmJvdW5kKCkpIHsKLSsgICAg ICAvLyBPcGVuIHRoZSBuby1wb29sIHdpbmRvdyBCRUZPUkUgY29tcHV0aW5nIHRoZSBkaXNwbGFj ZW1lbnQuIFNhbWUKLSsgICAgICAvLyBoYXphcmQgYXMganVtcCgpOiBlbnRlck5vUG9vbCBtYXkg aXRzZWxmIGZsdXNoIGEgcGVuZGluZyBwb29sLAotKyAgICAgIC8vIGFkdmFuY2luZyBjdXJyZW50 T2Zmc2V0KCk7IHRoZSBiYyBtdXN0IGVtaXQgd2l0aCBhIGRpc3BsYWNlbWVudAotKyAgICAgIC8v IGNvbXB1dGVkIGFnYWluc3QgdGhlIHBvc3QtZmx1c2ggb2Zmc2V0LiBCdWRnZXQgY292ZXJzIG1h eCA2Ci0rICAgICAgLy8gaW5zdHJ1Y3Rpb25zOiBQT1dFUjggT3ZlcmZsb3cgWEVSIG9wcyAoMykg KyBjcm9yICgxKSArIGJjICgxKSArCi0rICAgICAgLy8gbm9wICgxKSBmb3IgdGhlIHdvcnN0LWNh c2UgRG91YmxlQ29uZGl0aW9uK092ZXJmbG93IHNob3J0IHBhdGguCi0rICAgICAgbV9idWZmZXIu ZW50ZXJOb1Bvb2woNik7Ci0rICAgICAgLy8gRm9yIERvdWJsZUNvbmRpdGlvbiwgYXNfYmMgZW1p dHMgY3Jvci9jcmFuZGMgYmVmb3JlIHRoZSBiYwotKyAgICAgIC8vIGluc3RydWN0aW9uLCBhZHZh bmNpbmcgY3VycmVudE9mZnNldCgpIGJ5IDQuIEFjY291bnQgZm9yIHRoaXMKLSsgICAgICAvLyBp biB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uLgotKyAgICAgIGludDMyX3QgY3JBZGp1c3QgPSAwOwot KyAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8Q29uZFQsIERvdWJsZUNvbmRpdGlv bj4pIHsKLSsgICAgICAgIGNyQWRqdXN0ID0gLShpbnQzMl90KXNpemVvZih1aW50MzJfdCk7Ci0r ICAgICAgfQotKyAgICAgIGludDMyX3Qgb2Zmc2V0ID0gbGFiZWwtPm9mZnNldCgpIC0gY3VycmVu dE9mZnNldCgpICsgY3JBZGp1c3Q7Ci0rICAgICAgaWYgKEJPZmZJbW0xNjo6SXNJblJhbmdlKG9m ZnNldCkpIHsKLSsgICAgICAgIGFzX2JjKChpbnQxNl90KW9mZnNldCwgY29uZCk7Ci0rICAgICAg ICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgICAgICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwot KyAgICAgICAgcmV0dXJuOwotKyAgICAgIH0KLSsgICAgICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgp OwotKyAgICAgIC8vIExvbmcgY29uZGl0aW9uYWwgYnJhbmNoIGZvciBib3VuZCBsYWJlbC4KLSsg ICAgICAvLyBYRVIgb3BzKDAtMykgKyBjcm9yKDAtMSkgKyBiYygxKSArIHN0YW56YSg4KSArIG10 Y3RyKDEpICsgYmN0cigxKS4KLSsgICAgICAvLyBQOCBPdmVyZmxvdzogbWZ4ZXIrcmx3aW5tK210 Y3JmK2JjK3N0YW56YSttdGN0citiY3RyID0gMTQgbWF4LgotKyAgICAgIG1fYnVmZmVyLmVudGVy Tm9Qb29sKGtOb1Bvb2xDb25kTG9uZ0JyYW5jaEluc25zUDhNYXgpOwotKyAgICAgIGFzX2JjKChp bnQxNl90KTQ0LCBJbnZlcnRDb25kaXRpb24oY29uZCkpOwotKyAgICAgIEJ1ZmZlck9mZnNldCBi b0xvYWQgPQotKyAgICAgICAgICBlbWl0TG9hZDY0U3RhbnphKFNlY29uZFNjcmF0Y2hSZWcsIExh YmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOwotKyAgICAgIHhzX210Y3RyKFNlY29uZFNjcmF0Y2hS ZWcpOwotKyAgICAgIGFzX2JjdHIoKTsKLSsgICAgICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOwot KyAgICAgIGFkZExvbmdKdW1wKGJvTG9hZCwgQnVmZmVyT2Zmc2V0KGxhYmVsLT5vZmZzZXQoKSkp OwotKyAgICAgIHJldHVybjsKLSsgICAgfQotKyAgICAvLyBGb3J3YXJkIHJlZmVyZW5jZTogZW1p dCBCQ1RhZyBzdGFuemEuCi0rICAgIC8vIFhFUiBvcHMoMC0zKSArIGNyb3IoMC0xKSArIGJjKDEp ICsgdHJhcF90YWdnZWQoMSkgKyBjaGFpbigxKSArIDggTk9Qcy4KLSsgICAgLy8gUDggT3ZlcmZs b3c6IG1meGVyK3Jsd2lubSttdGNyZitiYyt0cmFwK2NoYWluKzhOT1BzID0gMTQgbWF4LgotKyAg ICBtX2J1ZmZlci5lbnRlck5vUG9vbChrTm9Qb29sQ29uZExvbmdCcmFuY2hJbnNuc1A4TWF4KTsK LSsgICAgYXNfYmMoKGludDE2X3QpNDQsIEludmVydENvbmRpdGlvbihjb25kKSk7Ci0rICAgIEJ1 ZmZlck9mZnNldCBibyA9IHhzX3RyYXBfdGFnZ2VkKEJDVGFnKTsKLSsgICAgd3JpdGVJbnN0KGxh YmVsLT51c2VkKCkgPyBsYWJlbC0+b2Zmc2V0KCkgOiBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VU KTsKLSsgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0r ICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgd3JpdGVJbnN0KE5vcEluc3QpOwotKyAgICB3 cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKLSsgICAgd3JpdGVJ bnN0KE5vcEluc3QpOwotKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7Ci0rICAgIG1fYnVmZmVyLmxl YXZlTm9Qb29sKCk7Ci0rICAgIGlmICghb29tKCkpIHsKLSsgICAgICBsYWJlbC0+dXNlKGJvLmdl dE9mZnNldCgpKTsKLSsgICAgfQotKyAgfQotKwotKyAgLy8gU2V0IGRlc3QgPSAxIGlmIENSMCBz YXRpc2ZpZXMgY29uZCwgZWxzZSBkZXN0ID0gMC4KLSsgIC8vIFBPV0VSMTA6IHNldGJjL3NldGJj ciAoMSBpbnNuKS4gUDgvUDk6IGlzZWwtYmFzZWQgcGF0aCB3aXRoIHRoZQotKyAgLy8gcjAtYXMt emVybyB0cmljayBvbiB0aGUgQnJhbmNoT25DbGVhciBoYWxmLgotKyAgdm9pZCBtYV9jbXBfc2V0 KFJlZ2lzdGVyIGRlc3QsIENvbmRpdGlvbiBjb25kKSB7Ci0rICAgIHVpbnQzMl90IGJhc2UgPSB1 aW50MzJfdChjb25kKSAmIDB4ZmY7Ci0rICAgIHVpbnQzMl90IHNldGJhc2UgPSAoYmFzZSAmIH5C cmFuY2hPcHRpb25NYXNrKSB8IEJyYW5jaE9uU2V0OwotKyAgICBpZiAoSGFzUE9XRVIxMCgpKSB7 Ci0rICAgICAgaWYgKChiYXNlICYgQnJhbmNoT3B0aW9uTWFzaykgPT0gQnJhbmNoT25TZXQpIHsK LSsgICAgICAgIGFzX3NldGJjKGRlc3QsIHNldGJhc2UsIGNyMCk7Ci0rICAgICAgfSBlbHNlIHsK LSsgICAgICAgIGFzX3NldGJjcihkZXN0LCBzZXRiYXNlLCBjcjApOwotKyAgICAgIH0KLSsgICAg ICByZXR1cm47Ci0rICAgIH0KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRo aXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICB4c19s aShzY3JhdGNoLCAxKTsKLSsgICAgaWYgKChiYXNlICYgQnJhbmNoT3B0aW9uTWFzaykgPT0gQnJh bmNoT25TZXQpIHsKLSsgICAgICB4c19saShkZXN0LCAwKTsKLSsgICAgICBhc19pc2VsKGRlc3Qs IHNjcmF0Y2gsIGRlc3QsIHNldGJhc2UsIGNyMCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgYXNf aXNlbDAoZGVzdCwgcjAsIHNjcmF0Y2gsIHNldGJhc2UsIGNyMCk7Ci0rICAgIH0KLSsgIH0KLSsK LSsgIHZvaWQgbWFfY21wX3NldF9kYmwoUmVnaXN0ZXIgZGVzdCwgRG91YmxlQ29uZGl0aW9uIGNv bmQpIHsKLSsgICAgdWludDMyX3QgYmFzZSA9IHVpbnQzMl90KGNvbmQpICYgMHhmZjsKLSsgICAg Ym9vbCBoYXNVbm9yZGVyZWRGbGFnID0gdWludDMyX3QoY29uZCkgJiBEb3VibGVDb25kaXRpb25V bm9yZGVyZWQ7Ci0rICAgIHVpbnQzMl90IHNldGJhc2UgPSAoYmFzZSAmIH5CcmFuY2hPcHRpb25N YXNrKSB8IEJyYW5jaE9uU2V0OwotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygq dGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGlm IChIYXNQT1dFUjEwKCkpIHsKLSsgICAgICBpZiAoKGJhc2UgJiBCcmFuY2hPcHRpb25NYXNrKSA9 PSBCcmFuY2hPblNldCkgewotKyAgICAgICAgYXNfc2V0YmMoZGVzdCwgc2V0YmFzZSwgY3IwKTsK LSsgICAgICB9IGVsc2UgewotKyAgICAgICAgYXNfc2V0YmNyKGRlc3QsIHNldGJhc2UsIGNyMCk7 Ci0rICAgICAgfQotKyAgICAgIC8vIEZpeHVwIHBhdGhzIGJlbG93IHN0aWxsIG5lZWQgc2NyYXRj aD0xIGZvciB0aGUgU08taXNlbC4KLSsgICAgICBpZiAoaGFzVW5vcmRlcmVkRmxhZyB8fCAoKGJh c2UgJiBCcmFuY2hPcHRpb25NYXNrKSAhPSBCcmFuY2hPblNldCAmJgotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25kICE9IERvdWJsZU9yZGVyZWQpKSB7Ci0rICAgICAgICB4c19s aShzY3JhdGNoLCAxKTsKLSsgICAgICB9Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgeHNfbGkoc2Ny YXRjaCwgMSk7Ci0rICAgICAgaWYgKChiYXNlICYgQnJhbmNoT3B0aW9uTWFzaykgPT0gQnJhbmNo T25TZXQpIHsKLSsgICAgICAgIHhzX2xpKGRlc3QsIDApOwotKyAgICAgICAgYXNfaXNlbChkZXN0 LCBzY3JhdGNoLCBkZXN0LCBzZXRiYXNlLCBjcjApOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAg ICBhc19pc2VsMChkZXN0LCByMCwgc2NyYXRjaCwgc2V0YmFzZSwgY3IwKTsKLSsgICAgICB9Ci0r ICAgIH0KLSsgICAgaWYgKGhhc1Vub3JkZXJlZEZsYWcpIHsKLSsgICAgICAvLyBDb25kaXRpb24g aW5jbHVkZXMgdW5vcmRlcmVkIChOYU4pOiBmb3JjZSBkZXN0PTEgd2hlbiBTTyBpcyBzZXQuCi0r ICAgICAgLy8gaXNlbCBkZXN0LCBzY3JhdGNoKD0xKSwgZGVzdCwgU08KLSsgICAgICBhc19pc2Vs KGRlc3QsIHNjcmF0Y2gsIGRlc3QsIHVpbnQxNl90KFNPQml0KSwgY3IwKTsKLSsgICAgfSBlbHNl IGlmICgoYmFzZSAmIEJyYW5jaE9wdGlvbk1hc2spICE9IEJyYW5jaE9uU2V0ICYmCi0rICAgICAg ICAgICAgICAgY29uZCAhPSBEb3VibGVPcmRlcmVkKSB7Ci0rICAgICAgLy8gT3JkZXJlZCBjb21w YXJpc29uIHRoYXQgbmVnYXRlcyBhIENSIGJpdCAoQnJhbmNoT25DbGVhcik6IE5hTgotKyAgICAg IC8vIHByb2R1Y2VzIGFsbC16ZXJvIExUL0dUL0VRIGJpdHMgd2hpY2ggbWFrZXMgdGhlIG5lZ2F0 aW9uIHJldHVybgotKyAgICAgIC8vIHRydWUuICBGaXggYnkgZm9yY2luZyBkZXN0PTAgd2hlbiBT TyBpcyBzZXQuCi0rICAgICAgYXNfaXNlbDAoZGVzdCwgcjAsIGRlc3QsIHVpbnQxNl90KFNPQml0 KSwgY3IwKTsKLSsgICAgfQotKyAgfQotKwotKyAgLy8gQ29uZGl0aW9uYWwgbW92ZTogaWYgQ1Iw IHNhdGlzZmllcyBjb25kLCBkZXN0ID0gc3JjLgotKyAgdm9pZCBtYV9jbXBfbW92ZShSZWdpc3Rl ciBkZXN0LCBSZWdpc3RlciBzcmMsIENvbmRpdGlvbiBjb25kKSB7Ci0rICAgIHVpbnQzMl90IGJh c2UgPSB1aW50MzJfdChjb25kKSAmIDB4ZmY7Ci0rICAgIHVpbnQzMl90IHNldGJhc2UgPSAoYmFz ZSAmIH5CcmFuY2hPcHRpb25NYXNrKSB8IEJyYW5jaE9uU2V0OwotKyAgICBpZiAoKGJhc2UgJiBC cmFuY2hPcHRpb25NYXNrKSA9PSBCcmFuY2hPblNldCkgewotKyAgICAgIGFzX2lzZWwoZGVzdCwg c3JjLCBkZXN0LCBzZXRiYXNlLCBjcjApOwotKyAgICB9IGVsc2UgewotKyAgICAgIGFzX2lzZWwo ZGVzdCwgZGVzdCwgc3JjLCBzZXRiYXNlLCBjcjApOwotKyAgICB9Ci0rICB9Ci0rCi0rICAvLyBJ ZiBjb25kID09IDAsIG1vdmUgc3JjIHRvIGRzdDsgb3RoZXJ3aXNlIGRzdCBpcyB1bmNoYW5nZWQu IFRoZSBvbmx5Ci0rICAvLyBjYWxsZXJzIGFyZSB3YXNtIHNlbGVjdCwgd2hvc2UgY29uZGl0aW9u IGlzIGEgMzItYml0IHZhbHVlOiB0ZXN0IGl0cwotKyAgLy8gMzItYml0IHNpZ24gd2l0aCBjbXB3 aSBzbyBoaWdoLWJpdCBnYXJiYWdlIChlLmcuIHVuZGVyIHJlZ2lzdGVyIHByZXNzdXJlKQotKyAg Ly8gZG9lcyBub3QgbWFrZSBhIHplcm8gY29uZGl0aW9uIHJlYWQgYXMgbm9uLXplcm8uCi0rICB2 b2lkIG1vdmVJZlplcm8oUmVnaXN0ZXIgZHN0LCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGNvbmQp IHsKLSsgICAgYXNfY21wd2koY29uZCwgMCk7Ci0rICAgIGFzX2lzZWwoZHN0LCBzcmMsIGRzdCwg RXF1YWwsIGNyMCk7Ci0rICB9Ci0rCi0rICB2b2lkIG1hX2FkZDMyVGVzdENhcnJ5KENvbmRpdGlv biBjb25kLCBSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIEltbTMyIGltbSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIG92ZXJmbG93KTsKLSsgIHZvaWQgbWFfYWRkUHRyVGVzdENh cnJ5KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIEltbVdvcmQgaW1t LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG92ZXJmbG93KTsKLSsKLSsgIC8v IElzc3VlIHRoZSBjb3JyZWN0IGNvbXBhcmUgaW5zdHJ1Y3Rpb24gZm9yIHRoZSBnaXZlbiBjb25k aXRpb24gYW5kCi0rICAvLyBvcGVyYW5kIHNpemVzLiBSZXR1cm5zIHRoZSBjb25kaXRpb24gdG8g dXNlIHdpdGggbWFfYiBvciBtYV9jbXBfc2V0Ci0rICAvLyAodXN1YWxseSB0aGUgc2FtZSwgYnV0 IHVuc2lnbmVkIGNvbmRpdGlvbnMgdXNlIGNtcGwqIHZhcmlhbnRzKS4KLSsgIENvbmRpdGlvbiBt YV9jbXAoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIENvbmRpdGlvbiBjb25kLAotKyAgICAg ICAgICAgICAgICAgICBib29sIGlzMzJiaXQgPSBmYWxzZSkgewotKyAgICBDb25kaXRpb24gYmFz ZSA9Ci0rICAgICAgICBzdGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+KENvbmRpdGlvblVu c2lnbmVkIHwgQ29uZGl0aW9uWmVybykpOwotKyAgICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAm IENvbmRpdGlvblVuc2lnbmVkKSAhPSAwOwotKyAgICAvLyBDb25kaXRpb25aZXJvLWZsYWdnZWQg Y29uZGl0aW9ucyAoU2lnbmVkLCBOb3RTaWduZWQsIFplcm8sIE5vblplcm8pCi0rICAgIC8vIHRl c3QgYSBzaW5nbGUgcmVnaXN0ZXIgYWdhaW5zdCB6ZXJvLCBub3QgdHdvIHJlZ2lzdGVycyBhZ2Fp bnN0IGVhY2gKLSsgICAgLy8gb3RoZXIuIENvbXBhcmUgYWdhaW5zdCBpbW1lZGlhdGUgMC4KLSsg ICAgaWYgKChjb25kICYgQ29uZGl0aW9uWmVybykgIT0gMCkgewotKyAgICAgIGlmIChpczMyYml0 KSB7Ci0rICAgICAgICBhc19jbXB3aShsaHMsIDApOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAg ICBhc19jbXBkaShsaHMsIDApOwotKyAgICAgIH0KLSsgICAgICByZXR1cm4gYmFzZTsKLSsgICAg fQotKyAgICBpZiAoaXMzMmJpdCkgewotKyAgICAgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgICAg ICBhc19jbXBsdyhsaHMsIHJocyk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGFzX2NtcHco bGhzLCByaHMpOwotKyAgICAgIH0KLSsgICAgfSBlbHNlIHsKLSsgICAgICBpZiAoaXNVbnNpZ25l ZCkgewotKyAgICAgICAgYXNfY21wbGQobGhzLCByaHMpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAg ICAgICBhc19jbXBkKGxocywgcmhzKTsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAgcmV0dXJuIGJh c2U7Ci0rICB9Ci0rCi0rICBDb25kaXRpb24gbWFfY21wKFJlZ2lzdGVyIGxocywgSW1tMzIgcmhz LCBDb25kaXRpb24gY29uZCwKLSsgICAgICAgICAgICAgICAgICAgYm9vbCBpczMyYml0ID0gZmFs c2UpIHsKLSsgICAgQ29uZGl0aW9uIGJhc2UgPQotKyAgICAgICAgc3RhdGljX2Nhc3Q8Q29uZGl0 aW9uPihjb25kICYgfihDb25kaXRpb25VbnNpZ25lZCB8IENvbmRpdGlvblplcm8pKTsKLSsgICAg Ym9vbCBpc1Vuc2lnbmVkID0gKGNvbmQgJiBDb25kaXRpb25VbnNpZ25lZCkgIT0gMDsKLSsgICAg aWYgKGlzVW5zaWduZWQpIHsKLSsgICAgICBpZiAoaXNfdWludE4ocmhzLnZhbHVlLCAxNikpIHsK LSsgICAgICAgIGlmIChpczMyYml0KSB7Ci0rICAgICAgICAgIGFzX2NtcGx3aShsaHMsIHJocy52 YWx1ZSk7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICBhc19jbXBsZGkobGhzLCByaHMu dmFsdWUpOwotKyAgICAgICAgfQotKyAgICAgICAgcmV0dXJuIGJhc2U7Ci0rICAgICAgfQotKyAg ICB9IGVsc2UgewotKyAgICAgIGlmIChpc19pbnROKHJocy52YWx1ZSwgMTYpKSB7Ci0rICAgICAg ICBpZiAoaXMzMmJpdCkgewotKyAgICAgICAgICBhc19jbXB3aShsaHMsIHJocy52YWx1ZSk7Ci0r ICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICBhc19jbXBkaShsaHMsIHJocy52YWx1ZSk7Ci0r ICAgICAgICB9Ci0rICAgICAgICByZXR1cm4gYmFzZTsKLSsgICAgICB9Ci0rICAgIH0KLSsgICAg Ly8gSW1tZWRpYXRlIGRvZXNuJ3QgZml0IOKAlCBtYXRlcmlhbGl6ZSBpbnRvIHNjcmF0Y2ggYW5k IGNvbXBhcmUuCi0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsg ICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbW92ZTMyKHJocywg c2NyYXRjaCk7Ci0rICAgIHJldHVybiBtYV9jbXAobGhzLCBzY3JhdGNoLCBjb25kLCBpczMyYml0 KTsKLSsgIH0KLSsKLSsgIENvbmRpdGlvbiBtYV9jbXAoUmVnaXN0ZXIgbGhzLCBJbW1Xb3JkIHJo cywgQ29uZGl0aW9uIGNvbmQpIHsKLSsgICAgQ29uZGl0aW9uIGJhc2UgPQotKyAgICAgICAgc3Rh dGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfihDb25kaXRpb25VbnNpZ25lZCB8IENvbmRpdGlv blplcm8pKTsKLSsgICAgYm9vbCBpc1Vuc2lnbmVkID0gKGNvbmQgJiBDb25kaXRpb25VbnNpZ25l ZCkgIT0gMDsKLSsgICAgaWYgKGlzVW5zaWduZWQpIHsKLSsgICAgICBpZiAoaXNfdWludE4ocmhz LnZhbHVlLCAxNikpIHsKLSsgICAgICAgIGFzX2NtcGxkaShsaHMsIHJocy52YWx1ZSk7Ci0rICAg ICAgICByZXR1cm4gYmFzZTsKLSsgICAgICB9Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgaWYgKGlz X2ludE4ocmhzLnZhbHVlLCAxNikpIHsKLSsgICAgICAgIGFzX2NtcGRpKGxocywgcmhzLnZhbHVl KTsKLSsgICAgICAgIHJldHVybiBiYXNlOwotKyAgICAgIH0KLSsgICAgfQotKyAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIocmhzLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJu IG1hX2NtcChsaHMsIHNjcmF0Y2gsIGNvbmQpOwotKyAgfQotKwotKyAgQ29uZGl0aW9uIG1hX2Nt cChSZWdpc3RlciBsaHMsIEltbVB0ciByaHMsIENvbmRpdGlvbiBjb25kKSB7Ci0rICAgIHJldHVy biBtYV9jbXAobGhzLCBJbW1Xb3JkKHVpbnRwdHJfdChyaHMudmFsdWUpKSwgY29uZCk7Ci0rICB9 Ci0rCi0rICBDb25kaXRpb24gbWFfY21wKFJlZ2lzdGVyIGxocywgSW1tR0NQdHIgcmhzLCBDb25k aXRpb24gY29uZCkgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIo cmhzLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIG1hX2NtcChsaHMsIHNjcmF0Y2gsIGNvbmQpOwot KyAgfQotKwotKyAgQ29uZGl0aW9uIG1hX2NtcChSZWdpc3RlciBsaHMsIEltbVRhZyByaHMsIENv bmRpdGlvbiBjb25kKSB7Ci0rICAgIC8vIFRhZyB2YWx1ZXMgb24gUFVOQk9YNjQgYXJlIDE3LWJp dCAoMHgxRkZGMCspLCB0b28gbGFyZ2UgZm9yIDE2LWJpdAotKyAgICAvLyBzaWduZWQgb3IgdW5z aWduZWQgaW1tZWRpYXRlcy4KLSsgICAgQ29uZGl0aW9uIGJhc2UgPQotKyAgICAgICAgc3RhdGlj X2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfihDb25kaXRpb25VbnNpZ25lZCB8IENvbmRpdGlvblpl cm8pKTsKLSsgICAgYm9vbCBpc1Vuc2lnbmVkID0gKGNvbmQgJiBDb25kaXRpb25VbnNpZ25lZCkg IT0gMDsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlMzIoSW1tMzIocmhz LnZhbHVlKSwgc2NyYXRjaCk7Ci0rICAgIGlmIChpc1Vuc2lnbmVkKSB7Ci0rICAgICAgYXNfY21w bGQobGhzLCBzY3JhdGNoKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBhc19jbXBkKGxocywgc2Ny YXRjaCk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIGJhc2U7Ci0rICB9Ci0rCi0rICAvLyBDb21wYXJl IGEgdGFnIHJlZ2lzdGVyIGFnYWluc3QgYW4gSW1tVGFnIGNvbnN0YW50IGFuZCBicmFuY2gsIFdJ VEhPVVQKLSsgIC8vIGFjcXVpcmluZyBhIHNjcmF0Y2ggcmVnaXN0ZXIuICBVc2VzIHhvcmlzK2Nt cGx3aSB3aGljaCBNT0RJRklFUyB0YWdSZWcuCi0rICAvLyBPbmx5IHNhZmUgd2hlbiB0YWdSZWcg aXMgYSBzY3JhdGNoIHJlZ2lzdGVyIG93bmVkIGJ5IHRoZSBjYWxsZXIuCi0rICB2b2lkIGJyYW5j aFRlc3RUYWcoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHRhZ1JlZywgSW1tVGFnIHRhZywgTGFi ZWwqIGxhYmVsKSB7Ci0rICAgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5v dEVxdWFsKTsKLSsgICAgdWludDMyX3QgdCA9IHRhZy52YWx1ZTsKLSsgICAgYXNfeG9yaXModGFn UmVnLCB0YWdSZWcsIHQgPj4gMTYpOwotKyAgICBhc19jbXBsd2kodGFnUmVnLCB0ICYgMHhGRkZG KTsKLSsgICAgQ29uZGl0aW9uIGMgPSAoY29uZCA9PSBFcXVhbCkgPyBFcXVhbCA6IE5vdEVxdWFs OwotKyAgICBtYV9iKGMsIGxhYmVsKTsKLSsgIH0KLSsKLSsgIHZvaWQgbWFfbW9kX21hc2soUmVn aXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LCBSZWdpc3RlciBob2xkLCBSZWdpc3RlciByZW1haW4s Ci0rICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc2hpZnQsIExhYmVsKiBuZWdaZXJvID0gbnVs bHB0cik7Ci0rCi0rICB2b2lkIG5vcCgpIHsgd3JpdGVJbnN0KE5vcEluc3QpOyB9Ci0rICB2b2lk IGJyZWFrcG9pbnQodWludDMyX3QgdmFsdWUgPSAwKSB7IHhzX3RyYXAoKTsgfQotKwotKyAgaW5s aW5lIHZvaWQgcmV0bihJbW0zMiBuKTsKLSsKLSsgIC8vID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAgLy8gU3RhY2sgb3Bl cmF0aW9ucwotKwotKyAgdm9pZCBwdXNoKEltbTMyIGltbSkgewotKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICAgIG1vdmUzMihpbW0sIHNjcmF0Y2gpOwotKyAgICBwdXNoKHNjcmF0Y2gp OwotKyAgfQotKyAgdm9pZCBwdXNoKEltbVdvcmQgaW1tKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKLSsgICAgbW92ZVB0cihpbW0sIHNjcmF0Y2gpOwotKyAgICBwdXNoKHNjcmF0Y2gp OwotKyAgfQotKyAgdm9pZCBwdXNoKEltbUdDUHRyIGltbSkgewotKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIoaW1tLCBzY3JhdGNoKTsKLSsgICAgcHVzaChzY3JhdGNo KTsKLSsgIH0KLSsgIHZvaWQgcHVzaChjb25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7Ci0rICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbG9hZFB0cihhZGRyZXNzLCBzY3JhdGNoKTsKLSsg ICAgcHVzaChzY3JhdGNoKTsKLSsgIH0KLSsgIHZvaWQgcHVzaChSZWdpc3RlciByZWcpIHsgYXNf c3RkdShyZWcsIFN0YWNrUG9pbnRlciwgLTgpOyB9Ci0rICB2b2lkIHB1c2goRmxvYXRSZWdpc3Rl ciByZWcpIHsKLSsgICAgLy8gc3RmZHUvc3Rmc3UgZnVzZXMgdGhlIFNQIGRlY3JlbWVudCBhbmQg dGhlIEZQIHN0b3JlOiBFQT1TUC04LAotKyAgICAvLyBNRU1bRUFdPXJlZywgU1A9RUEuIDEgaW5z biBpbnN0ZWFkIG9mIGFkZGkrc3RmZC9zdGZzLgotKyAgICBpZiAocmVnLmlzU2luZ2xlKCkpIHsK LSsgICAgICBhc19zdGZzdShyZWcsIFN0YWNrUG9pbnRlciwgLTgpOwotKyAgICB9IGVsc2Ugewot KyAgICAgIGFzX3N0ZmR1KHJlZywgU3RhY2tQb2ludGVyLCAtOCk7Ci0rICAgIH0KLSsgIH0KLSsg IHZvaWQgcG9wKFJlZ2lzdGVyIHJlZykgewotKyAgICBhc19sZChyZWcsIFN0YWNrUG9pbnRlciwg MCk7Ci0rICAgIGFzX2FkZGkoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIsIDgpOwotKyAgfQot KyAgdm9pZCBwb3AoRmxvYXRSZWdpc3RlciByZWcpIHsKLSsgICAgaWYgKHJlZy5pc1NpbmdsZSgp KSB7Ci0rICAgICAgYXNfbGZzKHJlZywgU3RhY2tQb2ludGVyLCAwKTsKLSsgICAgfSBlbHNlIHsK LSsgICAgICBhc19sZmQocmVnLCBTdGFja1BvaW50ZXIsIDApOwotKyAgICB9Ci0rICAgIGFzX2Fk ZGkoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIsIDgpOwotKyAgfQotKwotKyAgQ29kZU9mZnNl dCBwdXNoV2l0aFBhdGNoKEltbVdvcmQgaW1tKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgICAgQ29kZU9mZnNldCBvZmZzZXQgPSBtb3ZXaXRoUGF0Y2goaW1tLCBzY3JhdGNoKTsK LSsgICAgcHVzaChzY3JhdGNoKTsKLSsgICAgcmV0dXJuIG9mZnNldDsKLSsgIH0KLSsgIENvZGVP ZmZzZXQgbW92V2l0aFBhdGNoKEltbVdvcmQgaW1tLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIEJ1 ZmZlck9mZnNldCBibyA9IGVtaXRMb2FkNjRTdGFuemEoZGVzdCwgKHVpbnQ2NF90KWltbS52YWx1 ZSk7Ci0rICAgIHJldHVybiBDb2RlT2Zmc2V0KGJvLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIENv ZGVPZmZzZXQgbW92V2l0aFBhdGNoKEltbVB0ciBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAg cmV0dXJuIG1vdldpdGhQYXRjaChJbW1Xb3JkKHVpbnRwdHJfdChpbW0udmFsdWUpKSwgZGVzdCk7 Ci0rICB9Ci0rCi0rICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgIC8vIFRhZy91bmJveCBvcGVyYXRpb25zCi0rCi0r ICB2b2lkIHNwbGl0VGFnKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICB4X3Ny ZGkoZGVzdCwgc3JjLCBKU1ZBTF9UQUdfU0hJRlQpOwotKyAgfQotKyAgdm9pZCBzcGxpdFRhZyhj b25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgc3BsaXRU YWcob3BlcmFuZC52YWx1ZVJlZygpLCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgc3BsaXRUYWdGb3JU ZXN0KGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsIFNjcmF0Y2hUYWdTY29wZSYgdGFnKSB7Ci0r ICAgIHNwbGl0VGFnKHZhbHVlLCB0YWcpOwotKyAgfQotKwotKyAgdm9pZCB1bmJveE5vbkRvdWJs ZShjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIFJlZ2lzdGVyIGRlc3QsCi0rICAgICAgICAg ICAgICAgICAgICAgIEpTVmFsdWVUeXBlIHR5cGUpIHsKLSsgICAgdW5ib3hOb25Eb3VibGUob3Bl cmFuZC52YWx1ZVJlZygpLCBkZXN0LCB0eXBlKTsKLSsgIH0KLSsgIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgotKyAgdm9pZCB1bmJveE5vbkRvdWJsZShUIHNyYywgUmVnaXN0ZXIgZGVzdCwgSlNWYWx1 ZVR5cGUgdHlwZSkgewotKyAgICBNT1pfQVNTRVJUKHR5cGUgIT0gSlNWQUxfVFlQRV9ET1VCTEUp OwotKyAgICBpZiAodHlwZSA9PSBKU1ZBTF9UWVBFX0lOVDMyIHx8IHR5cGUgPT0gSlNWQUxfVFlQ RV9CT09MRUFOKSB7Ci0rICAgICAgbG9hZDMyKHNyYywgZGVzdCk7Ci0rICAgICAgcmV0dXJuOwot KyAgICB9Ci0rICAgIGxvYWRQdHIoc3JjLCBkZXN0KTsKLSsgICAgdW5ib3hOb25Eb3VibGUoZGVz dCwgZGVzdCwgdHlwZSk7Ci0rICB9Ci0rICB2b2lkIHVuYm94Tm9uRG91YmxlKFJlZ2lzdGVyIHNy YywgUmVnaXN0ZXIgZGVzdCwgSlNWYWx1ZVR5cGUgdHlwZSkgewotKyAgICBNT1pfQVNTRVJUKHR5 cGUgIT0gSlNWQUxfVFlQRV9ET1VCTEUpOwotKyAgICBpZiAodHlwZSA9PSBKU1ZBTF9UWVBFX0lO VDMyIHx8IHR5cGUgPT0gSlNWQUxfVFlQRV9CT09MRUFOKSB7Ci0rICAgICAgYXNfZXh0c3coZGVz dCwgc3JjKTsKLSsgICAgICByZXR1cm47Ci0rICAgIH0KLSsgICAgLy8gRXh0cmFjdCB0aGUgcGF5 bG9hZCAobG93ZXIgNDcgYml0cykgYnkgY2xlYXJpbmcgdGhlIHRhZy4KLSsgICAgLy8gVGhpcyBh dm9pZHMgYWNxdWlyaW5nIGEgc2NyYXRjaCByZWdpc3RlciwgcHJldmVudGluZyBwb29sIGV4aGF1 c3Rpb24KLSsgICAgLy8gd2hlbiBjYWxsZWQgZnJvbSBuZXN0ZWQgc2NyYXRjaCBzY29wZXMgKGUu Zy4sIFNjcmF0Y2hUYWdTY29wZSDihpIKLSsgICAgLy8gYnJhbmNoVGVzdFN0cmluZ1RydXRoeSDi hpIgdW5ib3hTdHJpbmcg4oaSIGhlcmUpLgotKyAgICAvLyBybGRpY2wgZGVzdCwgc3JjLCAwLCAx NyDigJQgY2xlYXIgdXBwZXIgMTcgYml0cyAodGFnKSwga2VlcCBsb3dlciA0Ny4KLSsgICAgYXNf cmxkaWNsKGRlc3QsIHNyYywgMCwgMTcpOwotKyAgfQotKyAgdm9pZCB1bmJveEdDVGhpbmdGb3JH Q0JhcnJpZXIoY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGxvYWRQ dHIoc3JjLCBkZXN0KTsKLSsgICAgLy8gQ2xlYXIgdGFnIGJpdHMgKHRvcCAxNyBiaXRzIG9uIDY0 LWJpdCkuCi0rICAgIGFzX3JsZGljbChkZXN0LCBkZXN0LCAwLCA2NCAtIEpTVkFMX1RBR19TSElG VCk7Ci0rICB9Ci0rICB2b2lkIHVuYm94R0NUaGluZ0ZvckdDQmFycmllcihjb25zdCBWYWx1ZU9w ZXJhbmQmIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBhc19ybGRpY2woZGVzdCwgc3JjLnZh bHVlUmVnKCksIDAsIDY0IC0gSlNWQUxfVEFHX1NISUZUKTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hX YXNtQW55UmVmR0NUaGluZ0ZvckdDQmFycmllcihjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVy IGRlc3QpIHsKLSsgICAgc3RhdGljX2Fzc2VydCh3YXNtOjpBbnlSZWY6OlRhZ1NoaWZ0ID09IDIp OwotKyAgICBsb2FkUHRyKHNyYywgZGVzdCk7Ci0rICAgIGFzX3JsZGljcihkZXN0LCBkZXN0LCAw LCA2MSk7Ci0rICB9Ci0rICB2b2lkIGdldEdDVGhpbmdWYWx1ZUNodW5rKGNvbnN0IEFkZHJlc3Mm IHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBsb2FkUHRyKHNyYywgZGVzdCk7Ci0rICAgIGFz X3JsZGljbChkZXN0LCBkZXN0LCAwLCAxNyk7Ci0rICAgIGFzX3JsZGljcihkZXN0LCBkZXN0LCAw LCA0Myk7Ci0rICB9Ci0rICB2b2lkIGdldEdDVGhpbmdWYWx1ZUNodW5rKGNvbnN0IFZhbHVlT3Bl cmFuZCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGFzX3JsZGljbChkZXN0LCBzcmMudmFs dWVSZWcoKSwgMCwgMTcpOwotKyAgICBhc19ybGRpY3IoZGVzdCwgZGVzdCwgMCwgNDMpOwotKyAg fQotKwotKyAgdm9pZCBib3hEb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIGNvbnN0IFZhbHVlT3Bl cmFuZCYgZGVzdCwgRmxvYXRSZWdpc3RlcikgewotKyAgICBhc19tZnZzcmQoZGVzdC52YWx1ZVJl ZygpLCBzcmMpOwotKyAgfQotKyAgdm9pZCBib3hOb25Eb3VibGUoSlNWYWx1ZVR5cGUgdHlwZSwg UmVnaXN0ZXIgc3JjLCBjb25zdCBWYWx1ZU9wZXJhbmQmIGRlc3QpIHsKLSsgICAgYm94VmFsdWUo dHlwZSwgc3JjLCBkZXN0LnZhbHVlUmVnKCkpOwotKyAgfQotKyAgdm9pZCBib3hOb25Eb3VibGUo UmVnaXN0ZXIgdHlwZSwgUmVnaXN0ZXIgc3JjLCBjb25zdCBWYWx1ZU9wZXJhbmQmIGRlc3QpIHsK LSsgICAgYm94VmFsdWUodHlwZSwgc3JjLCBkZXN0LnZhbHVlUmVnKCkpOwotKyAgfQotKyAgdm9p ZCB1bmJveEludDMyKGNvbnN0IFZhbHVlT3BlcmFuZCYgb3BlcmFuZCwgUmVnaXN0ZXIgZGVzdCkg ewotKyAgICBhc19leHRzdyhkZXN0LCBvcGVyYW5kLnZhbHVlUmVnKCkpOwotKyAgfQotKyAgdm9p ZCB1bmJveEludDMyKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeyBsb2FkMzIo c3JjLCBkZXN0KTsgfQotKyAgdm9pZCB1bmJveEludDMyKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBS ZWdpc3RlciBkZXN0KSB7IGxvYWQzMihzcmMsIGRlc3QpOyB9Ci0rICB2b2lkIHVuYm94Qm9vbGVh bihjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgYXNf ZXh0c3coZGVzdCwgb3BlcmFuZC52YWx1ZVJlZygpKTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hCb29s ZWFuKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeyBsb2FkMzIoc3JjLCBkZXN0 KTsgfQotKyAgdm9pZCB1bmJveEJvb2xlYW4oY29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVy IGRlc3QpIHsgbG9hZDMyKHNyYywgZGVzdCk7IH0KLSsgIHZvaWQgdW5ib3hEb3VibGUoY29uc3Qg VmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgYXNfbXR2 c3JkKGRlc3QsIG9wZXJhbmQudmFsdWVSZWcoKSk7Ci0rICB9Ci0rICB2b2lkIHVuYm94RG91Ymxl KGNvbnN0IEFkZHJlc3MmIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGxvYWREb3Vi bGUoc3JjLCBkZXN0KTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hEb3VibGUoY29uc3QgQmFzZUluZGV4 JiBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgICBsb2FkRG91YmxlKHNyYywgZGVzdCk7 Ci0rICB9Ci0rICB2b2lkIHVuYm94U3RyaW5nKGNvbnN0IFZhbHVlT3BlcmFuZCYgb3BlcmFuZCwg UmVnaXN0ZXIgZGVzdCkgewotKyAgICB1bmJveE5vbkRvdWJsZShvcGVyYW5kLCBkZXN0LCBKU1ZB TF9UWVBFX1NUUklORyk7Ci0rICB9Ci0rICB2b2lkIHVuYm94U3RyaW5nKGNvbnN0IEFkZHJlc3Mm IHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICB1bmJveE5vbkRvdWJsZShzcmMsIGRlc3QsIEpT VkFMX1RZUEVfU1RSSU5HKTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hTeW1ib2woY29uc3QgVmFsdWVP cGVyYW5kJiBvcGVyYW5kLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIHVuYm94Tm9uRG91YmxlKG9w ZXJhbmQsIGRlc3QsIEpTVkFMX1RZUEVfU1lNQk9MKTsKLSsgIH0KLSsgIHZvaWQgdW5ib3hTeW1i b2woY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIHVuYm94Tm9uRG91 YmxlKHNyYywgZGVzdCwgSlNWQUxfVFlQRV9TWU1CT0wpOwotKyAgfQotKyAgdm9pZCB1bmJveEJp Z0ludChjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAg dW5ib3hOb25Eb3VibGUob3BlcmFuZCwgZGVzdCwgSlNWQUxfVFlQRV9CSUdJTlQpOwotKyAgfQot KyAgdm9pZCB1bmJveEJpZ0ludChjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsK LSsgICAgdW5ib3hOb25Eb3VibGUoc3JjLCBkZXN0LCBKU1ZBTF9UWVBFX0JJR0lOVCk7Ci0rICB9 Ci0rICB2b2lkIHVuYm94T2JqZWN0KGNvbnN0IFZhbHVlT3BlcmFuZCYgc3JjLCBSZWdpc3RlciBk ZXN0KSB7Ci0rICAgIHVuYm94Tm9uRG91YmxlKHNyYywgZGVzdCwgSlNWQUxfVFlQRV9PQkpFQ1Qp OwotKyAgfQotKyAgdm9pZCB1bmJveE9iamVjdChjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVy IGRlc3QpIHsKLSsgICAgdW5ib3hOb25Eb3VibGUoc3JjLCBkZXN0LCBKU1ZBTF9UWVBFX09CSkVD VCk7Ci0rICB9Ci0rICB2b2lkIHVuYm94T2JqZWN0KGNvbnN0IEJhc2VJbmRleCYgc3JjLCBSZWdp c3RlciBkZXN0KSB7Ci0rICAgIHVuYm94Tm9uRG91YmxlKHNyYywgZGVzdCwgSlNWQUxfVFlQRV9P QkpFQ1QpOwotKyAgfQotKyAgdm9pZCB1bmJveFZhbHVlKGNvbnN0IFZhbHVlT3BlcmFuZCYgc3Jj LCBBbnlSZWdpc3RlciBkZXN0LCBKU1ZhbHVlVHlwZSB0eXBlKSB7Ci0rICAgIGlmIChkZXN0Lmlz RmxvYXQoKSkgewotKyAgICAgIHVuYm94RG91YmxlKHNyYywgZGVzdC5mcHUoKSk7Ci0rICAgIH0g ZWxzZSB7Ci0rICAgICAgdW5ib3hOb25Eb3VibGUoc3JjLCBkZXN0LmdwcigpLCB0eXBlKTsKLSsg ICAgfQotKyAgfQotKyAgdm9pZCB1bmJveE9iamVjdE9yTnVsbChjb25zdCBBZGRyZXNzJiBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgbG9hZFB0cihzcmMsIGRlc3QpOwotKyAgICAvLyBPYmpl Y3QgcG9pbnRlcnMgaGF2ZSB0aGUgb2JqZWN0IHRhZyBpbiBoaWdoIGJpdHM7IG51bGwgaGFzIGEg ZGlmZmVyZW50Ci0rICAgIC8vIHRhZy4gQ2xlYXIgdGhlIHRvcCBiaXRzIHRvIGdldCBlaXRoZXIg YSB2YWxpZCBwb2ludGVyIG9yIHplcm8uCi0rICAgIGFzX3JsZGljbChkZXN0LCBkZXN0LCAwLCA2 NCAtIEpTVkFMX1RBR19TSElGVCk7Ci0rICB9Ci0rCi0rICB2b2lkIHRhZ1ZhbHVlKEpTVmFsdWVU eXBlIHR5cGUsIFJlZ2lzdGVyIHBheWxvYWQsIFZhbHVlT3BlcmFuZCBkZXN0KSB7Ci0rICAgIE1P Wl9BU1NFUlQodHlwZSAhPSBKU1ZBTF9UWVBFX1VOREVGSU5FRCAmJiB0eXBlICE9IEpTVkFMX1RZ UEVfTlVMTCk7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsg ICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgTU9aX0FTU0VSVChz Y3JhdGNoICE9IHBheWxvYWQgJiYgc2NyYXRjaCAhPSBkZXN0LnZhbHVlUmVnKCkpOwotKyAgICB0 YWdWYWx1ZVdpdGhTY3JhdGNoKHR5cGUsIHBheWxvYWQsIGRlc3QsIHNjcmF0Y2gpOwotKyAgfQot KyAgdm9pZCB0YWdWYWx1ZVdpdGhTY3JhdGNoKEpTVmFsdWVUeXBlIHR5cGUsIFJlZ2lzdGVyIHBh eWxvYWQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVPcGVyYW5kIGRlc3QsIFJl Z2lzdGVyIHNjcmF0Y2gpIHsKLSsgICAgbW92ZVB0cihJbW1TaGlmdGVkVGFnKHR5cGUpLCBzY3Jh dGNoKTsKLSsgICAgaWYgKHR5cGUgPT0gSlNWQUxfVFlQRV9JTlQzMiB8fCB0eXBlID09IEpTVkFM X1RZUEVfQk9PTEVBTiB8fAotKyAgICAgICAgdHlwZSA9PSBKU1ZBTF9UWVBFX01BR0lDKSB7Ci0r ICAgICAgaWYgKHBheWxvYWQgIT0gZGVzdC52YWx1ZVJlZygpKSB7Ci0rICAgICAgICBtb3ZlUHRy KHBheWxvYWQsIGRlc3QudmFsdWVSZWcoKSk7Ci0rICAgICAgfQotKyAgICAgIGFzX3JsZGljbChk ZXN0LnZhbHVlUmVnKCksIGRlc3QudmFsdWVSZWcoKSwgMCwgMzIpOwotKyAgICAgIGFzX29yXyhk ZXN0LnZhbHVlUmVnKCksIGRlc3QudmFsdWVSZWcoKSwgc2NyYXRjaCk7Ci0rICAgIH0gZWxzZSB7 Ci0rICAgICAgaWYgKHBheWxvYWQgIT0gZGVzdC52YWx1ZVJlZygpKSB7Ci0rICAgICAgICBtb3Zl UHRyKHBheWxvYWQsIGRlc3QudmFsdWVSZWcoKSk7Ci0rICAgICAgfQotKyAgICAgIGFzX29yXyhk ZXN0LnZhbHVlUmVnKCksIGRlc3QudmFsdWVSZWcoKSwgc2NyYXRjaCk7Ci0rICAgIH0KLSsgIH0K LSsgIHZvaWQgYm94VmFsdWUoSlNWYWx1ZVR5cGUgdHlwZSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0KSB7Ci0rICAgIE1PWl9BU1NFUlQoc3JjICE9IGRlc3QpOwotKyAgICBNT1pfQVNTRVJU KHR5cGUgIT0gSlNWQUxfVFlQRV9VTkRFRklORUQgJiYgdHlwZSAhPSBKU1ZBTF9UWVBFX05VTEwp OwotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGJveFZhbHVlV2l0aFNjcmF0Y2go dHlwZSwgc3JjLCBkZXN0LCBzY3JhdGNoKTsKLSsgIH0KLSsgIHZvaWQgYm94VmFsdWVXaXRoU2Ny YXRjaChKU1ZhbHVlVHlwZSB0eXBlLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCkgewotKyAgICBpZiAodHlw ZSA9PSBKU1ZBTF9UWVBFX0lOVDMyIHx8IHR5cGUgPT0gSlNWQUxfVFlQRV9CT09MRUFOIHx8Ci0r ICAgICAgICB0eXBlID09IEpTVkFMX1RZUEVfTUFHSUMpIHsKLSsgICAgICBhc19ybGRpY2woZGVz dCwgc3JjLCAwLCAzMik7Ci0rICAgICAgbW92ZVB0cihJbW1TaGlmdGVkVGFnKHR5cGUpLCBzY3Jh dGNoKTsKLSsgICAgICBhc19vcl8oZGVzdCwgZGVzdCwgc2NyYXRjaCk7Ci0rICAgIH0gZWxzZSB7 Ci0rICAgICAgbW92ZVB0cihJbW1TaGlmdGVkVGFnKHR5cGUpLCBzY3JhdGNoKTsKLSsgICAgICB4 c19tcihkZXN0LCBzcmMpOwotKyAgICAgIGFzX29yXyhkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSsg ICAgfQotKyAgfQotKyAgdm9pZCBib3hWYWx1ZShSZWdpc3RlciB0eXBlLCBSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgTU9aX0FTU0VSVChzcmMgIT0gZGVzdCk7Ci0rCi0rI2lm ZGVmIERFQlVHCi0rICAgIExhYmVsIGRvbmUsIGlzTnVsbE9yVW5kZWZpbmVkLCBpc0Jvb2xlYW4s IGlzSW50MzJPck1hZ2ljOwotKwotKyAgICAvLyBVc2UgbWFfY21wICsgbWFfYiBpbnN0ZWFkIG9m IGFzTWFzbSgpLmJyYW5jaDMyKCkgYmVjYXVzZQotKyAgICAvLyBNYWNyb0Fzc2VtYmxlciBpcyBu b3QgeWV0IGZ1bGx5IGRlZmluZWQgYXQgdGhpcyBwb2ludC4KLSsgICAgQ29uZGl0aW9uIGNvbmQ7 Ci0rICAgIGNvbmQgPSBtYV9jbXAodHlwZSwgSW1tMzIoSlNWQUxfVFlQRV9OVUxMKSwgRXF1YWws IHRydWUpOwotKyAgICBtYV9iKGNvbmQsICZpc051bGxPclVuZGVmaW5lZCk7Ci0rICAgIGNvbmQg PSBtYV9jbXAodHlwZSwgSW1tMzIoSlNWQUxfVFlQRV9VTkRFRklORUQpLCBFcXVhbCwgdHJ1ZSk7 Ci0rICAgIG1hX2IoY29uZCwgJmlzTnVsbE9yVW5kZWZpbmVkKTsKLSsgICAgY29uZCA9IG1hX2Nt cCh0eXBlLCBJbW0zMihKU1ZBTF9UWVBFX0JPT0xFQU4pLCBFcXVhbCwgdHJ1ZSk7Ci0rICAgIG1h X2IoY29uZCwgJmlzQm9vbGVhbik7Ci0rICAgIGNvbmQgPSBtYV9jbXAodHlwZSwgSW1tMzIoSlNW QUxfVFlQRV9JTlQzMiksIEVxdWFsLCB0cnVlKTsKLSsgICAgbWFfYihjb25kLCAmaXNJbnQzMk9y TWFnaWMpOwotKyAgICBjb25kID0gbWFfY21wKHR5cGUsIEltbTMyKEpTVkFMX1RZUEVfTUFHSUMp LCBFcXVhbCwgdHJ1ZSk7Ci0rICAgIG1hX2IoY29uZCwgJmlzSW50MzJPck1hZ2ljKTsKLSsgICAg Ly8gR0NUaGluZyB0eXBlcyBhcmVuJ3Qgc3VwcG9ydGVkLCBiZWNhdXNlIGFzX3JsZGljbCB0cnVu Y2F0ZXMKLSsgICAgLy8gcGF5bG9hZHMgYWJvdmUgVUlOVDMyX01BWC4KLSsgICAgYnJlYWtwb2lu dCgpOwotKyAgICB7Ci0rICAgICAgYmluZCgmaXNOdWxsT3JVbmRlZmluZWQpOwotKwotKyAgICAg IC8vIEVuc3VyZSBubyBwYXlsb2FkIGZvciBudWxsIGFuZCB1bmRlZmluZWQuCi0rICAgICAgY29u ZCA9IG1hX2NtcChzcmMsIEltbVdvcmQoMCksIEVxdWFsKTsKLSsgICAgICBtYV9iKGNvbmQsICZk b25lKTsKLSsgICAgICBicmVha3BvaW50KCk7Ci0rICAgIH0KLSsgICAgewotKyAgICAgIGJpbmQo JmlzQm9vbGVhbik7Ci0rCi0rICAgICAgLy8gRW5zdXJlIGJvb2xlYW4gdmFsdWVzIGFyZSBlaXRo ZXIgMCBvciAxLgotKyAgICAgIGNvbmQgPSBtYV9jbXAoc3JjLCBJbW0zMigxKSwgQmVsb3dPckVx dWFsLCB0cnVlKTsKLSsgICAgICBtYV9iKGNvbmQsICZkb25lKTsKLSsgICAgICBicmVha3BvaW50 KCk7Ci0rICAgIH0KLSsgICAgewotKyAgICAgIGJpbmQoJmlzSW50MzJPck1hZ2ljKTsKLSsKLSsg ICAgICAvLyBFbnN1cmUgfHNyY3wgaXMgc2lnbi1leHRlbmRlZC4KLSsgICAgICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSBkZWJ1Z1RlbXBzKCp0aGlzKTsKLSsgICAgICBSZWdpc3RlciBkZWJ1Z1Nj cmF0Y2ggPSBkZWJ1Z1RlbXBzLkFjcXVpcmUoKTsKLSsgICAgICBhc19leHRzdyhkZWJ1Z1NjcmF0 Y2gsIHNyYyk7Ci0rICAgICAgY29uZCA9IG1hX2NtcChzcmMsIGRlYnVnU2NyYXRjaCwgRXF1YWwp OwotKyAgICAgIG1hX2IoY29uZCwgJmRvbmUpOwotKyAgICAgIGJyZWFrcG9pbnQoKTsKLSsgICAg fQotKyAgICBiaW5kKCZkb25lKTsKLSsjZW5kaWYKLSsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCAmJiBzY3JhdGNoICE9IHNyYyAm JiBzY3JhdGNoICE9IHR5cGUpOwotKyAgICAvLyBCdWlsZCB0YWc6ICh0eXBlIHwgSlNWQUxfVEFH X01BWF9ET1VCTEUpIDw8IEpTVkFMX1RBR19TSElGVAotKyAgICBtb3ZlMzIoSW1tMzIoSlNWQUxf VEFHX01BWF9ET1VCTEUpLCBzY3JhdGNoKTsKLSsgICAgYXNfb3JfKHNjcmF0Y2gsIHNjcmF0Y2gs IHR5cGUpOwotKyAgICB4X3NsZGkoc2NyYXRjaCwgc2NyYXRjaCwgSlNWQUxfVEFHX1NISUZUKTsK LSsgICAgLy8gSW5zZXJ0IDMyLWJpdCBwYXlsb2FkLgotKyAgICBhc19ybGRpY2woZGVzdCwgc3Jj LCAwLCAzMik7Ci0rICAgIGFzX29yXyhkZXN0LCBkZXN0LCBzY3JhdGNoKTsKLSsgIH0KLSsKLSsg IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAgLy8gVmFsdWUgc3RvcmUvbG9hZC9wdXNoL3BvcAotKwotKyAgdm9pZCBz dG9yZVZhbHVlKFZhbHVlT3BlcmFuZCB2YWwsIGNvbnN0IEFkZHJlc3MmIGRlc3QpIHsKLSsgICAg c3RvcmVQdHIodmFsLnZhbHVlUmVnKCksIGRlc3QpOwotKyAgfQotKyAgdm9pZCBzdG9yZVZhbHVl KFZhbHVlT3BlcmFuZCB2YWwsIGNvbnN0IEJhc2VJbmRleCYgZGVzdCkgewotKyAgICBzdG9yZVB0 cih2YWwudmFsdWVSZWcoKSwgZGVzdCk7Ci0rICB9Ci0rICB2b2lkIHN0b3JlVmFsdWUoSlNWYWx1 ZVR5cGUgdHlwZSwgUmVnaXN0ZXIgcmVnLCBBZGRyZXNzIGRlc3QpIHsKLSsgICAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOwotKyAgICBNT1pfQVNTRVJUKGRlc3QuYmFzZSAhPSBzY3JhdGNoKTsKLSsg ICAgYm94VmFsdWUodHlwZSwgcmVnLCBzY3JhdGNoKTsKLSsgICAgc3RvcmVQdHIoc2NyYXRjaCwg ZGVzdCk7Ci0rICB9Ci0rICB2b2lkIHN0b3JlVmFsdWUoSlNWYWx1ZVR5cGUgdHlwZSwgUmVnaXN0 ZXIgcmVnLCBCYXNlSW5kZXggZGVzdCkgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0r ICAgIE1PWl9BU1NFUlQoZGVzdC5iYXNlICE9IHNjcmF0Y2gpOwotKyAgICBib3hWYWx1ZSh0eXBl LCByZWcsIHNjcmF0Y2gpOwotKyAgICBzdG9yZVB0cihzY3JhdGNoLCBkZXN0KTsKLSsgIH0KLSsg IHZvaWQgc3RvcmVWYWx1ZShjb25zdCBWYWx1ZSYgdmFsLCBBZGRyZXNzIGRlc3QpIHsKLSsgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBNT1pfQVNTRVJUKGRlc3QuYmFzZSAhPSBzY3Jh dGNoKTsKLSsgICAgaWYgKHZhbC5pc0dDVGhpbmcoKSkgewotKyAgICAgIENvZGVPZmZzZXQgb2Zm ID0gbW92V2l0aFBhdGNoKEltbVdvcmQodmFsLmFzUmF3Qml0cygpKSwgc2NyYXRjaCk7Ci0rICAg ICAgd3JpdGVEYXRhUmVsb2NhdGlvbihvZmYsIHZhbCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAg bW92ZVB0cihJbW1Xb3JkKHZhbC5hc1Jhd0JpdHMoKSksIHNjcmF0Y2gpOwotKyAgICB9Ci0rICAg IHN0b3JlUHRyKHNjcmF0Y2gsIGRlc3QpOwotKyAgfQotKyAgdm9pZCBzdG9yZVZhbHVlKGNvbnN0 IFZhbHVlJiB2YWwsIEJhc2VJbmRleCBkZXN0KSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgICAgTU9aX0FTU0VSVChkZXN0LmJhc2UgIT0gc2NyYXRjaCk7Ci0rICAgIGlmICh2YWwu aXNHQ1RoaW5nKCkpIHsKLSsgICAgICBDb2RlT2Zmc2V0IG9mZiA9IG1vdldpdGhQYXRjaChJbW1X b3JkKHZhbC5hc1Jhd0JpdHMoKSksIHNjcmF0Y2gpOwotKyAgICAgIHdyaXRlRGF0YVJlbG9jYXRp b24ob2ZmLCB2YWwpOwotKyAgICB9IGVsc2UgewotKyAgICAgIG1vdmVQdHIoSW1tV29yZCh2YWwu YXNSYXdCaXRzKCkpLCBzY3JhdGNoKTsKLSsgICAgfQotKyAgICBzdG9yZVB0cihzY3JhdGNoLCBk ZXN0KTsKLSsgIH0KLSsgIHZvaWQgc3RvcmVWYWx1ZShjb25zdCBBZGRyZXNzJiBzcmMsIGNvbnN0 IEFkZHJlc3MmIGRlc3QsIFJlZ2lzdGVyIHRlbXApIHsKLSsgICAgbG9hZFB0cihzcmMsIHRlbXAp OwotKyAgICBzdG9yZVB0cih0ZW1wLCBkZXN0KTsKLSsgIH0KLSsKLSsgIHZvaWQgc3RvcmVQcml2 YXRlVmFsdWUoUmVnaXN0ZXIgc3JjLCBjb25zdCBBZGRyZXNzJiBkZXN0KSB7Ci0rICAgIHN0b3Jl UHRyKHNyYywgZGVzdCk7Ci0rICB9Ci0rICB2b2lkIHN0b3JlUHJpdmF0ZVZhbHVlKEltbUdDUHRy IGltbSwgY29uc3QgQWRkcmVzcyYgZGVzdCkgewotKyAgICBzdG9yZVB0cihpbW0sIGRlc3QpOwot KyAgfQotKwotKyAgdm9pZCBsb2FkVmFsdWUoQWRkcmVzcyBzcmMsIFZhbHVlT3BlcmFuZCB2YWwp IHsKLSsgICAgbG9hZFB0cihzcmMsIHZhbC52YWx1ZVJlZygpKTsKLSsgIH0KLSsgIHZvaWQgbG9h ZFZhbHVlKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBWYWx1ZU9wZXJhbmQgdmFsKSB7Ci0rICAgIGxv YWRQdHIoc3JjLCB2YWwudmFsdWVSZWcoKSk7Ci0rICB9Ci0rICB2b2lkIGxvYWRVbmFsaWduZWRW YWx1ZShjb25zdCBBZGRyZXNzJiBzcmMsIFZhbHVlT3BlcmFuZCBkZXN0KSB7Ci0rICAgIGxvYWRQ dHIoc3JjLCBkZXN0LnZhbHVlUmVnKCkpOwotKyAgfQotKwotKyAgdm9pZCBwdXNoVmFsdWUoVmFs dWVPcGVyYW5kIHZhbCkgeyBwdXNoKHZhbC52YWx1ZVJlZygpKTsgfQotKyAgdm9pZCBwb3BWYWx1 ZShWYWx1ZU9wZXJhbmQgdmFsKSB7IHBvcCh2YWwudmFsdWVSZWcoKSk7IH0KLSsgIHZvaWQgcHVz aFZhbHVlKGNvbnN0IFZhbHVlJiB2YWwpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwot KyAgICBpZiAodmFsLmlzR0NUaGluZygpKSB7Ci0rICAgICAgQ29kZU9mZnNldCBvZmYgPSBtb3ZX aXRoUGF0Y2goSW1tV29yZCh2YWwuYXNSYXdCaXRzKCkpLCBzY3JhdGNoKTsKLSsgICAgICB3cml0 ZURhdGFSZWxvY2F0aW9uKG9mZiwgdmFsKTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBtb3ZlUHRy KEltbVdvcmQodmFsLmFzUmF3Qml0cygpKSwgc2NyYXRjaCk7Ci0rICAgIH0KLSsgICAgcHVzaChz Y3JhdGNoKTsKLSsgIH0KLSsgIHZvaWQgcHVzaFZhbHVlKEpTVmFsdWVUeXBlIHR5cGUsIFJlZ2lz dGVyIHJlZykgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0r ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGJveFZhbHVlKHR5 cGUsIHJlZywgc2NyYXRjaCk7Ci0rICAgIHB1c2goc2NyYXRjaCk7Ci0rICB9Ci0rICB2b2lkIHB1 c2hWYWx1ZShjb25zdCBBZGRyZXNzJiBhZGRyKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKLSsgICAgbG9hZFB0cihhZGRyLCBzY3JhdGNoKTsKLSsgICAgcHVzaChzY3JhdGNoKTsKLSsg IH0KLSsgIHZvaWQgcHVzaFZhbHVlKGNvbnN0IEJhc2VJbmRleCYgYWRkciwgUmVnaXN0ZXIgc2Ny YXRjaCkgewotKyAgICBsb2FkUHRyKGFkZHIsIHNjcmF0Y2gpOwotKyAgICBwdXNoKHNjcmF0Y2gp OwotKyAgfQotKwotKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICAvLyBMb2FkIGluc3RydWN0aW9ucwotKwotKyAg RmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ4U2lnbkV4dGVuZChjb25zdCBBZGRyZXNzJiBhZGRyZXNz LCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIEZhdWx0aW5nQ29kZU9mZnNldCBmY287Ci0rICAgIGlm IChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKLSsgICAgICBmY28gPSBGYXVsdGluZ0Nv ZGVPZmZzZXQoCi0rICAgICAgICAgIGFzX2xieihkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu b2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7Ci0rICAgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOwotKyAgICAg IG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOwotKyAgICAgIGZjbyA9 Ci0rICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChhc19sYnp4KGRlc3QsIGFkZHJlc3MuYmFz ZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIGFzX2V4dHNiKGRlc3QsIGRl c3QpOwotKyAgICByZXR1cm4gZmNvOwotKyAgfQotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ4 U2lnbkV4dGVuZChjb25zdCBCYXNlSW5kZXgmIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKHNyYywgc2Ny YXRjaCk7Ci0rICAgIEZhdWx0aW5nQ29kZU9mZnNldCBmY287Ci0rICAgIGlmIChpc19pbnROKHNy Yy5vZmZzZXQsIDE2KSkgewotKyAgICAgIGZjbyA9IEZhdWx0aW5nQ29kZU9mZnNldChhc19sYnoo ZGVzdCwgc2NyYXRjaCwgc3JjLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9IGVsc2Ugewot KyAgICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKLSsgICAgICBtb3ZlUHRyKEltbVdv cmQoc3JjLm9mZnNldCksIGRlc3QpOwotKyAgICAgIGZjbyA9IEZhdWx0aW5nQ29kZU9mZnNldChh c19sYnp4KGRlc3QsIHNjcmF0Y2gsIGRlc3QpLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBh c19leHRzYihkZXN0LCBkZXN0KTsKLSsgICAgcmV0dXJuIGZjbzsKLSsgIH0KLSsgIEZhdWx0aW5n Q29kZU9mZnNldCBsb2FkOFplcm9FeHRlbmQoY29uc3QgQWRkcmVzcyYgYWRkcmVzcywgUmVnaXN0 ZXIgZGVzdCkgewotKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7Ci0rICAg ICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgICAgYXNfbGJ6KGRlc3QsIGFk ZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsK LSsgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwgc2NyYXRjaCk7Ci0rICAgIHJl dHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGJ6eChkZXN0LCBhZGRyZXNzLmJhc2UsIHNjcmF0 Y2gpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkOFplcm9F eHRlbmQoY29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gp OwotKyAgICBpZiAoaXNfaW50TihzcmMub2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1 bHRpbmdDb2RlT2Zmc2V0KGFzX2xieihkZXN0LCBzY3JhdGNoLCBzcmMub2Zmc2V0KS5nZXRPZmZz ZXQoKSk7Ci0rICAgIH0KLSsgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOwotKyAgICBt b3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIGRlc3QpOwotKyAgICByZXR1cm4gRmF1bHRpbmdD b2RlT2Zmc2V0KGFzX2xiengoZGVzdCwgc2NyYXRjaCwgZGVzdCkuZ2V0T2Zmc2V0KCkpOwotKyAg fQotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQxNlNpZ25FeHRlbmQoY29uc3QgQWRkcmVzcyYg YWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNl dCwgMTYpKSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgICAg YXNfbGhhKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsK LSsgICAgfQotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIE1PWl9BU1NFUlQoc2Ny YXRjaCAhPSBkZXN0KTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwgc2Ny YXRjaCk7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGhheChkZXN0LCBhZGRy ZXNzLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9m ZnNldCBsb2FkMTZTaWduRXh0ZW5kKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBSZWdpc3RlciBkZXN0 KSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgY29tcHV0ZVNjYWxlZEFkZHJl c3Moc3JjLCBzY3JhdGNoKTsKLSsgICAgaWYgKGlzX2ludE4oc3JjLm9mZnNldCwgMTYpKSB7Ci0r ICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19saGEoZGVzdCwgc2NyYXRjaCwgc3Jj Lm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAh PSBkZXN0KTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKHNyYy5vZmZzZXQpLCBkZXN0KTsKLSsgICAg cmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19saGF4KGRlc3QsIHNjcmF0Y2gsIGRlc3QpLmdl dE9mZnNldCgpKTsKLSsgIH0KLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBTPgotKyAgdm9pZCBsb2Fk MTZVbmFsaWduZWRTaWduRXh0ZW5kKGNvbnN0IFMmIHNyYywgUmVnaXN0ZXIgZGVzdCkgewotKyAg ICBsb2FkMTZTaWduRXh0ZW5kKHNyYywgZGVzdCk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZz ZXQgbG9hZDE2WmVyb0V4dGVuZChjb25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0 KSB7Ci0rICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1 cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgICBhc19saHooZGVzdCwgYWRkcmVzcy5i YXNlLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKLSsgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOwotKyAgICBt b3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIEZh dWx0aW5nQ29kZU9mZnNldChhc19saHp4KGRlc3QsIGFkZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0 T2Zmc2V0KCkpOwotKyAgfQotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQxNlplcm9FeHRlbmQo Y29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOwotKyAg ICBpZiAoaXNfaW50TihzcmMub2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdD b2RlT2Zmc2V0KGFzX2xoeihkZXN0LCBzY3JhdGNoLCBzcmMub2Zmc2V0KS5nZXRPZmZzZXQoKSk7 Ci0rICAgIH0KLSsgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOwotKyAgICBtb3ZlUHRy KEltbVdvcmQoc3JjLm9mZnNldCksIGRlc3QpOwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zm c2V0KGFzX2xoengoZGVzdCwgc2NyYXRjaCwgZGVzdCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAg dGVtcGxhdGUgPHR5cGVuYW1lIFM+Ci0rICB2b2lkIGxvYWQxNlVuYWxpZ25lZFplcm9FeHRlbmQo Y29uc3QgUyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGxvYWQxNlplcm9FeHRlbmQoc3Jj LCBkZXN0KTsKLSsgIH0KLSsKLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkMzIoY29uc3QgQWRk cmVzcyYgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICAvLyBsd2EgaXMgRFMtZm9ybSAo MTQtYml0IGRpc3BsYWNlbWVudCDDlyA0ID0gMTYtYml0LXNpZ25lZCBlZmZlY3RpdmUKLSsgICAg Ly8gcmFuZ2UsIDQtYnl0ZSBhbGlnbm1lbnQgcmVxdWlyZWQpLiBsd2F4IGlzIFgtZm9ybSBpbmRl eGVkLCBubwotKyAgICAvLyBhbGlnbm1lbnQgY29uc3RyYWludC4gQm90aCBzaWduLWV4dGVuZCBp biBvbmUgaW5zdHJ1Y3Rpb247IG9ubHkKLSsgICAgLy8gdGhlIG1pc2FsaWduZWQgMTYtYml0LWZp dHRpbmcgY2FzZSBzdGlsbCBuZWVkcyBsd3ogKyBleHRzdy4KLSsgICAgaWYgKGlzX2ludE4oYWRk cmVzcy5vZmZzZXQsIDE2KSAmJiAoYWRkcmVzcy5vZmZzZXQgJiAzKSA9PSAwKSB7Ci0rICAgICAg cmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgICAgYXNfbHdhKGRlc3QsIGFkZHJl c3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBpZiAo aXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7Ci0rICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0 IGZjbygKLSsgICAgICAgICAgYXNfbHd6KGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZz ZXQpLmdldE9mZnNldCgpKTsKLSsgICAgICBhc19leHRzdyhkZXN0LCBkZXN0KTsKLSsgICAgICBy ZXR1cm4gZmNvOwotKyAgICB9Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0 aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgTU9a X0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5v ZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19sd2F4 KGRlc3QsIGFkZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgRmF1 bHRpbmdDb2RlT2Zmc2V0IGxvYWQzMihjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsIFJlZ2lzdGVy IGRlc3QpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAg ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBjb21wdXRlU2NhbGVk QWRkcmVzcyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZz ZXQsIDE2KSAmJiAoYWRkcmVzcy5vZmZzZXQgJiAzKSA9PSAwKSB7Ci0rICAgICAgcmV0dXJuIEZh dWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgICAgYXNfbHdhKGRlc3QsIHNjcmF0Y2gsIGFkZHJl c3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgaWYgKGlzX2ludE4oYWRkcmVz cy5vZmZzZXQsIDE2KSkgewotKyAgICAgIEZhdWx0aW5nQ29kZU9mZnNldCBmY28oYXNfbHd6KGRl c3QsIHNjcmF0Y2gsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgICAgYXNfZXh0 c3coZGVzdCwgZGVzdCk7Ci0rICAgICAgcmV0dXJuIGZjbzsKLSsgICAgfQotKyAgICBNT1pfQVNT RVJUKHNjcmF0Y2ggIT0gZGVzdCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNl dCksIGRlc3QpOwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2x3YXgoZGVzdCwg c2NyYXRjaCwgZGVzdCkuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgdm9pZCBsb2FkMzIoQWJzb2x1 dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgbW92ZVB0cihJbW1Xb3Jk KCh1aW50cHRyX3QpYWRkcmVzcy5hZGRyKSwgZGVzdCk7Ci0rICAgIGFzX2x3YShkZXN0LCBkZXN0 LCAwKTsKLSsgIH0KLSsgIHZvaWQgbG9hZDMyKHdhc206OlN5bWJvbGljQWRkcmVzcyBhZGRyZXNz LCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIG1vdmVQdHIoYWRkcmVzcywgZGVzdCk7Ci0rICAgIGFz X2x3YShkZXN0LCBkZXN0LCAwKTsKLSsgIH0KLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBTPgotKyAg dm9pZCBsb2FkMzJVbmFsaWduZWQoY29uc3QgUyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAg IGxvYWQzMihzcmMsIGRlc3QpOwotKyAgfQotKwotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ2 NChjb25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlcjY0IGRlc3QpIHsKLSsgICAgcmV0dXJu IGxvYWRQdHIoYWRkcmVzcywgZGVzdC5yZWcpOwotKyAgfQotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0 IGxvYWQ2NChjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsIFJlZ2lzdGVyNjQgZGVzdCkgewotKyAg ICByZXR1cm4gbG9hZFB0cihhZGRyZXNzLCBkZXN0LnJlZyk7Ci0rICB9Ci0rICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgUz4KLSsgIHZvaWQgbG9hZDY0VW5hbGlnbmVkKGNvbnN0IFMmIHNyYywgUmVnaXN0 ZXI2NCBkZXN0KSB7Ci0rICAgIGxvYWQ2NChzcmMsIGRlc3QpOwotKyAgfQotKwotKyAgRmF1bHRp bmdDb2RlT2Zmc2V0IGxvYWRQdHIoY29uc3QgQWRkcmVzcyYgYWRkcmVzcywgUmVnaXN0ZXIgZGVz dCkgewotKyAgICAvLyBhc19sZCAoRFMtZm9ybSkgcmVxdWlyZXMgNC1ieXRlIGFsaWduZWQgb2Zm c2V0LgotKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpICYmICEoYWRkcmVzcy5v ZmZzZXQgJiAweDMpKSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAg ICAgICAgYXNfbGQoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0 KCkpOwotKyAgICB9Ci0rICAgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50cHRyX3Qp YWRkcmVzcy5vZmZzZXQsIDM0KSkgewotKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQo Ci0rICAgICAgICAgIGFzX3BsZChkZXN0LCBhZGRyZXNzLmJhc2UsIChpbnQ2NF90KWFkZHJlc3Mu b2Zmc2V0LCAvKlI9Ki9mYWxzZSkKLSsgICAgICAgICAgICAgIC5nZXRPZmZzZXQoKSk7Ci0rICAg IH0KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2gg IT0gZGVzdCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gp OwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xkeChkZXN0LCBhZGRyZXNzLmJh c2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBs b2FkUHRyKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Ci0rICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgY29tcHV0ZVNjYWxlZEFkZHJlc3Moc3JjLCBzY3JhdGNo KTsKLSsgICAgaWYgKGlzX2ludE4oc3JjLm9mZnNldCwgMTYpICYmICEoc3JjLm9mZnNldCAmIDB4 MykpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xkKGRlc3QsIHNjcmF0 Y2gsIHNyYy5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBNT1pfQVNTRVJUKHNj cmF0Y2ggIT0gZGVzdCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChzcmMub2Zmc2V0KSwgZGVzdCk7 Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGR4KGRlc3QsIHNjcmF0Y2gsIGRl c3QpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIHZvaWQgbG9hZFB0cihBYnNvbHV0ZUFkZHJlc3Mg YWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBtb3ZlUHRyKEltbVdvcmQoKHVpbnRwdHJf dClhZGRyZXNzLmFkZHIpLCBkZXN0KTsKLSsgICAgYXNfbGQoZGVzdCwgZGVzdCwgMCk7Ci0rICB9 Ci0rICB2b2lkIGxvYWRQdHIod2FzbTo6U3ltYm9saWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy IGRlc3QpIHsKLSsgICAgbW92ZVB0cihhZGRyZXNzLCBkZXN0KTsKLSsgICAgYXNfbGQoZGVzdCwg ZGVzdCwgMCk7Ci0rICB9Ci0rCi0rICB2b2lkIGxvYWRQcml2YXRlKGNvbnN0IEFkZHJlc3MmIGFk ZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgbG9hZFB0cihhZGRyZXNzLCBkZXN0KTsKLSsg IH0KLSsKLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkRG91YmxlKGNvbnN0IEFkZHJlc3MmIGFk ZHIsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgICBpZiAoaXNfaW50TihhZGRyLm9mZnNldCwg MTYpKSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgICAgYXNf bGZkKGRlc3QsIGFkZHIuYmFzZSwgYWRkci5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgICAgfQot KyAgICBpZiAoSGFzUE9XRVIxMCgpICYmIGlzX2ludE4oKGludHB0cl90KWFkZHIub2Zmc2V0LCAz NCkpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgICBhc19w bGZkKGRlc3QsIGFkZHIuYmFzZSwgKGludDY0X3QpYWRkci5vZmZzZXQsIC8qUj0qL2ZhbHNlKQot KyAgICAgICAgICAgICAgLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIoSW1tV29yZChhZGRyLm9mZnNldCksIHNjcmF0Y2gpOwot KyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xmZHgoZGVzdCwgYWRkci5iYXNlLCBz Y3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZERv dWJsZShjb25zdCBCYXNlSW5kZXgmIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgY29tcHV0ZVNjYWxlZEFkZHJlc3Moc3JjLCBzY3Jh dGNoKTsKLSsgICAgaWYgKGlzX2ludE4oc3JjLm9mZnNldCwgMTYpKSB7Ci0rICAgICAgcmV0dXJu IEZhdWx0aW5nQ29kZU9mZnNldChhc19sZmQoZGVzdCwgc2NyYXRjaCwgc3JjLm9mZnNldCkuZ2V0 T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2gyID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIHNjcmF0Y2gyKTsKLSsgICAg cmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19sZmR4KGRlc3QsIHNjcmF0Y2gsIHNjcmF0Y2gy KS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZEZsb2F0MzIo Y29uc3QgQWRkcmVzcyYgYWRkciwgRmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGlmIChpc19p bnROKGFkZHIub2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0 KAotKyAgICAgICAgICBhc19sZnMoZGVzdCwgYWRkci5iYXNlLCBhZGRyLm9mZnNldCkuZ2V0T2Zm c2V0KCkpOwotKyAgICB9Ci0rICAgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50cHRy X3QpYWRkci5vZmZzZXQsIDM0KSkgewotKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQo Ci0rICAgICAgICAgIGFzX3BsZnMoZGVzdCwgYWRkci5iYXNlLCAoaW50NjRfdClhZGRyLm9mZnNl dCwgLypSPSovZmFsc2UpCi0rICAgICAgICAgICAgICAuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0r ICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHIub2Zm c2V0KSwgc2NyYXRjaCk7Ci0rICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGZzeChk ZXN0LCBhZGRyLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKLSsgIH0KLSsgIEZhdWx0aW5n Q29kZU9mZnNldCBsb2FkRmxvYXQzMihjb25zdCBCYXNlSW5kZXgmIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsg ICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgY29tcHV0ZVNjYWxl ZEFkZHJlc3Moc3JjLCBzY3JhdGNoKTsKLSsgICAgaWYgKGlzX2ludE4oc3JjLm9mZnNldCwgMTYp KSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19sZnMoZGVzdCwgc2NyYXRj aCwgc3JjLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIFJlZ2lzdGVyIHNjcmF0 Y2gyID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCks IHNjcmF0Y2gyKTsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19sZnN4KGRlc3Qs IHNjcmF0Y2gsIHNjcmF0Y2gyKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICAvLyBMb2FkIGEgRlAg Y29uc3RhbnQgaW50byBgZGVzdGAuCi0rICAvLwotKyAgLy8gKzAuMCAvICswLjBmOiBgeHhseG9y IGRlc3QsIGRlc3QsIGRlc3RgICgxIGluc24pLiBObyByZWdpc3RlciBjbG9iYmVycy4KLSsgIC8v Ci0rICAvLyBQT1dFUjkgbm9uLXplcm86IGNvbnN0YW50IHBvb2wgbG9hZCB2aWEgYGFkZHBjaXMg cjE2LCBoaTsgbGZkL2xmcyBmRCwKLSsgIC8vIGxvKHIxNik7IG5vcGAuIDIgcmVhbCBpbnNucyAr IG5vcCwgbm8gTFIgY2xvYmJlciwgbm8gUmV0dXJuIEFkZHJlc3MKLSsgIC8vIFN0YWNrIGNvcnJ1 cHRpb24uIGxmcyBhdXRvLWV4cGFuZHMgc2luZ2xlLXByZWNpc2lvbiB0byBkb3VibGUsIHNvIG5v Ci0rICAvLyBzZXBhcmF0ZSB4c2N2c3BkcG4gc3RlcC4gQ2xvYmJlcnMgcjE2IChTYXZlZFNjcmF0 Y2hSZWdpc3RlcikuIFBvb2wKLSsgIC8vIGVudHJpZXMgYXJlIHNoYXJlZCBhY3Jvc3MgZHVwbGlj YXRlIGNvbnN0YW50cy4KLSsgIC8vCi0rICAvLyBQT1dFUjggbm9uLXplcm86IGlubGluZSBgbW92 ZVB0ciArIG10dnNyZCgreHNjdnNwZHBuKWAgcGF0aC4gV2UgZG8gTk9UCi0rICAvLyB1c2UgdGhl IGJjbC1iYXNlZCBwb29sIHBhdGggb24gUE9XRVI4OiBiY2wgY2xvYmJlcnMgTFIgYW5kIGNvcnJ1 cHRzCi0rICAvLyB0aGUgUmV0dXJuIEFkZHJlc3MgU3RhY2ssIHdoaWNoIGNhdXNlcyBjYXRhc3Ry b3BoaWMgbWlzcHJlZGljdHMgaW4KLSsgIC8vIGhvdCBGUC1jb25zdGFudCBsb29wcyAofjIwMHgg c2xvd2Rvd24gb2JzZXJ2ZWQgb24gY21wLWJpdHNlbGVjdC5qcykuCi0rICAvLwotKyAgLy8gUHJl Y29uZGl0aW9uOiBtdXN0IG5vdCBiZSBjYWxsZWQgaW5zaWRlIGFuIGBlbnRlck5vUG9vbGAgcmVn aW9uIHdoZW4KLSsgIC8vIEhhc1BPV0VSOSgpIGlzIHRydWUgKHRoZSBwb29sIHBhdGggY2FsbHMg YGFsbG9jRW50cnlgIHdoaWNoIGFzc2VydHMKLSsgIC8vIGBpbmhpYml0UG9vbHNfID09IDBgKS4g QXVkaXQtdmVyaWZpZWQgdGhhdCBubyBzdWNoIGNhbGwgc2l0ZSBleGlzdHMKLSsgIC8vIHRvZGF5 OyB0aGUgUE9XRVI4IGlubGluZSBwYXRoIGlzIHVuYWZmZWN0ZWQuCi0rICB2b2lkIGxvYWRDb25z dGFudERvdWJsZShkb3VibGUgZHAsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewotKyAgICBpZiAobW96 aWxsYTo6SXNQb3NpdGl2ZVplcm8oZHApKSB7Ci0rICAgICAgYXNfeHhseG9yKGRlc3QsIGRlc3Qs IGRlc3QpOwotKyAgICAgIHJldHVybjsKLSsgICAgfQotKyAgICBpZiAoSGFzUE9XRVI5KCkpIHsK LSsgICAgICBsb2FkRnJvbVBvb2xGbG9hdDY0KGRlc3QsIGRwKTsKLSsgICAgICByZXR1cm47Ci0r ICAgIH0KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICB1bmlvbiB7Ci0rICAgICAg ZG91YmxlIGQ7Ci0rICAgICAgdWludDY0X3QgdTsKLSsgICAgfSB1OwotKyAgICB1LmQgPSBkcDsK LSsgICAgbW92ZVB0cihJbW1Xb3JkKHUudSksIHNjcmF0Y2gpOwotKyAgICBhc19tdHZzcmQoZGVz dCwgc2NyYXRjaCk7Ci0rICB9Ci0rICB2b2lkIGxvYWRDb25zdGFudEZsb2F0MzIoZmxvYXQgZiwg RmxvYXRSZWdpc3RlciBkZXN0KSB7Ci0rICAgIGlmIChtb3ppbGxhOjpJc1Bvc2l0aXZlWmVybyhm KSkgewotKyAgICAgIGFzX3h4bHhvcihkZXN0LCBkZXN0LCBkZXN0KTsKLSsgICAgICByZXR1cm47 Ci0rICAgIH0KLSsgICAgaWYgKEhhc1BPV0VSOSgpKSB7Ci0rICAgICAgbG9hZEZyb21Qb29sRmxv YXQzMihkZXN0LCBmKTsKLSsgICAgICByZXR1cm47Ci0rICAgIH0KLSsgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgICB1bmlvbiB7Ci0rICAgICAgZmxvYXQgZjsKLSsgICAgICB1aW50MzJf dCB1OwotKyAgICB9IHU7Ci0rICAgIHUuZiA9IGY7Ci0rICAgIG1vdmVQdHIoSW1tV29yZCh1LnUp LCBzY3JhdGNoKTsKLSsgICAgeF9zbGRpKHNjcmF0Y2gsIHNjcmF0Y2gsIDMyKTsKLSsgICAgYXNf bXR2c3JkKGRlc3QsIHNjcmF0Y2gpOwotKyAgICBhc194c2N2c3BkcG4oZGVzdCwgZGVzdCk7Ci0r ICB9Ci0rCi0rICB2b2lkIG5vdEJvb2xlYW4oY29uc3QgVmFsdWVPcGVyYW5kJiB2YWwpIHsKLSsg ICAgYXNfeG9yaSh2YWwudmFsdWVSZWcoKSwgdmFsLnZhbHVlUmVnKCksIDEpOwotKyAgfQotKwot KyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRyYWN0VGFnKGNvbnN0IEFkZHJlc3MmIGFkZHJl c3MsIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKLSsgICAgbG9hZFB0cihhZGRyZXNzLCBzY3JhdGNoKTsK LSsgICAgeF9zcmRpKHNjcmF0Y2gsIHNjcmF0Y2gsIEpTVkFMX1RBR19TSElGVCk7Ci0rICAgIHJl dHVybiBzY3JhdGNoOwotKyAgfQotKyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRyYWN0VGFn KGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7Ci0rICAgIGlmIChzY3JhdGNoID09IHIwKSB7Ci0r ICAgICAgLy8gcjAgY2Fubm90IGJlIHVzZWQgYXMgYSBiYXNlIHJlZ2lzdGVyIGluIEQtZm9ybS9Y LWZvcm0gbG9hZHMsCi0rICAgICAgLy8gc28gd2UgbmVlZCBhIHNlcGFyYXRlIHRlbXAgZm9yIHRo ZSBpbnRlcm1lZGlhdGUgYWRkcmVzcy4KLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcygqdGhpcyk7Ci0rICAgICAgUmVnaXN0ZXIgYmFzZSA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg ICAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhhZGRyZXNzLCBiYXNlKTsKLSsgICAgICBsb2FkUHRy KEFkZHJlc3MoYmFzZSwgYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgfSBlbHNlIHsK LSsgICAgICAvLyBzY3JhdGNoIGlzIGEgcG9vbCByZWdpc3RlciAocjExL3IxMikgb3IgYW5vdGhl ciBHUFIgdGhhdCBjYW4KLSsgICAgICAvLyBzZXJ2ZSBhcyBhIGJhc2UgcmVnaXN0ZXIsIHNvIHJl dXNlIGl0IGZvciB0aGUgYWRkcmVzcyBjb21wdXRhdGlvbi4KLSsgICAgICBjb21wdXRlU2NhbGVk QWRkcmVzcyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj aCwgYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgfQotKyAgICB4X3NyZGkoc2NyYXRj aCwgc2NyYXRjaCwgSlNWQUxfVEFHX1NISUZUKTsKLSsgICAgcmV0dXJuIHNjcmF0Y2g7Ci0rICB9 Ci0rICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RUYWcoY29uc3QgVmFsdWVPcGVyYW5k JiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBz Y3JhdGNoKSB7Ci0rICAgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIHNj cmF0Y2g7Ci0rICB9Ci0rCi0rICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJhY3RPYmplY3Qo Y29uc3QgQWRkcmVzcyYgYWRkcmVzcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7Ci0rICAgIGxvYWRQdHIoYWRkcmVzcywgc2NyYXRj aCk7Ci0rICAgIGFzX3JsZGljbChzY3JhdGNoLCBzY3JhdGNoLCAwLCA2NCAtIEpTVkFMX1RBR19T SElGVCk7Ci0rICAgIHJldHVybiBzY3JhdGNoOwotKyAgfQotKyAgW1tub2Rpc2NhcmRdXSBSZWdp c3RlciBleHRyYWN0T2JqZWN0KGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCkgewotKyAgICB1 bmJveE9iamVjdCh2YWx1ZSwgc2NyYXRjaCk7Ci0rICAgIHJldHVybiBzY3JhdGNoOwotKyAgfQot KyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRyYWN0SW50MzIoY29uc3QgVmFsdWVPcGVyYW5k JiB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IHNjcmF0Y2gpIHsKLSsgICAgdW5ib3hJbnQzMih2YWx1ZSwgc2NyYXRjaCk7Ci0rICAgIHJldHVy biBzY3JhdGNoOwotKyAgfQotKyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRyYWN0U3RyaW5n KGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCkgewotKyAgICB1bmJveFN0cmluZyh2YWx1ZSwg c2NyYXRjaCk7Ci0rICAgIHJldHVybiBzY3JhdGNoOwotKyAgfQotKyAgW1tub2Rpc2NhcmRdXSBS ZWdpc3RlciBleHRyYWN0U3ltYm9sKGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCkgewotKyAg ICB1bmJveFN5bWJvbCh2YWx1ZSwgc2NyYXRjaCk7Ci0rICAgIHJldHVybiBzY3JhdGNoOwotKyAg fQotKyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRyYWN0Qm9vbGVhbihjb25zdCBWYWx1ZU9w ZXJhbmQmIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBzY3JhdGNoKSB7Ci0rICAgIHVuYm94Qm9vbGVhbih2YWx1ZSwgc2NyYXRjaCk7Ci0r ICAgIHJldHVybiBzY3JhdGNoOwotKyAgfQotKwotKyAgdm9pZCB0ZXN0T2JqZWN0U2V0KENvbmRp dGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLCBSZWdpc3RlciBkZXN0KSB7Ci0r ICAgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKLSsgICAg ewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgICBS ZWdpc3RlciB0YWcgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgc3BsaXRUYWcodmFsdWUsIHRh Zyk7Ci0rICAgICAgdWludDMyX3QgdCA9IEpTVkFMX1RBR19PQkpFQ1Q7Ci0rICAgICAgYXNfeG9y aXModGFnLCB0YWcsIHQgPj4gMTYpOwotKyAgICAgIGFzX2NtcGx3aSh0YWcsIHQgJiAweEZGRkYp OwotKyAgICB9Ci0rICAgIG1hX2NtcF9zZXQoZGVzdCwgY29uZCk7Ci0rICB9Ci0rICB2b2lkIHRl c3RVbmRlZmluZWRTZXQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgewotKyAgICBNT1pfQVNT RVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7Ci0rICAgIHsKLSsgICAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgICAgUmVnaXN0ZXIgdGFn ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAgIHNwbGl0VGFnKHZhbHVlLCB0YWcpOwotKyAgICAg IC8vIFVzZSB4b3JpcytjbXBsd2kgdG8gY29tcGFyZSB3aXRob3V0IGEgc2Vjb25kIHNjcmF0Y2gu Ci0rICAgICAgdWludDMyX3QgdCA9IEpTVkFMX1RBR19VTkRFRklORUQ7Ci0rICAgICAgYXNfeG9y aXModGFnLCB0YWcsIHQgPj4gMTYpOwotKyAgICAgIGFzX2NtcGx3aSh0YWcsIHQgJiAweEZGRkYp OwotKyAgICB9Ci0rICAgIG1hX2NtcF9zZXQoZGVzdCwgY29uZCk7Ci0rICB9Ci0rICB2b2lkIHRl c3ROdWxsU2V0KENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLCBSZWdp c3RlciBkZXN0KSB7Ci0rICAgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5v dEVxdWFsKTsKLSsgICAgewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0 aGlzKTsKLSsgICAgICBSZWdpc3RlciB0YWcgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgc3Bs aXRUYWcodmFsdWUsIHRhZyk7Ci0rICAgICAgdWludDMyX3QgdCA9IEpTVkFMX1RBR19OVUxMOwot KyAgICAgIGFzX3hvcmlzKHRhZywgdGFnLCB0ID4+IDE2KTsKLSsgICAgICBhc19jbXBsd2kodGFn LCB0ICYgMHhGRkZGKTsKLSsgICAgfQotKyAgICBtYV9jbXBfc2V0KGRlc3QsIGNvbmQpOwotKyAg fQotKwotKyAgQnVmZmVyT2Zmc2V0IHJldCgpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OwotKyAgICBhc19sZChzY3JhdGNoLCBTdGFja1BvaW50ZXIsIDApOwotKyAgICBhc19hZGRpKFN0 YWNrUG9pbnRlciwgU3RhY2tQb2ludGVyLCA4KTsKLSsgICAgeHNfbXRscihzY3JhdGNoKTsKLSsg ICAgcmV0dXJuIGFzX2JscigpOwotKyAgfQotKwotKyAgdm9pZCBqKExhYmVsKiBkZXN0KSB7IGp1 bXAoZGVzdCk7IH0KLSsKLSsgIHZvaWQgZ2V0V2FzbUFueVJlZkdDVGhpbmdDaHVuayhSZWdpc3Rl ciBhbnlyZWYsIFJlZ2lzdGVyIGRlc3QpIHsKLSsgICAgc3RhdGljX2Fzc2VydChqczo6Z2M6OkNo dW5rU2hpZnQgPT0gMjApOwotKyAgICBhc19ybGRpY3IoZGVzdCwgYW55cmVmLCAwLCA0Myk7Ci0r ICB9Ci0rCi0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSsgIHZvaWQgbG9hZFVuYm94ZWRWYWx1 ZShjb25zdCBUJiBhZGRyZXNzLCBNSVJUeXBlIHR5cGUsIEFueVJlZ2lzdGVyIGRlc3QpIHsKLSsg ICAgaWYgKGRlc3QuaXNGbG9hdCgpKSB7Ci0rICAgICAgbG9hZEludDMyT3JEb3VibGUoYWRkcmVz cywgZGVzdC5mcHUoKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgdW5ib3hOb25Eb3VibGUoYWRk cmVzcywgZGVzdC5ncHIoKSwgVmFsdWVUeXBlRnJvbU1JUlR5cGUodHlwZSkpOwotKyAgICB9Ci0r ICB9Ci0rCi0rICB2b2lkIGxvYWRJbnQzMk9yRG91YmxlKGNvbnN0IEFkZHJlc3MmIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KTsKLSsgIHZvaWQgbG9hZEludDMyT3JEb3VibGUoY29uc3QgQmFzZUlu ZGV4JiBhZGRyLCBGbG9hdFJlZ2lzdGVyIGRlc3QpOwotKwotKyAgLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICAvLyBT dG9yZSBpbnN0cnVjdGlvbnMKLSsKLSsgIEZhdWx0aW5nQ29kZU9mZnNldCBzdG9yZTgoUmVnaXN0 ZXIgc3JjLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7Ci0rICAgIGlmIChpc19pbnROKGFkZHJl c3Mub2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAg ICAgICAgICBhc19zdGIoc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZz ZXQoKSk7Ci0rICAgIH0KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMp OwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlUHRy KEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIEZhdWx0aW5n Q29kZU9mZnNldChhc19zdGJ4KHNyYywgYWRkcmVzcy5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQo KSk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmU4KFJlZ2lzdGVyIHNyYywgY29u c3QgQmFzZUluZGV4JiBhZGRyZXNzKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg ICAgY29tcHV0ZVNjYWxlZEFkZHJlc3MoYWRkcmVzcywgc2NyYXRjaCk7Ci0rICAgIGlmIChpc19p bnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zm c2V0KAotKyAgICAgICAgICBhc19zdGIoc3JjLCBzY3JhdGNoLCBhZGRyZXNzLm9mZnNldCkuZ2V0 T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2gyID0gdGVtcHMuQWNxdWly ZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoMik7Ci0r ICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3RieChzcmMsIHNjcmF0Y2gsIHNjcmF0 Y2gyKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICB2b2lkIHN0b3JlOChJbW0zMiBpbW0sIGNvbnN0 IEFkZHJlc3MmIGFkZHJlc3MpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo KnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBt b3ZlMzIoaW1tLCBzY3JhdGNoKTsKLSsgICAgc3RvcmU4KHNjcmF0Y2gsIGFkZHJlc3MpOwotKyAg fQotKyAgdm9pZCBzdG9yZTgoSW1tMzIgaW1tLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MpIHsK LSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsK LSsgICAgc3RvcmU4KHNjcmF0Y2gsIGFkZHJlc3MpOwotKyAgfQotKwotKyAgRmF1bHRpbmdDb2Rl T2Zmc2V0IHN0b3JlMTYoUmVnaXN0ZXIgc3JjLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7Ci0r ICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1 bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgICBhc19zdGgoc3JjLCBhZGRyZXNzLmJhc2UsIGFk ZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsK LSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGh4KHNyYywgYWRkcmVzcy5iYXNl LCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgc3Rv cmUxNihSZWdpc3RlciBzcmMsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcykgewotKyAgICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIHNj cmF0Y2gpOwotKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7Ci0rICAgICAg cmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsgICAgICAgICAgYXNfc3RoKHNyYywgc2NyYXRj aCwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKLSsgICAgfQotKyAgICBSZWdpc3RlciBz Y3JhdGNoMiA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mu b2Zmc2V0KSwgc2NyYXRjaDIpOwotKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0 aHgoc3JjLCBzY3JhdGNoLCBzY3JhdGNoMikuZ2V0T2Zmc2V0KCkpOwotKyAgfQotKyAgdm9pZCBz dG9yZTE2KEltbTMyIGltbSwgY29uc3QgQWRkcmVzcyYgYWRkcmVzcykgewotKyAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmUzMihpbW0sIHNjcmF0Y2gpOwotKyAgICBzdG9yZTE2 KHNjcmF0Y2gsIGFkZHJlc3MpOwotKyAgfQotKyAgdm9pZCBzdG9yZTE2KEltbTMyIGltbSwgY29u c3QgQmFzZUluZGV4JiBhZGRyZXNzKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg ICAgbW92ZTMyKGltbSwgc2NyYXRjaCk7Ci0rICAgIHN0b3JlMTYoc2NyYXRjaCwgYWRkcmVzcyk7 Ci0rICB9Ci0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSsgIHZvaWQgc3RvcmUxNlVuYWxpZ25l ZChSZWdpc3RlciBzcmMsIGNvbnN0IFQmIGRlc3QpIHsKLSsgICAgc3RvcmUxNihzcmMsIGRlc3Qp OwotKyAgfQotKwotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IHN0b3JlMzIoUmVnaXN0ZXIgc3JjLCBj b25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7Ci0rICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0 LCAxNikpIHsKLSsgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAotKyAgICAgICAgICBh c19zdHcoc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0r ICAgIH0KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQo YWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNl dChhc19zdHd4KHNyYywgYWRkcmVzcy5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7Ci0rICB9 Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmUzMihSZWdpc3RlciBzcmMsIGNvbnN0IEJhc2VJ bmRleCYgYWRkcmVzcykgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhp cyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIGNvbXB1 dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIHNjcmF0Y2gpOwotKyAgICBpZiAoaXNfaW50TihhZGRy ZXNzLm9mZnNldCwgMTYpKSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKLSsg ICAgICAgICAgYXNfc3R3KHNyYywgc2NyYXRjaCwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgp KTsKLSsgICAgfQotKyAgICBSZWdpc3RlciBzY3JhdGNoMiA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg ICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwgc2NyYXRjaDIpOwotKyAgICByZXR1 cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0d3goc3JjLCBzY3JhdGNoLCBzY3JhdGNoMikuZ2V0 T2Zmc2V0KCkpOwotKyAgfQotKyAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVyIHNyYywgQWJzb2x1dGVB ZGRyZXNzIGFkZHJlc3MpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRo aXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3Zl UHRyKEltbVdvcmQoKHVpbnRwdHJfdClhZGRyZXNzLmFkZHIpLCBzY3JhdGNoKTsKLSsgICAgYXNf c3R3KHNyYywgc2NyYXRjaCwgMCk7Ci0rICB9Ci0rICB2b2lkIHN0b3JlMzIoSW1tMzIgc3JjLCBj b25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg ICAgbW92ZTMyKHNyYywgc2NyYXRjaCk7Ci0rICAgIHN0b3JlMzIoc2NyYXRjaCwgYWRkcmVzcyk7 Ci0rICB9Ci0rICB2b2lkIHN0b3JlMzIoSW1tMzIgc3JjLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJl c3MpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlMzIoc3JjLCBzY3Jh dGNoKTsKLSsgICAgc3RvcmUzMihzY3JhdGNoLCBhZGRyZXNzKTsKLSsgIH0KLSsgIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgotKyAgdm9pZCBzdG9yZTMyVW5hbGlnbmVkKFJlZ2lzdGVyIHNyYywgY29u c3QgVCYgZGVzdCkgewotKyAgICBzdG9yZTMyKHNyYywgZGVzdCk7Ci0rICB9Ci0rCi0rICB2b2lk IHN0b3JlNjQoSW1tNjQgaW1tLCBBZGRyZXNzIGFkZHJlc3MpIHsKLSsgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoaW1tLnZhbHVlKSwgc2NyYXRjaCk7Ci0r ICAgIHN0b3JlUHRyKHNjcmF0Y2gsIGFkZHJlc3MpOwotKyAgfQotKyAgdm9pZCBzdG9yZTY0KElt bTY0IGltbSwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzKSB7Ci0rICAgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKLSsgICAgbW92ZVB0cihJbW1Xb3JkKGltbS52YWx1ZSksIHNjcmF0Y2gpOwotKyAg ICBzdG9yZVB0cihzY3JhdGNoLCBhZGRyZXNzKTsKLSsgIH0KLSsgIEZhdWx0aW5nQ29kZU9mZnNl dCBzdG9yZTY0KFJlZ2lzdGVyNjQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpIHsKLSsgICAgcmV0dXJu IHN0b3JlUHRyKHNyYy5yZWcsIGFkZHJlc3MpOwotKyAgfQotKyAgRmF1bHRpbmdDb2RlT2Zmc2V0 IHN0b3JlNjQoUmVnaXN0ZXI2NCBzcmMsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcykgewotKyAg ICByZXR1cm4gc3RvcmVQdHIoc3JjLnJlZywgYWRkcmVzcyk7Ci0rICB9Ci0rICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KLSsgIHZvaWQgc3RvcmU2NFVuYWxpZ25lZChSZWdpc3RlcjY0IHNyYywgY29u c3QgVCYgZGVzdCkgewotKyAgICBzdG9yZTY0KHNyYywgZGVzdCk7Ci0rICB9Ci0rCi0rICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KLSsgIHZvaWQgc3RvcmVQdHIoSW1tV29yZCBpbW0sIFQgYWRkcmVz cykgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Ci0rICAgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIoaW1tLCBzY3Jh dGNoKTsKLSsgICAgc3RvcmVQdHIoc2NyYXRjaCwgYWRkcmVzcyk7Ci0rICB9Ci0rICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KLSsgIHZvaWQgc3RvcmVQdHIoSW1tUHRyIGltbSwgVCBhZGRyZXNzKSB7 Ci0rICAgIHN0b3JlUHRyKEltbVdvcmQodWludHB0cl90KGltbS52YWx1ZSkpLCBhZGRyZXNzKTsK LSsgIH0KLSsgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotKyAgdm9pZCBzdG9yZVB0cihJbW1HQ1B0 ciBpbW0sIFQgYWRkcmVzcykgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygq dGhpcyk7Ci0rICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1v dmVQdHIoaW1tLCBzY3JhdGNoKTsKLSsgICAgc3RvcmVQdHIoc2NyYXRjaCwgYWRkcmVzcyk7Ci0r ICB9Ci0rICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3Qp IHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtb3ZlUHRyKEltbVdvcmQoKHVp bnRwdHJfdClkZXN0LmFkZHIpLCBzY3JhdGNoKTsKLSsgICAgYXNfc3RkKHNyYywgc2NyYXRjaCwg MCk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmVQdHIoUmVnaXN0ZXIgc3JjLCBj b25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7Ci0rICAgIC8vIGFzX3N0ZCAoRFMtZm9ybSkgcmVxdWly ZXMgNC1ieXRlIGFsaWduZWQgb2Zmc2V0LgotKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNl dCwgMTYpICYmICEoYWRkcmVzcy5vZmZzZXQgJiAweDMpKSB7Ci0rICAgICAgcmV0dXJuIEZhdWx0 aW5nQ29kZU9mZnNldCgKLSsgICAgICAgICAgYXNfc3RkKHNyYywgYWRkcmVzcy5iYXNlLCBhZGRy ZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOwotKyAgICB9Ci0rICAgIGlmIChIYXNQT1dFUjEwKCkg JiYgaXNfaW50TigoaW50cHRyX3QpYWRkcmVzcy5vZmZzZXQsIDM0KSkgewotKyAgICAgIHJldHVy biBGYXVsdGluZ0NvZGVPZmZzZXQoCi0rICAgICAgICAgIGFzX3BzdGQoc3JjLCBhZGRyZXNzLmJh c2UsIChpbnQ2NF90KWFkZHJlc3Mub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKLSsgICAgICAgICAgICAg IC5nZXRPZmZzZXQoKSk7Ci0rICAgIH0KLSsgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAg ICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKLSsgICAgcmV0dXJu IEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGR4KHNyYywgYWRkcmVzcy5iYXNlLCBzY3JhdGNoKS5n ZXRPZmZzZXQoKSk7Ci0rICB9Ci0rICBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmVQdHIoUmVnaXN0 ZXIgc3JjLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MpIHsKLSsgICAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoKnRoaXMpOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOwotKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhhZGRyZXNzLCBzY3JhdGNoKTsKLSsg ICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSAmJiAhKGFkZHJlc3Mub2Zmc2V0ICYg MHgzKSkgewotKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCi0rICAgICAgICAgIGFz X3N0ZChzcmMsIHNjcmF0Y2gsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7Ci0rICAgIH0K LSsgICAgUmVnaXN0ZXIgc2NyYXRjaDIgPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgIG1vdmVQdHIo SW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gyKTsKLSsgICAgcmV0dXJuIEZhdWx0aW5n Q29kZU9mZnNldChhc19zdGR4KHNyYywgc2NyYXRjaCwgc2NyYXRjaDIpLmdldE9mZnNldCgpKTsK LSsgIH0KLSsKLSsgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAgLy8gTWlzYwotKwotKyAgdm9pZCBoYW5kbGVGYWls dXJlV2l0aEhhbmRsZXJUYWlsKExhYmVsKiBwcm9maWxlckV4aXRUYWlsLCBMYWJlbCogYmFpbG91 dFRhaWwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHJl dHVyblZhbHVlQ2hlY2tPZmZzZXQpOwotKwotKyAgaW5saW5lIHZvaWQgaW5jcmVtZW50SW50MzJW YWx1ZShjb25zdCBBZGRyZXNzJiBhZGRyKTsKLSsKLSsgIHZvaWQgemVyb0RvdWJsZShGbG9hdFJl Z2lzdGVyIHJlZykgeyBhc194eGx4b3IocmVnLCByZWcsIHJlZyk7IH0KLSsKLSsgIHZvaWQgd3Jp dGVDb2RlUG9pbnRlcihDb2RlTGFiZWwqIGxhYmVsKSB7Ci0rICAgIGxhYmVsLT5wYXRjaEF0KCkt PmJpbmQoY3VycmVudE9mZnNldCgpKTsKLSsgICAgbGFiZWwtPnNldExpbmtNb2RlKENvZGVMYWJl bDo6UmF3UG9pbnRlcik7Ci0rICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKHNpemVvZih2b2lkKikp OwotKyAgICB3cml0ZUluc3QoLTEpOwotKyAgICB3cml0ZUluc3QoLTEpOwotKyAgfQotKyAgdm9p ZCB3cml0ZURhdGFSZWxvY2F0aW9uKGNvbnN0IFZhbHVlJiB2YWwpIHsKLSsgICAgaWYgKHZhbC5p c0dDVGhpbmcoKSkgewotKyAgICAgIGdjOjpDZWxsKiBjZWxsID0gdmFsLnRvR0NUaGluZygpOwot KyAgICAgIGlmIChjZWxsICYmIGdjOjpJc0luc2lkZU51cnNlcnkoY2VsbCkpIHsKLSsgICAgICAg IGVtYmVkc051cnNlcnlQb2ludGVyc18gPSB0cnVlOwotKyAgICAgIH0KLSsgICAgICBkYXRhUmVs b2NhdGlvbnNfLndyaXRlVW5zaWduZWQoY3VycmVudE9mZnNldCgpKTsKLSsgICAgfQotKyAgfQot KyAgdm9pZCB3cml0ZURhdGFSZWxvY2F0aW9uKENvZGVPZmZzZXQgb2ZmLCBjb25zdCBWYWx1ZSYg dmFsKSB7Ci0rICAgIGlmICh2YWwuaXNHQ1RoaW5nKCkpIHsKLSsgICAgICBnYzo6Q2VsbCogY2Vs bCA9IHZhbC50b0dDVGhpbmcoKTsKLSsgICAgICBpZiAoY2VsbCAmJiBnYzo6SXNJbnNpZGVOdXJz ZXJ5KGNlbGwpKSB7Ci0rICAgICAgICBlbWJlZHNOdXJzZXJ5UG9pbnRlcnNfID0gdHJ1ZTsKLSsg ICAgICB9Ci0rICAgICAgZGF0YVJlbG9jYXRpb25zXy53cml0ZVVuc2lnbmVkKG9mZi5vZmZzZXQo KSk7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIENvZGVPZmZzZXQgdG9nZ2xlZEp1bXAoTGFiZWwqIGxh YmVsKSB7Ci0rICAgIENvZGVPZmZzZXQgcmV0KG5leHRPZmZzZXQoKS5nZXRPZmZzZXQoKSk7Ci0r ICAgIGp1bXAobGFiZWwpOwotKyAgICByZXR1cm4gcmV0OwotKyAgfQotKyAgQ29kZU9mZnNldCB0 b2dnbGVkQ2FsbChKaXRDb2RlKiB0YXJnZXQsIGJvb2wgZW5hYmxlZCk7Ci0rICAvLyA4IGluc3Ry dWN0aW9ucyBmb3IgbG9hZDY0ICsgbXRjdHIgKyBiY3RybCA9IDEwIGluc3RydWN0aW9ucyB0b3Rh bC4KLSsgIHN0YXRpYyBzaXplX3QgVG9nZ2xlZENhbGxTaXplKHVpbnQ4X3QqIGNvZGUpIHsgcmV0 dXJuIDEwICogc2l6ZW9mKHVpbnQzMl90KTsgfQotKwotKyAgdm9pZCBjaGVja1N0YWNrQWxpZ25t ZW50KCkge30KLSsKLSsgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUFsaWduZWRTdGFja1BvaW50ZXIo dm9pZCoqIHN0YWNrUG9pbnRlcikgewotKyAgICAqc3RhY2tQb2ludGVyID0gcmVpbnRlcnByZXRf Y2FzdDx2b2lkKj4oKHVpbnRwdHJfdCgqc3RhY2tQb2ludGVyKSkgJgotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfihBQklTdGFja0FsaWdubWVudCAtIDEpKTsK LSsgIH0KLSsKLSsgIHZvaWQgbGVhKE9wZXJhbmQgYWRkciwgUmVnaXN0ZXIgZGVzdCkgewotKyAg ICAvLyB4ODYtaXNtOyBvbiBQUEMsIGNvbXB1dGUgZWZmZWN0aXZlIGFkZHJlc3MgbWFudWFsbHku Ci0rICAgIE1PWl9DUkFTSCgiUFBDNjQ6IGxlYSBub3Qgc3VwcG9ydGVkOyB1c2UgY29tcHV0ZUVm ZmVjdGl2ZUFkZHJlc3MiKTsKLSsgIH0KLSsKLSsgIHZvaWQgYWJpcmV0KCkgeyBhc19ibHIoKTsg fQotKwotKyAgdm9pZCBwcm9maWxlckVudGVyRnJhbWUoUmVnaXN0ZXIgZnJhbWVQdHIsIFJlZ2lz dGVyIHNjcmF0Y2gpOwotKyAgdm9pZCBwcm9maWxlckV4aXRGcmFtZSgpOwotKwotKyAgdm9pZCBv dXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDMyQ2hlY2soCi0rICAgICAgRmxvYXRSZWdpc3RlciBp bnB1dCwgUmVnaXN0ZXIgb3V0cHV0LCBNSVJUeXBlIGZyb21UeXBlLCBUcnVuY0ZsYWdzIGZsYWdz LAotKyAgICAgIExhYmVsKiByZWpvaW4sIGNvbnN0IHdhc206OlRyYXBTaXRlRGVzYyYgdHJhcFNp dGVEZXNjKTsKLSsgIHZvaWQgb3V0T2ZMaW5lV2FzbVRydW5jYXRlVG9JbnQ2NENoZWNrKAotKyAg ICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LCBNSVJUeXBlIGZyb21U eXBlLAotKyAgICAgIFRydW5jRmxhZ3MgZmxhZ3MsIExhYmVsKiByZWpvaW4sIGNvbnN0IHdhc206 OlRyYXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNjKTsKLSsKLSsgIHZvaWQgd2FzbUxvYWRJbXBsKGNv bnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgUmVnaXN0ZXIgbWVtb3J5QmFzZSwK LSsgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIgcHRyU2NyYXRjaCwg QW55UmVnaXN0ZXIgb3V0cHV0KTsKLSsgIHZvaWQgd2FzbVN0b3JlSW1wbChjb25zdCB3YXNtOjpN ZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIEFueVJlZ2lzdGVyIHZhbHVlLAotKyAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIgcHRy U2NyYXRjaCk7Ci0rICB2b2lkIHdhc21Mb2FkSTY0SW1wbChjb25zdCB3YXNtOjpNZW1vcnlBY2Nl c3NEZXNjJiBhY2Nlc3MsCi0rICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtZW1vcnlC YXNlLCBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0Y2gsCi0rICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCk7Ci0rICB2b2lkIHdhc21TdG9yZUk2NEltcGwoY29u c3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlcjY0IHZhbHVlLAotKyAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwg UmVnaXN0ZXIgcHRyU2NyYXRjaCk7Ci0rCi0rICAvLyBMYXN0LWJ5dGUgcHJvYmluZyBsb2FkIHRv IGVuZm9yY2Ugd2FzbS1zcGVjIGF0b21pY2l0eSBmb3IgbXVsdGktYnl0ZQotKyAgLy8gd2FzbSBh Y2Nlc3NlcyBvbiBQT1dFUiBJU0EuIFBPV0VSIHBlcm1pdHMgdW5hbGlnbmVkIHBhZ2Utc3Bhbm5p bmcKLSsgIC8vIGFjY2Vzc2VzIHRvIGNvbW1pdCBvbmUgaGFsZiBiZWZvcmUgdGhlIG90aGVyIGhh bGYgdGFrZXMgYSBEU0k7IHdhc20KLSsgIC8vIHJlcXVpcmVzIGF0b21pY2l0eS4gVG91Y2hpbmcg dGhlIGxhc3QgYnl0ZSBvZiB0aGUgdXBjb21pbmcgYWNjZXNzCi0rICAvLyB3aXRoIGEgMS1ieXRl IGxienggdHJpZ2dlcnMgU0lHU0VHViAo4oaSIHdhc20gdHJhcCB2aWEgdGhlIHNpZ25hbAotKyAg Ly8gaGFuZGxlcikgYmVmb3JlIHRoZSBhY3R1YWwgYWNjZXNzIGV4ZWN1dGVzIOKAlCBQT1dFUidz IHByZWNpc2UtCi0rICAvLyBpbnRlcnJ1cHQgbW9kZWwgZ3VhcmFudGVlcyB0aGUgc3Vic2VxdWVu dCBhY2Nlc3MgaXMgbmV2ZXIKLSsgIC8vIGFyY2hpdGVjdHVyYWxseSBleGVjdXRlZCBpZiB0aGUg cHJvYmUgZmF1bHRzLgotKyAgLy8KLSsgIC8vIFdhc20gbGluZWFyIG1lbW9yeSBpcyBvbmUgY29u dGlndW91cyBtYXBwZWQgcmVnaW9uIGZvbGxvd2VkIGJ5IGFuCi0rICAvLyBtcHJvdGVjdCdkIGd1 YXJkLCBzbyBsYXN0LWJ5dGUtbWFwcGVkIOKHkiBhbGwtYnl0ZXMtbWFwcGVkLCBhbmQgYQotKyAg Ly8gc2luZ2xlLWJ5dGUgcHJvYmUgaXMgc3VmZmljaWVudCByZWdhcmRsZXNzIG9mIGFjY2VzcyBz aXplLgotKyAgLy8KLSsgIC8vIE5vLW9wIHdoZW4gSGFzUE9XRVI5KCkgKHJlYWwgUE9XRVI5L1BP V0VSMTAgc2lsaWNvbiBoYW5kbGVzIHBhZ2UtCi0rICAvLyBzcGFubmluZyB1bmFsaWduZWQgc3Rv cmVzIGF0b21pY2FsbHkgYXQgdGhlIMK1YXJjaCBsZXZlbCksIGFuZCB3aGVuCi0rICAvLyBhY2Nl c3Mgc2l6ZSBpcyAxLiBOZXZlciBjYWxsZWQgb24gdGhlIGF0b21pYyBwYXRoOiBhdG9taWMgb3Bz IGFyZQotKyAgLy8gbmF0dXJhbGx5IGFsaWduZWQgcGVyIHdhc20gc3BlYyArIElTQS1lbmZvcmNl ZCBsd2FyeCBhbGlnbm1lbnQsIHNvCi0rICAvLyB0aGV5IGNhbm5vdCBzcGFuIHBhZ2VzOyBtaXNh bGlnbmVkIGF0b21pY3MgdGFrZSBhIHByZWNpc2UgU0lHQlVTCi0rICAvLyBiZWZvcmUgYW55IGNv bW1pdC4KLSsgIC8vCi0rICAvLyAyIGluc3RydWN0aW9ucyB3aGVuIGVtaXR0ZWQgKGFkZGkgKyBs Ynp4KS4KLSsgIHZvaWQgd2FzbVByb2JlTGFzdEJ5dGUoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNz RGVzYyYgYWNjZXNzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtZW1vcnlC YXNlLCBSZWdpc3RlciBwdHIpOwotK307Ci0rCi0rdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclBQQzY0 Q29tcGF0IE1hY3JvQXNzZW1ibGVyU3BlY2lmaWM7Ci0rCi0rfSAgLy8gbmFtZXNwYWNlIGppdAot K30gIC8vIG5hbWVzcGFjZSBqcwotKwotKyNlbmRpZiAvKiBqaXRfcHBjNjRfTWFjcm9Bc3NlbWJs ZXJfcHBjNjRfaCAqLwotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvTW92ZUVtaXR0ZXIt cHBjNjQuY3BwIGIvanMvc3JjL2ppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5jcHAKLW5ldyBm aWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLjk4OWQzZjYxZjEyMQotLS0tIC9k ZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5jcHAKLUBA IC0wLDAgKzEsMzU3IEBACi0rLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQt dGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotKyAqIHZpbTogc2V0IHRzPTgg c3RzPTIgZXQgc3c9MiB0dz04MDoKLSsgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVj dCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCi0rICogTGljZW5zZSwgdi4gMi4w LiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwotKyAq IGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8u ICovCi0rCi0rI2luY2x1ZGUgImppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5oIgotKwotKyNp bmNsdWRlICJqaXQvTWFjcm9Bc3NlbWJsZXItaW5sLmgiCi0rCi0rdXNpbmcgbmFtZXNwYWNlIGpz OwotK3VzaW5nIG5hbWVzcGFjZSBqczo6aml0OwotKwotK3ZvaWQgTW92ZUVtaXR0ZXJQUEM2NDo6 YnJlYWtDeWNsZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgTW92ZU9wZXJhbmQmIHRvLCBNb3ZlT3A6OlR5cGUgdHlwZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2xvdElkKSB7Ci0r ICBzd2l0Y2ggKHR5cGUpIHsKLSsgICAgY2FzZSBNb3ZlT3A6OkZMT0FUMzI6Ci0rICAgICAgaWYg KHRvLmlzTWVtb3J5KCkpIHsKLSsgICAgICAgIFNjcmF0Y2hGbG9hdDMyU2NvcGUgZnBzY3JhdGNo MzIobWFzbSk7Ci0rICAgICAgICBtYXNtLmxvYWRGbG9hdDMyKGdldEFkanVzdGVkQWRkcmVzcyh0 byksIGZwc2NyYXRjaDMyKTsKLSsgICAgICAgIG1hc20uc3RvcmVGbG9hdDMyKGZwc2NyYXRjaDMy LCBjeWNsZVNsb3Qoc2xvdElkKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1hc20uc3Rv cmVGbG9hdDMyKHRvLmZsb2F0UmVnKCksIGN5Y2xlU2xvdChzbG90SWQpKTsKLSsgICAgICB9Ci0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgTW92ZU9wOjpET1VCTEU6Ci0rICAgICAgaWYgKHRvLmlz TWVtb3J5KCkpIHsKLSsgICAgICAgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2g2NChtYXNt KTsKLSsgICAgICAgIG1hc20ubG9hZERvdWJsZShnZXRBZGp1c3RlZEFkZHJlc3ModG8pLCBmcHNj cmF0Y2g2NCk7Ci0rICAgICAgICBtYXNtLnN0b3JlRG91YmxlKGZwc2NyYXRjaDY0LCBjeWNsZVNs b3Qoc2xvdElkKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1hc20uc3RvcmVEb3VibGUo dG8uZmxvYXRSZWcoKSwgY3ljbGVTbG90KHNsb3RJZCkpOwotKyAgICAgIH0KLSsgICAgICBicmVh azsKLSsgICAgY2FzZSBNb3ZlT3A6OklOVDMyOgotKyAgICAgIGlmICh0by5pc01lbW9yeSgpKSB7 Ci0rICAgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKLSsgICAgICAg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAgICAgICBtYXNtLmxvYWQz MihnZXRBZGp1c3RlZEFkZHJlc3ModG8pLCBzY3JhdGNoKTsKLSsgICAgICAgIG1hc20uc3RvcmUz MihzY3JhdGNoLCBjeWNsZVNsb3QoMCkpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBtYXNt LnN0b3JlMzIodG8ucmVnKCksIGN5Y2xlU2xvdCgwKSk7Ci0rICAgICAgfQotKyAgICAgIGJyZWFr OwotKyAgICBjYXNlIE1vdmVPcDo6R0VORVJBTDoKLSsgICAgICBpZiAodG8uaXNNZW1vcnkoKSkg ewotKyAgICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICAgICAg ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAgICAgbWFzbS5sb2Fk UHRyKGdldEFkanVzdGVkQWRkcmVzcyh0byksIHNjcmF0Y2gpOwotKyAgICAgICAgbWFzbS5zdG9y ZVB0cihzY3JhdGNoLCBjeWNsZVNsb3QoMCkpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBt YXNtLnN0b3JlUHRyKHRvLnJlZygpLCBjeWNsZVNsb3QoMCkpOwotKyAgICAgIH0KLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSBNb3ZlT3A6OlNJTUQxMjg6Ci0rICAgICAgaWYgKHRvLmlzTWVtb3J5 KCkpIHsKLSsgICAgICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaChtYXNtKTsKLSsgICAg ICAgIG1hc20ubG9hZFVuYWxpZ25lZFNpbWQxMjgoZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSwgc2Ny YXRjaCk7Ci0rICAgICAgICBtYXNtLnN0b3JlVW5hbGlnbmVkU2ltZDEyOChzY3JhdGNoLCBjeWNs ZVNsb3Qoc2xvdElkKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1hc20uc3RvcmVVbmFs aWduZWRTaW1kMTI4KHRvLmZsb2F0UmVnKCksIGN5Y2xlU2xvdChzbG90SWQpKTsKLSsgICAgICB9 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIKCJVbmV4cGVj dGVkIG1vdmUgdHlwZSIpOwotKyAgfQotK30KLSsKLSt2b2lkIE1vdmVFbWl0dGVyUFBDNjQ6OmNv bXBsZXRlQ3ljbGUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20sCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vdmVPcGVyYW5kJiB0bywgTW92ZU9wOjpUeXBlIHR5 cGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNsb3RJ ZCkgewotKyAgc3dpdGNoICh0eXBlKSB7Ci0rICAgIGNhc2UgTW92ZU9wOjpGTE9BVDMyOgotKyAg ICAgIGlmICh0by5pc01lbW9yeSgpKSB7Ci0rICAgICAgICBTY3JhdGNoRmxvYXQzMlNjb3BlIGZw c2NyYXRjaDMyKG1hc20pOwotKyAgICAgICAgbWFzbS5sb2FkRmxvYXQzMihjeWNsZVNsb3Qoc2xv dElkKSwgZnBzY3JhdGNoMzIpOwotKyAgICAgICAgbWFzbS5zdG9yZUZsb2F0MzIoZnBzY3JhdGNo MzIsIGdldEFkanVzdGVkQWRkcmVzcyh0bykpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBt YXNtLmxvYWRGbG9hdDMyKGN5Y2xlU2xvdChzbG90SWQpLCB0by5mbG9hdFJlZygpKTsKLSsgICAg ICB9Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgTW92ZU9wOjpET1VCTEU6Ci0rICAgICAgaWYg KHRvLmlzTWVtb3J5KCkpIHsKLSsgICAgICAgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2g2 NChtYXNtKTsKLSsgICAgICAgIG1hc20ubG9hZERvdWJsZShjeWNsZVNsb3Qoc2xvdElkKSwgZnBz Y3JhdGNoNjQpOwotKyAgICAgICAgbWFzbS5zdG9yZURvdWJsZShmcHNjcmF0Y2g2NCwgZ2V0QWRq dXN0ZWRBZGRyZXNzKHRvKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1hc20ubG9hZERv dWJsZShjeWNsZVNsb3Qoc2xvdElkKSwgdG8uZmxvYXRSZWcoKSk7Ci0rICAgICAgfQotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIE1vdmVPcDo6SU5UMzI6Ci0rICAgICAgTU9aX0FTU0VSVChzbG90 SWQgPT0gMCk7Ci0rICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsKLSsgICAgICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAgICAgIG1hc20ubG9hZDMyKGN5Y2xlU2xvdCgwKSwgc2Ny YXRjaCk7Ci0rICAgICAgICBtYXNtLnN0b3JlMzIoc2NyYXRjaCwgZ2V0QWRqdXN0ZWRBZGRyZXNz KHRvKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1hc20ubG9hZDMyKGN5Y2xlU2xvdCgw KSwgdG8ucmVnKCkpOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBNb3ZlT3A6 OkdFTkVSQUw6Ci0rICAgICAgTU9aX0FTU0VSVChzbG90SWQgPT0gMCk7Ci0rICAgICAgaWYgKHRv LmlzTWVtb3J5KCkpIHsKLSsgICAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1h c20pOwotKyAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsgICAg ICAgIG1hc20ubG9hZFB0cihjeWNsZVNsb3QoMCksIHNjcmF0Y2gpOwotKyAgICAgICAgbWFzbS5z dG9yZVB0cihzY3JhdGNoLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKLSsgICAgICB9IGVsc2Ug ewotKyAgICAgICAgbWFzbS5sb2FkUHRyKGN5Y2xlU2xvdCgwKSwgdG8ucmVnKCkpOwotKyAgICAg IH0KLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBNb3ZlT3A6OlNJTUQxMjg6Ci0rICAgICAgaWYg KHRvLmlzTWVtb3J5KCkpIHsKLSsgICAgICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCht YXNtKTsKLSsgICAgICAgIG1hc20ubG9hZFVuYWxpZ25lZFNpbWQxMjgoY3ljbGVTbG90KHNsb3RJ ZCksIHNjcmF0Y2gpOwotKyAgICAgICAgbWFzbS5zdG9yZVVuYWxpZ25lZFNpbWQxMjgoc2NyYXRj aCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIG1h c20ubG9hZFVuYWxpZ25lZFNpbWQxMjgoY3ljbGVTbG90KHNsb3RJZCksIHRvLmZsb2F0UmVnKCkp OwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JB U0goIlVuZXhwZWN0ZWQgbW92ZSB0eXBlIik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTW92ZUVtaXR0 ZXJQUEM2NDo6ZW1pdChjb25zdCBNb3ZlUmVzb2x2ZXImIG1vdmVzKSB7Ci0rICBpZiAobW92ZXMu bnVtQ3ljbGVzKCkpIHsKLSsgICAgLy8gU3BpbGxTbG90U2l6ZSBtdXN0IGJlIHdpZGUgZW5vdWdo IGZvciB0aGUgd2lkZXN0IGN5Y2xlZCB2YWx1ZQotKyAgICAvLyAoU0lNRDEyOCA9IDE2IGJ5dGVz KS4gVGhlIHN0cmlkZSBiZWxvdyBhc3N1bWVzIHRoZSBzYW1lLiBTZWUKLSsgICAgLy8gQXJjaGl0 ZWN0dXJlLXBwYzY0LmggZm9yIHRoZSByYXRpb25hbGUuCi0rICAgIHN0YXRpY19hc3NlcnQoU3Bp bGxTbG90U2l6ZSA9PSAxNik7Ci0rICAgIG1hc20ucmVzZXJ2ZVN0YWNrKG1vdmVzLm51bUN5Y2xl cygpICogU3BpbGxTbG90U2l6ZSk7Ci0rICAgIHB1c2hlZEF0Q3ljbGVfID0gbWFzbS5mcmFtZVB1 c2hlZCgpOwotKyAgfQotKwotKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtb3Zlcy5udW1Nb3Zl cygpOyBpKyspIHsKLSsgICAgZW1pdChtb3Zlcy5nZXRNb3ZlKGkpKTsKLSsgIH0KLSt9Ci0rCi0r QWRkcmVzcyBNb3ZlRW1pdHRlclBQQzY0OjpjeWNsZVNsb3QodWludDMyX3Qgc2xvdCwgdWludDMy X3Qgc3Vic2xvdCkgY29uc3QgewotKyAgaW50MzJfdCBvZmZzZXQgPSBtYXNtLmZyYW1lUHVzaGVk KCkgLSBwdXNoZWRBdEN5Y2xlXzsKLSsgIC8vIFN0cmlkZSBtdXN0IG1hdGNoIHRoZSBwZXItY3lj bGUgcmVzZXJ2YXRpb24gaW4gZW1pdCgpOyB1c2luZyBhCi0rICAvLyBuYXJyb3dlciBzdHJpZGUg Y2F1c2VzIGFkamFjZW50IFNJTUQxMjggc2xvdHMgdG8gb3ZlcmxhcC4KLSsgIHJldHVybiBBZGRy ZXNzKFN0YWNrUG9pbnRlciwgb2Zmc2V0ICsgc2xvdCAqIFNwaWxsU2xvdFNpemUgKyBzdWJzbG90 KTsKLSt9Ci0rCi0raW50MzJfdCBNb3ZlRW1pdHRlclBQQzY0OjpnZXRBZGp1c3RlZE9mZnNldChj b25zdCBNb3ZlT3BlcmFuZCYgb3BlcmFuZCkgewotKyAgTU9aX0FTU0VSVChvcGVyYW5kLmlzTWVt b3J5T3JFZmZlY3RpdmVBZGRyZXNzKCkpOwotKyAgaWYgKG9wZXJhbmQuYmFzZSgpICE9IFN0YWNr UG9pbnRlcikgewotKyAgICByZXR1cm4gb3BlcmFuZC5kaXNwKCk7Ci0rICB9Ci0rCi0rICByZXR1 cm4gb3BlcmFuZC5kaXNwKCkgKyBtYXNtLmZyYW1lUHVzaGVkKCkgLSBwdXNoZWRBdFN0YXJ0XzsK LSt9Ci0rCi0rQWRkcmVzcyBNb3ZlRW1pdHRlclBQQzY0OjpnZXRBZGp1c3RlZEFkZHJlc3MoY29u c3QgTW92ZU9wZXJhbmQmIG9wZXJhbmQpIHsKLSsgIHJldHVybiBBZGRyZXNzKG9wZXJhbmQuYmFz ZSgpLCBnZXRBZGp1c3RlZE9mZnNldChvcGVyYW5kKSk7Ci0rfQotKwotK3ZvaWQgTW92ZUVtaXR0 ZXJQUEM2NDo6ZW1pdE1vdmUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20sCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBNb3ZlT3BlcmFuZCYgdG8pIHsKLSsgIGlmIChmcm9t LmlzR2VuZXJhbFJlZygpKSB7Ci0rICAgIGlmICh0by5pc0dlbmVyYWxSZWcoKSkgewotKyAgICAg IG1hc20ubW92ZVB0cihmcm9tLnJlZygpLCB0by5yZWcoKSk7Ci0rICAgIH0gZWxzZSBpZiAodG8u aXNNZW1vcnkoKSkgewotKyAgICAgIG1hc20uc3RvcmVQdHIoZnJvbS5yZWcoKSwgZ2V0QWRqdXN0 ZWRBZGRyZXNzKHRvKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgTU9aX0NSQVNIKCJJbnZhbGlk IGVtaXRNb3ZlIGFyZ3VtZW50cy4iKTsKLSsgICAgfQotKyAgfSBlbHNlIGlmIChmcm9tLmlzTWVt b3J5KCkpIHsKLSsgICAgaWYgKHRvLmlzR2VuZXJhbFJlZygpKSB7Ci0rICAgICAgbWFzbS5sb2Fk UHRyKGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwgdG8ucmVnKCkpOwotKyAgICB9IGVsc2UgaWYg KHRvLmlzTWVtb3J5KCkpIHsKLSsgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyht YXNtKTsKLSsgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICAg IG1hc20ubG9hZFB0cihnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHNjcmF0Y2gpOwotKyAgICAg IG1hc20uc3RvcmVQdHIoc2NyYXRjaCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7Ci0rICAgIH0g ZWxzZSB7Ci0rICAgICAgTU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRNb3ZlIGFyZ3VtZW50cy4iKTsK LSsgICAgfQotKyAgfSBlbHNlIGlmIChmcm9tLmlzRWZmZWN0aXZlQWRkcmVzcygpKSB7Ci0rICAg IGlmICh0by5pc0dlbmVyYWxSZWcoKSkgewotKyAgICAgIG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFk ZHJlc3MoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCB0by5yZWcoKSk7Ci0rICAgIH0gZWxzZSBp ZiAodG8uaXNNZW1vcnkoKSkgewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KG1hc20pOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Ci0rICAg ICAgbWFzbS5jb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSks IHNjcmF0Y2gpOwotKyAgICAgIG1hc20uc3RvcmVQdHIoc2NyYXRjaCwgZ2V0QWRqdXN0ZWRBZGRy ZXNzKHRvKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgTU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRN b3ZlIGFyZ3VtZW50cy4iKTsKLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgTU9aX0NSQVNIKCJJ bnZhbGlkIGVtaXRNb3ZlIGFyZ3VtZW50cy4iKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNb3ZlRW1p dHRlclBQQzY0OjplbWl0SW50MzJNb3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb3ZlT3BlcmFuZCYgdG8pIHsK LSsgIGlmIChmcm9tLmlzR2VuZXJhbFJlZygpKSB7Ci0rICAgIGlmICh0by5pc0dlbmVyYWxSZWco KSkgewotKyAgICAgIG1hc20ubW92ZTMyKGZyb20ucmVnKCksIHRvLnJlZygpKTsKLSsgICAgfSBl bHNlIGlmICh0by5pc01lbW9yeSgpKSB7Ci0rICAgICAgbWFzbS5zdG9yZTMyKGZyb20ucmVnKCks IGdldEFkanVzdGVkQWRkcmVzcyh0bykpOwotKyAgICB9IGVsc2UgewotKyAgICAgIE1PWl9DUkFT SCgiSW52YWxpZCBlbWl0SW50MzJNb3ZlIGFyZ3VtZW50cy4iKTsKLSsgICAgfQotKyAgfSBlbHNl IGlmIChmcm9tLmlzTWVtb3J5KCkpIHsKLSsgICAgaWYgKHRvLmlzR2VuZXJhbFJlZygpKSB7Ci0r ICAgICAgbWFzbS5sb2FkMzIoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCB0by5yZWcoKSk7Ci0r ICAgIH0gZWxzZSBpZiAodG8uaXNNZW1vcnkoKSkgewotKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKG1hc20pOwotKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7Ci0rICAgICAgbWFzbS5sb2FkMzIoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCBzY3Jh dGNoKTsKLSsgICAgICBtYXNtLnN0b3JlMzIoc2NyYXRjaCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRv KSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgTU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRJbnQzMk1v dmUgYXJndW1lbnRzLiIpOwotKyAgICB9Ci0rICB9IGVsc2UgaWYgKGZyb20uaXNFZmZlY3RpdmVB ZGRyZXNzKCkpIHsKLSsgICAgaWYgKHRvLmlzR2VuZXJhbFJlZygpKSB7Ci0rICAgICAgbWFzbS5j b21wdXRlRWZmZWN0aXZlQWRkcmVzcyhnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHRvLnJlZygp KTsKLSsgICAgfSBlbHNlIGlmICh0by5pc01lbW9yeSgpKSB7Ci0rICAgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7Ci0rICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKLSsgICAgICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKGdldEFkanVz dGVkQWRkcmVzcyhmcm9tKSwgc2NyYXRjaCk7Ci0rICAgICAgbWFzbS5zdG9yZTMyKHNjcmF0Y2gs IGdldEFkanVzdGVkQWRkcmVzcyh0bykpOwotKyAgICB9IGVsc2UgewotKyAgICAgIE1PWl9DUkFT SCgiSW52YWxpZCBlbWl0SW50MzJNb3ZlIGFyZ3VtZW50cy4iKTsKLSsgICAgfQotKyAgfSBlbHNl IHsKLSsgICAgTU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRJbnQzMk1vdmUgYXJndW1lbnRzLiIpOwot KyAgfQotK30KLSsKLSt2b2lkIE1vdmVFbWl0dGVyUFBDNjQ6OmVtaXRGbG9hdDMyTW92ZShjb25z dCBNb3ZlT3BlcmFuZCYgZnJvbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBNb3ZlT3BlcmFuZCYgdG8pIHsKLSsgIGlmIChmcm9tLmlzRmxvYXRSZWcoKSkg ewotKyAgICBpZiAodG8uaXNGbG9hdFJlZygpKSB7Ci0rICAgICAgbWFzbS5tb3ZlRmxvYXQzMihm cm9tLmZsb2F0UmVnKCksIHRvLmZsb2F0UmVnKCkpOwotKyAgICB9IGVsc2UgewotKyAgICAgIE1P Wl9BU1NFUlQodG8uaXNNZW1vcnkoKSk7Ci0rICAgICAgbWFzbS5zdG9yZUZsb2F0MzIoZnJvbS5m bG9hdFJlZygpLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKLSsgICAgfQotKyAgfSBlbHNlIGlm ICh0by5pc0Zsb2F0UmVnKCkpIHsKLSsgICAgTU9aX0FTU0VSVChmcm9tLmlzTWVtb3J5KCkpOwot KyAgICBtYXNtLmxvYWRGbG9hdDMyKGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwgdG8uZmxvYXRS ZWcoKSk7Ci0rICB9IGVsc2UgewotKyAgICBNT1pfQVNTRVJUKGZyb20uaXNNZW1vcnkoKSk7Ci0r ICAgIE1PWl9BU1NFUlQodG8uaXNNZW1vcnkoKSk7Ci0rICAgIFNjcmF0Y2hGbG9hdDMyU2NvcGUg ZnBzY3JhdGNoMzIobWFzbSk7Ci0rICAgIG1hc20ubG9hZEZsb2F0MzIoZ2V0QWRqdXN0ZWRBZGRy ZXNzKGZyb20pLCBmcHNjcmF0Y2gzMik7Ci0rICAgIG1hc20uc3RvcmVGbG9hdDMyKGZwc2NyYXRj aDMyLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNb3ZlRW1p dHRlclBQQzY0OjplbWl0RG91YmxlTW92ZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vdmVPcGVyYW5kJiB0bykg ewotKyAgaWYgKGZyb20uaXNGbG9hdFJlZygpKSB7Ci0rICAgIGlmICh0by5pc0Zsb2F0UmVnKCkp IHsKLSsgICAgICBtYXNtLm1vdmVEb3VibGUoZnJvbS5mbG9hdFJlZygpLCB0by5mbG9hdFJlZygp KTsKLSsgICAgfSBlbHNlIGlmICh0by5pc0dlbmVyYWxSZWcoKSkgewotKyAgICAgIC8vIEZQUiAt PiBHUFI6IHVzZSBtZnZzcmQgZGlyZWN0bHkuCi0rICAgICAgbWFzbS5hc19tZnZzcmQodG8ucmVn KCksIGZyb20uZmxvYXRSZWcoKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgTU9aX0FTU0VSVCh0 by5pc01lbW9yeSgpKTsKLSsgICAgICBtYXNtLnN0b3JlRG91YmxlKGZyb20uZmxvYXRSZWcoKSwg Z2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7Ci0rICAgIH0KLSsgIH0gZWxzZSBpZiAodG8uaXNGbG9h dFJlZygpKSB7Ci0rICAgIGlmIChmcm9tLmlzTWVtb3J5KCkpIHsKLSsgICAgICBtYXNtLmxvYWRE b3VibGUoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCB0by5mbG9hdFJlZygpKTsKLSsgICAgfSBl bHNlIHsKLSsgICAgICAvLyBHUFIgLT4gRlBSOiB1c2UgbXR2c3JkIGRpcmVjdGx5LgotKyAgICAg IG1hc20uYXNfbXR2c3JkKHRvLmZsb2F0UmVnKCksIGZyb20ucmVnKCkpOwotKyAgICB9Ci0rICB9 IGVsc2UgewotKyAgICBNT1pfQVNTRVJUKGZyb20uaXNNZW1vcnkoKSk7Ci0rICAgIE1PWl9BU1NF UlQodG8uaXNNZW1vcnkoKSk7Ci0rICAgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2g2NCht YXNtKTsKLSsgICAgbWFzbS5sb2FkRG91YmxlKGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwgZnBz Y3JhdGNoNjQpOwotKyAgICBtYXNtLnN0b3JlRG91YmxlKGZwc2NyYXRjaDY0LCBnZXRBZGp1c3Rl ZEFkZHJlc3ModG8pKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBNb3ZlRW1pdHRlclBQQzY0OjplbWl0 U2ltZDEyOE1vdmUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20sCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW92ZU9wZXJhbmQmIHRvKSB7Ci0rICBpZiAoZnJv bS5pc0Zsb2F0UmVnKCkpIHsKLSsgICAgaWYgKHRvLmlzRmxvYXRSZWcoKSkgewotKyAgICAgIG1h c20ubW92ZVNpbWQxMjgoZnJvbS5mbG9hdFJlZygpLCB0by5mbG9hdFJlZygpKTsKLSsgICAgfSBl bHNlIHsKLSsgICAgICBNT1pfQVNTRVJUKHRvLmlzTWVtb3J5KCkpOwotKyAgICAgIG1hc20uc3Rv cmVVbmFsaWduZWRTaW1kMTI4KGZyb20uZmxvYXRSZWcoKSwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRv KSk7Ci0rICAgIH0KLSsgIH0gZWxzZSBpZiAodG8uaXNGbG9hdFJlZygpKSB7Ci0rICAgIE1PWl9B U1NFUlQoZnJvbS5pc01lbW9yeSgpKTsKLSsgICAgbWFzbS5sb2FkVW5hbGlnbmVkU2ltZDEyOChn ZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHRvLmZsb2F0UmVnKCkpOwotKyAgfSBlbHNlIHsKLSsg ICAgTU9aX0FTU0VSVChmcm9tLmlzTWVtb3J5KCkpOwotKyAgICBNT1pfQVNTRVJUKHRvLmlzTWVt b3J5KCkpOwotKyAgICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gobWFzbSk7Ci0rICAgIG1h c20ubG9hZFVuYWxpZ25lZFNpbWQxMjgoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCBzY3JhdGNo KTsKLSsgICAgbWFzbS5zdG9yZVVuYWxpZ25lZFNpbWQxMjgoc2NyYXRjaCwgZ2V0QWRqdXN0ZWRB ZGRyZXNzKHRvKSk7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTW92ZUVtaXR0ZXJQUEM2NDo6ZW1pdChj b25zdCBNb3ZlT3AmIG1vdmUpIHsKLSsgIGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tID0gbW92ZS5m cm9tKCk7Ci0rICBjb25zdCBNb3ZlT3BlcmFuZCYgdG8gPSBtb3ZlLnRvKCk7Ci0rCi0rICBpZiAo bW92ZS5pc0N5Y2xlRW5kKCkgJiYgbW92ZS5pc0N5Y2xlQmVnaW4oKSkgewotKyAgICBicmVha0N5 Y2xlKGZyb20sIHRvLCBtb3ZlLmVuZEN5Y2xlVHlwZSgpLCBtb3ZlLmN5Y2xlQmVnaW5TbG90KCkp OwotKyAgICBjb21wbGV0ZUN5Y2xlKGZyb20sIHRvLCBtb3ZlLnR5cGUoKSwgbW92ZS5jeWNsZUVu ZFNsb3QoKSk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIGlmIChtb3ZlLmlzQ3ljbGVFbmQo KSkgewotKyAgICBNT1pfQVNTRVJUKGluQ3ljbGVfKTsKLSsgICAgY29tcGxldGVDeWNsZShmcm9t LCB0bywgbW92ZS50eXBlKCksIG1vdmUuY3ljbGVFbmRTbG90KCkpOwotKyAgICBNT1pfQVNTRVJU KGluQ3ljbGVfID4gMCk7Ci0rICAgIGluQ3ljbGVfLS07Ci0rICAgIHJldHVybjsKLSsgIH0KLSsK LSsgIGlmIChtb3ZlLmlzQ3ljbGVCZWdpbigpKSB7Ci0rICAgIGJyZWFrQ3ljbGUoZnJvbSwgdG8s IG1vdmUuZW5kQ3ljbGVUeXBlKCksIG1vdmUuY3ljbGVCZWdpblNsb3QoKSk7Ci0rICAgIGluQ3lj bGVfKys7Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKG1vdmUudHlwZSgpKSB7Ci0rICAgIGNhc2UgTW92 ZU9wOjpGTE9BVDMyOgotKyAgICAgIGVtaXRGbG9hdDMyTW92ZShmcm9tLCB0byk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgTW92ZU9wOjpET1VCTEU6Ci0rICAgICAgZW1pdERvdWJsZU1vdmUo ZnJvbSwgdG8pOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIE1vdmVPcDo6U0lNRDEyODoKLSsg ICAgICBlbWl0U2ltZDEyOE1vdmUoZnJvbSwgdG8pOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IE1vdmVPcDo6SU5UMzI6Ci0rICAgICAgZW1pdEludDMyTW92ZShmcm9tLCB0byk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgTW92ZU9wOjpHRU5FUkFMOgotKyAgICAgIGVtaXRNb3ZlKGZyb20s IHRvKTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0goIlVu ZXhwZWN0ZWQgbW92ZSB0eXBlIik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgTW92ZUVtaXR0ZXJQUEM2 NDo6YXNzZXJ0RG9uZSgpIHsgTU9aX0FTU0VSVChpbkN5Y2xlXyA9PSAwKTsgfQotKwotK3ZvaWQg TW92ZUVtaXR0ZXJQUEM2NDo6ZmluaXNoKCkgewotKyAgYXNzZXJ0RG9uZSgpOwotKwotKyAgbWFz bS5mcmVlU3RhY2sobWFzbS5mcmFtZVB1c2hlZCgpIC0gcHVzaGVkQXRTdGFydF8pOwotK30KLWRp ZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmggYi9qcy9zcmMv aml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRl eCAwMDAwMDAwMDAwMDAuLmE5ZmFhMzRkZTZiYgotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3Jj L2ppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5oCi1AQCAtMCwwICsxLDY0IEBACi0rLyogLSot IE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt b2Zmc2V0OiAyIC0qLQotKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKLSsg KiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1v emlsbGEgUHVibGljCi0rICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3 YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwotKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9u ZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCi0rCi0rI2lmbmRlZiBqaXRfcHBj NjRfTW92ZUVtaXR0ZXJfcHBjNjRfaAotKyNkZWZpbmUgaml0X3BwYzY0X01vdmVFbWl0dGVyX3Bw YzY0X2gKLSsKLSsjaW5jbHVkZSAiaml0L01hY3JvQXNzZW1ibGVyLmgiCi0rI2luY2x1ZGUgImpp dC9Nb3ZlUmVzb2x2ZXIuaCIKLSsKLStuYW1lc3BhY2UganMgewotK25hbWVzcGFjZSBqaXQgewot KwotK2NsYXNzIE1vdmVFbWl0dGVyUFBDNjQgewotKyAgdm9pZCBlbWl0RG91YmxlTW92ZShjb25z dCBNb3ZlT3BlcmFuZCYgZnJvbSwgY29uc3QgTW92ZU9wZXJhbmQmIHRvKTsKLSsgIHZvaWQgZW1p dFNpbWQxMjhNb3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLCBjb25zdCBNb3ZlT3BlcmFuZCYg dG8pOwotKyAgdm9pZCBicmVha0N5Y2xlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLCBjb25zdCBN b3ZlT3BlcmFuZCYgdG8sCi0rICAgICAgICAgICAgICAgICAgTW92ZU9wOjpUeXBlIHR5cGUsIHVp bnQzMl90IHNsb3QpOwotKyAgdm9pZCBjb21wbGV0ZUN5Y2xlKGNvbnN0IE1vdmVPcGVyYW5kJiBm cm9tLCBjb25zdCBNb3ZlT3BlcmFuZCYgdG8sCi0rICAgICAgICAgICAgICAgICAgICAgTW92ZU9w OjpUeXBlIHR5cGUsIHVpbnQzMl90IHNsb3QpOwotKwotKyBwcm90ZWN0ZWQ6Ci0rICB1aW50MzJf dCBpbkN5Y2xlXzsKLSsgIE1hY3JvQXNzZW1ibGVyJiBtYXNtOwotKwotKyAgdWludDMyX3QgcHVz aGVkQXRTdGFydF87Ci0rCi0rICBpbnQzMl90IHB1c2hlZEF0Q3ljbGVfOwotKwotKyAgdm9pZCBh c3NlcnREb25lKCk7Ci0rICBBZGRyZXNzIGN5Y2xlU2xvdCh1aW50MzJfdCBzbG90LCB1aW50MzJf dCBzdWJzbG90ID0gMCkgY29uc3Q7Ci0rICBpbnQzMl90IGdldEFkanVzdGVkT2Zmc2V0KGNvbnN0 IE1vdmVPcGVyYW5kJiBvcGVyYW5kKTsKLSsgIEFkZHJlc3MgZ2V0QWRqdXN0ZWRBZGRyZXNzKGNv bnN0IE1vdmVPcGVyYW5kJiBvcGVyYW5kKTsKLSsKLSsgIHZvaWQgZW1pdE1vdmUoY29uc3QgTW92 ZU9wZXJhbmQmIGZyb20sIGNvbnN0IE1vdmVPcGVyYW5kJiB0byk7Ci0rICB2b2lkIGVtaXRJbnQz Mk1vdmUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20sIGNvbnN0IE1vdmVPcGVyYW5kJiB0byk7Ci0r ICB2b2lkIGVtaXRGbG9hdDMyTW92ZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwgY29uc3QgTW92 ZU9wZXJhbmQmIHRvKTsKLSsgIHZvaWQgZW1pdChjb25zdCBNb3ZlT3AmIG1vdmUpOwotKwotKyBw dWJsaWM6Ci0rICBleHBsaWNpdCBNb3ZlRW1pdHRlclBQQzY0KE1hY3JvQXNzZW1ibGVyJiBtYXNt KQotKyAgICAgIDogaW5DeWNsZV8oMCksCi0rICAgICAgICBtYXNtKG1hc20pLAotKyAgICAgICAg cHVzaGVkQXRTdGFydF8obWFzbS5mcmFtZVB1c2hlZCgpKSwKLSsgICAgICAgIHB1c2hlZEF0Q3lj bGVfKC0xKSB7fQotKwotKyAgfk1vdmVFbWl0dGVyUFBDNjQoKSB7IGFzc2VydERvbmUoKTsgfQot KwotKyAgdm9pZCBlbWl0KGNvbnN0IE1vdmVSZXNvbHZlciYgbW92ZXMpOwotKyAgdm9pZCBmaW5p c2goKTsKLSsgIC8vIHNldFNjcmF0Y2hSZWdpc3RlciBpcyBwYXJ0IG9mIHRoZSBjcm9zcy1hcmNo IE1vdmVFbWl0dGVyIGludGVyZmFjZQotKyAgLy8gYnV0IHdlIG5ldmVyIHNwaWxsLCBzbyB0aGVy ZSdzIG5vIHNjcmF0Y2ggdG8gc2V0LiBOby1vcCBrZXB0IGZvcgotKyAgLy8gc2hhcmVkLWNvZGUg Y29tcGF0aWJpbGl0eS4KLSsgIHZvaWQgc2V0U2NyYXRjaFJlZ2lzdGVyKFJlZ2lzdGVyIHJlZykg e30KLSt9OwotKwotK3R5cGVkZWYgTW92ZUVtaXR0ZXJQUEM2NCBNb3ZlRW1pdHRlcjsKLSsKLSt9 ICAvLyBuYW1lc3BhY2Ugaml0Ci0rfSAgLy8gbmFtZXNwYWNlIGpzCi0rCi0rI2VuZGlmIC8qIGpp dF9wcGM2NF9Nb3ZlRW1pdHRlcl9wcGM2NF9oICovCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9w cGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQtaW5sLmggYi9qcy9zcmMvaml0L3BwYzY0L1NoYXJl ZElDSGVscGVycy1wcGM2NC1pbmwuaAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAw MDAwMDAwMC4uYWE4NzRkZmQ2NzMyCi0tLS0gL2Rldi9udWxsCi0rKysgYi9qcy9zcmMvaml0L3Bw YzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC1pbmwuaAotQEAgLTAsMCArMSw4MyBAQAotKy8qIC0q LSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2lj LW9mZnNldDogMiAtKi0KLSsgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6Ci0r ICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBN b3ppbGxhIFB1YmxpYwotKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwg d2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBv bmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwotKwotKyNpZm5kZWYgaml0X3Bw YzY0X1NoYXJlZElDSGVscGVyc19wcGM2NF9pbmxfaAotKyNkZWZpbmUgaml0X3BwYzY0X1NoYXJl ZElDSGVscGVyc19wcGM2NF9pbmxfaAotKwotKyNpbmNsdWRlICJqaXQvQmFzZWxpbmVGcmFtZS5o IgotKyNpbmNsdWRlICJqaXQvU2hhcmVkSUNIZWxwZXJzLmgiCi0rCi0rI2luY2x1ZGUgImppdC9N YWNyb0Fzc2VtYmxlci1pbmwuaCIKLSsKLStuYW1lc3BhY2UganMgewotK25hbWVzcGFjZSBqaXQg ewotKwotK2lubGluZSB2b2lkIEVtaXRCYXNlbGluZVRhaWxDYWxsVk0oVHJhbXBvbGluZVB0ciB0 YXJnZXQsIE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgYXJnU2l6ZSkgewotKyNpZmRlZiBERUJVRwotKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IFIyLnNjcmF0Y2hSZWcoKTsKLSsKLSsgIC8vIENvbXB1dGUgZnJhbWUgc2l6ZS4K LSsgIG1hc20ubW92ZVB0cihGcmFtZVBvaW50ZXIsIHNjcmF0Y2gpOwotKyAgbWFzbS5zdWJQdHIo U3RhY2tQb2ludGVyLCBzY3JhdGNoKTsKLSsKLSsgIC8vIFN0b3JlIGZyYW1lIHNpemUgd2l0aG91 dCBWTUZ1bmN0aW9uIGFyZ3VtZW50cyBmb3IgZGVidWcgYXNzZXJ0aW9ucy4KLSsgIG1hc20uc3Vi UHRyKEltbTMyKGFyZ1NpemUpLCBzY3JhdGNoKTsKLSsgIEFkZHJlc3MgZnJhbWVTaXplQWRkcihG cmFtZVBvaW50ZXIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgQmFzZWxpbmVGcmFtZTo6cmV2 ZXJzZU9mZnNldE9mRGVidWdGcmFtZVNpemUoKSk7Ci0rICBtYXNtLnN0b3JlMzIoc2NyYXRjaCwg ZnJhbWVTaXplQWRkcik7Ci0rICBtYXNtLmFkZFB0cihJbW0zMihhcmdTaXplKSwgc2NyYXRjaCk7 Ci0rI2VuZGlmCi0rCi0rICAvLyBQdXNoIGZyYW1lIGRlc2NyaXB0b3IgYW5kIHBlcmZvcm0gdGhl IHRhaWwgY2FsbC4KLSsgIG1hc20ucHVzaChGcmFtZURlc2NyaXB0b3IoRnJhbWVUeXBlOjpCYXNl bGluZUpTKSk7Ci0rCi0rICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgaW4gTFIgKHNldCBieSB0 aGUgb3JpZ2luYWwgYmwvYmN0cmwgY2FsbCkuCi0rICAvLyBUaGUgVk1XcmFwcGVyIGNvZGUgd2ls bCBwdXNoIGl0IHZpYSBwdXNoUmV0dXJuQWRkcmVzcygpLgotKwotKyAgbWFzbS5qdW1wKHRhcmdl dCk7Ci0rfQotKwotK2lubGluZSB2b2lkIEVtaXRCYXNlbGluZUNhbGxWTShUcmFtcG9saW5lUHRy IHRhcmdldCwgTWFjcm9Bc3NlbWJsZXImIG1hc20pIHsKLSsgIG1hc20ucHVzaChGcmFtZURlc2Ny aXB0b3IoRnJhbWVUeXBlOjpCYXNlbGluZVN0dWIpKTsKLSsgIG1hc20uY2FsbCh0YXJnZXQpOwot K30KLSsKLStpbmxpbmUgdm9pZCBFbWl0QmFzZWxpbmVFbnRlclN0dWJGcmFtZShNYWNyb0Fzc2Vt YmxlciYgbWFzbSwgUmVnaXN0ZXIgc2NyYXRjaCkgewotKyAgTU9aX0FTU0VSVChzY3JhdGNoICE9 IElDVGFpbENhbGxSZWcpOwotKwotKyNpZmRlZiBERUJVRwotKyAgLy8gQ29tcHV0ZSBmcmFtZSBz aXplLgotKyAgbWFzbS5tb3ZlUHRyKEZyYW1lUG9pbnRlciwgc2NyYXRjaCk7Ci0rICBtYXNtLnN1 YlB0cihTdGFja1BvaW50ZXIsIHNjcmF0Y2gpOwotKwotKyAgQWRkcmVzcyBmcmFtZVNpemVBZGRy KEZyYW1lUG9pbnRlciwKLSsgICAgICAgICAgICAgICAgICAgICAgICBCYXNlbGluZUZyYW1lOjpy ZXZlcnNlT2Zmc2V0T2ZEZWJ1Z0ZyYW1lU2l6ZSgpKTsKLSsgIG1hc20uc3RvcmUzMihzY3JhdGNo LCBmcmFtZVNpemVBZGRyKTsKLSsjZW5kaWYKLSsKLSsgIC8vIE5vdGU6IHdoZW4gbWFraW5nIGNo YW5nZXMgaGVyZSwgZG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZQotKyAgLy8gQmFzZWxpbmVTdHViRnJh bWUgaWYgbmVlZGVkLgotKwotKyAgLy8gUHVzaCBmcmFtZSBkZXNjcmlwdG9yIGFuZCByZXR1cm4g YWRkcmVzcy4KLSsgIC8vIExSIGhvbGRzIHRoZSByZXR1cm4gYWRkcmVzczsgcmVhZCBpdCBpbnRv IElDVGFpbENhbGxSZWcgdG8gcHVzaC4KLSsgIG1hc20uUHVzaChGcmFtZURlc2NyaXB0b3IoRnJh bWVUeXBlOjpCYXNlbGluZUpTKSk7Ci0rICBtYXNtLnhzX21mbHIoSUNUYWlsQ2FsbFJlZyk7Ci0r ICBtYXNtLlB1c2goSUNUYWlsQ2FsbFJlZyk7Ci0rCi0rICAvLyBTYXZlIG9sZCBmcmFtZSBwb2lu dGVyLCBzdGFjayBwb2ludGVyIGFuZCBzdHViIHJlZy4KLSsgIG1hc20uUHVzaChGcmFtZVBvaW50 ZXIpOwotKyAgbWFzbS5tb3ZlUHRyKFN0YWNrUG9pbnRlciwgRnJhbWVQb2ludGVyKTsKLSsgIG1h c20uUHVzaChJQ1N0dWJSZWcpOwotKwotKyAgLy8gU3RhY2sgc2hvdWxkIHJlbWFpbiBhbGlnbmVk LgotKyAgbWFzbS5hc3NlcnRTdGFja0FsaWdubWVudChzaXplb2YoVmFsdWUpLCAwKTsKLSt9Ci0r Ci0rfSAgLy8gbmFtZXNwYWNlIGppdAotK30gIC8vIG5hbWVzcGFjZSBqcwotKwotKyNlbmRpZiAv KiBqaXRfcHBjNjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0X2lubF9oICovCi1kaWZmIC0tZ2l0IGEv anMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQuaCBiL2pzL3NyYy9qaXQvcHBj NjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LmgKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAw MDAwMDAwMDAwMDAuLjMxYmE4MzBkMjYwOQotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2pp dC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQuaAotQEAgLTAsMCArMSw5NyBAQAotKy8qIC0q LSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2lj LW9mZnNldDogMiAtKi0KLSsgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6Ci0r ICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBN b3ppbGxhIFB1YmxpYwotKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwg d2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBv bmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwotKwotKyNpZm5kZWYgaml0X3Bw YzY0X1NoYXJlZElDSGVscGVyc19wcGM2NF9oCi0rI2RlZmluZSBqaXRfcHBjNjRfU2hhcmVkSUNI ZWxwZXJzX3BwYzY0X2gKLSsKLSsjaW5jbHVkZSAiaml0L0Jhc2VsaW5lSUMuaCIKLSsjaW5jbHVk ZSAiaml0L0ppdEZyYW1lcy5oIgotKyNpbmNsdWRlICJqaXQvTWFjcm9Bc3NlbWJsZXIuaCIKLSsj aW5jbHVkZSAiaml0L1NoYXJlZElDUmVnaXN0ZXJzLmgiCi0rCi0rbmFtZXNwYWNlIGpzIHsKLStu YW1lc3BhY2Ugaml0IHsKLSsKLSsvLyBEaXN0YW5jZSBmcm9tIHNwIHRvIHRoZSB0b3AgVmFsdWUg aW5zaWRlIGFuIElDIHN0dWIgKG5vIHJldHVybiBhZGRyZXNzIG9uCi0rLy8gdGhlIHN0YWNrIG9u IFBQQzY0KS4KLStzdGF0aWMgY29uc3Qgc2l6ZV90IElDU3RhY2tWYWx1ZU9mZnNldCA9IDA7Ci0r Ci0rc3RydWN0IEJhc2VsaW5lU3R1YkZyYW1lIHsKLSsgIHVpbnRwdHJfdCBzYXZlZEZyYW1lOwot KyAgdWludHB0cl90IHNhdmVkU3R1YjsKLSsgIHVpbnRwdHJfdCByZXR1cm5BZGRyZXNzOwotKyAg dWludHB0cl90IGRlc2NyaXB0b3I7Ci0rfTsKLSsKLStpbmxpbmUgdm9pZCBFbWl0UmVzdG9yZVRh aWxDYWxsUmVnKE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7Ci0rICAvLyBPbiBQUEM2NCwgTFIgYWx3 YXlzIGhvbGRzIHRoZSByZXR1cm4gYWRkcmVzcyBhZnRlciBhIGJsL2JjdHJsIGNhbGwuCi0rICAv LyBOby1vcDogTFIgaXMgdGhlIGhhcmR3YXJlIGxpbmsgcmVnaXN0ZXIsIG5vdCBhIEdQUiBvbiB0 aGUgc3RhY2suCi0rfQotKwotK2lubGluZSB2b2lkIEVtaXRSZXB1c2hUYWlsQ2FsbFJlZyhNYWNy b0Fzc2VtYmxlciYgbWFzbSkgewotKyAgLy8gTm8tb3A6IExSIGFscmVhZHkgaG9sZHMgdGhlIHJl dHVybiBhZGRyZXNzLgotK30KLSsKLStpbmxpbmUgdm9pZCBFbWl0Q2FsbElDKE1hY3JvQXNzZW1i bGVyJiBtYXNtLCBDb2RlT2Zmc2V0KiBjYWxsT2Zmc2V0KSB7Ci0rICAvLyBUaGUgc3R1YiBwb2lu dGVyIG11c3QgYWxyZWFkeSBiZSBpbiBJQ1N0dWJSZWcuCi0rICAvLyBMb2FkIHN0dWJjb2RlIHBv aW50ZXIgZnJvbSB0aGUgSUNTdHViLgotKyAgLy8gUjIgd29uJ3QgYmUgYWN0aXZlIHdoZW4gd2Ug Y2FsbCBJQ3MsIHNvIHdlIGNhbiB1c2UgaXQgYXMgc2NyYXRjaC4KLSsgIG1hc20ubG9hZFB0cihB ZGRyZXNzKElDU3R1YlJlZywgSUNTdHViOjpvZmZzZXRPZlN0dWJDb2RlKCkpLCBSMi5zY3JhdGNo UmVnKCkpOwotKwotKyAgLy8gQ2FsbCB0aGUgc3R1YmNvZGUuIE9uIFBQQzY0IGNhbGwoUmVnaXN0 ZXIpIGVtaXRzIG10Y3RyICsgYmN0cmwsCi0rICAvLyB3aGljaCBzZXRzIExSIHRvIHRoZSBhZGRy ZXNzIGFmdGVyIGJjdHJsLgotKyAgbWFzbS5jYWxsKFIyLnNjcmF0Y2hSZWcoKSk7Ci0rICAqY2Fs bE9mZnNldCA9IENvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpOwotK30KLSsKLStpbmxp bmUgdm9pZCBFbWl0UmV0dXJuRnJvbUlDKE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7Ci0rICAvLyBS ZXR1cm4gdmlhIGhhcmR3YXJlIExSIChzZXQgYnkgdGhlIG9yaWdpbmFsIGJsL2JjdHJsIGNhbGwp LgotKyAgbWFzbS5hc19ibHIoKTsKLSt9Ci0rCi0raW5saW5lIHZvaWQgRW1pdEJhc2VsaW5lTGVh dmVTdHViRnJhbWUoTWFjcm9Bc3NlbWJsZXImIG1hc20pIHsKLSsgIG1hc20ubG9hZFB0cigKLSsg ICAgICBBZGRyZXNzKEZyYW1lUG9pbnRlciwgQmFzZWxpbmVTdHViRnJhbWVMYXlvdXQ6OklDU3R1 Yk9mZnNldEZyb21GUCksCi0rICAgICAgSUNTdHViUmVnKTsKLSsKLSsgIG1hc20ubW92ZVB0cihG cmFtZVBvaW50ZXIsIFN0YWNrUG9pbnRlcik7Ci0rICBtYXNtLlBvcChGcmFtZVBvaW50ZXIpOwot KwotKyAgLy8gTG9hZCB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHJlc3RvcmUgaXQgdG8gTFIuCi0r ICBtYXNtLlBvcChJQ1RhaWxDYWxsUmVnKTsKLSsgIG1hc20ueHNfbXRscihJQ1RhaWxDYWxsUmVn KTsKLSsKLSsgIC8vIERpc2NhcmQgdGhlIGZyYW1lIGRlc2NyaXB0b3IuCi0rICB7Ci0rICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOwotKyAgICBtYXNtLlBvcChzY3JhdGNoKTsKLSsgIH0KLSt9Ci0r Ci0rdGVtcGxhdGUgPHR5cGVuYW1lIEFkZHJUeXBlPgotK2lubGluZSB2b2lkIEVtaXRQcmVCYXJy aWVyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBjb25zdCBBZGRyVHlwZSYgYWRkciwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICBNSVJUeXBlIHR5cGUpIHsKLSsgIC8vIE9uIFBQQzY0LCBMUiBp cyBjbG9iYmVyZWQgYnkgZ3VhcmRlZENhbGxQcmVCYXJyaWVyLiBTYXZlIGl0IGZpcnN0LgotKyAg bWFzbS54c19tZmxyKHIwKTsKLSsgIG1hc20ucHVzaChyMCk7Ci0rICBtYXNtLmd1YXJkZWRDYWxs UHJlQmFycmllcihhZGRyLCB0eXBlKTsKLSsgIG1hc20ucG9wKHIwKTsKLSsgIG1hc20ueHNfbXRs cihyMCk7Ci0rfQotKwotK2lubGluZSB2b2lkIEVtaXRTdHViR3VhcmRGYWlsdXJlKE1hY3JvQXNz ZW1ibGVyJiBtYXNtKSB7Ci0rICAvLyBMb2FkIG5leHQgc3R1YiBpbnRvIElDU3R1YlJlZy4KLSsg IG1hc20ubG9hZFB0cihBZGRyZXNzKElDU3R1YlJlZywgSUNDYWNoZUlSU3R1Yjo6b2Zmc2V0T2ZO ZXh0KCkpLCBJQ1N0dWJSZWcpOwotKwotKyAgLy8gUmV0dXJuIGFkZHJlc3MgaXMgaW4gTFIuIEp1 bXAgdG8gdGhlIG5leHQgc3R1YmNvZGUuCi0rICBtYXNtLmp1bXAoQWRkcmVzcyhJQ1N0dWJSZWcs IElDU3R1Yjo6b2Zmc2V0T2ZTdHViQ29kZSgpKSk7Ci0rfQotKwotK30gIC8vIG5hbWVzcGFjZSBq aXQKLSt9ICAvLyBuYW1lc3BhY2UganMKLSsKLSsjZW5kaWYgLyogaml0X3BwYzY0X1NoYXJlZElD SGVscGVyc19wcGM2NF9oICovCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJ Q1JlZ2lzdGVycy1wcGM2NC5oIGIvanMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ1JlZ2lzdGVycy1w cGM2NC5oCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi5kZGY2NzM0 MmY4NTUKLS0tLSAvZGV2L251bGwKLSsrKyBiL2pzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNSZWdp c3RlcnMtcHBjNjQuaAotQEAgLTAsMCArMSw0NiBAQAotKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13 aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KLSsg KiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6Ci0rICogVGhpcyBTb3VyY2UgQ29k ZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwotKyAq IExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRl ZCB3aXRoIHRoaXMKLSsgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemls bGEub3JnL01QTC8yLjAvLiAqLwotKwotKyNpZm5kZWYgaml0X3BwYzY0X1NoYXJlZElDUmVnaXN0 ZXJzX3BwYzY0X2gKLSsjZGVmaW5lIGppdF9wcGM2NF9TaGFyZWRJQ1JlZ2lzdGVyc19wcGM2NF9o Ci0rCi0rI2luY2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuaCIKLSsjaW5jbHVkZSAi aml0L1JlZ2lzdGVycy5oIgotKyNpbmNsdWRlICJqaXQvUmVnaXN0ZXJTZXRzLmgiCi0rCi0rbmFt ZXNwYWNlIGpzIHsKLStuYW1lc3BhY2Ugaml0IHsKLSsKLSsvLyBWYWx1ZU9wZXJhbmRzIFIwLCBS MSwgYW5kIFIyLgotKy8vIFIwID09IEpTUmV0dXJuUmVnLCBhbmQgUjIgdXNlcyByZWdpc3RlcnMg bm90IHByZXNlcnZlZCBhY3Jvc3MgY2FsbHMuIFIxIHZhbHVlCi0rLy8gc2hvdWxkIGJlIHByZXNl cnZlZCBhY3Jvc3MgY2FsbHMuCi0rc3RhdGljIGNvbnN0ZXhwciBWYWx1ZU9wZXJhbmQgUjAocjUp OwotK3N0YXRpYyBjb25zdGV4cHIgVmFsdWVPcGVyYW5kIFIxKHIxNSk7Ci0rc3RhdGljIGNvbnN0 ZXhwciBWYWx1ZU9wZXJhbmQgUjIocjQpOwotKwotKy8vIElDVGFpbENhbGxSZWcgYW5kIElDU3R1 YlJlZy4KLSsvLyBPbiBQUEM2NCwgTFIgaXMgbm90IGEgR1BSLCBzbyBJQ1RhaWxDYWxsUmVnIG11 c3QgYmUgYSBub3JtYWwgR1BSLgotKy8vIFBQQzY0IEVMRnYyIGhhcyBubyB2b2xhdGlsZSBub24t YXJnIEdQUnMgKHIzLXIxMCBhcmUgYWxsIGFyZyByZWdzKSwgc28KLSsvLyB1c2luZyBhbiBhcmcg cmVnaXN0ZXIgcmlza3MgY2xvYmJlcmluZyBieSBBQkkgY2FsbHMgd2l0aCBlbm91Z2ggYXJndW1l bnRzLgotKy8vIFdlIHVzZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIGluc3RlYWQsIG1hdGNoaW5n IE1JUFM2NC9SSVNDLVYgc3RyYXRlZ3kuCi0rLy8gVGhlc2UgYXJlIGV4Y2x1ZGVkIGZyb20gQmFz ZWxpbmVJQ0F2YWlsYWJsZUdlbmVyYWxSZWdzLgotK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIg SUNUYWlsQ2FsbFJlZyA9IHIyNzsKLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIElDU3R1YlJl ZyA9IHIyNjsKLSsKLSsvLyBGbG9hdFJlZzAgbXVzdCBiZSBlcXVhbCB0byBSZXR1cm5GbG9hdFJl Zy4KLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgRmxvYXRSZWcwID0ge0Zsb2F0UmVn aXN0ZXJzOjpmMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3Rl ciBGbG9hdFJlZzEgPSB7RmxvYXRSZWdpc3RlcnM6OmYyLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Ci0rc3RhdGlj IGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIEZsb2F0UmVnMiA9IHtGbG9hdFJlZ2lzdGVyczo6ZjMs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyczo6RG91YmxlfTsKLStzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgRmxvYXRSZWcz ID0ge0Zsb2F0UmVnaXN0ZXJzOjpmNCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OwotKwotK30gIC8vIG5hbWVzcGFj ZSBqaXQKLSt9ICAvLyBuYW1lc3BhY2UganMKLSsKLSsjZW5kaWYgLyogaml0X3BwYzY0X1NoYXJl ZElDUmVnaXN0ZXJzX3BwYzY0X2ggKi8KLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L1Np bXVsYXRvci1wcGM2NC5jcHAgYi9qcy9zcmMvaml0L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5jcHAK LW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAwMDAuLjhiMjllYjNhZGQwNAot LS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC9wcGM2NC9TaW11bGF0b3ItcHBjNjQuY3Bw Ci1AQCAtMCwwICsxLDcyOTYgQEAKLSsvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGlu ZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0rICogdmltOiBzZXQg dHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgotKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBz dWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKLSsgKiBMaWNlbnNlLCB2 LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlz Ci0rICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwv Mi4wLy4gKi8KLSsKLSsjaW5jbHVkZSAiaml0L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5oIgotKwot KyNpbmNsdWRlIDxjaW50dHlwZXM+Ci0rI2luY2x1ZGUgPGNtYXRoPgotKyNpbmNsdWRlIDxjc3Ry aW5nPgotKyNpbmNsdWRlIDxmbG9hdC5oPgotKyNpbmNsdWRlIDxsaW1pdHM+Ci0rCi0rI2luY2x1 ZGUgImppdC9BdG9taWNPcGVyYXRpb25zLmgiCi0rI2luY2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJs ZXItcHBjNjQuaCIKLSsjaW5jbHVkZSAianMvQ29udmVyc2lvbnMuaCIKLSsjaW5jbHVkZSAidGhy ZWFkaW5nL0xvY2tHdWFyZC5oIgotKyNpbmNsdWRlICJ2bS9GbG9hdDE2LmgiCi0rI2luY2x1ZGUg InZtL0pTQ29udGV4dC5oIgotKyNpbmNsdWRlICJ2bS9SdW50aW1lLmgiCi0rI2luY2x1ZGUgIndh c20vV2FzbUluc3RhbmNlLmgiCi0rI2luY2x1ZGUgIndhc20vV2FzbVNpZ25hbEhhbmRsZXJzLmgi Ci0rCi0rI2RlZmluZSBJOCh2KSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHYpCi0rI2RlZmluZSBJMTYo dikgc3RhdGljX2Nhc3Q8aW50MTZfdD4odikKLSsjZGVmaW5lIFUxNih2KSBzdGF0aWNfY2FzdDx1 aW50MTZfdD4odikKLSsjZGVmaW5lIEkzMih2KSBzdGF0aWNfY2FzdDxpbnQzMl90Pih2KQotKyNk ZWZpbmUgVTMyKHYpIHN0YXRpY19jYXN0PHVpbnQzMl90Pih2KQotKyNkZWZpbmUgSTY0KHYpIHN0 YXRpY19jYXN0PGludDY0X3Q+KHYpCi0rI2RlZmluZSBVNjQodikgc3RhdGljX2Nhc3Q8dWludDY0 X3Q+KHYpCi0rI2RlZmluZSBJMTI4KHYpIHN0YXRpY19jYXN0PF9faW50MTI4X3Q+KHYpCi0rI2Rl ZmluZSBVMTI4KHYpIHN0YXRpY19jYXN0PF9fdWludDEyOF90Pih2KQotKwotK25hbWVzcGFjZSBq cyB7Ci0rbmFtZXNwYWNlIGppdCB7Ci0rCi0rc3RhdGljIGludDY0X3QgTXVsdGlwbHlIaWdoU2ln bmVkKGludDY0X3QgdSwgaW50NjRfdCB2KSB7Ci0rICB1aW50NjRfdCB1MCwgdjAsIHcwOwotKyAg aW50NjRfdCB1MSwgdjEsIHcxLCB3MiwgdDsKLSsKLSsgIHUwID0gdSAmIDB4RkZGRkZGRkZMOwot KyAgdTEgPSB1ID4+IDMyOwotKyAgdjAgPSB2ICYgMHhGRkZGRkZGRkw7Ci0rICB2MSA9IHYgPj4g MzI7Ci0rCi0rICB3MCA9IHUwICogdjA7Ci0rICB0ID0gdTEgKiB2MCArICh3MCA+PiAzMik7Ci0r ICB3MSA9IHQgJiAweEZGRkZGRkZGTDsKLSsgIHcyID0gdCA+PiAzMjsKLSsgIHcxID0gdTAgKiB2 MSArIHcxOwotKwotKyAgcmV0dXJuIHUxICogdjEgKyB3MiArICh3MSA+PiAzMik7Ci0rfQotKwot K3N0YXRpYyB1aW50NjRfdCBNdWx0aXBseUhpZ2hVbnNpZ25lZCh1aW50NjRfdCB1LCB1aW50NjRf dCB2KSB7Ci0rICB1aW50NjRfdCB1MCwgdjAsIHcwOwotKyAgdWludDY0X3QgdTEsIHYxLCB3MSwg dzIsIHQ7Ci0rCi0rICB1MCA9IHUgJiAweEZGRkZGRkZGTDsKLSsgIHUxID0gdSA+PiAzMjsKLSsg IHYwID0gdiAmIDB4RkZGRkZGRkZMOwotKyAgdjEgPSB2ID4+IDMyOwotKwotKyAgdzAgPSB1MCAq IHYwOwotKyAgdCA9IHUxICogdjAgKyAodzAgPj4gMzIpOwotKyAgdzEgPSB0ICYgMHhGRkZGRkZG Rkw7Ci0rICB3MiA9IHQgPj4gMzI7Ci0rICB3MSA9IHUwICogdjEgKyB3MTsKLSsKLSsgIHJldHVy biB1MSAqIHYxICsgdzIgKyAodzEgPj4gMzIpOwotK30KLSsKLStpbmxpbmUgY29uc3RleHByIHVp bnQzMl90IFJvdGF0ZUxlZnQzMih1aW50MzJfdCB2YWx1ZSwgdWludDMyX3Qgc2hpZnQpIHsKLSsg IHJldHVybiAodmFsdWUgPDwgc2hpZnQpIHwgKHZhbHVlID4+ICgoMzIgLSBzaGlmdCkgJiAzMSkp OwotK30KLSsKLStpbmxpbmUgY29uc3RleHByIHVpbnQ2NF90IFJvdGF0ZUxlZnQ2NCh1aW50NjRf dCB2YWx1ZSwgdWludDY0X3Qgc2hpZnQpIHsKLSsgIHJldHVybiAodmFsdWUgPDwgc2hpZnQpIHwg KHZhbHVlID4+ICgoNjQgLSBzaGlmdCkgJiA2MykpOwotK30KLSsKLSsvLyBHZW5lcmF0ZSBhIDY0 LWJpdCBtYXNrIHdpdGggYml0cyBtYi4ubWUgc2V0IChQUEMgbnVtYmVyaW5nOiAwID0gTVNCID0g Yml0Ci0rLy8gNjMgaW4gQykuICBXaGVuIG1iIDw9IG1lLCBhIGNvbnRpZ3VvdXMgcmFuZ2UgaXMg c2V0OyB3aGVuIG1iID4gbWUsIHRoZQotKy8vIG1hc2sgd3JhcHMgYXJvdW5kIChiaXRzIDAuLm1l IGFuZCBtYi4uNjMgYXJlIHNldCkuCi0rc3RhdGljIGlubGluZSB1aW50NjRfdCBNQVNLNjQodW5z aWduZWQgbWIsIHVuc2lnbmVkIG1lKSB7Ci0rICBNT1pfQVNTRVJUKG1iIDwgNjQgJiYgbWUgPCA2 NCk7Ci0rICB1aW50NjRfdCBtYXNrX2JlZ2luID0gfjBVTEwgPj4gbWI7Ci0rICB1aW50NjRfdCBt YXNrX2VuZCA9IH4wVUxMIDw8ICg2MyAtIG1lKTsKLSsgIGlmIChtYiA8PSBtZSkgewotKyAgICBy ZXR1cm4gbWFza19iZWdpbiAmIG1hc2tfZW5kOwotKyAgfQotKyAgcmV0dXJuIG1hc2tfYmVnaW4g fCBtYXNrX2VuZDsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSB1aW50MzJfdCBNQVNLMzIodW5zaWdu ZWQgbWIsIHVuc2lnbmVkIG1lKSB7Ci0rICBNT1pfQVNTRVJUKG1iIDwgMzIgJiYgbWUgPCAzMik7 Ci0rICB1aW50MzJfdCBtYXNrX2JlZ2luID0gfjBVID4+IG1iOwotKyAgdWludDMyX3QgbWFza19l bmQgPSB+MFUgPDwgKDMxIC0gbWUpOwotKyAgaWYgKG1iIDw9IG1lKSB7Ci0rICAgIHJldHVybiBt YXNrX2JlZ2luICYgbWFza19lbmQ7Ci0rICB9Ci0rICByZXR1cm4gbWFza19iZWdpbiB8IG1hc2tf ZW5kOwotK30KLSsKLSsvLyBDb3VudCBsZWFkaW5nIHplcm9zLgotK3N0YXRpYyBpbmxpbmUgaW50 IENvdW50TGVhZGluZ1plcm9zNjQodWludDY0X3QgdmFsdWUpIHsKLSsgIGlmICh2YWx1ZSA9PSAw KSByZXR1cm4gNjQ7Ci0rICByZXR1cm4gX19idWlsdGluX2NsemxsKHZhbHVlKTsKLSt9Ci0rCi0r c3RhdGljIGlubGluZSBpbnQgQ291bnRMZWFkaW5nWmVyb3MzMih1aW50MzJfdCB2YWx1ZSkgewot KyAgaWYgKHZhbHVlID09IDApIHJldHVybiAzMjsKLSsgIHJldHVybiBfX2J1aWx0aW5fY2x6KHZh bHVlKTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBpbnQgQ291bnRUcmFpbGluZ1plcm9zNjQodWlu dDY0X3QgdmFsdWUpIHsKLSsgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gNjQ7Ci0rICByZXR1cm4g X19idWlsdGluX2N0emxsKHZhbHVlKTsKLSt9Ci0rCi0rc3RhdGljIGlubGluZSBpbnQgQ291bnRU cmFpbGluZ1plcm9zMzIodWludDMyX3QgdmFsdWUpIHsKLSsgIGlmICh2YWx1ZSA9PSAwKSByZXR1 cm4gMzI7Ci0rICByZXR1cm4gX19idWlsdGluX2N0eih2YWx1ZSk7Ci0rfQotKwotK3N0YXRpYyBp bmxpbmUgaW50IFBvcENvdW50NjQodWludDY0X3QgdmFsdWUpIHsKLSsgIHJldHVybiBfX2J1aWx0 aW5fcG9wY291bnRsbCh2YWx1ZSk7Ci0rfQotKwotK3N0YXRpYyBpbmxpbmUgaW50IFBvcENvdW50 MzIodWludDMyX3QgdmFsdWUpIHsKLSsgIHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQodmFsdWUp OwotK30KLSsKLStzdGF0aWMgaW5saW5lIHVpbnQ2NF90IFBvcENvdW50UGVyQnl0ZSh1aW50NjRf dCB2YWx1ZSkgewotKyAgdWludDY0X3QgcmVzdWx0ID0gMDsKLSsgIGZvciAoaW50IGkgPSAwOyBp IDwgODsgaSsrKSB7Ci0rICAgIHVpbnQ4X3QgYnl0ZSA9ICh2YWx1ZSA+PiAoaSAqIDgpKSAmIDB4 RkY7Ci0rICAgIHJlc3VsdCB8PSAodWludDY0X3QpX19idWlsdGluX3BvcGNvdW50KGJ5dGUpIDw8 IChpICogOCk7Ci0rICB9Ci0rICByZXR1cm4gcmVzdWx0OwotK30KLSsKLSsvLyBQUEM2NCBDIGFy Z3VtZW50IHNsb3RzOiBQUEM2NCBFTEZ2MiBBQkkgZG9lcyBub3QgcmVxdWlyZSBDIGFyZ3VtZW50 Ci0rLy8gc2xvdHMgb24gdGhlIHN0YWNrIGZvciByZWdpc3Rlci1wYXNzZWQgYXJndW1lbnRzLCBi dXQgd2UgcmVzZXJ2ZSB0aGUKLSsvLyBsaW5rIGFyZWEgKDMyIGJ5dGVzKS4KLStjb25zdCBpbnQg a0NBcmdTbG90Q291bnQgPSAwOwotK2NvbnN0IGludCBrQ0FyZ3NTbG90c1NpemUgPSBrQ0FyZ1Ns b3RDb3VudCAqIHNpemVvZih1aW50cHRyX3QpOwotKwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0rLy8gUFBDNjQgU2ltSW5zdHJ1Y3Rpb24uCi0rCi0rY2xhc3MgU2ltSW5zdHJ1Y3Rpb24gewot KyBwdWJsaWM6Ci0rICBlbnVtIHsKLSsgICAga0luc3RyU2l6ZSA9IDQsCi0rICAgIGtQQ1JlYWRP ZmZzZXQgPSAwCi0rICB9OwotKwotKyAgaW5saW5lIEluc3RyIGluc3RydWN0aW9uQml0cygpIGNv bnN0IHsKLSsgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RyKj4odGhpcyk7 Ci0rICB9Ci0rCi0rICBpbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvbkJpdHMoSW5zdHIgdmFsdWUp IHsKLSsgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8SW5zdHIqPih0aGlzKSA9IHZhbHVlOwotKyAgfQot KwotKyAgaW5saW5lIGludCBiaXQoaW50IG5yKSBjb25zdCB7IHJldHVybiAoaW5zdHJ1Y3Rpb25C aXRzKCkgPj4gbnIpICYgMTsgfQotKwotKyAgaW5saW5lIHVpbnQzMl90IGJpdHMoaW50IGhpLCBp bnQgbG8pIGNvbnN0IHsKLSsgICAgcmV0dXJuIChpbnN0cnVjdGlvbkJpdHMoKSA+PiBsbykgJiAo KDJVIDw8IChoaSAtIGxvKSkgLSAxKTsKLSsgIH0KLSsKLSsgIGlubGluZSB1aW50MzJfdCBvcGNv ZGUoKSBjb25zdCB7IHJldHVybiBiaXRzKDMxLCAyNik7IH0KLSsKLSsgIGlubGluZSB1aW50MzJf dCBydFZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygyNSwgMjEpOyB9Ci0rICBpbmxpbmUgdWlu dDMyX3QgcnNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMjUsIDIxKTsgfQotKyAgaW5saW5l IHVpbnQzMl90IHJhVmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXRzKDIwLCAxNik7IH0KLSsgIGlu bGluZSB1aW50MzJfdCByYlZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygxNSwgMTEpOyB9Ci0r ICBpbmxpbmUgdWludDMyX3QgcmNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMTAsIDYpOyB9 Ci0rCi0rICBpbmxpbmUgdWludDMyX3QgYm9WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMjUs IDIxKTsgfQotKyAgaW5saW5lIHVpbnQzMl90IGJpVmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXRz KDIwLCAxNik7IH0KLSsKLSsgIC8vIEQtZm9ybSAxNi1iaXQgaW1tZWRpYXRlIChzaWduLWV4dGVu ZCB0byBnZXQgc2lnbmVkIHZhbHVlKS4KLSsgIGlubGluZSBpbnQxNl90IGltbTE2VmFsdWUoKSBj b25zdCB7IHJldHVybiBJMTYoYml0cygxNSwgMCkpOyB9Ci0rICBpbmxpbmUgdWludDE2X3QgdWlt bTE2VmFsdWUoKSBjb25zdCB7IHJldHVybiBVMTYoYml0cygxNSwgMCkpOyB9Ci0rCi0rICAvLyBE Uy1mb3JtIDE0LWJpdCBkaXNwbGFjZW1lbnQgKGJpdHMgMi4uMTUsIDQtYnl0ZSBhbGlnbmVkKS4K LSsgIGlubGluZSBpbnQxNl90IGRzMTRWYWx1ZSgpIGNvbnN0IHsKLSsgICAgcmV0dXJuIEkxNihi aXRzKDE1LCAyKSA8PCAyKTsKLSsgIH0KLSsKLSsgIC8vIEItZm9ybSAxNC1iaXQgYnJhbmNoIGRp c3BsYWNlbWVudCAoYml0cyAyLi4xNSwgNC1ieXRlIGFsaWduZWQpLgotKyAgaW5saW5lIGludDMy X3QgYmQxNlZhbHVlKCkgY29uc3QgewotKyAgICBpbnQxNl90IHJhdyA9IEkxNihiaXRzKDE1LCAy KSA8PCAyKTsKLSsgICAgcmV0dXJuIChpbnQzMl90KXJhdzsKLSsgIH0KLSsKLSsgIC8vIEktZm9y bSAyNC1iaXQgYnJhbmNoIG9mZnNldCAoYml0cyAyLi4yNSwgc2lnbi1leHRlbmRlZCwgNC1ieXRl IGFsaWduZWQpLgotKyAgaW5saW5lIGludDMyX3QgbGkyNlZhbHVlKCkgY29uc3QgewotKyAgICBp bnQzMl90IHJhdyA9IEkzMihiaXRzKDI1LCAyKSA8PCAyKTsKLSsgICAgLy8gU2lnbi1leHRlbmQg ZnJvbSAyNiBiaXRzLgotKyAgICByZXR1cm4gKHJhdyA8PCA2KSA+PiA2OwotKyAgfQotKwotKyAg Ly8gRXh0ZW5kZWQgb3Bjb2RlIGZvciBYLWZvcm0gLyBYTy1mb3JtIChiaXRzIDEuLjEwKS4KLSsg IGlubGluZSB1aW50MzJfdCB4b1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygxMCwgMSk7IH0K LSsKLSsgIC8vIEV4dGVuZGVkIG9wY29kZSBmb3IgWEwtZm9ybSAoYml0cyAxLi4xMCkuCi0rICBp bmxpbmUgdWludDMyX3QgeGxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMTAsIDEpOyB9Ci0r Ci0rICAvLyBNRC1mb3JtIFNIIGZpZWxkOiBzaFswOjRdIGluIGluc3RydWN0aW9uIGJpdHMgMTU6 MTEsIHNoWzVdIGluIGJpdCAxLgotKyAgLy8gQXNzZW1ibGVyIGVuY29kZXM6ICgoc2ggJiAweDFm KSA8PCAxMSkgfCAoKHNoICYgMHgyMCkgPj4gNCkuCi0rICBpbmxpbmUgdWludDMyX3QgbWRTSFZh bHVlKCkgY29uc3QgewotKyAgICByZXR1cm4gYml0cygxNSwgMTEpIHwgKGJpdCgxKSA8PCA1KTsK LSsgIH0KLSsgIC8vIG1iL21lIGZvciBNRC1mb3JtIChybGRpY2wvcmxkaWNyL3JsZGljL3JsZGlt aSk6IDYtYml0IGZpZWxkIHNwbGl0IGFzCi0rICAvLyBtYlswOjRdIGluIGluc3RydWN0aW9uIGJp dHMgMTA6NiBhbmQgbWJbNV0gaW4gYml0IDUuCi0rICBpbmxpbmUgdWludDMyX3QgbWRNQlZhbHVl KCkgY29uc3QgewotKyAgICByZXR1cm4gYml0cygxMCwgNikgfCAoYml0KDUpIDw8IDUpOwotKyAg fQotKyAgaW5saW5lIHVpbnQzMl90IG1kTUVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1kTUJWYWx1 ZSgpOyB9Ci0rCi0rICAvLyBNRC1mb3JtIFhPIChiaXRzIDIuLjQpLgotKyAgaW5saW5lIHVpbnQz Ml90IG1kWE9WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoNCwgMik7IH0KLSsKLSsgIC8vIE1E Uy1mb3JtIChybGRjbCwgcmxkY3IpOiBtYlswOjRdIGluIGJpdHMgMTA6NiwgbWJbNV0gaW4gYml0 IDUuCi0rICBpbmxpbmUgdWludDMyX3QgbWRzTUJWYWx1ZSgpIGNvbnN0IHsKLSsgICAgcmV0dXJu IGJpdHMoMTAsIDYpIHwgKGJpdCg1KSA8PCA1KTsKLSsgIH0KLSsKLSsgIC8vIE0tZm9ybSBmaWVs ZHMgKDMyLWJpdCByb3RhdGUvbWFzaykuCi0rICBpbmxpbmUgdWludDMyX3QgbVNIVmFsdWUoKSBj b25zdCB7IHJldHVybiBiaXRzKDE1LCAxMSk7IH0KLSsgIGlubGluZSB1aW50MzJfdCBtTUJWYWx1 ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMTAsIDYpOyB9Ci0rICBpbmxpbmUgdWludDMyX3QgbU1F VmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXRzKDUsIDEpOyB9Ci0rCi0rICAvLyBSYyBiaXQuCi0r ICBpbmxpbmUgYm9vbCByY0JpdCgpIGNvbnN0IHsgcmV0dXJuIGJpdCgwKTsgfQotKwotKyAgLy8g QUEgYml0IGZvciBicmFuY2ggaW5zdHJ1Y3Rpb25zLgotKyAgaW5saW5lIGJvb2wgYWFCaXQoKSBj b25zdCB7IHJldHVybiBiaXQoMSk7IH0KLSsKLSsgIC8vIExLIGJpdCBmb3IgYnJhbmNoIGluc3Ry dWN0aW9ucy4KLSsgIGlubGluZSBib29sIGxrQml0KCkgY29uc3QgeyByZXR1cm4gYml0KDApOyB9 Ci0rCi0rICAvLyBPRSBiaXQgZm9yIFhPLWZvcm0gYXJpdGhtZXRpYy4KLSsgIGlubGluZSBib29s IG9lQml0KCkgY29uc3QgeyByZXR1cm4gYml0KDEwKTsgfQotKwotKyAgLy8gTCBiaXQgZm9yIGNv bXBhcmUgaW5zdHJ1Y3Rpb25zIChiaXQgMjEpLgotKyAgaW5saW5lIGJvb2wgbEJpdCgpIGNvbnN0 IHsgcmV0dXJuIGJpdCgyMSk7IH0KLSsKLSsgIC8vIEJGIGZpZWxkIChiaXRzIDIzLi4yNSkgZm9y IGNvbXBhcmVzLgotKyAgaW5saW5lIHVpbnQzMl90IGJmVmFsdWUoKSBjb25zdCB7IHJldHVybiBi aXRzKDI1LCAyMyk7IH0KLSsKLSsgIGJvb2wgaXNUcmFwKCkgY29uc3QgewotKyAgICB1aW50MzJf dCBpbnN0ciA9IGluc3RydWN0aW9uQml0cygpOwotKyAgICAvLyBQUENfdHJhcCA9IDB4N0ZFMDAw MDggKHR3IDMxLDAsMCkuCi0rICAgIC8vIERvbid0IHRyZWF0IHRoZSBjYWxsLXJlZGlyZWN0aW9u IGluc3RydWN0aW9uIG9yIHdhc20gdHJhcCBhcyBhCi0rICAgIC8vIGRlYnVnZ2VyIHRyYXAuCi0r ICAgIGlmIChpbnN0ciA9PSBrQ2FsbFJlZGlySW5zdHIpIHJldHVybiBmYWxzZTsKLSsgICAgaWYg KGluc3RyID09IDB4N0ZFMDAwMDgpIHJldHVybiBmYWxzZTsKLSsgICAgLy8gQW55IG90aGVyIHR3 IGluc3RydWN0aW9uIHdpdGggVE89MzEgaXMgYSB0cmFwLgotKyAgICBpZiAob3Bjb2RlKCkgPT0g MzEgJiYgKHhvVmFsdWUoKSA9PSA0KSkgcmV0dXJuIHRydWU7Ci0rICAgIHJldHVybiBmYWxzZTsK LSsgIH0KLSsKLSsgcHJpdmF0ZToKLSsgIFNpbUluc3RydWN0aW9uKCkgPSBkZWxldGU7Ci0rICBT aW1JbnN0cnVjdGlvbihjb25zdCBTaW1JbnN0cnVjdGlvbiYgb3RoZXIpID0gZGVsZXRlOwotKyAg dm9pZCBvcGVyYXRvcj0oY29uc3QgU2ltSW5zdHJ1Y3Rpb24mIG90aGVyKSA9IGRlbGV0ZTsKLSt9 OwotKwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gSUNhY2hlLgotKwotK2NsYXNzIENh Y2hlUGFnZSB7Ci0rIHB1YmxpYzoKLSsgIHN0YXRpYyBjb25zdCBpbnQgTElORV9WQUxJRCA9IDA7 Ci0rICBzdGF0aWMgY29uc3QgaW50IExJTkVfSU5WQUxJRCA9IDE7Ci0rCi0rICBzdGF0aWMgY29u c3QgaW50IGtQYWdlU2hpZnQgPSAxMjsKLSsgIHN0YXRpYyBjb25zdCBpbnQga1BhZ2VTaXplID0g MSA8PCBrUGFnZVNoaWZ0OwotKyAgc3RhdGljIGNvbnN0IGludCBrUGFnZU1hc2sgPSBrUGFnZVNp emUgLSAxOwotKyAgc3RhdGljIGNvbnN0IGludCBrTGluZVNoaWZ0ID0gMjsKLSsgIHN0YXRpYyBj b25zdCBpbnQga0xpbmVMZW5ndGggPSAxIDw8IGtMaW5lU2hpZnQ7Ci0rICBzdGF0aWMgY29uc3Qg aW50IGtMaW5lTWFzayA9IGtMaW5lTGVuZ3RoIC0gMTsKLSsKLSsgIENhY2hlUGFnZSgpIHsgbWVt c2V0KCZ2YWxpZGl0eV9tYXBfLCBMSU5FX0lOVkFMSUQsIHNpemVvZih2YWxpZGl0eV9tYXBfKSk7 IH0KLSsKLSsgIGNoYXIqIHZhbGlkaXR5Qnl0ZShpbnQgb2Zmc2V0KSB7Ci0rICAgIHJldHVybiAm dmFsaWRpdHlfbWFwX1tvZmZzZXQgPj4ga0xpbmVTaGlmdF07Ci0rICB9Ci0rCi0rICBjaGFyKiBj YWNoZWREYXRhKGludCBvZmZzZXQpIHsgcmV0dXJuICZkYXRhX1tvZmZzZXRdOyB9Ci0rCi0rIHBy aXZhdGU6Ci0rICBjaGFyIGRhdGFfW2tQYWdlU2l6ZV07Ci0rICBzdGF0aWMgY29uc3QgaW50IGtW YWxpZGl0eU1hcFNpemUgPSBrUGFnZVNpemUgPj4ga0xpbmVTaGlmdDsKLSsgIGNoYXIgdmFsaWRp dHlfbWFwX1trVmFsaWRpdHlNYXBTaXplXTsKLSt9OwotKwotK2NsYXNzIEF1dG9Mb2NrU2ltdWxh dG9yQ2FjaGUgOiBwdWJsaWMgTG9ja0d1YXJkPE11dGV4PiB7Ci0rICB1c2luZyBCYXNlID0gTG9j a0d1YXJkPE11dGV4PjsKLSsKLSsgcHVibGljOgotKyAgZXhwbGljaXQgQXV0b0xvY2tTaW11bGF0 b3JDYWNoZSgpCi0rICAgICAgOiBCYXNlKFNpbXVsYXRvclByb2Nlc3M6OnNpbmdsZXRvbl8tPmNh Y2hlTG9ja18pIHt9Ci0rfTsKLSsKLSttb3ppbGxhOjpBdG9taWM8c2l6ZV90LCBtb3ppbGxhOjpS ZWxlYXNlQWNxdWlyZT4KLSsgICAgU2ltdWxhdG9yUHJvY2Vzczo6SUNhY2hlQ2hlY2tpbmdEaXNh YmxlQ291bnQoMSk7Ci0rU2ltdWxhdG9yUHJvY2VzcyogU2ltdWxhdG9yUHJvY2Vzczo6c2luZ2xl dG9uXyA9IG51bGxwdHI7Ci0rCi0raW50NjRfdCBTaW11bGF0b3I6OlN0b3BTaW1BdCA9IC0xOwot KwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gU2ltdWxhdG9yIENyZWF0ZSAvIERlc3Ry b3kuCi0rCi0rU2ltdWxhdG9yKiBTaW11bGF0b3I6OkNyZWF0ZSgpIHsKLSsgIGF1dG8gc2ltID0g TWFrZVVuaXF1ZTxTaW11bGF0b3I+KCk7Ci0rICBpZiAoIXNpbSkgewotKyAgICByZXR1cm4gbnVs bHB0cjsKLSsgIH0KLSsKLSsgIGlmICghc2ltLT5pbml0KCkpIHsKLSsgICAgcmV0dXJuIG51bGxw dHI7Ci0rICB9Ci0rCi0rICBpbnQ2NF90IHN0b3BBdDsKLSsgIGNoYXIqIHN0b3BBdFN0ciA9IGdl dGVudigiUFBDNjRfU0lNX1NUT1BfQVQiKTsKLSsgIGlmIChzdG9wQXRTdHIgJiYgc3NjYW5mKHN0 b3BBdFN0ciwgIiUiIFBSSWk2NCwgJnN0b3BBdCkgPT0gMSkgewotKyAgICBmcHJpbnRmKHN0ZGVy ciwgIlxuU3RvcHBpbmcgc2ltdWxhdGlvbiBhdCBpY291bnQgJSIgUFJJaTY0ICJcbiIsIHN0b3BB dCk7Ci0rICAgIFNpbXVsYXRvcjo6U3RvcFNpbUF0ID0gc3RvcEF0OwotKyAgfQotKwotKyAgcmV0 dXJuIHNpbS5yZWxlYXNlKCk7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjpEZXN0cm95KFNpbXVs YXRvciogc2ltKSB7IGpzX2RlbGV0ZShzaW0pOyB9Ci0rCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLSsvLyBEZWJ1Z2dlci4KLSsKLStjbGFzcyBwcGM2NERlYnVnZ2VyIHsKLSsgcHVibGljOgot KyAgZXhwbGljaXQgcHBjNjREZWJ1Z2dlcihTaW11bGF0b3IqIHNpbSkgOiBzaW1fKHNpbSkge30K LSsKLSsgIHZvaWQgc3RvcChTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgdm9pZCBkZWJ1Zygp OwotKyAgdm9pZCBwcmludEFsbFJlZ3MoKTsKLSsgIHZvaWQgcHJpbnRBbGxSZWdzSW5jbHVkaW5n RlBVKCk7Ci0rCi0rIHByaXZhdGU6Ci0rICBzdGF0aWMgY29uc3QgSW5zdHIga0JyZWFrcG9pbnRJ bnN0ciA9IDB4N0ZFMDAwMDg7ICAvLyBQUENfdHJhcAotKyAgc3RhdGljIGNvbnN0IEluc3RyIGtO b3BJbnN0ciA9IDB4NjAwMDAwMDA7ICAgICAgICAgIC8vIFBQQ19ub3AKLSsKLSsgIFNpbXVsYXRv ciogc2ltXzsKLSsKLSsgIGludDY0X3QgZ2V0UmVnaXN0ZXJWYWx1ZShpbnQgcmVnbnVtKTsKLSsg IGludDY0X3QgZ2V0RlBVUmVnaXN0ZXJWYWx1ZUxvbmcoaW50IHJlZ251bSk7Ci0rICBmbG9hdCBn ZXRGUFVSZWdpc3RlclZhbHVlRmxvYXQoaW50IHJlZ251bSk7Ci0rICBkb3VibGUgZ2V0RlBVUmVn aXN0ZXJWYWx1ZURvdWJsZShpbnQgcmVnbnVtKTsKLSsgIGJvb2wgZ2V0VmFsdWUoY29uc3QgY2hh ciogZGVzYywgaW50NjRfdCogdmFsdWUpOwotKwotKyAgYm9vbCBzZXRCcmVha3BvaW50KFNpbUlu c3RydWN0aW9uKiBicmVha3BjKTsKLSsgIGJvb2wgZGVsZXRlQnJlYWtwb2ludChTaW1JbnN0cnVj dGlvbiogYnJlYWtwYyk7Ci0rCi0rICB2b2lkIHVuZG9CcmVha3BvaW50cygpOwotKyAgdm9pZCBy ZWRvQnJlYWtwb2ludHMoKTsKLSt9OwotKwotK1tbbWF5YmVfdW51c2VkXV0gc3RhdGljIHZvaWQg VU5JTVBMRU1FTlRFRCgpIHsKLSsgIHByaW50ZigiVU5JTVBMRU1FTlRFRCBpbnN0cnVjdGlvbi5c biIpOwotKyAgTU9aX0NSQVNIKCk7Ci0rfQotK1tbbWF5YmVfdW51c2VkXV0gc3RhdGljIHZvaWQg VU5SRUFDSEFCTEUoKSB7Ci0rICBwcmludGYoIlVOUkVBQ0hBQkxFIGluc3RydWN0aW9uLlxuIik7 Ci0rICBNT1pfQ1JBU0goKTsKLSt9Ci0rW1ttYXliZV91bnVzZWRdXSBzdGF0aWMgdm9pZCBVTlNV UFBPUlRFRCgpIHsKLSsgIHByaW50ZigiVW5zdXBwb3J0ZWQgaW5zdHJ1Y3Rpb24uXG4iKTsKLSsg IE1PWl9DUkFTSCgpOwotK30KLSsKLSt2b2lkIHBwYzY0RGVidWdnZXI6OnN0b3AoU2ltSW5zdHJ1 Y3Rpb24qIGluc3RyKSB7Ci0rICB1aW50MzJfdCBjb2RlID0gMDsKLSsgIGNoYXIqIG1zZyA9ICpy ZWludGVycHJldF9jYXN0PGNoYXIqKj4oc2ltXy0+Z2V0X3BjKCkgKwotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0r ICBpZiAoIXNpbV8tPndhdGNoZWRTdG9wc19bY29kZV0uZGVzY18pIHsKLSsgICAgc2ltXy0+d2F0 Y2hlZFN0b3BzX1tjb2RlXS5kZXNjXyA9IG1zZzsKLSsgIH0KLSsgIGlmIChjb2RlICE9IGtNYXhT dG9wQ29kZSkgewotKyAgICBwcmludGYoIlNpbXVsYXRvciBoaXQgc3RvcCAldTogJXNcbiIsIGNv ZGUsIG1zZyk7Ci0rICB9IGVsc2UgewotKyAgICBwcmludGYoIlNpbXVsYXRvciBoaXQgJXNcbiIs IG1zZyk7Ci0rICB9Ci0rICBzaW1fLT5zZXRfcGMoc2ltXy0+Z2V0X3BjKCkgKyAyICogU2ltSW5z dHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgZGVidWcoKTsKLSt9Ci0rCi0raW50NjRfdCBwcGM2 NERlYnVnZ2VyOjpnZXRSZWdpc3RlclZhbHVlKGludCByZWdudW0pIHsKLSsgIGlmIChyZWdudW0g PT0ga1BDUmVnaXN0ZXIpIHsKLSsgICAgcmV0dXJuIHNpbV8tPmdldF9wYygpOwotKyAgfQotKyAg cmV0dXJuIHNpbV8tPmdldFJlZ2lzdGVyKHJlZ251bSk7Ci0rfQotKwotK2ludDY0X3QgcHBjNjRE ZWJ1Z2dlcjo6Z2V0RlBVUmVnaXN0ZXJWYWx1ZUxvbmcoaW50IHJlZ251bSkgewotKyAgcmV0dXJu IHNpbV8tPmdldEZwdVJlZ2lzdGVyKHJlZ251bSk7Ci0rfQotKwotK2Zsb2F0IHBwYzY0RGVidWdn ZXI6OmdldEZQVVJlZ2lzdGVyVmFsdWVGbG9hdChpbnQgcmVnbnVtKSB7Ci0rICByZXR1cm4gc2lt Xy0+Z2V0RnB1UmVnaXN0ZXJGbG9hdChyZWdudW0pOwotK30KLSsKLStkb3VibGUgcHBjNjREZWJ1 Z2dlcjo6Z2V0RlBVUmVnaXN0ZXJWYWx1ZURvdWJsZShpbnQgcmVnbnVtKSB7Ci0rICByZXR1cm4g c2ltXy0+Z2V0RnB1UmVnaXN0ZXJEb3VibGUocmVnbnVtKTsKLSt9Ci0rCi0rYm9vbCBwcGM2NERl YnVnZ2VyOjpnZXRWYWx1ZShjb25zdCBjaGFyKiBkZXNjLCBpbnQ2NF90KiB2YWx1ZSkgewotKyAg UmVnaXN0ZXIgcmVnID0gUmVnaXN0ZXI6OkZyb21OYW1lKGRlc2MpOwotKyAgaWYgKHJlZyAhPSBJ bnZhbGlkUmVnKSB7Ci0rICAgICp2YWx1ZSA9IGdldFJlZ2lzdGVyVmFsdWUocmVnLmNvZGUoKSk7 Ci0rICAgIHJldHVybiB0cnVlOwotKyAgfQotKwotKyAgaWYgKHN0cm5jbXAoZGVzYywgIjB4Iiwg MikgPT0gMCkgewotKyAgICByZXR1cm4gc3NjYW5mKGRlc2MgKyAyLCAiJSIgUFJJeDY0LCByZWlu dGVycHJldF9jYXN0PHVpbnQ2NF90Kj4odmFsdWUpKSA9PQotKyAgICAgICAgICAgMTsKLSsgIH0K LSsgIHJldHVybiBzc2NhbmYoZGVzYywgIiUiIFBSSXU2NCwgcmVpbnRlcnByZXRfY2FzdDx1aW50 NjRfdCo+KHZhbHVlKSkgPT0gMTsKLSt9Ci0rCi0rYm9vbCBwcGM2NERlYnVnZ2VyOjpzZXRCcmVh a3BvaW50KFNpbUluc3RydWN0aW9uKiBicmVha3BjKSB7Ci0rICBpZiAoc2ltXy0+YnJlYWtfcGNf ICE9IG51bGxwdHIpIHsKLSsgICAgcmV0dXJuIGZhbHNlOwotKyAgfQotKwotKyAgc2ltXy0+YnJl YWtfcGNfID0gYnJlYWtwYzsKLSsgIHNpbV8tPmJyZWFrX2luc3RyXyA9IGJyZWFrcGMtPmluc3Ry dWN0aW9uQml0cygpOwotKyAgcmV0dXJuIHRydWU7Ci0rfQotKwotK2Jvb2wgcHBjNjREZWJ1Z2dl cjo6ZGVsZXRlQnJlYWtwb2ludChTaW1JbnN0cnVjdGlvbiogYnJlYWtwYykgewotKyAgaWYgKHNp bV8tPmJyZWFrX3BjXyAhPSBudWxscHRyKSB7Ci0rICAgIHNpbV8tPmJyZWFrX3BjXy0+c2V0SW5z dHJ1Y3Rpb25CaXRzKHNpbV8tPmJyZWFrX2luc3RyXyk7Ci0rICB9Ci0rCi0rICBzaW1fLT5icmVh a19wY18gPSBudWxscHRyOwotKyAgc2ltXy0+YnJlYWtfaW5zdHJfID0gMDsKLSsgIHJldHVybiB0 cnVlOwotK30KLSsKLSt2b2lkIHBwYzY0RGVidWdnZXI6OnVuZG9CcmVha3BvaW50cygpIHsKLSsg IGlmIChzaW1fLT5icmVha19wY18pIHsKLSsgICAgc2ltXy0+YnJlYWtfcGNfLT5zZXRJbnN0cnVj dGlvbkJpdHMoc2ltXy0+YnJlYWtfaW5zdHJfKTsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBwcGM2NERl YnVnZ2VyOjpyZWRvQnJlYWtwb2ludHMoKSB7Ci0rICBpZiAoc2ltXy0+YnJlYWtfcGNfKSB7Ci0r ICAgIHNpbV8tPmJyZWFrX3BjXy0+c2V0SW5zdHJ1Y3Rpb25CaXRzKGtCcmVha3BvaW50SW5zdHIp OwotKyAgfQotK30KLSsKLSt2b2lkIHBwYzY0RGVidWdnZXI6OnByaW50QWxsUmVncygpIHsKLSsg IGludDY0X3QgdmFsdWU7Ci0rICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgUmVnaXN0ZXJzOjpU b3RhbDsgaSsrKSB7Ci0rICAgIHZhbHVlID0gZ2V0UmVnaXN0ZXJWYWx1ZShpKTsKLSsgICAgcHJp bnRmKCIlM3M6IDB4JTAxNiIgUFJJeDY0ICIgJTIwIiBQUklpNjQgIiAgICIsIFJlZ2lzdGVyczo6 R2V0TmFtZShpKSwKLSsgICAgICAgICAgIHZhbHVlLCB2YWx1ZSk7Ci0rCi0rICAgIGlmIChpICUg MikgewotKyAgICAgIHByaW50ZigiXG4iKTsKLSsgICAgfQotKyAgfQotKyAgcHJpbnRmKCJcbiIp OwotKwotKyAgdmFsdWUgPSBnZXRSZWdpc3RlclZhbHVlKFNpbXVsYXRvcjo6cGMpOwotKyAgcHJp bnRmKCIgIHBjOiAweCUwMTYiIFBSSXg2NCAiXG4iLCB2YWx1ZSk7Ci0rICBwcmludGYoIiAgbHI6 IDB4JTAxNiIgUFJJeDY0ICJcbiIsIHNpbV8tPmdldExSKCkpOwotKyAgcHJpbnRmKCIgY3RyOiAw eCUwMTYiIFBSSXg2NCAiXG4iLCBzaW1fLT5nZXRDVFIoKSk7Ci0rICBwcmludGYoIiAgY3I6IDB4 JTA4eFxuIiwgc2ltXy0+Z2V0Q1IoKSk7Ci0rICBwcmludGYoIiB4ZXI6IDB4JTAxNiIgUFJJeDY0 ICJcbiIsIHNpbV8tPmdldFhFUigpKTsKLSt9Ci0rCi0rdm9pZCBwcGM2NERlYnVnZ2VyOjpwcmlu dEFsbFJlZ3NJbmNsdWRpbmdGUFUoKSB7Ci0rICBwcmludEFsbFJlZ3MoKTsKLSsKLSsgIHByaW50 ZigiXG5cbiIpOwotKyAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IEZsb2F0UmVnaXN0ZXJzOjpU b3RhbFBoeXM7IGkrKykgewotKyAgICBwcmludGYoIiUzczogMHglMDE2IiBQUkl4NjQgIlx0Zmx0 OiAlLTguNGdcdGRibDogJS0xNi40Z1xuIiwKLSsgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpH ZXROYW1lKGkpLCBnZXRGUFVSZWdpc3RlclZhbHVlTG9uZyhpKSwKLSsgICAgICAgICAgIGdldEZQ VVJlZ2lzdGVyVmFsdWVGbG9hdChpKSwgZ2V0RlBVUmVnaXN0ZXJWYWx1ZURvdWJsZShpKSk7Ci0r ICB9Ci0rfQotKwotK3N0YXRpYyBjaGFyKiBSZWFkTGluZShjb25zdCBjaGFyKiBwcm9tcHQpIHsK LSsgIFVuaXF1ZUNoYXJzIHJlc3VsdDsKLSsgIGNoYXIgbGluZUJ1ZlsyNTZdOwotKyAgaW50IG9m ZnNldCA9IDA7Ci0rICBib29sIGtlZXBHb2luZyA9IHRydWU7Ci0rICBmcHJpbnRmKHN0ZG91dCwg IiVzIiwgcHJvbXB0KTsKLSsgIGZmbHVzaChzdGRvdXQpOwotKyAgd2hpbGUgKGtlZXBHb2luZykg ewotKyAgICBpZiAoZmdldHMobGluZUJ1Ziwgc2l6ZW9mKGxpbmVCdWYpLCBzdGRpbikgPT0gbnVs bHB0cikgewotKyAgICAgIHJldHVybiBudWxscHRyOwotKyAgICB9Ci0rICAgIGludCBsZW4gPSBz dHJsZW4obGluZUJ1Zik7Ci0rICAgIGlmIChsZW4gPiAwICYmIGxpbmVCdWZbbGVuIC0gMV0gPT0g J1xuJykgewotKyAgICAgIGtlZXBHb2luZyA9IGZhbHNlOwotKyAgICB9Ci0rICAgIGlmICghcmVz dWx0KSB7Ci0rICAgICAgcmVzdWx0LnJlc2V0KGpzX3BvZF9tYWxsb2M8Y2hhcj4obGVuICsgMSkp OwotKyAgICAgIGlmICghcmVzdWx0KSB7Ci0rICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSsgICAg ICB9Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgaW50IG5ld19sZW4gPSBvZmZzZXQgKyBsZW4gKyAx OwotKyAgICAgIGNoYXIqIG5ld19yZXN1bHQgPSBqc19wb2RfbWFsbG9jPGNoYXI+KG5ld19sZW4p OwotKyAgICAgIGlmICghbmV3X3Jlc3VsdCkgewotKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0r ICAgICAgfQotKyAgICAgIG1lbWNweShuZXdfcmVzdWx0LCByZXN1bHQuZ2V0KCksIG9mZnNldCAq IHNpemVvZihjaGFyKSk7Ci0rICAgICAgcmVzdWx0LnJlc2V0KG5ld19yZXN1bHQpOwotKyAgICB9 Ci0rICAgIG1lbWNweShyZXN1bHQuZ2V0KCkgKyBvZmZzZXQsIGxpbmVCdWYsIGxlbiAqIHNpemVv ZihjaGFyKSk7Ci0rICAgIG9mZnNldCArPSBsZW47Ci0rICB9Ci0rCi0rICBNT1pfQVNTRVJUKHJl c3VsdCk7Ci0rICByZXN1bHRbb2Zmc2V0XSA9ICdcMCc7Ci0rICByZXR1cm4gcmVzdWx0LnJlbGVh c2UoKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgRGlzYXNzZW1ibGVJbnN0cnVjdGlvbih1aW50NjRf dCBwYykgewotKyAgcHJpbnRmKCIgIDB4JTAxNiIgUFJJeDY0ICI6ICAlMDh4XG4iLCBwYywKLSsg ICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHBjKSk7Ci0rfQotKwotK3ZvaWQg cHBjNjREZWJ1Z2dlcjo6ZGVidWcoKSB7Ci0rICBpbnRwdHJfdCBsYXN0UEMgPSAtMTsKLSsgIGJv b2wgZG9uZSA9IGZhbHNlOwotKwotKyNkZWZpbmUgQ09NTUFORF9TSVpFIDYzCi0rI2RlZmluZSBB UkdfU0laRSAyNTUKLSsKLSsjZGVmaW5lIFNUUihhKSAjYQotKyNkZWZpbmUgWFNUUihhKSBTVFIo YSkKLSsKLSsgIGNoYXIgY21kW0NPTU1BTkRfU0laRSArIDFdOwotKyAgY2hhciBhcmcxW0FSR19T SVpFICsgMV07Ci0rICBjaGFyIGFyZzJbQVJHX1NJWkUgKyAxXTsKLSsgIGNoYXIqIGFyZ3ZbM10g PSB7Y21kLCBhcmcxLCBhcmcyfTsKLSsKLSsgIGNtZFtDT01NQU5EX1NJWkVdID0gMDsKLSsgIGFy ZzFbQVJHX1NJWkVdID0gMDsKLSsgIGFyZzJbQVJHX1NJWkVdID0gMDsKLSsKLSsgIHVuZG9CcmVh a3BvaW50cygpOwotKwotKyAgd2hpbGUgKCFkb25lICYmIChzaW1fLT5nZXRfcGMoKSAhPSBTaW11 bGF0b3I6OmVuZF9zaW1fcGMpKSB7Ci0rICAgIGlmIChsYXN0UEMgIT0gc2ltXy0+Z2V0X3BjKCkp IHsKLSsgICAgICBEaXNhc3NlbWJsZUluc3RydWN0aW9uKHNpbV8tPmdldF9wYygpKTsKLSsgICAg ICBsYXN0UEMgPSBzaW1fLT5nZXRfcGMoKTsKLSsgICAgfQotKyAgICBjaGFyKiBsaW5lID0gUmVh ZExpbmUoInNpbT4gIik7Ci0rICAgIGlmIChsaW5lID09IG51bGxwdHIpIHsKLSsgICAgICBicmVh azsKLSsgICAgfSBlbHNlIHsKLSsgICAgICBjaGFyKiBsYXN0X2lucHV0ID0gc2ltXy0+bGFzdERl YnVnZ2VySW5wdXQoKTsKLSsgICAgICBpZiAoc3RyY21wKGxpbmUsICJcbiIpID09IDAgJiYgbGFz dF9pbnB1dCAhPSBudWxscHRyKSB7Ci0rICAgICAgICBsaW5lID0gbGFzdF9pbnB1dDsKLSsgICAg ICB9IGVsc2UgewotKyAgICAgICAgc2ltXy0+c2V0TGFzdERlYnVnZ2VySW5wdXQobGluZSk7Ci0r ICAgICAgfQotKyAgICAgIGludCBhcmdjID0gc3NjYW5mKGxpbmUsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiUiIFhTVFIoQ09NTUFORF9TSVpFKSAicyAiCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiUiIFhTVFIoQVJHX1NJWkUpICJzICIKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiJSIgWFNUUihBUkdfU0laRSkgInMiLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNtZCwgYXJnMSwgYXJnMik7Ci0rICAgICAgaWYgKChzdHJjbXAoY21k LCAic2kiKSA9PSAwKSB8fCAoc3RyY21wKGNtZCwgInN0ZXBpIikgPT0gMCkpIHsKLSsgICAgICAg IFNpbUluc3RydWN0aW9uKiBpbnN0ciA9Ci0rICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxT aW1JbnN0cnVjdGlvbio+KHNpbV8tPmdldF9wYygpKTsKLSsgICAgICAgIGlmICghaW5zdHItPmlz VHJhcCgpKSB7Ci0rICAgICAgICAgIHNpbV8tPmluc3RydWN0aW9uRGVjb2RlKGluc3RyKTsKLSsg ICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIHByaW50ZigiLyFcXCBKdW1waW5nIG92ZXIgZ2Vu ZXJhdGVkIGJyZWFrcG9pbnQuXG4iKTsKLSsgICAgICAgICAgc2ltXy0+c2V0X3BjKHNpbV8tPmdl dF9wYygpICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgICAgICAgfQotKyAgICAg ICAgc2ltXy0+aWNvdW50XysrOwotKyAgICAgIH0gZWxzZSBpZiAoKHN0cmNtcChjbWQsICJjIikg PT0gMCkgfHwgKHN0cmNtcChjbWQsICJjb250IikgPT0gMCkpIHsKLSsgICAgICAgIHNpbV8tPmlu c3RydWN0aW9uRGVjb2RlKAotKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2ltSW5zdHJ1 Y3Rpb24qPihzaW1fLT5nZXRfcGMoKSkpOwotKyAgICAgICAgc2ltXy0+aWNvdW50XysrOwotKyAg ICAgICAgZG9uZSA9IHRydWU7Ci0rICAgICAgfSBlbHNlIGlmICgoc3RyY21wKGNtZCwgInAiKSA9 PSAwKSB8fCAoc3RyY21wKGNtZCwgInByaW50IikgPT0gMCkpIHsKLSsgICAgICAgIGlmIChhcmdj ID09IDIpIHsKLSsgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKLSsgICAgICAgICAgaWYgKHN0cmNt cChhcmcxLCAiYWxsIikgPT0gMCkgewotKyAgICAgICAgICAgIHByaW50QWxsUmVncygpOwotKyAg ICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmcxLCAiYWxsZiIpID09IDApIHsKLSsgICAgICAg ICAgICBwcmludEFsbFJlZ3NJbmNsdWRpbmdGUFUoKTsKLSsgICAgICAgICAgfSBlbHNlIHsKLSsg ICAgICAgICAgICBSZWdpc3RlciByZWcgPSBSZWdpc3Rlcjo6RnJvbU5hbWUoYXJnMSk7Ci0rICAg ICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkNvZGUgZlJlZyA9IEZsb2F0UmVnaXN0ZXJzOjpGcm9t TmFtZShhcmcxKTsKLSsgICAgICAgICAgICBpZiAocmVnICE9IEludmFsaWRSZWcpIHsKLSsgICAg ICAgICAgICAgIHZhbHVlID0gZ2V0UmVnaXN0ZXJWYWx1ZShyZWcuY29kZSgpKTsKLSsgICAgICAg ICAgICAgIHByaW50ZigiJXM6IDB4JTAxNiIgUFJJeDY0ICIgJTIwIiBQUklpNjQgIiBcbiIsIGFy ZzEsIHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgIHZhbHVlKTsKLSsgICAgICAgICAgICB9 IGVsc2UgaWYgKGZSZWcgIT0gRmxvYXRSZWdpc3RlcnM6OkludmFsaWQpIHsKLSsgICAgICAgICAg ICAgIHByaW50ZigiJTNzOiAweCUwMTYiIFBSSXg2NCAiXHRmbHQ6ICUtOC40Z1x0ZGJsOiAlLTE2 LjRnXG4iLAotKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpHZXROYW1lKGZS ZWcpLAotKyAgICAgICAgICAgICAgICAgICAgIGdldEZQVVJlZ2lzdGVyVmFsdWVMb25nKGZSZWcp LAotKyAgICAgICAgICAgICAgICAgICAgIGdldEZQVVJlZ2lzdGVyVmFsdWVGbG9hdChmUmVnKSwK LSsgICAgICAgICAgICAgICAgICAgICBnZXRGUFVSZWdpc3RlclZhbHVlRG91YmxlKGZSZWcpKTsK LSsgICAgICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgICAgcHJpbnRmKCIlcyB1bnJlY29n bml6ZWRcbiIsIGFyZzEpOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgfQotKyAgICAgICAg fSBlbHNlIHsKLSsgICAgICAgICAgcHJpbnRmKCJwcmludCA8cmVnaXN0ZXI+IG9yIHByaW50IDxm cHUgcmVnaXN0ZXI+IHNpbmdsZVxuIik7Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIGlmIChz dHJjbXAoY21kLCAic3RhY2siKSA9PSAwIHx8IHN0cmNtcChjbWQsICJtZW0iKSA9PSAwKSB7Ci0r ICAgICAgICBpbnQ2NF90KiBjdXIgPSBudWxscHRyOwotKyAgICAgICAgaW50NjRfdCogZW5kID0g bnVsbHB0cjsKLSsgICAgICAgIGludCBuZXh0X2FyZyA9IDE7Ci0rCi0rICAgICAgICBpZiAoc3Ry Y21wKGNtZCwgInN0YWNrIikgPT0gMCkgewotKyAgICAgICAgICBjdXIgPSByZWludGVycHJldF9j YXN0PGludDY0X3QqPihzaW1fLT5nZXRSZWdpc3RlcihTaW11bGF0b3I6OnNwKSk7Ci0rICAgICAg ICB9IGVsc2UgewotKyAgICAgICAgICBpbnQ2NF90IHZhbHVlOwotKyAgICAgICAgICBpZiAoIWdl dFZhbHVlKGFyZzEsICZ2YWx1ZSkpIHsKLSsgICAgICAgICAgICBwcmludGYoIiVzIHVucmVjb2du aXplZFxuIiwgYXJnMSk7Ci0rICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICAgIH0KLSsg ICAgICAgICAgY3VyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Kj4odmFsdWUpOwotKyAgICAg ICAgICBuZXh0X2FyZysrOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaW50NjRfdCB3b3JkczsK LSsgICAgICAgIGlmIChhcmdjID09IG5leHRfYXJnKSB7Ci0rICAgICAgICAgIHdvcmRzID0gMTA7 Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICBpZiAoIWdldFZhbHVlKGFyZ3ZbbmV4dF9h cmddLCAmd29yZHMpKSB7Ci0rICAgICAgICAgICAgd29yZHMgPSAxMDsKLSsgICAgICAgICAgfQot KyAgICAgICAgfQotKyAgICAgICAgZW5kID0gY3VyICsgd29yZHM7Ci0rCi0rICAgICAgICB3aGls ZSAoY3VyIDwgZW5kKSB7Ci0rICAgICAgICAgIHByaW50ZigiICAlcDogIDB4JTAxNiIgUFJJeDY0 ICIgJTIwIiBQUklpNjQsIGN1ciwgKmN1ciwgKmN1cik7Ci0rICAgICAgICAgIHByaW50ZigiXG4i KTsKLSsgICAgICAgICAgY3VyKys7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgfSBlbHNlIGlmICgo c3RyY21wKGNtZCwgImRpc2FzbSIpID09IDApIHx8IChzdHJjbXAoY21kLCAiZHBjIikgPT0gMCkg fHwKLSsgICAgICAgICAgICAgICAgIChzdHJjbXAoY21kLCAiZGkiKSA9PSAwKSkgewotKyAgICAg ICAgdWludDhfdCogY3VyID0gbnVsbHB0cjsKLSsgICAgICAgIHVpbnQ4X3QqIGVuZCA9IG51bGxw dHI7Ci0rCi0rICAgICAgICBpZiAoYXJnYyA9PSAxKSB7Ci0rICAgICAgICAgIGN1ciA9IHJlaW50 ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNpbV8tPmdldF9wYygpKTsKLSsgICAgICAgICAgZW5kID0g Y3VyICsgKDEwICogU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgICAgICAgfSBlbHNl IGlmIChhcmdjID09IDIpIHsKLSsgICAgICAgICAgUmVnaXN0ZXIgcmVnID0gUmVnaXN0ZXI6OkZy b21OYW1lKGFyZzEpOwotKyAgICAgICAgICBpZiAocmVnICE9IEludmFsaWRSZWcgfHwgc3RybmNt cChhcmcxLCAiMHgiLCAyKSA9PSAwKSB7Ci0rICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKLSsg ICAgICAgICAgICBpZiAoZ2V0VmFsdWUoYXJnMSwgJnZhbHVlKSkgewotKyAgICAgICAgICAgICAg Y3VyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odmFsdWUpOwotKyAgICAgICAgICAgICAg ZW5kID0gY3VyICsgKDEwICogU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgICAgICAg ICAgIH0KLSsgICAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOwot KyAgICAgICAgICAgIGlmIChnZXRWYWx1ZShhcmcxLCAmdmFsdWUpKSB7Ci0rICAgICAgICAgICAg ICBjdXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzaW1fLT5nZXRfcGMoKSk7Ci0rICAg ICAgICAgICAgICBlbmQgPSBjdXIgKyAodmFsdWUgKiBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6 ZSk7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICB9Ci0rICAgICAgICB9IGVsc2UgewotKyAg ICAgICAgICBpbnQ2NF90IHZhbHVlMTsKLSsgICAgICAgICAgaW50NjRfdCB2YWx1ZTI7Ci0rICAg ICAgICAgIGlmIChnZXRWYWx1ZShhcmcxLCAmdmFsdWUxKSAmJiBnZXRWYWx1ZShhcmcyLCAmdmFs dWUyKSkgewotKyAgICAgICAgICAgIGN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHZh bHVlMSk7Ci0rICAgICAgICAgICAgZW5kID0gY3VyICsgKHZhbHVlMiAqIFNpbUluc3RydWN0aW9u OjprSW5zdHJTaXplKTsKLSsgICAgICAgICAgfQotKyAgICAgICAgfQotKwotKyAgICAgICAgd2hp bGUgKGN1ciA8IGVuZCkgewotKyAgICAgICAgICBEaXNhc3NlbWJsZUluc3RydWN0aW9uKHVpbnQ2 NF90KGN1cikpOwotKyAgICAgICAgICBjdXIgKz0gU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemU7 Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY21kLCAiZ2RiIikgPT0gMCkg ewotKyAgICAgICAgcHJpbnRmKCJyZWxpbnF1aXNoaW5nIGNvbnRyb2wgdG8gZ2RiXG4iKTsKLSsj aWYgZGVmaW5lZChfX3g4Nl82NF9fKQotKyAgICAgICAgYXNtKCJpbnQgJDMiKTsKLSsjZWxpZiBk ZWZpbmVkKF9fYWFyY2g2NF9fKQotKyAgICAgICAgYXNtKCJicmsgIzB4ZjAwMCIpOwotKyNlbmRp ZgotKyAgICAgICAgcHJpbnRmKCJyZWdhaW5pbmcgY29udHJvbCBmcm9tIGdkYlxuIik7Ci0rICAg ICAgfSBlbHNlIGlmIChzdHJjbXAoY21kLCAiYnJlYWsiKSA9PSAwKSB7Ci0rICAgICAgICBpZiAo YXJnYyA9PSAyKSB7Ci0rICAgICAgICAgIGludDY0X3QgdmFsdWU7Ci0rICAgICAgICAgIGlmIChn ZXRWYWx1ZShhcmcxLCAmdmFsdWUpKSB7Ci0rICAgICAgICAgICAgaWYgKCFzZXRCcmVha3BvaW50 KHJlaW50ZXJwcmV0X2Nhc3Q8U2ltSW5zdHJ1Y3Rpb24qPih2YWx1ZSkpKSB7Ci0rICAgICAgICAg ICAgICBwcmludGYoInNldHRpbmcgYnJlYWtwb2ludCBmYWlsZWRcbiIpOwotKyAgICAgICAgICAg IH0KLSsgICAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBwcmludGYoIiVzIHVucmVjb2du aXplZFxuIiwgYXJnMSk7Ci0rICAgICAgICAgIH0KLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAg ICAgIHByaW50ZigiYnJlYWsgPGFkZHJlc3M+XG4iKTsKLSsgICAgICAgIH0KLSsgICAgICB9IGVs c2UgaWYgKHN0cmNtcChjbWQsICJkZWwiKSA9PSAwKSB7Ci0rICAgICAgICBpZiAoIWRlbGV0ZUJy ZWFrcG9pbnQobnVsbHB0cikpIHsKLSsgICAgICAgICAgcHJpbnRmKCJkZWxldGluZyBicmVha3Bv aW50IGZhaWxlZFxuIik7Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY21k LCAiZmxhZ3MiKSA9PSAwKSB7Ci0rICAgICAgICBwcmludGYoIkNSOiAweCUwOHggICBYRVI6IDB4 JTAxNiIgUFJJeDY0ICJcbiIsIHNpbV8tPmdldENSKCksCi0rICAgICAgICAgICAgICAgc2ltXy0+ Z2V0WEVSKCkpOwotKyAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGNtZCwgInN0b3AiKSA9PSAwKSB7 Ci0rICAgICAgICBpbnQ2NF90IHZhbHVlOwotKyAgICAgICAgaW50cHRyX3Qgc3RvcF9wYyA9IHNp bV8tPmdldF9wYygpIC0gMiAqIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplOwotKyAgICAgICAg U2ltSW5zdHJ1Y3Rpb24qIHN0b3BfaW5zdHIgPQotKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh c3Q8U2ltSW5zdHJ1Y3Rpb24qPihzdG9wX3BjKTsKLSsgICAgICAgIFNpbUluc3RydWN0aW9uKiBt c2dfYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2ltSW5zdHJ1Y3Rpb24qPigKLSsgICAgICAg ICAgICBzdG9wX3BjICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgICAgICAgaWYg KChhcmdjID09IDIpICYmIChzdHJjbXAoYXJnMSwgInVuc3RvcCIpID09IDApKSB7Ci0rICAgICAg ICAgIGlmIChzaW1fLT5pc1N0b3BJbnN0cnVjdGlvbihzdG9wX2luc3RyKSkgewotKyAgICAgICAg ICAgIHN0b3BfaW5zdHItPnNldEluc3RydWN0aW9uQml0cyhrTm9wSW5zdHIpOwotKyAgICAgICAg ICAgIG1zZ19hZGRyZXNzLT5zZXRJbnN0cnVjdGlvbkJpdHMoa05vcEluc3RyKTsKLSsgICAgICAg ICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBwcmludGYoIk5vdCBhdCBkZWJ1Z2dlciBzdG9wLlxu Iik7Ci0rICAgICAgICAgIH0KLSsgICAgICAgIH0gZWxzZSBpZiAoYXJnYyA9PSAzKSB7Ci0rICAg ICAgICAgIGlmIChzdHJjbXAoYXJnMSwgImluZm8iKSA9PSAwKSB7Ci0rICAgICAgICAgICAgaWYg KHN0cmNtcChhcmcyLCAiYWxsIikgPT0gMCkgewotKyAgICAgICAgICAgICAgcHJpbnRmKCJTdG9w IGluZm9ybWF0aW9uOlxuIik7Ci0rICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBrTWF4 V2F0Y2hwb2ludENvZGUgKyAxOyBpIDw9IGtNYXhTdG9wQ29kZTsKLSsgICAgICAgICAgICAgICAg ICAgaSsrKSB7Ci0rICAgICAgICAgICAgICAgIHNpbV8tPnByaW50U3RvcEluZm8oaSk7Ci0rICAg ICAgICAgICAgICB9Ci0rICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRWYWx1ZShhcmcyLCAmdmFs dWUpKSB7Ci0rICAgICAgICAgICAgICBzaW1fLT5wcmludFN0b3BJbmZvKHZhbHVlKTsKLSsgICAg ICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgICAgcHJpbnRmKCJVbnJlY29nbml6ZWQgYXJn dW1lbnQuXG4iKTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21w KGFyZzEsICJlbmFibGUiKSA9PSAwKSB7Ci0rICAgICAgICAgICAgaWYgKHN0cmNtcChhcmcyLCAi YWxsIikgPT0gMCkgewotKyAgICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0ga01heFdhdGNo cG9pbnRDb2RlICsgMTsgaSA8PSBrTWF4U3RvcENvZGU7Ci0rICAgICAgICAgICAgICAgICAgIGkr KykgewotKyAgICAgICAgICAgICAgICBzaW1fLT5lbmFibGVTdG9wKGkpOwotKyAgICAgICAgICAg ICAgfQotKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0VmFsdWUoYXJnMiwgJnZhbHVlKSkgewot KyAgICAgICAgICAgICAgc2ltXy0+ZW5hYmxlU3RvcCh2YWx1ZSk7Ci0rICAgICAgICAgICAgfSBl bHNlIHsKLSsgICAgICAgICAgICAgIHByaW50ZigiVW5yZWNvZ25pemVkIGFyZ3VtZW50LlxuIik7 Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmcxLCAiZGlz YWJsZSIpID09IDApIHsKLSsgICAgICAgICAgICBpZiAoc3RyY21wKGFyZzIsICJhbGwiKSA9PSAw KSB7Ci0rICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBrTWF4V2F0Y2hwb2ludENvZGUg KyAxOyBpIDw9IGtNYXhTdG9wQ29kZTsKLSsgICAgICAgICAgICAgICAgICAgaSsrKSB7Ci0rICAg ICAgICAgICAgICAgIHNpbV8tPmRpc2FibGVTdG9wKGkpOwotKyAgICAgICAgICAgICAgfQotKyAg ICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0VmFsdWUoYXJnMiwgJnZhbHVlKSkgewotKyAgICAgICAg ICAgICAgc2ltXy0+ZGlzYWJsZVN0b3AodmFsdWUpOwotKyAgICAgICAgICAgIH0gZWxzZSB7Ci0r ICAgICAgICAgICAgICBwcmludGYoIlVucmVjb2duaXplZCBhcmd1bWVudC5cbiIpOwotKyAgICAg ICAgICAgIH0KLSsgICAgICAgICAgfQotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgcHJp bnRmKCJXcm9uZyB1c2FnZS4gVXNlIGhlbHAgY29tbWFuZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5c biIpOwotKyAgICAgICAgfQotKyAgICAgIH0gZWxzZSBpZiAoKHN0cmNtcChjbWQsICJoIikgPT0g MCkgfHwgKHN0cmNtcChjbWQsICJoZWxwIikgPT0gMCkpIHsKLSsgICAgICAgIHByaW50ZigiY29u dFxuIik7Ci0rICAgICAgICBwcmludGYoIiAgY29udGludWUgZXhlY3V0aW9uIChhbGlhcyAnYycp XG4iKTsKLSsgICAgICAgIHByaW50Zigic3RlcGlcbiIpOwotKyAgICAgICAgcHJpbnRmKCIgIHN0 ZXAgb25lIGluc3RydWN0aW9uIChhbGlhcyAnc2knKVxuIik7Ci0rICAgICAgICBwcmludGYoInBy aW50IDxyZWdpc3Rlcj5cbiIpOwotKyAgICAgICAgcHJpbnRmKCIgIHByaW50IHJlZ2lzdGVyIGNv bnRlbnQgKGFsaWFzICdwJylcbiIpOwotKyAgICAgICAgcHJpbnRmKCIgIHVzZSByZWdpc3RlciBu YW1lICdhbGwnIHRvIHByaW50IGFsbCByZWdpc3RlcnNcbiIpOwotKyAgICAgICAgcHJpbnRmKCJz dGFjayBbPHdvcmRzPl1cbiIpOwotKyAgICAgICAgcHJpbnRmKCIgIGR1bXAgc3RhY2sgY29udGVu dCwgZGVmYXVsdCBkdW1wIDEwIHdvcmRzKVxuIik7Ci0rICAgICAgICBwcmludGYoIm1lbSA8YWRk cmVzcz4gWzx3b3Jkcz5dXG4iKTsKLSsgICAgICAgIHByaW50ZigiICBkdW1wIG1lbW9yeSBjb250 ZW50LCBkZWZhdWx0IGR1bXAgMTAgd29yZHMpXG4iKTsKLSsgICAgICAgIHByaW50ZigiZmxhZ3Nc biIpOwotKyAgICAgICAgcHJpbnRmKCIgIHByaW50IENSIGFuZCBYRVJcbiIpOwotKyAgICAgICAg cHJpbnRmKCJkaXNhc20gWzxpbnN0cnVjdGlvbnM+XVxuIik7Ci0rICAgICAgICBwcmludGYoImRp c2FzbSBbPGFkZHJlc3MvcmVnaXN0ZXI+XVxuIik7Ci0rICAgICAgICBwcmludGYoImRpc2FzbSBb WzxhZGRyZXNzL3JlZ2lzdGVyPl0gPGluc3RydWN0aW9ucz5dXG4iKTsKLSsgICAgICAgIHByaW50 ZigiICBkaXNhc3NlbWJsZSBjb2RlLCBkZWZhdWx0IGlzIDEwIGluc3RydWN0aW9uc1xuIik7Ci0r ICAgICAgICBwcmludGYoIiAgZnJvbSBwYyAoYWxpYXMgJ2RpJylcbiIpOwotKyAgICAgICAgcHJp bnRmKCJnZGJcbiIpOwotKyAgICAgICAgcHJpbnRmKCIgIGVudGVyIGdkYlxuIik7Ci0rICAgICAg ICBwcmludGYoImJyZWFrIDxhZGRyZXNzPlxuIik7Ci0rICAgICAgICBwcmludGYoIiAgc2V0IGEg YnJlYWsgcG9pbnQgb24gdGhlIGFkZHJlc3NcbiIpOwotKyAgICAgICAgcHJpbnRmKCJkZWxcbiIp OwotKyAgICAgICAgcHJpbnRmKCIgIGRlbGV0ZSB0aGUgYnJlYWtwb2ludFxuIik7Ci0rICAgICAg fSBlbHNlIHsKLSsgICAgICAgIHByaW50ZigiVW5rbm93biBjb21tYW5kOiAlc1xuIiwgY21kKTsK LSsgICAgICB9Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHJlZG9CcmVha3BvaW50cygpOwotKwotKyN1 bmRlZiBDT01NQU5EX1NJWkUKLSsjdW5kZWYgQVJHX1NJWkUKLSsKLSsjdW5kZWYgU1RSCi0rI3Vu ZGVmIFhTVFIKLSt9Ci0rCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBJQ2FjaGUgaGVs cGVycy4KLSsKLStzdGF0aWMgYm9vbCBBbGxPbk9uZVBhZ2UodWludHB0cl90IHN0YXJ0LCBpbnQg c2l6ZSkgewotKyAgaW50cHRyX3Qgc3RhcnRfcGFnZSA9IChzdGFydCAmIH5DYWNoZVBhZ2U6OmtQ YWdlTWFzayk7Ci0rICBpbnRwdHJfdCBlbmRfcGFnZSA9ICgoc3RhcnQgKyBzaXplKSAmIH5DYWNo ZVBhZ2U6OmtQYWdlTWFzayk7Ci0rICByZXR1cm4gc3RhcnRfcGFnZSA9PSBlbmRfcGFnZTsKLSt9 Ci0rCi0rdm9pZCBTaW11bGF0b3I6OnNldExhc3REZWJ1Z2dlcklucHV0KGNoYXIqIGlucHV0KSB7 Ci0rICBqc19mcmVlKGxhc3REZWJ1Z2dlcklucHV0Xyk7Ci0rICBsYXN0RGVidWdnZXJJbnB1dF8g PSBpbnB1dDsKLSt9Ci0rCi0rc3RhdGljIENhY2hlUGFnZSogR2V0Q2FjaGVQYWdlTG9ja2VkKFNp bXVsYXRvclByb2Nlc3M6OklDYWNoZU1hcCYgaV9jYWNoZSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCogcGFnZSkgewotKyAgU2ltdWxhdG9yUHJvY2Vzczo6SUNh Y2hlTWFwOjpBZGRQdHIgcCA9IGlfY2FjaGUubG9va3VwRm9yQWRkKHBhZ2UpOwotKyAgaWYgKHAp IHsKLSsgICAgcmV0dXJuIHAtPnZhbHVlKCk7Ci0rICB9Ci0rICBBdXRvRW50ZXJPT01VbnNhZmVS ZWdpb24gb29tVW5zYWZlOwotKyAgQ2FjaGVQYWdlKiBuZXdfcGFnZSA9IGpzX25ldzxDYWNoZVBh Z2U+KCk7Ci0rICBpZiAoIW5ld19wYWdlIHx8ICFpX2NhY2hlLmFkZChwLCBwYWdlLCBuZXdfcGFn ZSkpIHsKLSsgICAgb29tVW5zYWZlLmNyYXNoKCJTaW11bGF0b3IgQ2FjaGVQYWdlIik7Ci0rICB9 Ci0rICByZXR1cm4gbmV3X3BhZ2U7Ci0rfQotKwotK3N0YXRpYyB2b2lkIEZsdXNoT25lUGFnZUxv Y2tlZChTaW11bGF0b3JQcm9jZXNzOjpJQ2FjaGVNYXAmIGlfY2FjaGUsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludHB0cl90IHN0YXJ0LCBpbnQgc2l6ZSkgewotKyAgTU9aX0FT U0VSVChzaXplIDw9IENhY2hlUGFnZTo6a1BhZ2VTaXplKTsKLSsgIE1PWl9BU1NFUlQoQWxsT25P bmVQYWdlKHN0YXJ0LCBzaXplIC0gMSkpOwotKyAgTU9aX0FTU0VSVCgoc3RhcnQgJiBDYWNoZVBh Z2U6OmtMaW5lTWFzaykgPT0gMCk7Ci0rICBNT1pfQVNTRVJUKChzaXplICYgQ2FjaGVQYWdlOjpr TGluZU1hc2spID09IDApOwotKyAgdm9pZCogcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+ KHN0YXJ0ICYgKH5DYWNoZVBhZ2U6OmtQYWdlTWFzaykpOwotKyAgaW50IG9mZnNldCA9IChzdGFy dCAmIENhY2hlUGFnZTo6a1BhZ2VNYXNrKTsKLSsgIENhY2hlUGFnZSogY2FjaGVfcGFnZSA9IEdl dENhY2hlUGFnZUxvY2tlZChpX2NhY2hlLCBwYWdlKTsKLSsgIGNoYXIqIHZhbGlkX2J5dGVtYXAg PSBjYWNoZV9wYWdlLT52YWxpZGl0eUJ5dGUob2Zmc2V0KTsKLSsgIG1lbXNldCh2YWxpZF9ieXRl bWFwLCBDYWNoZVBhZ2U6OkxJTkVfSU5WQUxJRCwgc2l6ZSA+PiBDYWNoZVBhZ2U6OmtMaW5lU2hp ZnQpOwotK30KLSsKLStzdGF0aWMgdm9pZCBGbHVzaElDYWNoZUxvY2tlZChTaW11bGF0b3JQcm9j ZXNzOjpJQ2FjaGVNYXAmIGlfY2FjaGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCogc3RhcnRfYWRkciwgc2l6ZV90IHNpemUpIHsKLSsgIGludHB0cl90IHN0YXJ0ID0gcmVp bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3RhcnRfYWRkcik7Ci0rICBpbnQgaW50cmFfbGluZSA9 IChzdGFydCAmIENhY2hlUGFnZTo6a0xpbmVNYXNrKTsKLSsgIHN0YXJ0IC09IGludHJhX2xpbmU7 Ci0rICBzaXplICs9IGludHJhX2xpbmU7Ci0rICBzaXplID0gKChzaXplIC0gMSkgfCBDYWNoZVBh Z2U6OmtMaW5lTWFzaykgKyAxOwotKyAgaW50IG9mZnNldCA9IChzdGFydCAmIENhY2hlUGFnZTo6 a1BhZ2VNYXNrKTsKLSsgIHdoaWxlICghQWxsT25PbmVQYWdlKHN0YXJ0LCBzaXplIC0gMSkpIHsK LSsgICAgaW50IGJ5dGVzX3RvX2ZsdXNoID0gQ2FjaGVQYWdlOjprUGFnZVNpemUgLSBvZmZzZXQ7 Ci0rICAgIEZsdXNoT25lUGFnZUxvY2tlZChpX2NhY2hlLCBzdGFydCwgYnl0ZXNfdG9fZmx1c2gp OwotKyAgICBzdGFydCArPSBieXRlc190b19mbHVzaDsKLSsgICAgc2l6ZSAtPSBieXRlc190b19m bHVzaDsKLSsgICAgTU9aX0FTU0VSVCgoc3RhcnQgJiBDYWNoZVBhZ2U6OmtQYWdlTWFzaykgPT0g MCk7Ci0rICAgIG9mZnNldCA9IDA7Ci0rICB9Ci0rICBpZiAoc2l6ZSAhPSAwKSB7Ci0rICAgIEZs dXNoT25lUGFnZUxvY2tlZChpX2NhY2hlLCBzdGFydCwgc2l6ZSk7Ci0rICB9Ci0rfQotKwotKy8q IHN0YXRpYyAqLwotK3ZvaWQgU2ltdWxhdG9yUHJvY2Vzczo6Y2hlY2tJQ2FjaGVMb2NrZWQoU2lt SW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpbnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRf Y2FzdDxpbnRwdHJfdD4oaW5zdHIpOwotKyAgdm9pZCogcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8 dm9pZCo+KGFkZHJlc3MgJiAofkNhY2hlUGFnZTo6a1BhZ2VNYXNrKSk7Ci0rICB2b2lkKiBsaW5l ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcyAmICh+Q2FjaGVQYWdlOjprTGluZU1h c2spKTsKLSsgIGludCBvZmZzZXQgPSAoYWRkcmVzcyAmIENhY2hlUGFnZTo6a1BhZ2VNYXNrKTsK LSsgIENhY2hlUGFnZSogY2FjaGVfcGFnZSA9IEdldENhY2hlUGFnZUxvY2tlZChpY2FjaGUoKSwg cGFnZSk7Ci0rICBjaGFyKiBjYWNoZV92YWxpZF9ieXRlID0gY2FjaGVfcGFnZS0+dmFsaWRpdHlC eXRlKG9mZnNldCk7Ci0rICBib29sIGNhY2hlX2hpdCA9ICgqY2FjaGVfdmFsaWRfYnl0ZSA9PSBD YWNoZVBhZ2U6OkxJTkVfVkFMSUQpOwotKyAgY2hhciogY2FjaGVkX2xpbmUgPSBjYWNoZV9wYWdl LT5jYWNoZWREYXRhKG9mZnNldCAmIH5DYWNoZVBhZ2U6OmtMaW5lTWFzayk7Ci0rCi0rICBpZiAo Y2FjaGVfaGl0KSB7Ci0rICAgIG1vemlsbGE6OkRlYnVnT25seTxpbnQ+IGNtcHJldCA9Ci0rICAg ICAgICBtZW1jbXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zdHIpLCBjYWNoZV9wYWdlLT5j YWNoZWREYXRhKG9mZnNldCksCi0rICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0 clNpemUpOwotKyAgICBNT1pfQVNTRVJUKGNtcHJldCA9PSAwKTsKLSsgIH0gZWxzZSB7Ci0rICAg IG1lbWNweShjYWNoZWRfbGluZSwgbGluZSwgQ2FjaGVQYWdlOjprTGluZUxlbmd0aCk7Ci0rICAg ICpjYWNoZV92YWxpZF9ieXRlID0gQ2FjaGVQYWdlOjpMSU5FX1ZBTElEOwotKyAgfQotK30KLSsK LStIYXNoTnVtYmVyIFNpbXVsYXRvclByb2Nlc3M6OklDYWNoZUhhc2hlcjo6aGFzaChjb25zdCBM b29rdXAmIGwpIHsKLSsgIHJldHVybiBVMzIocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGwp KSA+PiAyOwotK30KLSsKLStib29sIFNpbXVsYXRvclByb2Nlc3M6OklDYWNoZUhhc2hlcjo6bWF0 Y2goY29uc3QgS2V5JiBrLCBjb25zdCBMb29rdXAmIGwpIHsKLSsgIE1PWl9BU1NFUlQoKHJlaW50 ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGspICYgQ2FjaGVQYWdlOjprUGFnZU1hc2spID09IDApOwot KyAgTU9aX0FTU0VSVCgocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obCkgJiBDYWNoZVBhZ2U6 OmtQYWdlTWFzaykgPT0gMCk7Ci0rICByZXR1cm4gayA9PSBsOwotK30KLSsKLSsvKiBzdGF0aWMg Ki8KLSt2b2lkIFNpbXVsYXRvclByb2Nlc3M6OkZsdXNoSUNhY2hlKHZvaWQqIHN0YXJ0X2FkZHIs IHNpemVfdCBzaXplKSB7Ci0rICBpZiAoIUlDYWNoZUNoZWNraW5nRGlzYWJsZUNvdW50KSB7Ci0r ICAgIEF1dG9Mb2NrU2ltdWxhdG9yQ2FjaGUgYWxzOwotKyAgICBqczo6aml0OjpGbHVzaElDYWNo ZUxvY2tlZChpY2FjaGUoKSwgc3RhcnRfYWRkciwgc2l6ZSk7Ci0rICB9Ci0rfQotKwotKy8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gUmVkaXJlY3Rpb24uCi0rCi0rY2xhc3MgUmVkaXJlY3Rp b24gewotKyAgZnJpZW5kIGNsYXNzIFNpbXVsYXRvclByb2Nlc3M7Ci0rCi0rICBSZWRpcmVjdGlv bih2b2lkKiBuYXRpdmVGdW5jdGlvbiwgQUJJRnVuY3Rpb25UeXBlIHR5cGUpCi0rICAgICAgOiBu YXRpdmVGdW5jdGlvbl8obmF0aXZlRnVuY3Rpb24pLAotKyAgICAgICAgc3dpSW5zdHJ1Y3Rpb25f KGtDYWxsUmVkaXJJbnN0ciksCi0rICAgICAgICB0eXBlXyh0eXBlKSwKLSsgICAgICAgIG5leHRf KG51bGxwdHIpIHsKLSsgICAgbmV4dF8gPSBTaW11bGF0b3JQcm9jZXNzOjpyZWRpcmVjdGlvbigp OwotKyAgICBpZiAoIVNpbXVsYXRvclByb2Nlc3M6OklDYWNoZUNoZWNraW5nRGlzYWJsZUNvdW50 KSB7Ci0rICAgICAgRmx1c2hJQ2FjaGVMb2NrZWQoU2ltdWxhdG9yUHJvY2Vzczo6aWNhY2hlKCks IGFkZHJlc3NPZlN3aUluc3RydWN0aW9uKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgU2lt SW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgICB9Ci0rICAgIFNpbXVsYXRvclByb2Nlc3M6 OnNldFJlZGlyZWN0aW9uKHRoaXMpOwotKyAgfQotKwotKyBwdWJsaWM6Ci0rICB2b2lkKiBhZGRy ZXNzT2ZTd2lJbnN0cnVjdGlvbigpIHsgcmV0dXJuICZzd2lJbnN0cnVjdGlvbl87IH0KLSsgIHZv aWQqIG5hdGl2ZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbmF0aXZlRnVuY3Rpb25fOyB9Ci0r ICBBQklGdW5jdGlvblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9Ci0rCi0rICBz dGF0aWMgUmVkaXJlY3Rpb24qIEdldCh2b2lkKiBuYXRpdmVGdW5jdGlvbiwgQUJJRnVuY3Rpb25U eXBlIHR5cGUpIHsKLSsgICAgQXV0b0xvY2tTaW11bGF0b3JDYWNoZSBhbHM7Ci0rCi0rICAgIFJl ZGlyZWN0aW9uKiBjdXJyZW50ID0gU2ltdWxhdG9yUHJvY2Vzczo6cmVkaXJlY3Rpb24oKTsKLSsg ICAgZm9yICg7IGN1cnJlbnQgIT0gbnVsbHB0cjsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRfKSB7 Ci0rICAgICAgaWYgKGN1cnJlbnQtPm5hdGl2ZUZ1bmN0aW9uXyA9PSBuYXRpdmVGdW5jdGlvbikg ewotKyAgICAgICAgTU9aX0FTU0VSVChjdXJyZW50LT50eXBlKCkgPT0gdHlwZSk7Ci0rICAgICAg ICByZXR1cm4gY3VycmVudDsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgQXV0b0VudGVyT09N VW5zYWZlUmVnaW9uIG9vbVVuc2FmZTsKLSsgICAgUmVkaXJlY3Rpb24qIHJlZGlyID0ganNfcG9k X21hbGxvYzxSZWRpcmVjdGlvbj4oMSk7Ci0rICAgIGlmICghcmVkaXIpIHsKLSsgICAgICBvb21V bnNhZmUuY3Jhc2goIlNpbXVsYXRvciByZWRpcmVjdGlvbiIpOwotKyAgICB9Ci0rICAgIG5ldyAo cmVkaXIpIFJlZGlyZWN0aW9uKG5hdGl2ZUZ1bmN0aW9uLCB0eXBlKTsKLSsgICAgcmV0dXJuIHJl ZGlyOwotKyAgfQotKwotKyAgc3RhdGljIFJlZGlyZWN0aW9uKiBGcm9tU3dpSW5zdHJ1Y3Rpb24o U2ltSW5zdHJ1Y3Rpb24qIHN3aUluc3RydWN0aW9uKSB7Ci0rICAgIHVpbnQ4X3QqIGFkZHJPZlN3 aSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHN3aUluc3RydWN0aW9uKTsKLSsgICAgdWlu dDhfdCogYWRkck9mUmVkaXJlY3Rpb24gPQotKyAgICAgICAgYWRkck9mU3dpIC0gb2Zmc2V0b2Yo UmVkaXJlY3Rpb24sIHN3aUluc3RydWN0aW9uXyk7Ci0rICAgIHJldHVybiByZWludGVycHJldF9j YXN0PFJlZGlyZWN0aW9uKj4oYWRkck9mUmVkaXJlY3Rpb24pOwotKyAgfQotKwotKyBwcml2YXRl OgotKyAgdm9pZCogbmF0aXZlRnVuY3Rpb25fOwotKyAgdWludDMyX3Qgc3dpSW5zdHJ1Y3Rpb25f OwotKyAgQUJJRnVuY3Rpb25UeXBlIHR5cGVfOwotKyAgUmVkaXJlY3Rpb24qIG5leHRfOwotK307 Ci0rCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBTaW11bGF0b3IgY29uc3RydWN0b3Ig LyBkZXN0cnVjdG9yIC8gaW5pdC4KLSsKLStTaW11bGF0b3I6OlNpbXVsYXRvcigpIHsKLSsgIHN0 YWNrXyA9IG51bGxwdHI7Ci0rICBzdGFja0xpbWl0XyA9IDA7Ci0rICBwY19tb2RpZmllZF8gPSBm YWxzZTsKLSsgIGljb3VudF8gPSAwOwotKyAgYnJlYWtfY291bnRfID0gMDsKLSsgIGJyZWFrX3Bj XyA9IG51bGxwdHI7Ci0rICBicmVha19pbnN0cl8gPSAwOwotKyAgc2luZ2xlX3N0ZXBwaW5nXyA9 IGZhbHNlOwotKyAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfID0gbnVsbHB0cjsKLSsgIHNpbmdsZV9z dGVwX2NhbGxiYWNrX2FyZ18gPSBudWxscHRyOwotKwotKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBS ZWdpc3Rlcjo6a051bVNpbXVSZWdpc3RlcnM7IGkrKykgewotKyAgICByZWdpc3RlcnNfW2ldID0g MDsKLSsgIH0KLSsgIGZvciAoaW50IGkgPSAwOyBpIDwgU2ltdWxhdG9yOjpGUFVSZWdpc3Rlcjo6 a051bUZQVVJlZ2lzdGVyczsgaSsrKSB7Ci0rICAgIEZQVXJlZ2lzdGVyc19baV0gPSAwOwotKyAg fQotKwotKyAgTFJfID0gMDsKLSsgIENUUl8gPSAwOwotKyAgQ1JfID0gMDsKLSsgIFhFUl8gPSAw OwotKyAgRlBTQ1JfID0gMDsKLSsgIExMQml0XyA9IGZhbHNlOwotKyAgTExBZGRyXyA9IDA7Ci0r ICBsYXN0TExWYWx1ZV8gPSAwOwotKwotKyAgLy8gSW5pdGlhbGl6ZSBQQyBhbmQgTFIgdG8gYSBr bm93biBiYWQgdmFsdWUgdGhhdCB3aWxsIGNhdXNlIGFuCi0rICAvLyBhY2Nlc3MgdmlvbGF0aW9u IGlmIHRoZSBzaW11bGF0b3IgZXZlciB0cmllcyB0byBleGVjdXRlIGl0LgotKyAgcmVnaXN0ZXJz X1twY10gPSBiYWRfcmE7Ci0rICBMUl8gPSBiYWRfcmE7Ci0rCi0rICBsYXN0RGVidWdnZXJJbnB1 dF8gPSBudWxscHRyOwotK30KLSsKLStib29sIFNpbXVsYXRvcjo6aW5pdCgpIHsKLSsgIHN0YXRp YyBjb25zdCBzaXplX3Qgc3RhY2tTaXplID0gMiAqIDEwMjQgKiAxMDI0OwotKyAgc3RhY2tfID0g anNfcG9kX21hbGxvYzxjaGFyPihzdGFja1NpemUpOwotKyAgaWYgKCFzdGFja18pIHsKLSsgICAg cmV0dXJuIGZhbHNlOwotKyAgfQotKwotKyAgLy8gTGVhdmUgYSBzYWZldHkgbWFyZ2luIG9mIDFN QiB0byBwcmV2ZW50IG92ZXJydW5uaW5nIHRoZSBzdGFjay4KLSsgIHN0YWNrTGltaXRfID0gcmVp bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrXykgKyAxMDI0ICogMTAyNDsKLSsKLSsgIC8v IFRoZSBzcCBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byB0aGUgYm90dG9tIChoaWdoIGFkZHJl c3MpIG9mIHRoZQotKyAgLy8gYWxsb2NhdGVkIHN0YWNrIGFyZWEuCi0rICByZWdpc3RlcnNfW3Nw XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oc3RhY2tfKSArIHN0YWNrU2l6ZSAtIDY0Owot KwotKyAgLy8gWmVyby1pbml0aWFsaXplIFZSIG5hbWVzcGFjZS4gU2ltdWxhdGVkIFBQQzY0IGRv ZXMgbm90IGd1YXJhbnRlZSBhbnkKLSsgIC8vIHZhbHVlIGluIFZScyBhdCBlbnRyeSwgYnV0IHpl cm9pbmcgYXZvaWRzIHVuaW5pdGlhbGl6ZWQtcmVhZCBmYWxzZQotKyAgLy8gcG9zaXRpdmVzIGlu IHRvb2xzIGFuZCBtYWtlcyByZWdyZXNzaW9uIHRyYWNlcyBkZXRlcm1pbmlzdGljLgotKyAgbWVt c2V0KFZScmVnaXN0ZXJzXywgMCwgc2l6ZW9mKFZScmVnaXN0ZXJzXykpOwotKwotKyAgcmV0dXJu IHRydWU7Ci0rfQotKwotK1NpbXVsYXRvcjo6flNpbXVsYXRvcigpIHsganNfZnJlZShzdGFja18p OyB9Ci0rCi0rU2ltdWxhdG9yUHJvY2Vzczo6U2ltdWxhdG9yUHJvY2VzcygpCi0rICAgIDogY2Fj aGVMb2NrXyhtdXRleGlkOjpTaW11bGF0b3JDYWNoZUxvY2spLCByZWRpcmVjdGlvbl8obnVsbHB0 cikgewotKyAgaWYgKGdldGVudigiUFBDNjRfU0lNX0lDQUNIRV9DSEVDS1MiKSkgewotKyAgICBJ Q2FjaGVDaGVja2luZ0Rpc2FibGVDb3VudCA9IDA7Ci0rICB9Ci0rfQotKwotK1NpbXVsYXRvclBy b2Nlc3M6On5TaW11bGF0b3JQcm9jZXNzKCkgewotKyAgUmVkaXJlY3Rpb24qIHIgPSByZWRpcmVj dGlvbl87Ci0rICB3aGlsZSAocikgewotKyAgICBSZWRpcmVjdGlvbiogbmV4dCA9IHItPm5leHRf OwotKyAgICBqc19kZWxldGUocik7Ci0rICAgIHIgPSBuZXh0OwotKyAgfQotK30KLSsKLSsvKiBz dGF0aWMgKi8KLSt2b2lkKiBTaW11bGF0b3I6OlJlZGlyZWN0TmF0aXZlRnVuY3Rpb24odm9pZCog bmF0aXZlRnVuY3Rpb24sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFCSUZ1bmN0aW9uVHlwZSB0eXBlKSB7Ci0rICBSZWRpcmVjdGlvbiogcmVkaXJlY3Rpb24gPSBS ZWRpcmVjdGlvbjo6R2V0KG5hdGl2ZUZ1bmN0aW9uLCB0eXBlKTsKLSsgIHJldHVybiByZWRpcmVj dGlvbi0+YWRkcmVzc09mU3dpSW5zdHJ1Y3Rpb24oKTsKLSt9Ci0rCi0rU2ltdWxhdG9yKiBTaW11 bGF0b3I6OkN1cnJlbnQoKSB7Ci0rICBKU0NvbnRleHQqIGN4ID0gVGxzQ29udGV4dC5nZXQoKTsK LSsgIE1PWl9BU1NFUlQoQ3VycmVudFRocmVhZENhbkFjY2Vzc1J1bnRpbWUoY3gtPnJ1bnRpbWUo KSkpOwotKyAgcmV0dXJuIGN4LT5zaW11bGF0b3IoKTsKLSt9Ci0rCi0rLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSsvLyBSZWdpc3RlciBhY2Nlc3NvcnMuCi0rCi0rdm9pZCBTaW11bGF0b3I6OnNl dFJlZ2lzdGVyKGludCByZWcsIGludDY0X3QgdmFsdWUpIHsKLSsgIE1PWl9BU1NFUlQoKHJlZyA+ PSAwKSAmJiAocmVnIDwgUmVnaXN0ZXI6OmtOdW1TaW11UmVnaXN0ZXJzKSk7Ci0rICBpZiAocmVn ID09IHBjKSB7Ci0rICAgIHBjX21vZGlmaWVkXyA9IHRydWU7Ci0rICB9Ci0rICByZWdpc3RlcnNf W3JlZ10gPSB2YWx1ZTsKLSt9Ci0rCi0raW50NjRfdCBTaW11bGF0b3I6OmdldFJlZ2lzdGVyKGlu dCByZWcpIGNvbnN0IHsKLSsgIE1PWl9BU1NFUlQoKHJlZyA+PSAwKSAmJiAocmVnIDwgUmVnaXN0 ZXI6OmtOdW1TaW11UmVnaXN0ZXJzKSk7Ci0rICByZXR1cm4gcmVnaXN0ZXJzX1tyZWddICsgKChy ZWcgPT0gcGMpID8gU2ltSW5zdHJ1Y3Rpb246OmtQQ1JlYWRPZmZzZXQgOiAwKTsKLSt9Ci0rCi0r dm9pZCBTaW11bGF0b3I6OnNldEZwdVJlZ2lzdGVyKGludCBmcHVyZWcsIGludDY0X3QgdmFsdWUp IHsKLSsgIE1PWl9BU1NFUlQoKGZwdXJlZyA+PSAwKSAmJgotKyAgICAgICAgICAgICAoZnB1cmVn IDwgU2ltdWxhdG9yOjpGUFVSZWdpc3Rlcjo6a051bUZQVVJlZ2lzdGVycykpOwotKyAgRlBVcmVn aXN0ZXJzX1tmcHVyZWddID0gdmFsdWU7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjpzZXRGcHVS ZWdpc3RlcldvcmQoaW50IGZwdXJlZywgaW50MzJfdCB2YWx1ZSkgewotKyAgTU9aX0FTU0VSVCgo ZnB1cmVnID49IDApICYmCi0rICAgICAgICAgICAgIChmcHVyZWcgPCBTaW11bGF0b3I6OkZQVVJl Z2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7Ci0rICBpbnQzMl90KiBwd29yZDsKLSsgIHB3b3Jk ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4oJkZQVXJlZ2lzdGVyc19bZnB1cmVnXSk7Ci0r ICAqcHdvcmQgPSB2YWx1ZTsKLSt9Ci0rCi0rLy8gUHJvbW90ZSBmMzIg4oaSIGY2NCBwcmVzZXJ2 aW5nIE5hTiBwYXlsb2FkLCBsaWtlIFBQQzY0J3MgYGxmc2AgYW5kCi0rLy8gYHhzY3ZzcGRwbmAu IFRoZSBwbGFpbiBDIGNhc3QgYChkb3VibGUpZjMyX25hbmAgaXMgcGVybWl0dGVkIGJ5IHRoZQot Ky8vIHN0YW5kYXJkIHRvIHF1aWV0IGEgc2lnbmFsaW5nIE5hTiwgd2hpY2ggb24geDg2L0FSTSBo b3N0cyB2aXNpYmx5Ci0rLy8gdHJhbnNmb3JtcyAweDdGQTAwMDAwIChzTmFOKSBpbnRvIGEgcU5h TiBzdWNoIGFzIDB4N0ZFMDAwMDAg4oCUIGJyZWFraW5nCi0rLy8gZXZlcnkgd2FzbSB0ZXN0IHRo YXQgbG9hZHMgYSBjb25zdGFudCBzTmFOIGJpdCBwYXR0ZXJuLiBNYW51YWxseQotKy8vIHJlY29u c3RydWN0IHRoZSBmNjQgTmFOIHdpdGggdGhlIHNhbWUgc2lnbiArIHBheWxvYWQgKHBheWxvYWQg c2hpZnRlZAotKy8vIGxlZnQgYnkgMjkgdG8gZmlsbCB0aGUgd2lkZXIgbWFudGlzc2EpLgotK3N0 YXRpYyBkb3VibGUgcHJvbW90ZUZsb2F0UHJlc2VydmluZ05hTihmbG9hdCBmKSB7Ci0rICB1aW50 MzJfdCBiaXRzOwotKyAgbWVtY3B5KCZiaXRzLCAmZiwgc2l6ZW9mKGJpdHMpKTsKLSsgIGlmICgo Yml0cyAmIDB4N0Y4MDAwMDB1KSA9PSAweDdGODAwMDAwdSAmJiAoYml0cyAmIDB4MDA3RkZGRkZ1 KSAhPSAwdSkgewotKyAgICB1aW50NjRfdCBzaWduID0gdWludDY0X3QoYml0cyA+PiAzMSkgJiAx dTsKLSsgICAgdWludDY0X3QgcGF5bG9hZCA9IHVpbnQ2NF90KGJpdHMgJiAweDAwN0ZGRkZGdSk7 Ci0rICAgIHVpbnQ2NF90IGRiaXRzID0gKHNpZ24gPDwgNjMpIHwgKHVpbnQ2NF90KDB4N0ZGdSkg PDwgNTIpIHwgKHBheWxvYWQgPDwgMjkpOwotKyAgICBkb3VibGUgZDsKLSsgICAgbWVtY3B5KCZk LCAmZGJpdHMsIHNpemVvZihkKSk7Ci0rICAgIHJldHVybiBkOwotKyAgfQotKyAgcmV0dXJuIChk b3VibGUpZjsKLSt9Ci0rCi0rLy8gRGVtb3RlIGY2NCDihpIgZjMyIHByZXNlcnZpbmcgTmFOIHBh eWxvYWQgKG5vbi1zaWduYWxpbmc6IG1hdGNoZXMgUFBDNjQKLSsvLyBgc3Rmc2AgLyBgeHNjdmRw c3BuYCwgYW5kIHdhc20gYGxmc2AtZXF1aXZhbGVudCBzdG9yZXMpLiBUcnVuY2F0ZXMgdGhlCi0r Ly8gbG93ZXIgMjkgYml0cyBvZiB0aGUgZjY0IHBheWxvYWQgKHRob3NlIGJpdHMgY2Fubm90IGJl IHJlcHJlc2VudGVkIGluCi0rLy8gdGhlIG5hcnJvd2VyIGYzMiBtYW50aXNzYSk7IGlmIHRoZSB0 cnVuY2F0aW9uIHdvdWxkIHlpZWxkIGEgcGF5bG9hZCBvZgotKy8vIHplcm8gKHdoaWNoIHdvdWxk IGRlZ3JhZGUgdGhlIE5hTiB0byBhbiBJbmZpbml0eSksIGZvcmNlIHRoZSBMU0Igc28KLSsvLyB0 aGUgcmVzdWx0IGlzIHN0aWxsIGEgTmFOLiBUaGlzIGludGVudGlvbmFsbHkgZG9lcyBOT1Qgc2V0 IHRoZSBxdWlldAotKy8vIGJpdCDigJQgdGhhdCdzIHRoZSBqb2Igb2YgdGhlIGV4cGxpY2l0LXF1 aWV0aW5nIG9wIGB4c2N2ZHBzcGAgYW5kCi0rLy8gZjMyLmRlbW90ZV9mNjQncyB3YXNtLWxldmVs IGxvd2VyaW5nLgotK3N0YXRpYyBmbG9hdCBkZW1vdGVEb3VibGVQcmVzZXJ2aW5nTmFOKGRvdWJs ZSBkKSB7Ci0rICB1aW50NjRfdCBiaXRzOwotKyAgbWVtY3B5KCZiaXRzLCAmZCwgc2l6ZW9mKGJp dHMpKTsKLSsgIGlmICgoYml0cyAmIDB4N0ZGMDAwMDAwMDAwMDAwMFVMTCkgPT0gMHg3RkYwMDAw MDAwMDAwMDAwVUxMICYmCi0rICAgICAgKGJpdHMgJiAweDAwMEZGRkZGRkZGRkZGRkZVTEwpICE9 IDApIHsKLSsgICAgdWludDMyX3Qgc2lnbiA9IHVpbnQzMl90KGJpdHMgPj4gNjMpICYgMXU7Ci0r ICAgIHVpbnQzMl90IHBheWxvYWQgPSB1aW50MzJfdCgoYml0cyA+PiAyOSkgJiAweDAwN0ZGRkZG dSk7Ci0rICAgIGlmIChwYXlsb2FkID09IDApIHBheWxvYWQgPSAxOwotKyAgICB1aW50MzJfdCBm Yml0cyA9IChzaWduIDw8IDMxKSB8IDB4N0Y4MDAwMDB1IHwgcGF5bG9hZDsKLSsgICAgZmxvYXQg ZjsKLSsgICAgbWVtY3B5KCZmLCAmZmJpdHMsIHNpemVvZihmKSk7Ci0rICAgIHJldHVybiBmOwot KyAgfQotKyAgcmV0dXJuIChmbG9hdClkOwotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6c2V0RnB1 UmVnaXN0ZXJGbG9hdChpbnQgZnB1cmVnLCBmbG9hdCB2YWx1ZSkgewotKyAgTU9aX0FTU0VSVCgo ZnB1cmVnID49IDApICYmCi0rICAgICAgICAgICAgIChmcHVyZWcgPCBTaW11bGF0b3I6OkZQVVJl Z2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7Ci0rICAvLyBFTEZ2MiBBQkk6IHNpbmdsZS1wcmVj aXNpb24gdmFsdWVzIGluIEZQUnMgYXJlIHN0b3JlZCBhcyB0aGVpcgotKyAgLy8gZG91YmxlLXBy ZWNpc2lvbiByZXByZXNlbnRhdGlvbi4gUHJvbW90ZSBhbmQgc3RvcmUgdGhlIGZ1bGwgOCBieXRl cywKLSsgIC8vIG5vdCBqdXN0IHRoZSBsb3cgNC4gKE90aGVyd2lzZSB0aGUgdXBwZXIgNCBieXRl cyBhcmUgc3RhbGUsIG1hdGNoaW5nCi0rICAvLyB0aGUgbGF5b3V0IHRoYXQgZmN0aWQvZmNmaWQv bGZkIHdvdWxkIHJlYWQgYnV0IE5PVCB3aGF0IHRoZSBKSVQgYW5kCi0rICAvLyB0aGUgQyBBQkkg ZXhwZWN0IGZvciBhICdmbG9hdCcgcGFyYW1ldGVyLikgVXNlIHRoZSBOYU4tcHJlc2VydmluZwot KyAgLy8gaGVscGVyIHNvIGEgc2lnbmFsaW5nLU5hTiByZXR1cm4gdmFsdWUgaXNuJ3QgcXVpZXRl ZCBpbnRvIGEgcU5hTi4KLSsgIGRvdWJsZSBwcm9tb3RlZCA9IHByb21vdGVGbG9hdFByZXNlcnZp bmdOYU4odmFsdWUpOwotKyAgbWVtY3B5KCZGUFVyZWdpc3RlcnNfW2ZwdXJlZ10sICZwcm9tb3Rl ZCwgc2l6ZW9mKHByb21vdGVkKSk7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjpzZXRGcHVSZWdp c3RlckRvdWJsZShpbnQgZnB1cmVnLCBkb3VibGUgdmFsdWUpIHsKLSsgIE1PWl9BU1NFUlQoKGZw dXJlZyA+PSAwKSAmJgotKyAgICAgICAgICAgICAoZnB1cmVnIDwgU2ltdWxhdG9yOjpGUFVSZWdp c3Rlcjo6a051bUZQVVJlZ2lzdGVycykpOwotKyAgKm1vemlsbGE6OkJpdHdpc2VDYXN0PGRvdWJs ZSo+KCZGUFVyZWdpc3RlcnNfW2ZwdXJlZ10pID0gdmFsdWU7Ci0rfQotKwotK2ludDY0X3QgU2lt dWxhdG9yOjpnZXRGcHVSZWdpc3RlcihpbnQgZnB1cmVnKSBjb25zdCB7Ci0rICBNT1pfQVNTRVJU KChmcHVyZWcgPj0gMCkgJiYKLSsgICAgICAgICAgICAgKGZwdXJlZyA8IFNpbXVsYXRvcjo6RlBV UmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMpKTsKLSsgIHJldHVybiBGUFVyZWdpc3RlcnNfW2Zw dXJlZ107Ci0rfQotKwotK2ludDMyX3QgU2ltdWxhdG9yOjpnZXRGcHVSZWdpc3RlcldvcmQoaW50 IGZwdXJlZykgY29uc3QgewotKyAgTU9aX0FTU0VSVCgoZnB1cmVnID49IDApICYmCi0rICAgICAg ICAgICAgIChmcHVyZWcgPCBTaW11bGF0b3I6OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJz KSk7Ci0rICByZXR1cm4gKm1vemlsbGE6OkJpdHdpc2VDYXN0PGludDMyX3QqPigmRlBVcmVnaXN0 ZXJzX1tmcHVyZWddKTsKLSt9Ci0rCi0raW50MzJfdCBTaW11bGF0b3I6OmdldEZwdVJlZ2lzdGVy U2lnbmVkV29yZChpbnQgZnB1cmVnKSBjb25zdCB7Ci0rICBNT1pfQVNTRVJUKChmcHVyZWcgPj0g MCkgJiYKLSsgICAgICAgICAgICAgKGZwdXJlZyA8IFNpbXVsYXRvcjo6RlBVUmVnaXN0ZXI6OmtO dW1GUFVSZWdpc3RlcnMpKTsKLSsgIHJldHVybiAqbW96aWxsYTo6Qml0d2lzZUNhc3Q8aW50MzJf dCo+KCZGUFVyZWdpc3RlcnNfW2ZwdXJlZ10pOwotK30KLSsKLStmbG9hdCBTaW11bGF0b3I6Omdl dEZwdVJlZ2lzdGVyRmxvYXQoaW50IGZwdXJlZykgY29uc3QgewotKyAgTU9aX0FTU0VSVCgoZnB1 cmVnID49IDApICYmCi0rICAgICAgICAgICAgIChmcHVyZWcgPCBTaW11bGF0b3I6OkZQVVJlZ2lz dGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7Ci0rICAvLyBFTEZ2MiBBQkk6IHNpbmdsZS1wcmVjaXNp b24gdmFsdWVzIGFyZSBwYXNzZWQvcmV0dXJuZWQgaW4gRlBScyBhcyB0aGVpcgotKyAgLy8gZG91 YmxlLXByZWNpc2lvbiByZXByZXNlbnRhdGlvbi4gUmVhZCB0aGUgZnVsbCA4IGJ5dGVzIGFzIGRv dWJsZSwgdGhlbgotKyAgLy8gbmFycm93IHRvIGZsb2F0IOKAlCBtYXRjaGluZyB0aGUgYGZyc3Bg IHRoZSBDIGNhbGxlZSB3b3VsZCBkbywgYW5kIG1hdGNoaW5nCi0rICAvLyB3aGF0IHJlYWwgUFBD NjQgaGFyZHdhcmUgc2VlcyB3aGVuIHRoZSBGUFIgd2FzIGxvYWRlZCB2aWEgYGxmc2AuIFVzZSB0 aGUKLSsgIC8vIE5hTi1wcmVzZXJ2aW5nIGhlbHBlciBzbyBhIHNpZ25hbGluZy1OYU4gcGFyYW1l dGVyIGlzbid0IHF1aWV0ZWQuCi0rICBkb3VibGUgcHJvbW90ZWQ7Ci0rICBtZW1jcHkoJnByb21v dGVkLCAmRlBVcmVnaXN0ZXJzX1tmcHVyZWddLCBzaXplb2YocHJvbW90ZWQpKTsKLSsgIHJldHVy biBkZW1vdGVEb3VibGVQcmVzZXJ2aW5nTmFOKHByb21vdGVkKTsKLSt9Ci0rCi0rZG91YmxlIFNp bXVsYXRvcjo6Z2V0RnB1UmVnaXN0ZXJEb3VibGUoaW50IGZwdXJlZykgY29uc3QgewotKyAgTU9a X0FTU0VSVCgoZnB1cmVnID49IDApICYmCi0rICAgICAgICAgICAgIChmcHVyZWcgPCBTaW11bGF0 b3I6OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7Ci0rICByZXR1cm4gKm1vemlsbGE6 OkJpdHdpc2VDYXN0PGRvdWJsZSo+KCZGUFVyZWdpc3RlcnNfW2ZwdXJlZ10pOwotK30KLSsKLSt2 b2lkIFNpbXVsYXRvcjo6c2V0VlJCeXRlcyhpbnQgdnJlZywgY29uc3QgdWludDhfdCBieXRlc1sx Nl0pIHsKLSsgIE1PWl9BU1NFUlQoKHZyZWcgPj0gMCkgJiYgKHZyZWcgPCBrTnVtVlJSZWdpc3Rl cnMpKTsKLSsgIG1lbWNweShWUnJlZ2lzdGVyc19bdnJlZ10sIGJ5dGVzLCAxNik7Ci0rfQotKwot K3ZvaWQgU2ltdWxhdG9yOjpnZXRWUkJ5dGVzKGludCB2cmVnLCB1aW50OF90IGJ5dGVzWzE2XSkg Y29uc3QgewotKyAgTU9aX0FTU0VSVCgodnJlZyA+PSAwKSAmJiAodnJlZyA8IGtOdW1WUlJlZ2lz dGVycykpOwotKyAgbWVtY3B5KGJ5dGVzLCBWUnJlZ2lzdGVyc19bdnJlZ10sIDE2KTsKLSt9Ci0r Ci0rdm9pZCBTaW11bGF0b3I6OmdldFZTUjEyOChpbnQgdnNyLCB1aW50OF90IGJ5dGVzWzE2XSkg Y29uc3QgewotKyAgTU9aX0FTU0VSVCgodnNyID49IDApICYmICh2c3IgPCBrTnVtRlBVUmVnaXN0 ZXJzICsga051bVZSUmVnaXN0ZXJzKSk7Ci0rICBpZiAodnNyIDwga051bUZQVVJlZ2lzdGVycykg ewotKyAgICAvLyBWU1IgMC0zMTogRlBSIHZpZXcuIFRoZSBGUFIgc2NhbGFyIGxpdmVzIGluIEJF IERXMCBvZiB0aGUgVlNSLAotKyAgICAvLyB3aGljaCBvbiBQUEM2NExFIHJlZ2lzdGVyIHN0b3Jh Z2UgbWFwcyB0byBMRSBieXRlcyA4LTE1LgotKyAgICAvLyBEVzEgaXMgdW5kZWZpbmVkIHBlciBJ U0E7IHdlIG1vZGVsIGl0IGFzIHplcm8uCi0rICAgIC8vIGBsZmQgZjAsKG1lbSk7IHh4bG9yIDx2 cj4sZjAsZjA7IHN0eHZ4IDx2cj4sLi4uYCB3cml0ZXMgdGhlCi0rICAgIC8vIGRvdWJsZSdzIDgg Ynl0ZXMgdG8gdGhlIEhJR0ggaGFsZiBvZiB0aGUgMTYtYnl0ZSBzdG9yZSAoTEUKLSsgICAgLy8g Ynl0ZXMgOC0xNSkuCi0rICAgIGludDY0X3QgdmFsID0gRlBVcmVnaXN0ZXJzX1t2c3JdOwotKyAg ICBtZW1zZXQoYnl0ZXMsIDAsIDgpOwotKyAgICBtZW1jcHkoYnl0ZXMgKyA4LCAmdmFsLCA4KTsK LSsgIH0gZWxzZSB7Ci0rICAgIG1lbWNweShieXRlcywgVlJyZWdpc3RlcnNfW3ZzciAtIGtOdW1G UFVSZWdpc3RlcnNdLCAxNik7Ci0rICB9Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjpzZXRWU1Ix MjgoaW50IHZzciwgY29uc3QgdWludDhfdCBieXRlc1sxNl0pIHsKLSsgIE1PWl9BU1NFUlQoKHZz ciA+PSAwKSAmJiAodnNyIDwga051bUZQVVJlZ2lzdGVycyArIGtOdW1WUlJlZ2lzdGVycykpOwot KyAgaWYgKHZzciA8IGtOdW1GUFVSZWdpc3RlcnMpIHsKLSsgICAgLy8gRlBSIHNjYWxhciBhdCBC RSBEVzAgPSBMRSBieXRlcyA4LTE1LiBEVzEgaXMgYXJjaGl0ZWN0dXJhbGx5Ci0rICAgIC8vIGRp c2NhcmRlZCBvbiBWU1ItdG8tRlBSIHdyaXRlcy4KLSsgICAgaW50NjRfdCB2YWw7Ci0rICAgIG1l bWNweSgmdmFsLCBieXRlcyArIDgsIDgpOwotKyAgICBGUFVyZWdpc3RlcnNfW3Zzcl0gPSB2YWw7 Ci0rICB9IGVsc2UgewotKyAgICBtZW1jcHkoVlJyZWdpc3RlcnNfW3ZzciAtIGtOdW1GUFVSZWdp c3RlcnNdLCBieXRlcywgMTYpOwotKyAgfQotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6c2V0Q2Fs bFJlc3VsdERvdWJsZShkb3VibGUgcmVzdWx0KSB7Ci0rICBzZXRGcHVSZWdpc3RlckRvdWJsZShT aW11bGF0b3I6OmYxLCByZXN1bHQpOwotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6c2V0Q2FsbFJl c3VsdEZsb2F0KGZsb2F0IHJlc3VsdCkgewotKyAgc2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0 b3I6OmYxLCByZXN1bHQpOwotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6c2V0Q2FsbFJlc3VsdChp bnQ2NF90IHJlcykgeyBzZXRSZWdpc3RlcihyMywgcmVzKTsgfQotKwotKyNpZmRlZiBYUF9EQVJX SU4KLSt2b2lkIFNpbXVsYXRvcjo6c2V0Q2FsbFJlc3VsdChpbnRwdHJfdCByZXMpIHsKLSsgIHNl dFJlZ2lzdGVyKHIzLCBJNjQocmVzKSk7Ci0rfQotKyNlbmRpZgotKwotK3ZvaWQgU2ltdWxhdG9y OjpzZXRDYWxsUmVzdWx0KF9faW50MTI4IHJlcykgewotKyAgc2V0UmVnaXN0ZXIocjMsIEk2NChy ZXMpKTsKLSsgIHNldFJlZ2lzdGVyKHI0LCBJNjQocmVzID4+IDY0KSk7Ci0rfQotKwotK3ZvaWQg U2ltdWxhdG9yOjpzZXRfcGMoaW50NjRfdCB2YWx1ZSkgewotKyAgcGNfbW9kaWZpZWRfID0gdHJ1 ZTsKLSsgIHJlZ2lzdGVyc19bcGNdID0gdmFsdWU7Ci0rfQotKwotK2Jvb2wgU2ltdWxhdG9yOjpo YXNfYmFkX3BjKCkgY29uc3QgewotKyAgcmV0dXJuICgocmVnaXN0ZXJzX1twY10gPT0gYmFkX3Jh KSB8fCAocmVnaXN0ZXJzX1twY10gPT0gZW5kX3NpbV9wYykpOwotK30KLSsKLStpbnQ2NF90IFNp bXVsYXRvcjo6Z2V0X3BjKCkgY29uc3QgeyByZXR1cm4gcmVnaXN0ZXJzX1twY107IH0KLSsKLStK Uzo6UHJvZmlsaW5nRnJhbWVJdGVyYXRvcjo6UmVnaXN0ZXJTdGF0ZSBTaW11bGF0b3I6OnJlZ2lz dGVyU3RhdGUoKSB7Ci0rICB3YXNtOjpSZWdpc3RlclN0YXRlIHN0YXRlOwotKyAgc3RhdGUucGMg PSAodm9pZCopZ2V0X3BjKCk7Ci0rICBzdGF0ZS5mcCA9ICh2b2lkKilnZXRSZWdpc3RlcihmcCk7 Ci0rICBzdGF0ZS5zcCA9ICh2b2lkKilnZXRSZWdpc3RlcihzcCk7Ci0rICBzdGF0ZS5sciA9ICh2 b2lkKilnZXRMUigpOwotKyAgcmV0dXJuIHN0YXRlOwotK30KLSsKLSsvLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotKy8vIE1lbW9yeSBhY2Nlc3MgaGVscGVycy4KLSsKLSt1aW50OF90IFNpbXVsYXRv cjo6cmVhZEJVKHVpbnQ2NF90IGFkZHIpIHsKLSsgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRk ciwgMSkpIHsKLSsgICAgcmV0dXJuIDB4ZmY7Ci0rICB9Ci0rICB1aW50OF90KiBwdHIgPSByZWlu dGVycHJldF9jYXN0PHVpbnQ4X3QqPihhZGRyKTsKLSsgIHJldHVybiAqcHRyOwotK30KLSsKLStp bnQ4X3QgU2ltdWxhdG9yOjpyZWFkQih1aW50NjRfdCBhZGRyKSB7Ci0rICBpZiAoaGFuZGxlV2Fz bVNlZ0ZhdWx0KGFkZHIsIDEpKSB7Ci0rICAgIHJldHVybiAtMTsKLSsgIH0KLSsgIGludDhfdCog cHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihhZGRyKTsKLSsgIHJldHVybiAqcHRyOwot K30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6d3JpdGVCKHVpbnQ2NF90IGFkZHIsIHVpbnQ4X3QgdmFs dWUpIHsKLSsgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMSkpIHsKLSsgICAgcmV0dXJu OwotKyAgfQotKyAgdWludDhfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYWRk cik7Ci0rICAqcHRyID0gdmFsdWU7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjp3cml0ZUIodWlu dDY0X3QgYWRkciwgaW50OF90IHZhbHVlKSB7Ci0rICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFk ZHIsIDEpKSB7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIGludDhfdCogcHRyID0gcmVpbnRlcnBy ZXRfY2FzdDxpbnQ4X3QqPihhZGRyKTsKLSsgICpwdHIgPSB2YWx1ZTsKLSt9Ci0rCi0rdWludDE2 X3QgU2ltdWxhdG9yOjpyZWFkSFUodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3Ry KSB7Ci0rICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDIpKSB7Ci0rICAgIHJldHVybiAw eGZmZmY7Ci0rICB9Ci0rICB1aW50MTZfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZf dCo+KGFkZHIpOwotKyAgcmV0dXJuICpwdHI7Ci0rfQotKwotK2ludDE2X3QgU2ltdWxhdG9yOjpy ZWFkSCh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIGlmIChoYW5k bGVXYXNtU2VnRmF1bHQoYWRkciwgMikpIHsKLSsgICAgcmV0dXJuIC0xOwotKyAgfQotKyAgaW50 MTZfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQxNl90Kj4oYWRkcik7Ci0rICByZXR1cm4g KnB0cjsKLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6OndyaXRlSCh1aW50NjRfdCBhZGRyLCB1aW50 MTZfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoaGFuZGxlV2FzbVNl Z0ZhdWx0KGFkZHIsIDIpKSB7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsgIHVpbnQxNl90KiBwdHIg PSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oYWRkcik7Ci0rICBMTEJpdF8gPSBmYWxzZTsK LSsgICpwdHIgPSB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6OndyaXRlSCh1aW50NjRf dCBhZGRyLCBpbnQxNl90IHZhbHVlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIGlmICho YW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMikpIHsKLSsgICAgcmV0dXJuOwotKyAgfQotKyAgaW50 MTZfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQxNl90Kj4oYWRkcik7Ci0rICBMTEJpdF8g PSBmYWxzZTsKLSsgICpwdHIgPSB2YWx1ZTsKLSt9Ci0rCi0rdWludDMyX3QgU2ltdWxhdG9yOjpy ZWFkV1UodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoaGFu ZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDQpKSB7Ci0rICAgIHJldHVybiAtMTsKLSsgIH0KLSsgIHVp bnQzMl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYWRkcik7Ci0rICByZXR1 cm4gKnB0cjsKLSt9Ci0rCi0raW50MzJfdCBTaW11bGF0b3I6OnJlYWRXKHVpbnQ2NF90IGFkZHIs IFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRy LCA0KSkgewotKyAgICByZXR1cm4gLTE7Ci0rICB9Ci0rICBpbnQzMl90KiBwdHIgPSByZWludGVy cHJldF9jYXN0PGludDMyX3QqPihhZGRyKTsKLSsgIHJldHVybiAqcHRyOwotK30KLSsKLSt2b2lk IFNpbXVsYXRvcjo6d3JpdGVXKHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IHZhbHVlLCBTaW1JbnN0 cnVjdGlvbiogaW5zdHIpIHsKLSsgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgNCkpIHsK LSsgICAgcmV0dXJuOwotKyAgfQotKyAgdWludDMyX3QqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8 dWludDMyX3QqPihhZGRyKTsKLSsgIExMQml0XyA9IGZhbHNlOwotKyAgKnB0ciA9IHZhbHVlOwot K30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6d3JpdGVXKHVpbnQ2NF90IGFkZHIsIGludDMyX3QgdmFs dWUsIFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChh ZGRyLCA0KSkgewotKyAgICByZXR1cm47Ci0rICB9Ci0rICBpbnQzMl90KiBwdHIgPSByZWludGVy cHJldF9jYXN0PGludDMyX3QqPihhZGRyKTsKLSsgIExMQml0XyA9IGZhbHNlOwotKyAgKnB0ciA9 IHZhbHVlOwotK30KLSsKLStpbnQ2NF90IFNpbXVsYXRvcjo6cmVhZERXKHVpbnQ2NF90IGFkZHIs IFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRy LCA4KSkgewotKyAgICByZXR1cm4gLTE7Ci0rICB9Ci0rICBpbnQ2NF90KiBwdHIgPSByZWludGVy cHJldF9jYXN0PGludDY0X3QqPihhZGRyKTsKLSsgIHJldHVybiAqcHRyOwotK30KLSsKLSt2b2lk IFNpbXVsYXRvcjo6d3JpdGVEVyh1aW50NjRfdCBhZGRyLCBpbnQ2NF90IHZhbHVlLCBTaW1JbnN0 cnVjdGlvbiogaW5zdHIpIHsKLSsgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgOCkpIHsK LSsgICAgcmV0dXJuOwotKyAgfQotKyAgaW50NjRfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxp bnQ2NF90Kj4oYWRkcik7Ci0rICBMTEJpdF8gPSBmYWxzZTsKLSsgICpwdHIgPSB2YWx1ZTsKLSt9 Ci0rCi0rZG91YmxlIFNpbXVsYXRvcjo6cmVhZEQodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rp b24qIGluc3RyKSB7Ci0rICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDgpKSB7Ci0rICAg IHJldHVybiBOQU47Ci0rICB9Ci0rICBkb3VibGUqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91 YmxlKj4oYWRkcik7Ci0rICByZXR1cm4gKnB0cjsKLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6Ondy aXRlRCh1aW50NjRfdCBhZGRyLCBkb3VibGUgdmFsdWUsIFNpbUluc3RydWN0aW9uKiBpbnN0cikg ewotKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCA4KSkgewotKyAgICByZXR1cm47Ci0r ICB9Ci0rICBkb3VibGUqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oYWRkcik7Ci0r ICBMTEJpdF8gPSBmYWxzZTsKLSsgICpwdHIgPSB2YWx1ZTsKLSt9Ci0rCi0rLy8gQnl0ZS13aWRl IGxvYWQtcmVzZXJ2ZSAvIHN0b3JlLWNvbmRpdGlvbmFsIChsYmFyeCAvIHN0YmN4LikuCi0rLy8g Qnl0ZSBhY2Nlc3NlcyBoYXZlIG5vIGFsaWdubWVudCByZXF1aXJlbWVudC4KLSt1aW50OF90IFNp bXVsYXRvcjo6bG9hZExpbmtlZEIodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3Ry KSB7Ci0rICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDEpKSB7Ci0rICAgIHJldHVybiAw OwotKyAgfQotKyAgdm9sYXRpbGUgdWludDhfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2xh dGlsZSB1aW50OF90Kj4oYWRkcik7Ci0rICB1aW50OF90IHZhbHVlID0gKnB0cjsKLSsgIGxhc3RM TFZhbHVlXyA9IHZhbHVlOwotKyAgTExBZGRyXyA9IGFkZHI7Ci0rICBMTEJpdF8gPSB0cnVlOwot KyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStpbnQgU2ltdWxhdG9yOjpzdG9yZUNvbmRpdGlvbmFs Qih1aW50NjRfdCBhZGRyLCB1aW50OF90IHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgaWYgKGFkZHIgIT0gTExBZGRy XykgewotKyAgICBwcmludGYoInN0YmN4LiB0byBiYWQgYWRkcmVzczogMHglMDE2IiBQUkl4NjQg IiwgcGM9MHglMDE2IiBQUkl4UFRSCi0rICAgICAgICAgICAiLCBleHBlY3RlZDogMHglMDE2IiBQ Ukl4UFRSICJcbiIsCi0rICAgICAgICAgICBhZGRyLCByZWludGVycHJldF9jYXN0PGludHB0cl90 PihpbnN0ciksIExMQWRkcl8pOwotKyAgICBNT1pfQ1JBU0goKTsKLSsgIH0KLSsgIFNoYXJlZE1l bTx1aW50OF90Kj4gcHRyID0KLSsgICAgICBTaGFyZWRNZW08dWludDhfdCo+OjpzaGFyZWQocmVp bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYWRkcikpOwotKyAgaWYgKCFMTEJpdF8pIHsKLSsgICAg cmV0dXJuIDA7Ci0rICB9Ci0rICBMTEJpdF8gPSBmYWxzZTsKLSsgIExMQWRkcl8gPSAwOwotKyAg dWludDhfdCBleHBlY3RlZCA9IHVpbnQ4X3QobGFzdExMVmFsdWVfKTsKLSsgIHVpbnQ4X3Qgb2xk ID0KLSsgICAgICBBdG9taWNPcGVyYXRpb25zOjpjb21wYXJlRXhjaGFuZ2VTZXFDc3QocHRyLCBl eHBlY3RlZCwgdmFsdWUpOwotKyAgcmV0dXJuIChvbGQgPT0gZXhwZWN0ZWQpID8gMSA6IDA7Ci0r fQotKwotKy8vIEhhbGZ3b3JkLXdpZGUgbG9hZC1yZXNlcnZlIC8gc3RvcmUtY29uZGl0aW9uYWwg KGxoYXJ4IC8gc3RoY3guKS4KLSsvLyAyLWJ5dGUgYWxpZ25lZCBwZXIgSVNBLgotK3VpbnQxNl90 IFNpbXVsYXRvcjo6bG9hZExpbmtlZEgodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGlu c3RyKSB7Ci0rICBpZiAoKGFkZHIgJiAxKSA9PSAwKSB7Ci0rICAgIGlmIChoYW5kbGVXYXNtU2Vn RmF1bHQoYWRkciwgMikpIHsKLSsgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICB2b2xhdGls ZSB1aW50MTZfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSB1aW50MTZfdCo+KGFk ZHIpOwotKyAgICB1aW50MTZfdCB2YWx1ZSA9ICpwdHI7Ci0rICAgIGxhc3RMTFZhbHVlXyA9IHZh bHVlOwotKyAgICBMTEFkZHJfID0gYWRkcjsKLSsgICAgTExCaXRfID0gdHJ1ZTsKLSsgICAgcmV0 dXJuIHZhbHVlOwotKyAgfQotKyAgcHJpbnRmKCJVbmFsaWduZWQgbGhhcnggYXQgMHglMDE2IiBQ Ukl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSICJcbiIsIGFkZHIsCi0rICAgICAgICAgcmVpbnRl cnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpKTsKLSsgIE1PWl9DUkFTSCgpOwotKyAgcmV0dXJu IDA7Ci0rfQotKwotK2ludCBTaW11bGF0b3I6OnN0b3JlQ29uZGl0aW9uYWxIKHVpbnQ2NF90IGFk ZHIsIHVpbnQxNl90IHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNp bUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgaWYgKGFkZHIgIT0gTExBZGRyXykgewotKyAgICBw cmludGYoInN0aGN4LiB0byBiYWQgYWRkcmVzczogMHglMDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2 IiBQUkl4UFRSCi0rICAgICAgICAgICAiLCBleHBlY3RlZDogMHglMDE2IiBQUkl4UFRSICJcbiIs Ci0rICAgICAgICAgICBhZGRyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0ciksIExM QWRkcl8pOwotKyAgICBNT1pfQ1JBU0goKTsKLSsgIH0KLSsgIGlmICgoYWRkciAmIDEpID09IDAp IHsKLSsgICAgU2hhcmVkTWVtPHVpbnQxNl90Kj4gcHRyID0KLSsgICAgICAgIFNoYXJlZE1lbTx1 aW50MTZfdCo+OjpzaGFyZWQocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGFkZHIpKTsKLSsg ICAgaWYgKCFMTEJpdF8pIHsKLSsgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBMTEJpdF8g PSBmYWxzZTsKLSsgICAgTExBZGRyXyA9IDA7Ci0rICAgIHVpbnQxNl90IGV4cGVjdGVkID0gdWlu dDE2X3QobGFzdExMVmFsdWVfKTsKLSsgICAgdWludDE2X3Qgb2xkID0KLSsgICAgICAgIEF0b21p Y09wZXJhdGlvbnM6OmNvbXBhcmVFeGNoYW5nZVNlcUNzdChwdHIsIGV4cGVjdGVkLCB2YWx1ZSk7 Ci0rICAgIHJldHVybiAob2xkID09IGV4cGVjdGVkKSA/IDEgOiAwOwotKyAgfQotKyAgcHJpbnRm KCJVbmFsaWduZWQgc3RoY3guIGF0IDB4JTAxNiIgUFJJeDY0ICIsIHBjPTB4JTAxNiIgUFJJeFBU UiAiXG4iLCBhZGRyLAotKyAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3Ry KSk7Ci0rICBNT1pfQ1JBU0goKTsKLSsgIHJldHVybiAwOwotK30KLSsKLStpbnQzMl90IFNpbXVs YXRvcjo6bG9hZExpbmtlZFcodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7 Ci0rICBpZiAoKGFkZHIgJiAzKSA9PSAwKSB7Ci0rICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQo YWRkciwgNCkpIHsKLSsgICAgICByZXR1cm4gLTE7Ci0rICAgIH0KLSsKLSsgICAgdm9sYXRpbGUg aW50MzJfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSBpbnQzMl90Kj4oYWRkcik7 Ci0rICAgIGludDMyX3QgdmFsdWUgPSAqcHRyOwotKyAgICBsYXN0TExWYWx1ZV8gPSB2YWx1ZTsK LSsgICAgTExBZGRyXyA9IGFkZHI7Ci0rICAgIExMQml0XyA9IHRydWU7Ci0rICAgIHJldHVybiB2 YWx1ZTsKLSsgIH0KLSsgIHByaW50ZigiVW5hbGlnbmVkIGx3YXJ4IGF0IDB4JTAxNiIgUFJJeDY0 ICIsIHBjPTB4JTAxNiIgUFJJeFBUUiAiXG4iLCBhZGRyLAotKyAgICAgICAgIHJlaW50ZXJwcmV0 X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSk7Ci0rICBNT1pfQ1JBU0goKTsKLSsgIHJldHVybiAwOwot K30KLSsKLStpbnQgU2ltdWxhdG9yOjpzdG9yZUNvbmRpdGlvbmFsVyh1aW50NjRfdCBhZGRyLCBp bnQzMl90IHZhbHVlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbUluc3Ry dWN0aW9uKiBpbnN0cikgewotKyAgaWYgKGFkZHIgIT0gTExBZGRyXykgewotKyAgICBwcmludGYo InN0d2N4LiB0byBiYWQgYWRkcmVzczogMHglMDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQUkl4 UFRSCi0rICAgICAgICAgICAiLCBleHBlY3RlZDogMHglMDE2IiBQUkl4UFRSICJcbiIsCi0rICAg ICAgICAgICBhZGRyLCByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0ciksIExMQWRkcl8p OwotKyAgICBNT1pfQ1JBU0goKTsKLSsgIH0KLSsKLSsgIGlmICgoYWRkciAmIDMpID09IDApIHsK LSsgICAgU2hhcmVkTWVtPGludDMyX3QqPiBwdHIgPQotKyAgICAgICAgU2hhcmVkTWVtPGludDMy X3QqPjo6c2hhcmVkKHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KGFkZHIpKTsKLSsKLSsgICAg aWYgKCFMTEJpdF8pIHsKLSsgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAgICBMTEJpdF8g PSBmYWxzZTsKLSsgICAgTExBZGRyXyA9IDA7Ci0rICAgIGludDMyX3QgZXhwZWN0ZWQgPSBpbnQz Ml90KGxhc3RMTFZhbHVlXyk7Ci0rICAgIGludDMyX3Qgb2xkID0KLSsgICAgICAgIEF0b21pY09w ZXJhdGlvbnM6OmNvbXBhcmVFeGNoYW5nZVNlcUNzdChwdHIsIGV4cGVjdGVkLCB2YWx1ZSk7Ci0r ICAgIHJldHVybiAob2xkID09IGV4cGVjdGVkKSA/IDEgOiAwOwotKyAgfQotKyAgcHJpbnRmKCJV bmFsaWduZWQgc3R3Y3guIGF0IDB4JTAxNiIgUFJJeDY0ICIsIHBjPTB4JTAxNiIgUFJJeFBUUiAi XG4iLCBhZGRyLAotKyAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSk7 Ci0rICBNT1pfQ1JBU0goKTsKLSsgIHJldHVybiAwOwotK30KLSsKLStpbnQ2NF90IFNpbXVsYXRv cjo6bG9hZExpbmtlZEQodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0r ICBpZiAoKGFkZHIgJiBrUG9pbnRlckFsaWdubWVudE1hc2spID09IDApIHsKLSsgICAgaWYgKGhh bmRsZVdhc21TZWdGYXVsdChhZGRyLCA4KSkgewotKyAgICAgIHJldHVybiAtMTsKLSsgICAgfQot KwotKyAgICB2b2xhdGlsZSBpbnQ2NF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHZvbGF0aWxl IGludDY0X3QqPihhZGRyKTsKLSsgICAgaW50NjRfdCB2YWx1ZSA9ICpwdHI7Ci0rICAgIGxhc3RM TFZhbHVlXyA9IHZhbHVlOwotKyAgICBMTEFkZHJfID0gYWRkcjsKLSsgICAgTExCaXRfID0gdHJ1 ZTsKLSsgICAgcmV0dXJuIHZhbHVlOwotKyAgfQotKyAgcHJpbnRmKCJVbmFsaWduZWQgbGRhcngg YXQgMHglMDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSICJcbiIsIGFkZHIsCi0rICAg ICAgICAgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpKTsKLSsgIE1PWl9DUkFTSCgp OwotKyAgcmV0dXJuIDA7Ci0rfQotKwotK2ludCBTaW11bGF0b3I6OnN0b3JlQ29uZGl0aW9uYWxE KHVpbnQ2NF90IGFkZHIsIGludDY0X3QgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoYWRkciAhPSBMTEFkZHJf KSB7Ci0rICAgIHByaW50Zigic3RkY3guIHRvIGJhZCBhZGRyZXNzOiAweCUwMTYiIFBSSXg2NCAi LCBwYz0weCUwMTYiIFBSSXhQVFIKLSsgICAgICAgICAgICIsIGV4cGVjdGVkOiAweCUwMTYiIFBS SXhQVFIgIlxuIiwKLSsgICAgICAgICAgIGFkZHIsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+ KGluc3RyKSwgTExBZGRyXyk7Ci0rICAgIE1PWl9DUkFTSCgpOwotKyAgfQotKwotKyAgaWYgKChh ZGRyICYga1BvaW50ZXJBbGlnbm1lbnRNYXNrKSA9PSAwKSB7Ci0rICAgIFNoYXJlZE1lbTxpbnQ2 NF90Kj4gcHRyID0KLSsgICAgICAgIFNoYXJlZE1lbTxpbnQ2NF90Kj46OnNoYXJlZChyZWludGVy cHJldF9jYXN0PGludDY0X3QqPihhZGRyKSk7Ci0rCi0rICAgIGlmICghTExCaXRfKSB7Ci0rICAg ICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgTExCaXRfID0gZmFsc2U7Ci0rICAgIExMQWRk cl8gPSAwOwotKyAgICBpbnQ2NF90IGV4cGVjdGVkID0gbGFzdExMVmFsdWVfOwotKyAgICBpbnQ2 NF90IG9sZCA9Ci0rICAgICAgICBBdG9taWNPcGVyYXRpb25zOjpjb21wYXJlRXhjaGFuZ2VTZXFD c3QocHRyLCBleHBlY3RlZCwgdmFsdWUpOwotKyAgICByZXR1cm4gKG9sZCA9PSBleHBlY3RlZCkg PyAxIDogMDsKLSsgIH0KLSsgIHByaW50ZigiVW5hbGlnbmVkIHN0ZGN4LiBhdCAweCUwMTYiIFBS SXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQVFIgIlxuIiwgYWRkciwKLSsgICAgICAgICByZWludGVy cHJldF9jYXN0PGludHB0cl90PihpbnN0cikpOwotKyAgTU9aX0NSQVNIKCk7Ci0rICByZXR1cm4g MDsKLSt9Ci0rCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBTdGFjayBsaW1pdCAvIHJl Y3Vyc2lvbiBoZWxwZXJzLgotKwotK3VpbnRwdHJfdCBTaW11bGF0b3I6OnN0YWNrTGltaXQoKSBj b25zdCB7IHJldHVybiBzdGFja0xpbWl0XzsgfQotKwotK3VpbnRwdHJfdCogU2ltdWxhdG9yOjph ZGRyZXNzT2ZTdGFja0xpbWl0KCkgeyByZXR1cm4gJnN0YWNrTGltaXRfOyB9Ci0rCi0rYm9vbCBT aW11bGF0b3I6Om92ZXJSZWN1cnNlZCh1aW50cHRyX3QgbmV3c3ApIGNvbnN0IHsKLSsgIGlmIChu ZXdzcCA9PSAwKSB7Ci0rICAgIG5ld3NwID0gZ2V0UmVnaXN0ZXIoc3ApOwotKyAgfQotKyAgcmV0 dXJuIG5ld3NwIDw9IHN0YWNrTGltaXQoKTsKLSt9Ci0rCi0rYm9vbCBTaW11bGF0b3I6Om92ZXJS ZWN1cnNlZFdpdGhFeHRyYSh1aW50MzJfdCBleHRyYSkgY29uc3QgewotKyAgdWludHB0cl90IG5l d3NwID0gZ2V0UmVnaXN0ZXIoc3ApIC0gZXh0cmE7Ci0rICByZXR1cm4gbmV3c3AgPD0gc3RhY2tM aW1pdCgpOwotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6Zm9ybWF0KFNpbUluc3RydWN0aW9uKiBp bnN0ciwgY29uc3QgY2hhciogZm9ybWF0KSB7Ci0rICBwcmludGYoIlNpbXVsYXRvciBmb3VuZCB1 bnN1cHBvcnRlZCBpbnN0cnVjdGlvbjpcbiAweCUwMTYiIFBSSXhQVFIKLSsgICAgICAgICAiOiAl MDh4ICVzXG4iLAotKyAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSwg aW5zdHItPmluc3RydWN0aW9uQml0cygpLCBmb3JtYXQpOwotKyAgTU9aX0NSQVNIKCk7Ci0rfQot KwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gc29mdHdhcmVJbnRlcnJ1cHQgLSBoYW5k bGUga0NhbGxSZWRpckluc3RyIChQUENfc3RvcCkgYW5kIFBQQ190cmFwLgotKwotK0FCSV9GVU5D VElPTl9UWVBFX1NJTV9QUk9UT1RZUEVTCi0rCi0rdm9pZCBTaW11bGF0b3I6OnNvZnR3YXJlSW50 ZXJydXB0KFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAgdWludDMyX3QgaW5zdHJCaXRzID0g aW5zdHItPmluc3RydWN0aW9uQml0cygpOwotKwotKyAgaWYgKGluc3RyQml0cyA9PSBrQ2FsbFJl ZGlySW5zdHIpIHsKLSsgICAgUmVkaXJlY3Rpb24qIHJlZGlyZWN0aW9uID0gUmVkaXJlY3Rpb246 OkZyb21Td2lJbnN0cnVjdGlvbihpbnN0cik7Ci0rICAgIHVpbnRwdHJfdCBuYXRpdmVGbiA9Ci0r ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmVkaXJlY3Rpb24tPm5hdGl2ZUZ1 bmN0aW9uKCkpOwotKwotKyAgICAvLyBHZXQgdGhlIFNQIGZvciByZWFkaW5nIHN0YWNrIGFyZ3Vt ZW50cy4KLSsgICAgaW50NjRfdCogc3BfID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Kj4oZ2V0 UmVnaXN0ZXIoc3ApKTsKLSsgICAgLy8gU2tpcCBwYXN0IHRoZSBQUEM2NCBFTEZ2MiBsaW5rIGFy ZWEgKDQgZG91Ymxld29yZHMgPSAzMiBieXRlcykuCi0rICAgIHNwXyA9IHJlaW50ZXJwcmV0X2Nh c3Q8aW50NjRfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzcF8pICsgMzIpOwotKwot KyAgICAvLyBQUEM2NCBFTEZ2MjogaW50ZWdlciBhcmdzIGluIHIzLXIxMCwgRlAgYXJncyBpbiBm MS1mMTMuCi0rICAgIGludDY0X3QgYTBfID0gZ2V0UmVnaXN0ZXIocjMpOwotKyAgICBpbnQ2NF90 IGExXyA9IGdldFJlZ2lzdGVyKHI0KTsKLSsgICAgaW50NjRfdCBhMl8gPSBnZXRSZWdpc3Rlcihy NSk7Ci0rICAgIGludDY0X3QgYTNfID0gZ2V0UmVnaXN0ZXIocjYpOwotKyAgICBpbnQ2NF90IGE0 XyA9IGdldFJlZ2lzdGVyKHI3KTsKLSsgICAgaW50NjRfdCBhNV8gPSBnZXRSZWdpc3RlcihyOCk7 Ci0rICAgIGludDY0X3QgYTZfID0gZ2V0UmVnaXN0ZXIocjkpOwotKyAgICBpbnQ2NF90IGE3XyA9 IGdldFJlZ2lzdGVyKHIxMCk7Ci0rICAgIC8vIFBQQzY0IEVMRnYyOiBGUCBhcmdzIGluIGYxLWYx MywgbWFwcGVkIHRvIGYwX3MuLmYxMl9zIGFuZCBmMF9kLi5mMTJfZC4KLSsgICAgZmxvYXQgZjBf cyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmMSk7Ci0rICAgIGZsb2F0IGYxX3Mg PSBnZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6ZjIpOwotKyAgICBmbG9hdCBmMl9zID0g Z2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYzKTsKLSsgICAgZmxvYXQgZjNfcyA9IGdl dEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmNCk7Ci0rICAgIGZsb2F0IGY0X3MgPSBnZXRG cHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6ZjUpOwotKyAgICBmbG9hdCBmNV9zID0gZ2V0RnB1 UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmY2KTsKLSsgICAgZmxvYXQgZjZfcyA9IGdldEZwdVJl Z2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmNyk7Ci0rICAgIGZsb2F0IGY3X3MgPSBnZXRGcHVSZWdp c3RlckZsb2F0KFNpbXVsYXRvcjo6ZjgpOwotKyAgICBmbG9hdCBmOF9zID0gZ2V0RnB1UmVnaXN0 ZXJGbG9hdChTaW11bGF0b3I6OmY5KTsKLSsgICAgZmxvYXQgZjlfcyA9IGdldEZwdVJlZ2lzdGVy RmxvYXQoU2ltdWxhdG9yOjpmMTApOwotKyAgICBmbG9hdCBmMTBfcyA9IGdldEZwdVJlZ2lzdGVy RmxvYXQoU2ltdWxhdG9yOjpmMTEpOwotKyAgICBmbG9hdCBmMTFfcyA9IGdldEZwdVJlZ2lzdGVy RmxvYXQoU2ltdWxhdG9yOjpmMTIpOwotKyAgICBmbG9hdCBmMTJfcyA9IGdldEZwdVJlZ2lzdGVy RmxvYXQoU2ltdWxhdG9yOjpmMTMpOwotKyAgICBkb3VibGUgZjBfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjEpOwotKyAgICBkb3VibGUgZjFfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjIpOwotKyAgICBkb3VibGUgZjJfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjMpOwotKyAgICBkb3VibGUgZjNfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjQpOwotKyAgICBkb3VibGUgZjRfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjUpOwotKyAgICBkb3VibGUgZjVfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjYpOwotKyAgICBkb3VibGUgZjZfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjcpOwotKyAgICBkb3VibGUgZjdfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjgpOwotKyAgICBkb3VibGUgZjhfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjkpOwotKyAgICBkb3VibGUgZjlfZCA9IGdldEZwdVJlZ2lzdGVy RG91YmxlKFNpbXVsYXRvcjo6ZjEwKTsKLSsgICAgZG91YmxlIGYxMF9kID0gZ2V0RnB1UmVnaXN0 ZXJEb3VibGUoU2ltdWxhdG9yOjpmMTEpOwotKyAgICBkb3VibGUgZjExX2QgPSBnZXRGcHVSZWdp c3RlckRvdWJsZShTaW11bGF0b3I6OmYxMik7Ci0rICAgIGRvdWJsZSBmMTJfZCA9IGdldEZwdVJl Z2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjEzKTsKLSsKLSsgICAgLy8gU3VwcHJlc3MgdW51c2Vk LXZhcmlhYmxlIHdhcm5pbmdzIGZvciBoaWdoZXIgRlAgYXJnIHJlZ2lzdGVycy4KLSsgICAgLy8g VGhleSBleGlzdCBmb3IgQUJJIGNvbXBsZXRlbmVzcyBidXQgZmV3IGZ1bmN0aW9uIHR5cGVzIHVz ZSA+NSBGUCBhcmdzLgotKyAgICAodm9pZClmNF9zOyAodm9pZClmNV9zOyAodm9pZClmNl9zOyAo dm9pZClmN19zOyAodm9pZClmOF9zOyAodm9pZClmOV9zOwotKyAgICAodm9pZClmMTBfczsgKHZv aWQpZjExX3M7ICh2b2lkKWYxMl9zOwotKyAgICAodm9pZClmNF9kOyAodm9pZClmNV9kOyAodm9p ZClmNl9kOyAodm9pZClmN19kOyAodm9pZClmOF9kOyAodm9pZClmOV9kOwotKyAgICAodm9pZClm MTBfZDsgKHZvaWQpZjExX2Q7ICh2b2lkKWYxMl9kOwotKwotKyAgICBpbnQ2NF90IHNhdmVkX2xy ID0gZ2V0TFIoKTsKLSsKLSsgICAgYm9vbCBzdGFja19hbGlnbmVkID0gKGdldFJlZ2lzdGVyKHNw KSAmIChBQklTdGFja0FsaWdubWVudCAtIDEpKSA9PSAwOwotKyAgICBpZiAoIXN0YWNrX2FsaWdu ZWQpIHsKLSsgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJ1bnRpbWUgY2FsbCB3aXRoIHVuYWxpZ25l ZCBzdGFjayFcbiIpOwotKyAgICAgIE1PWl9DUkFTSCgpOwotKyAgICB9Ci0rCi0rICAgIGlmIChz aW5nbGVfc3RlcHBpbmdfKSB7Ci0rICAgICAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfKHNpbmdsZV9z dGVwX2NhbGxiYWNrX2FyZ18sIHRoaXMsIG51bGxwdHIpOwotKyAgICB9Ci0rCi0rICAgIHN3aXRj aCAocmVkaXJlY3Rpb24tPnR5cGUoKSkgewotKyAgICAgIEFCSV9GVU5DVElPTl9UWVBFX1BQQzY0 X1NJTV9ESVNQQVRDSAotKwotKyAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICBNT1pfQ1JBU0goIlVu a25vd24gZnVuY3Rpb24gdHlwZS4iKTsKLSsgICAgfQotKwotKyAgICBpZiAoc2luZ2xlX3N0ZXBw aW5nXykgewotKyAgICAgIHNpbmdsZV9zdGVwX2NhbGxiYWNrXyhzaW5nbGVfc3RlcF9jYWxsYmFj a19hcmdfLCB0aGlzLCBudWxscHRyKTsKLSsgICAgfQotKwotKyAgICBzZXRMUihzYXZlZF9scik7 Ci0rICAgIHNldF9wYyhnZXRMUigpKTsKLSsgIH0gZWxzZSBpZiAoaW5zdHJCaXRzID09IDB4N0ZF MDAwMDgpIHsKLSsgICAgLy8gUFBDX3RyYXA6IHVzZWQgZm9yIHdhc20gdHJhcHMuCi0rICAgIHVp bnQ4X3QqIG5ld1BDOwotKyAgICBpZiAod2FzbTo6SGFuZGxlSWxsZWdhbEluc3RydWN0aW9uKHJl Z2lzdGVyU3RhdGUoKSwgJm5ld1BDKSkgewotKyAgICAgIHNldF9wYyhpbnQ2NF90KG5ld1BDKSk7 Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCB0cmFw IGluc3RydWN0aW9uIik7Ci0rICB9IGVsc2UgewotKyAgICAvLyBPdGhlciB0cmFwLWxpa2UgaW5z dHJ1Y3Rpb25zOiBlbnRlciBkZWJ1Z2dlci4KLSsgICAgcHBjNjREZWJ1Z2dlciBkYmcodGhpcyk7 Ci0rICAgIGRiZy5kZWJ1ZygpOwotKyAgfQotK30KLSsKLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotKy8vIFN0b3AvYnJlYWtwb2ludCBoZWxwZXJzLgotKwotK2Jvb2wgU2ltdWxhdG9yOjppc1dh dGNocG9pbnQodWludDMyX3QgY29kZSkgewotKyAgcmV0dXJuIChjb2RlIDw9IGtNYXhXYXRjaHBv aW50Q29kZSk7Ci0rfQotKwotK3ZvaWQgU2ltdWxhdG9yOjpwcmludFdhdGNocG9pbnQodWludDMy X3QgY29kZSkgewotKyAgcHBjNjREZWJ1Z2dlciBkYmcodGhpcyk7Ci0rICArK2JyZWFrX2NvdW50 XzsKLSsgIHByaW50ZigiXG4tLS0tIGJyZWFrICVkIG1hcmtlcjogJTIwIiBQUklpNjQgIiAgKGlu c3RyIGNvdW50OiAlMjAiIFBSSWk2NAotKyAgICAgICAgICIpIC0tLS1cbiIsCi0rICAgICAgICAg Y29kZSwgYnJlYWtfY291bnRfLCBpY291bnRfKTsKLSsgIGRiZy5wcmludEFsbFJlZ3MoKTsKLSt9 Ci0rCi0rdm9pZCBTaW11bGF0b3I6OmhhbmRsZVN0b3AodWludDMyX3QgY29kZSwgU2ltSW5zdHJ1 Y3Rpb24qIGluc3RyKSB7Ci0rICBpZiAoaXNFbmFibGVkU3RvcChjb2RlKSkgewotKyAgICBwcGM2 NERlYnVnZ2VyIGRiZyh0aGlzKTsKLSsgICAgZGJnLnN0b3AoaW5zdHIpOwotKyAgfSBlbHNlIHsK LSsgICAgc2V0X3BjKGdldF9wYygpICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAg fQotK30KLSsKLStib29sIFNpbXVsYXRvcjo6aXNTdG9wSW5zdHJ1Y3Rpb24oU2ltSW5zdHJ1Y3Rp b24qIGluc3RyKSB7Ci0rICByZXR1cm4gaW5zdHItPmluc3RydWN0aW9uQml0cygpID09IGtDYWxs UmVkaXJJbnN0cjsKLSt9Ci0rCi0rYm9vbCBTaW11bGF0b3I6OmlzRW5hYmxlZFN0b3AodWludDMy X3QgY29kZSkgewotKyAgTU9aX0FTU0VSVChjb2RlIDw9IGtNYXhTdG9wQ29kZSk7Ci0rICBNT1pf QVNTRVJUKGNvZGUgPiBrTWF4V2F0Y2hwb2ludENvZGUpOwotKyAgcmV0dXJuICEod2F0Y2hlZFN0 b3BzX1tjb2RlXS5jb3VudF8gJiBrU3RvcERpc2FibGVkQml0KTsKLSt9Ci0rCi0rdm9pZCBTaW11 bGF0b3I6OmVuYWJsZVN0b3AodWludDMyX3QgY29kZSkgewotKyAgaWYgKCFpc0VuYWJsZWRTdG9w KGNvZGUpKSB7Ci0rICAgIHdhdGNoZWRTdG9wc19bY29kZV0uY291bnRfICY9IH5rU3RvcERpc2Fi bGVkQml0OwotKyAgfQotK30KLSsKLSt2b2lkIFNpbXVsYXRvcjo6ZGlzYWJsZVN0b3AodWludDMy X3QgY29kZSkgewotKyAgaWYgKGlzRW5hYmxlZFN0b3AoY29kZSkpIHsKLSsgICAgd2F0Y2hlZFN0 b3BzX1tjb2RlXS5jb3VudF8gfD0ga1N0b3BEaXNhYmxlZEJpdDsKLSsgIH0KLSt9Ci0rCi0rdm9p ZCBTaW11bGF0b3I6OmluY3JlYXNlU3RvcENvdW50ZXIodWludDMyX3QgY29kZSkgewotKyAgTU9a X0FTU0VSVChjb2RlIDw9IGtNYXhTdG9wQ29kZSk7Ci0rICBpZiAoKHdhdGNoZWRTdG9wc19bY29k ZV0uY291bnRfICYgfigxIDw8IDMxKSkgPT0gMHg3ZmZmZmZmZikgewotKyAgICBwcmludGYoCi0r ICAgICAgICAiU3RvcCBjb3VudGVyIGZvciBjb2RlICVpIGhhcyBvdmVyZmxvd2VkLlxuIgotKyAg ICAgICAgIkVuYWJsaW5nIHRoaXMgY29kZSBhbmQgcmVzZXRpbmcgdGhlIGNvdW50ZXIgdG8gMC5c biIsCi0rICAgICAgICBjb2RlKTsKLSsgICAgd2F0Y2hlZFN0b3BzX1tjb2RlXS5jb3VudF8gPSAw OwotKyAgICBlbmFibGVTdG9wKGNvZGUpOwotKyAgfSBlbHNlIHsKLSsgICAgd2F0Y2hlZFN0b3Bz X1tjb2RlXS5jb3VudF8rKzsKLSsgIH0KLSt9Ci0rCi0rdm9pZCBTaW11bGF0b3I6OnByaW50U3Rv cEluZm8odWludDMyX3QgY29kZSkgewotKyAgaWYgKGNvZGUgPD0ga01heFdhdGNocG9pbnRDb2Rl KSB7Ci0rICAgIHByaW50ZigiVGhhdCBpcyBhIHdhdGNocG9pbnQsIG5vdCBhIHN0b3AuXG4iKTsK LSsgICAgcmV0dXJuOwotKyAgfSBlbHNlIGlmIChjb2RlID4ga01heFN0b3BDb2RlKSB7Ci0rICAg IHByaW50ZigiQ29kZSB0b28gbGFyZ2UsIG9ubHkgJXUgc3RvcHMgY2FuIGJlIHVzZWRcbiIsIGtN YXhTdG9wQ29kZSArIDEpOwotKyAgICByZXR1cm47Ci0rICB9Ci0rICBjb25zdCBjaGFyKiBzdGF0 ZSA9IGlzRW5hYmxlZFN0b3AoY29kZSkgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiOwotKyAgaW50 MzJfdCBjb3VudCA9IHdhdGNoZWRTdG9wc19bY29kZV0uY291bnRfICYgfmtTdG9wRGlzYWJsZWRC aXQ7Ci0rICBpZiAoY291bnQgIT0gMCkgewotKyAgICBpZiAod2F0Y2hlZFN0b3BzX1tjb2RlXS5k ZXNjXykgewotKyAgICAgIHByaW50Zigic3RvcCAlaSAtIDB4JXg6IFx0JXMsIFx0Y291bnRlciA9 ICVpLCBcdCVzXG4iLCBjb2RlLCBjb2RlLAotKyAgICAgICAgICAgICBzdGF0ZSwgY291bnQsIHdh dGNoZWRTdG9wc19bY29kZV0uZGVzY18pOwotKyAgICB9IGVsc2UgewotKyAgICAgIHByaW50Zigi c3RvcCAlaSAtIDB4JXg6IFx0JXMsIFx0Y291bnRlciA9ICVpXG4iLCBjb2RlLCBjb2RlLCBzdGF0 ZSwKLSsgICAgICAgICAgICAgY291bnQpOwotKyAgICB9Ci0rICB9Ci0rfQotKwotKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rLy8gSW5zdHJ1Y3Rpb24gZGVjb2RlcnMuCi0rLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsKLSsvLyBDb21wdXRlIGVmZmVjdGl2ZSBhZGRyZXNzIGZvciBELWZvcm0g aW5zdHJ1Y3Rpb25zLgotKy8vIElmIFJBPT0wLCB0aGUgYmFzZSBpcyAwIChub3QgR1BSWzBdKS4K LStzdGF0aWMgaW5saW5lIGludDY0X3QgREZvcm1FQShTaW11bGF0b3IqIHNpbSwgU2ltSW5zdHJ1 Y3Rpb24qIGluc3RyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3Qgb2Zm c2V0KSB7Ci0rICB1aW50MzJfdCByYSA9IGluc3RyLT5yYVZhbHVlKCk7Ci0rICBpbnQ2NF90IGJh c2UgPSAocmEgPT0gMCkgPyAwIDogc2ltLT5nZXRSZWdpc3RlcihyYSk7Ci0rICByZXR1cm4gYmFz ZSArIG9mZnNldDsKLSt9Ci0rCi0rLy8gQ29tcHV0ZSBlZmZlY3RpdmUgYWRkcmVzcyBmb3IgRFMt Zm9ybSBpbnN0cnVjdGlvbnMuCi0rc3RhdGljIGlubGluZSBpbnQ2NF90IERTRm9ybUVBKFNpbXVs YXRvciogc2ltLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludDE2X3Qgb2Zmc2V0KSB7Ci0rICB1aW50MzJfdCByYSA9IGluc3RyLT5yYVZh bHVlKCk7Ci0rICBpbnQ2NF90IGJhc2UgPSAocmEgPT0gMCkgPyAwIDogc2ltLT5nZXRSZWdpc3Rl cihyYSk7Ci0rICByZXR1cm4gYmFzZSArIG9mZnNldDsKLSt9Ci0rCi0rLy8gQ29tcHV0ZSBlZmZl Y3RpdmUgYWRkcmVzcyBmb3IgWC1mb3JtIGluZGV4ZWQgaW5zdHJ1Y3Rpb25zLgotKy8vIElmIFJB PT0wLCBiYXNlIGlzIDAgKG5vdCBHUFJbMF0pLgotK3N0YXRpYyBpbmxpbmUgaW50NjRfdCBYRm9y bUVBKFNpbXVsYXRvciogc2ltLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIHVpbnQzMl90 IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKLSsgIHVpbnQzMl90IHJiID0gaW5zdHItPnJiVmFsdWUo KTsKLSsgIGludDY0X3QgYmFzZSA9IChyYSA9PSAwKSA/IDAgOiBzaW0tPmdldFJlZ2lzdGVyKHJh KTsKLSsgIHJldHVybiBiYXNlICsgc2ltLT5nZXRSZWdpc3RlcihyYik7Ci0rfQotKwotKy8vIENv bXB1dGUgZWZmZWN0aXZlIGFkZHJlc3MgZm9yIFgtZm9ybSBpbmRleGVkIHVwZGF0ZXMgKFJBICE9 IDAgcmVxdWlyZWQpLgotK3N0YXRpYyBpbmxpbmUgaW50NjRfdCBYRm9ybUVBVXBkYXRlKFNpbXVs YXRvciogc2ltLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIHVpbnQzMl90IHJhID0gaW5z dHItPnJhVmFsdWUoKTsKLSsgIHVpbnQzMl90IHJiID0gaW5zdHItPnJiVmFsdWUoKTsKLSsgIHJl dHVybiBzaW0tPmdldFJlZ2lzdGVyKHJhKSArIHNpbS0+Z2V0UmVnaXN0ZXIocmIpOwotK30KLSsK LSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIGRlY29kZURGb3JtQUxVOiBhZGRpLCBhZGRp cywgb3JpLCBvcmlzLCB4b3JpLCB4b3JpcywgYW5kaS4sIGFuZGlzLiwKLSsvLyAgICAgICAgICAg ICAgICAgY21waSwgY21wbGksIHN1YmZpYywgYWRkaWMsIGFkZGljLiwgbXVsbGksIHR3aQotKwot K3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVERm9ybUFMVShTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsK LSsgIHVpbnQzMl90IG9wY29kZSA9IGluc3RyLT5vcGNvZGUoKTsKLSsgIHVpbnQzMl90IHJ0ID0g aW5zdHItPnJ0VmFsdWUoKTsKLSsgIHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKLSsg IGludDE2X3Qgc2kgPSBpbnN0ci0+aW1tMTZWYWx1ZSgpOwotKyAgdWludDE2X3QgdWkgPSBpbnN0 ci0+dWltbTE2VmFsdWUoKTsKLSsKLSsgIHN3aXRjaCAob3Bjb2RlKSB7Ci0rICAgIGNhc2UgMTQ6 IHsKLSsgICAgICAvLyBhZGRpOiBSVCA9IChSQXwwKSArIFNJCi0rICAgICAgaW50NjRfdCBiYXNl ID0gKHJhID09IDApID8gMCA6IGdldFJlZ2lzdGVyKHJhKTsKLSsgICAgICBzZXRSZWdpc3Rlcihy dCwgYmFzZSArIChpbnQ2NF90KXNpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNl IDE1OiB7Ci0rICAgICAgLy8gYWRkaXM6IFJUID0gKFJBfDApICsgKFNJIDw8IDE2KQotKyAgICAg IGludDY0X3QgYmFzZSA9IChyYSA9PSAwKSA/IDAgOiBnZXRSZWdpc3RlcihyYSk7Ci0rICAgICAg c2V0UmVnaXN0ZXIocnQsIGJhc2UgKyAoKGludDY0X3Qpc2kgPDwgMTYpKTsKLSsgICAgICBicmVh azsKLSsgICAgfQotKyAgICBjYXNlIDI0OiB7Ci0rICAgICAgLy8gb3JpOiBSQSA9IFJTIHwgVUkK LSsgICAgICBzZXRSZWdpc3RlcihyYSwgZ2V0UmVnaXN0ZXIocnQpIHwgKHVpbnQ2NF90KXVpKTsK LSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDI1OiB7Ci0rICAgICAgLy8gb3Jpczog UkEgPSBSUyB8IChVSSA8PCAxNikKLSsgICAgICBzZXRSZWdpc3RlcihyYSwgZ2V0UmVnaXN0ZXIo cnQpIHwgKCh1aW50NjRfdCl1aSA8PCAxNikpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGNhc2UgMjY6IHsKLSsgICAgICAvLyB4b3JpOiBSQSA9IFJTIF4gVUkKLSsgICAgICBzZXRSZWdp c3RlcihyYSwgZ2V0UmVnaXN0ZXIocnQpIF4gKHVpbnQ2NF90KXVpKTsKLSsgICAgICBicmVhazsK LSsgICAgfQotKyAgICBjYXNlIDI3OiB7Ci0rICAgICAgLy8geG9yaXM6IFJBID0gUlMgXiAoVUkg PDwgMTYpCi0rICAgICAgc2V0UmVnaXN0ZXIocmEsIGdldFJlZ2lzdGVyKHJ0KSBeICgodWludDY0 X3QpdWkgPDwgMTYpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDI4OiB7Ci0r ICAgICAgLy8gYW5kaS46IFJBID0gUlMgJiBVSSwgdXBkYXRlIENSMAotKyAgICAgIGludDY0X3Qg cmVzdWx0ID0gZ2V0UmVnaXN0ZXIocnQpICYgKHVpbnQ2NF90KXVpOwotKyAgICAgIHNldFJlZ2lz dGVyKHJhLCByZXN1bHQpOwotKyAgICAgIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFr OwotKyAgICB9Ci0rICAgIGNhc2UgMjk6IHsKLSsgICAgICAvLyBhbmRpcy46IFJBID0gUlMgJiAo VUkgPDwgMTYpLCB1cGRhdGUgQ1IwCi0rICAgICAgaW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3Rl cihydCkgJiAoKHVpbnQ2NF90KXVpIDw8IDE2KTsKLSsgICAgICBzZXRSZWdpc3RlcihyYSwgcmVz dWx0KTsKLSsgICAgICB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQot KyAgICBjYXNlIDExOiB7Ci0rICAgICAgLy8gY21waTogY29tcGFyZSBSQSB3aXRoIFNJLCBzaWdu ZWQKLSsgICAgICB1aW50MzJfdCBiZiA9IGluc3RyLT5iZlZhbHVlKCk7Ci0rICAgICAgYm9vbCBs ID0gaW5zdHItPmxCaXQoKTsKLSsgICAgICBpZiAobCkgewotKyAgICAgICAgLy8gNjQtYml0IGNv bXBhcmUKLSsgICAgICAgIHNldENSRmllbGRDbXAoYmYsIGdldFJlZ2lzdGVyKHJhKSwgKGludDY0 X3Qpc2kpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAvLyAzMi1iaXQgY29tcGFyZQotKyAg ICAgICAgaW50MzJfdCByYTMyID0gSTMyKGdldFJlZ2lzdGVyKHJhKSk7Ci0rICAgICAgICBzZXRD UkZpZWxkQ21wKGJmLCAoaW50NjRfdClyYTMyLCAoaW50NjRfdCkoaW50MzJfdClzaSk7Ci0rICAg ICAgfQotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTA6IHsKLSsgICAgICAvLyBj bXBsaTogY29tcGFyZSBSQSB3aXRoIFVJLCB1bnNpZ25lZAotKyAgICAgIHVpbnQzMl90IGJmID0g aW5zdHItPmJmVmFsdWUoKTsKLSsgICAgICBib29sIGwgPSBpbnN0ci0+bEJpdCgpOwotKyAgICAg IGlmIChsKSB7Ci0rICAgICAgICAvLyA2NC1iaXQgdW5zaWduZWQgY29tcGFyZQotKyAgICAgICAg c2V0Q1JGaWVsZENtcFUoYmYsIFU2NChnZXRSZWdpc3RlcihyYSkpLCAodWludDY0X3QpdWkpOwot KyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAvLyAzMi1iaXQgdW5zaWduZWQgY29tcGFyZQotKyAg ICAgICAgdWludDMyX3QgcmEzMiA9IFUzMihnZXRSZWdpc3RlcihyYSkpOwotKyAgICAgICAgc2V0 Q1JGaWVsZENtcFUoYmYsICh1aW50NjRfdClyYTMyLCAodWludDY0X3QpdWkpOwotKyAgICAgIH0K LSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDg6IHsKLSsgICAgICAvLyBzdWJmaWM6 IFJUID0gU0kgLSBSQSwgc2V0IENBCi0rICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdldFJl Z2lzdGVyKHJhKSk7Ci0rICAgICAgdWludDY0X3QgaW1tID0gVTY0KChpbnQ2NF90KXNpKTsKLSsg ICAgICB1aW50NjRfdCByZXN1bHQgPSBpbW0gKyB+cmFfdmFsICsgMTsKLSsgICAgICBzZXRSZWdp c3RlcihydCwgSTY0KHJlc3VsdCkpOwotKyAgICAgIC8vIENBIGlzIHNldCBpZiB0aGVyZSBpcyBh IGNhcnJ5IG91dCBvZiB0aGUgYWRkaXRpb24gKH5SQSArIElNTSArIDEpLgotKyAgICAgIC8vIEVx dWl2YWxlbnRseSwgQ0EgPSAoSU1NID49IFJBKSBmb3IgdW5zaWduZWQgaW50ZXJwcmV0YXRpb24g b2YgdGhlCi0rICAgICAgLy8gZnVsbCA2NC1iaXQgc3VidHJhY3Rpb24uCi0rICAgICAgYm9vbCBj YXJyeSA9IChpbW0gPj0gcmFfdmFsKSB8fCAoaW1tID09IDAgJiYgcmFfdmFsID09IDApOwotKyAg ICAgIC8vIE1vcmUgcHJlY2lzZTogY2FycnkgPSAofnJhX3ZhbCArIGltbSkgd291bGQgb3ZlcmZs b3csIG9yIGFkZGluZyAxCi0rICAgICAgLy8gb3ZlcmZsb3dzLgotKyAgICAgIHVpbnQ2NF90IHRt cCA9IH5yYV92YWwgKyBpbW07Ci0rICAgICAgY2FycnkgPSAodG1wIDwgfnJhX3ZhbCkgfHwgKHRt cCA8IGltbSkgfHwgKHJlc3VsdCA8IHRtcCk7Ci0rICAgICAgLy8gU2ltcGxpZnk6IENBIGlmIG5v IGJvcnJvdy4KLSsgICAgICBjYXJyeSA9IChVNjQoKGludDY0X3Qpc2kpID49IHJhX3ZhbCk7Ci0r ICAgICAgaWYgKHJhX3ZhbCA9PSAwKSBjYXJyeSA9IHRydWU7Ci0rICAgICAgLy8gQWN0dWFsbHks IHN1YmZpYyBDQTogY2Fycnkgb3V0IG9mIH5SQSArIElNTSArIDEuCi0rICAgICAgLy8gQ0EgPSAo SU1NID4gUkEgLSAxKSB3aGVuIFJBICE9IDAsIENBID0gMSB3aGVuIFJBID09IDAuCi0rICAgICAg Ly8gT3IganVzdDogdGhlIHVuc2lnbmVkIHJlc3VsdCBvZiAoU0kgLSBSQSkgaXMgdmFsaWQgKG5v IGJvcnJvdykuCi0rICAgICAgLy8gTGV0J3MgY29tcHV0ZSBpdCBjb3JyZWN0bHk6Ci0rICAgICAg ewotKyAgICAgICAgX191aW50MTI4X3Qgd2lkZSA9IChfX3VpbnQxMjhfdCkofnJhX3ZhbCkgKyAo X191aW50MTI4X3QpaW1tICsgMTsKLSsgICAgICAgIGNhcnJ5ID0gKHdpZGUgPj4gNjQpICE9IDA7 Ci0rICAgICAgfQotKyAgICAgIHNldFhFUkNBKGNhcnJ5KTsKLSsgICAgICBicmVhazsKLSsgICAg fQotKyAgICBjYXNlIDEyOiB7Ci0rICAgICAgLy8gYWRkaWM6IFJUID0gUkEgKyBTSSwgc2V0IENB Ci0rICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7Ci0rICAgICAg dWludDY0X3QgaW1tID0gVTY0KChpbnQ2NF90KXNpKTsKLSsgICAgICB1aW50NjRfdCByZXN1bHQg PSByYV92YWwgKyBpbW07Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKLSsg ICAgICBzZXRYRVJDQShyZXN1bHQgPCByYV92YWwpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0r ICAgIGNhc2UgMTM6IHsKLSsgICAgICAvLyBhZGRpYy46IFJUID0gUkEgKyBTSSwgc2V0IENBLCB1 cGRhdGUgQ1IwCi0rICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7 Ci0rICAgICAgdWludDY0X3QgaW1tID0gVTY0KChpbnQ2NF90KXNpKTsKLSsgICAgICB1aW50NjRf dCByZXN1bHQgPSByYV92YWwgKyBpbW07Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1 bHQpKTsKLSsgICAgICBzZXRYRVJDQShyZXN1bHQgPCByYV92YWwpOwotKyAgICAgIHVwZGF0ZUNS MChJNjQocmVzdWx0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA3OiB7Ci0r ICAgICAgLy8gbXVsbGk6IFJUID0gUkEgKiBTSSAobG93IDY0IGJpdHMpCi0rICAgICAgaW50NjRf dCByZXN1bHQgPSBnZXRSZWdpc3RlcihyYSkgKiAoaW50NjRfdClzaTsKLSsgICAgICBzZXRSZWdp c3RlcihydCwgcmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDM6IHsK LSsgICAgICAvLyB0d2k6IFRyYXAgV29yZCBJbW1lZGlhdGUuIFdlIGRvbid0IGltcGxlbWVudCB0 cmFwcGluZyBpbiB0aGUKLSsgICAgICAvLyBzaW11bGF0b3I7IGp1c3QgY29udGludWUuCi0rICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0hfVU5TQUZF X1BSSU5URigiZGVjb2RlREZvcm1BTFU6IHVuaGFuZGxlZCBvcGNvZGUgJXUiLCBvcGNvZGUpOwot KyAgfQotK30KLSsKLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIGRlY29kZURGb3JtTG9h ZDogbHd6KDMyKSwgbGJ6KDM0KSwgbGh6KDQwKSwgbGhhKDQyKSwgbGZzKDQ4KSwgbGZkKDUwKQot Ky8vICAgYW5kIHVwZGF0ZSB2YXJpYW50cwotKwotK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVERm9y bUxvYWQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICB1aW50MzJfdCBvcGNvZGUgPSBpbnN0 ci0+b3Bjb2RlKCk7Ci0rICB1aW50MzJfdCBydCA9IGluc3RyLT5ydFZhbHVlKCk7Ci0rICBpbnQx Nl90IHNpID0gaW5zdHItPmltbTE2VmFsdWUoKTsKLSsgIHVpbnQ2NF90IGVhID0gREZvcm1FQSh0 aGlzLCBpbnN0ciwgc2kpOwotKwotKyAgc3dpdGNoIChvcGNvZGUpIHsKLSsgICAgY2FzZSAzMjoK LSsgICAgICAvLyBsd3oKLSsgICAgICBzZXRSZWdpc3RlcihydCwgVTY0KHJlYWRXVShlYSwgaW5z dHIpKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgMzM6IHsKLSsgICAgICAvLyBsd3p1OiBS QSAhPSAwLCBsb2FkIGFuZCB1cGRhdGUgUkEKLSsgICAgICBzZXRSZWdpc3RlcihydCwgVTY0KHJl YWRXVShlYSwgaW5zdHIpKSk7Ci0rICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwg ZWEpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMzQ6Ci0rICAgICAgLy8gbGJ6 Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIFU2NChyZWFkQlUoZWEpKSk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGNhc2UgMzU6IHsKLSsgICAgICAvLyBsYnp1Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQs IFU2NChyZWFkQlUoZWEpKSk7Ci0rICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwg ZWEpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNDA6Ci0rICAgICAgLy8gbGh6 Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIFU2NChyZWFkSFUoZWEsIGluc3RyKSkpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIDQxOiB7Ci0rICAgICAgLy8gbGh6dQotKyAgICAgIHNldFJlZ2lz dGVyKHJ0LCBVNjQocmVhZEhVKGVhLCBpbnN0cikpKTsKLSsgICAgICBzZXRSZWdpc3RlcihpbnN0 ci0+cmFWYWx1ZSgpLCBlYSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0MjoK LSsgICAgICAvLyBsaGEgKGhhbGYtd29yZCwgc2lnbi1leHRlbmRlZCkKLSsgICAgICBzZXRSZWdp c3RlcihydCwgKGludDY0X3QpcmVhZEgoZWEsIGluc3RyKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IGNhc2UgNDM6IHsKLSsgICAgICAvLyBsaGF1Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2 NF90KXJlYWRIKGVhLCBpbnN0cikpOwotKyAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVl KCksIGVhKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDQ4OiB7Ci0rICAgICAg Ly8gbGZzOiBsb2FkIGZsb2F0IHNpbmdsZSwgd2lkZW4gdG8gZG91YmxlIGluIEZQUiAoTmFOLXBy ZXNlcnZpbmc7Ci0rICAgICAgLy8gbWF0Y2hlcyBQb3dlciBJU0EgYGxmc2Agd2hpY2ggdXNlcyB4 c2N2c3BkcG4gc2VtYW50aWNzKQotKyAgICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDQp KSBicmVhazsKLSsgICAgICBmbG9hdCB2YWwgPSAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGVh KTsKLSsgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcHJvbW90ZUZsb2F0UHJlc2Vydmlu Z05hTih2YWwpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDQ5OiB7Ci0rICAg ICAgLy8gbGZzdQotKyAgICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDQpKSBicmVhazsK LSsgICAgICBmbG9hdCB2YWwgPSAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGVhKTsKLSsgICAg ICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcHJvbW90ZUZsb2F0UHJlc2VydmluZ05hTih2YWwp KTsKLSsgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCBlYSk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1MDogewotKyAgICAgIC8vIGxmZDogbG9hZCBmbG9hdCBk b3VibGUKLSsgICAgICBkb3VibGUgdmFsID0gcmVhZEQoZWEsIGluc3RyKTsKLSsgICAgICBzZXRG cHVSZWdpc3RlckRvdWJsZShydCwgdmFsKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBj YXNlIDUxOiB7Ci0rICAgICAgLy8gbGZkdQotKyAgICAgIGRvdWJsZSB2YWwgPSByZWFkRChlYSwg aW5zdHIpOwotKyAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCB2YWwpOwotKyAgICAgIHNl dFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsKLSsgICAgICBicmVhazsKLSsgICAgfQot KyAgICBkZWZhdWx0OgotKyAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVERm9y bUxvYWQ6IHVuaGFuZGxlZCBvcGNvZGUgJXUiLCBvcGNvZGUpOwotKyAgfQotK30KLSsKLSsvLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIGRlY29kZURGb3JtU3RvcmU6IHN0dygzNiksIHN0d3Uo MzcpLCBzdGIoMzgpLCBzdGgoNDQpLCBzdGZzKDUyKSwgc3RmZCg1NCkKLSsvLyAgIGFuZCB1cGRh dGUgdmFyaWFudHMKLSsKLSt2b2lkIFNpbXVsYXRvcjo6ZGVjb2RlREZvcm1TdG9yZShTaW1JbnN0 cnVjdGlvbiogaW5zdHIpIHsKLSsgIHVpbnQzMl90IG9wY29kZSA9IGluc3RyLT5vcGNvZGUoKTsK LSsgIHVpbnQzMl90IHJzID0gaW5zdHItPnJzVmFsdWUoKTsKLSsgIGludDE2X3Qgc2kgPSBpbnN0 ci0+aW1tMTZWYWx1ZSgpOwotKwotKyAgLy8gRm9yIHN0b3JlcywgdGhlIGVmZmVjdGl2ZSBhZGRy ZXNzIGNhbGN1bGF0aW9uIGRpZmZlcnMgZm9yIHVwZGF0ZSBmb3JtczoKLSsgIC8vIC0gTm9uLXVw ZGF0ZTogRUEgPSAoUkF8MCkgKyBECi0rICAvLyAtIFVwZGF0ZTogRUEgPSBSQSArIEQgKFJBIG11 c3Qgbm90IGJlIDApCi0rICBib29sIGlzVXBkYXRlID0gZmFsc2U7Ci0rICBzd2l0Y2ggKG9wY29k ZSkgewotKyAgICBjYXNlIDM3OiBjYXNlIDM5OiBjYXNlIDQ1OiBjYXNlIDUzOiBjYXNlIDU1Ogot KyAgICAgIGlzVXBkYXRlID0gdHJ1ZTsKLSsgICAgICBicmVhazsKLSsgIH0KLSsKLSsgIHVpbnQ2 NF90IGVhOwotKyAgaWYgKGlzVXBkYXRlKSB7Ci0rICAgIGVhID0gZ2V0UmVnaXN0ZXIoaW5zdHIt PnJhVmFsdWUoKSkgKyAoaW50NjRfdClzaTsKLSsgIH0gZWxzZSB7Ci0rICAgIGVhID0gREZvcm1F QSh0aGlzLCBpbnN0ciwgc2kpOwotKyAgfQotKwotKyAgc3dpdGNoIChvcGNvZGUpIHsKLSsgICAg Y2FzZSAzNjoKLSsgICAgICAvLyBzdHcKLSsgICAgICB3cml0ZVcoZWEsIEkzMihnZXRSZWdpc3Rl cihycykpLCBpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgMzg6Ci0rICAgICAgLy8g c3RiCi0rICAgICAgd3JpdGVCKGVhLCAodWludDhfdCkoZ2V0UmVnaXN0ZXIocnMpICYgMHhGRikp OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDM5OgotKyAgICAgIC8vIHN0YnUKLSsgICAgICB3 cml0ZUIoZWEsICh1aW50OF90KShnZXRSZWdpc3RlcihycykgJiAweEZGKSk7Ci0rICAgICAgc2V0 UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IDQ0OgotKyAgICAgIC8vIHN0aAotKyAgICAgIHdyaXRlSChlYSwgVTE2KGdldFJlZ2lzdGVyKHJz KSksIGluc3RyKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSA0NToKLSsgICAgICAvLyBzdGh1 Ci0rICAgICAgd3JpdGVIKGVhLCBVMTYoZ2V0UmVnaXN0ZXIocnMpKSwgaW5zdHIpOwotKyAgICAg IHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSA1MjogewotKyAgICAgIC8vIHN0ZnM6IGNvbnZlcnQgZG91YmxlIGluIEZQUiB0byBzaW5n bGUgYW5kIHN0b3JlIChOYU4tcHJlc2VydmluZzsKLSsgICAgICAvLyBtYXRjaGVzIFBvd2VyIElT QSBgc3Rmc2Agd2hpY2ggdXNlcyB4c2N2ZHBzcG4gc2VtYW50aWNzKQotKyAgICAgIGRvdWJsZSBk dmFsID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocnMpOwotKyAgICAgIGZsb2F0IGZ2YWwgPSBkZW1v dGVEb3VibGVQcmVzZXJ2aW5nTmFOKGR2YWwpOwotKyAgICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1 bHQoZWEsIDQpKSBicmVhazsKLSsgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGVhKSA9 IGZ2YWw7Ci0rICAgICAgTExCaXRfID0gZmFsc2U7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsg ICAgY2FzZSA1MzogewotKyAgICAgIC8vIHN0ZnN1Ci0rICAgICAgZG91YmxlIGR2YWwgPSBnZXRG cHVSZWdpc3RlckRvdWJsZShycyk7Ci0rICAgICAgZmxvYXQgZnZhbCA9IGRlbW90ZURvdWJsZVBy ZXNlcnZpbmdOYU4oZHZhbCk7Ci0rICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgNCkp IGJyZWFrOwotKyAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0Kj4oZWEpID0gZnZhbDsKLSsg ICAgICBMTEJpdF8gPSBmYWxzZTsKLSsgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgp LCBlYSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1NDoKLSsgICAgICAvLyBz dGZkCi0rICAgICAgd3JpdGVEKGVhLCBnZXRGcHVSZWdpc3RlckRvdWJsZShycyksIGluc3RyKTsK LSsgICAgICBicmVhazsKLSsgICAgY2FzZSA1NToKLSsgICAgICAvLyBzdGZkdQotKyAgICAgIHdy aXRlRChlYSwgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocnMpLCBpbnN0cik7Ci0rICAgICAgc2V0UmVn aXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0 OgotKyAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVERm9ybVN0b3JlOiB1bmhh bmRsZWQgb3Bjb2RlICV1Iiwgb3Bjb2RlKTsKLSsgIH0KLSt9Ci0rCi0rLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSsvLyBkZWNvZGVEU0Zvcm06IGxkKDU4LzApLCBsd2EoNTgvMiksIHN0ZCg2Mi8w KSwgc3RkdSg2Mi8xKQotKwotK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVEU0Zvcm0oU2ltSW5zdHJ1 Y3Rpb24qIGluc3RyKSB7Ci0rICB1aW50MzJfdCBvcGNvZGUgPSBpbnN0ci0+b3Bjb2RlKCk7Ci0r ICB1aW50MzJfdCBydCA9IGluc3RyLT5ydFZhbHVlKCk7Ci0rICBpbnQxNl90IGRzID0gaW5zdHIt PmRzMTRWYWx1ZSgpOwotKyAgdWludDMyX3QgeG8gPSBpbnN0ci0+Yml0cygxLCAwKTsKLSsKLSsg IGlmIChvcGNvZGUgPT0gNTgpIHsKLSsgICAgdWludDY0X3QgZWEgPSBEU0Zvcm1FQSh0aGlzLCBp bnN0ciwgZHMpOwotKyAgICBzd2l0Y2ggKHhvKSB7Ci0rICAgICAgY2FzZSAwOgotKyAgICAgICAg Ly8gbGQKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZWFkRFcoZWEsIGluc3RyKSk7Ci0rICAg ICAgICBicmVhazsKLSsgICAgICBjYXNlIDE6IHsKLSsgICAgICAgIC8vIGxkdQotKyAgICAgICAg c2V0UmVnaXN0ZXIocnQsIHJlYWREVyhlYSwgaW5zdHIpKTsKLSsgICAgICAgIHNldFJlZ2lzdGVy KGluc3RyLT5yYVZhbHVlKCksIGVhKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAg ICBjYXNlIDI6Ci0rICAgICAgICAvLyBsd2EgKGxvYWQgd29yZCBhbGdlYnJhaWMsIHNpZ24tZXh0 ZW5kZWQgdG8gNjQpCi0rICAgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3QpcmVhZFcoZWEs IGluc3RyKSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAgTU9a X0NSQVNIX1VOU0FGRV9QUklOVEYoImRlY29kZURTRm9ybTogb3Bjb2RlIDU4LCB4bz0ldSIsIHhv KTsKLSsgICAgfQotKyAgfSBlbHNlIGlmIChvcGNvZGUgPT0gNjIpIHsKLSsgICAgLy8gRm9yIHN0 ZC9zdGR1LCBFQSB1c2VzIFJBIGRpcmVjdGx5IChubyBSQXwwIHJ1bGUpLgotKyAgICB1aW50NjRf dCBlYTsKLSsgICAgaWYgKHhvID09IDEpIHsKLSsgICAgICAvLyBzdGR1OiB1cGRhdGUgZm9ybQot KyAgICAgIGVhID0gZ2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSkgKyAoaW50NjRfdClkczsK LSsgICAgfSBlbHNlIHsKLSsgICAgICBlYSA9IERTRm9ybUVBKHRoaXMsIGluc3RyLCBkcyk7Ci0r ICAgIH0KLSsgICAgc3dpdGNoICh4bykgewotKyAgICAgIGNhc2UgMDoKLSsgICAgICAgIC8vIHN0 ZAotKyAgICAgICAgd3JpdGVEVyhlYSwgZ2V0UmVnaXN0ZXIocnQpLCBpbnN0cik7Ci0rICAgICAg ICBicmVhazsKLSsgICAgICBjYXNlIDE6Ci0rICAgICAgICAvLyBzdGR1Ci0rICAgICAgICB3cml0 ZURXKGVhLCBnZXRSZWdpc3RlcihydCksIGluc3RyKTsKLSsgICAgICAgIHNldFJlZ2lzdGVyKGlu c3RyLT5yYVZhbHVlKCksIGVhKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGRlZmF1bHQ6Ci0r ICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlRFNGb3JtOiBvcGNvZGUgNjIs IHhvPSV1IiwgeG8pOwotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBNT1pfQ1JBU0hfVU5TQUZF X1BSSU5URigiZGVjb2RlRFNGb3JtOiB1bmhhbmRsZWQgb3Bjb2RlICV1Iiwgb3Bjb2RlKTsKLSsg IH0KLSt9Ci0rCi0rLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsvLyBkZWNvZGVYRm9ybTogTWFq b3Igb3Bjb2RlIDMxIChYLWZvcm0sIFhPLWZvcm0sIGV0Yy4pCi0rLy8gVGhpcyBpcyB0aGUgbGFy Z2VzdCBkZWNvZGVyIGNvdmVyaW5nIG1vc3QgQUxVLCBpbmRleGVkIGxvYWQvc3RvcmUsIFNQUiwK LSsvLyBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4KLSsKLSt2b2lkIFNpbXVsYXRvcjo6ZGVjb2Rl WEZvcm0oU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICB1aW50MzJfdCB4byA9IGluc3RyLT54 b1ZhbHVlKCk7Ci0rICB1aW50MzJfdCBydCA9IGluc3RyLT5ydFZhbHVlKCk7Ci0rICB1aW50MzJf dCByYSA9IGluc3RyLT5yYVZhbHVlKCk7Ci0rICB1aW50MzJfdCByYiA9IGluc3RyLT5yYlZhbHVl KCk7Ci0rICBib29sIHJjID0gaW5zdHItPnJjQml0KCk7Ci0rCi0rICAvLyBNYW55IGluc3RydWN0 aW9ucyBzaGFyZSBtYWpvciBvcGNvZGUgMzEuIFN3aXRjaCBvbiBleHRlbmRlZCBvcGNvZGUuCi0r ICAvLyBGb3IgWE8tZm9ybSB3aXRoIE9FPTEsIHRoZSB4b1ZhbHVlKCkgaW5jbHVkZXMgYml0IDEw LCBzbwotKyAgLy8gYWRkbyAoMjY2IHwgNTEyID0gNzc4KSBldGMuIGFyZSBzZXBhcmF0ZSBjYXNl cy4KLSsKLSsgIC8vIEZpcnN0IGNoZWNrIGZvciBpc2VsIHdoaWNoIHVzZXMgYml0cyAxLTUgPSAx NSAoWE8gPSAxNSBpbiBiaXRzIDEuLjUpLgotKyAgaWYgKCh4byAmIDB4MUYpID09IDE1KSB7Ci0r ICAgIC8vIGlzZWw6IGlmIENSW0JDXSB0aGVuIFJUPVJBIGVsc2UgUlQ9UkIKLSsgICAgLy8gQkMg aXMgaW4gYml0cyA2Li4xMCAodGhlIHJjIGZpZWxkIHBvc2l0aW9uKS4KLSsgICAgdWludDMyX3Qg YmMgPSBpbnN0ci0+cmNWYWx1ZSgpOwotKyAgICB1aW50MzJfdCBjckZpZWxkID0gYmMgLyA0Owot KyAgICB1aW50MzJfdCBjckJpdCA9IGJjICUgNDsKLSsgICAgdWludDhfdCBjckZpZWxkVmFsID0g Z2V0Q1JGaWVsZChjckZpZWxkKTsKLSsgICAgLy8gUFBDIENSIGZpZWxkIGJpdHM6IGJpdDM9TFQo OCksIGJpdDI9R1QoNCksIGJpdDE9RVEoMiksIGJpdDA9U08oMSkKLSsgICAgLy8gQml0IG51bWJl cmluZyB3aXRoaW4gZmllbGQ6IDA9TFQsIDE9R1QsIDI9RVEsIDM9U08KLSsgICAgYm9vbCBiaXRT ZXQ7Ci0rICAgIHN3aXRjaCAoY3JCaXQpIHsKLSsgICAgICBjYXNlIDA6IGJpdFNldCA9IChjckZp ZWxkVmFsICYga0NSRmllbGRMVCkgIT0gMDsgYnJlYWs7Ci0rICAgICAgY2FzZSAxOiBiaXRTZXQg PSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkR1QpICE9IDA7IGJyZWFrOwotKyAgICAgIGNhc2UgMjog Yml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZEVRKSAhPSAwOyBicmVhazsKLSsgICAgICBj YXNlIDM6IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRTTykgIT0gMDsgYnJlYWs7Ci0r ICAgICAgZGVmYXVsdDogYml0U2V0ID0gZmFsc2U7IGJyZWFrOwotKyAgICB9Ci0rICAgIGludDY0 X3QgcmFWYWwgPSAocmEgPT0gMCkgPyAwIDogZ2V0UmVnaXN0ZXIocmEpOwotKyAgICBpbnQ2NF90 IHJiVmFsID0gZ2V0UmVnaXN0ZXIocmIpOwotKyAgICBzZXRSZWdpc3RlcihydCwgYml0U2V0ID8g cmFWYWwgOiByYlZhbCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIHN3aXRjaCAoeG8pIHsK LSsgICAgLy8gLS0tIEFyaXRobWV0aWMgLS0tCi0rICAgIGNhc2UgMjY2OiB7Ci0rICAgICAgLy8g YWRkCi0rICAgICAgaW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihyYSkgKyBnZXRSZWdpc3Rl cihyYik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlc3VsdCk7Ci0rICAgICAgaWYgKHJjKSB1 cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDc3ODog ewotKyAgICAgIC8vIGFkZG8KLSsgICAgICBpbnQ2NF90IHJhX3ZhbCA9IGdldFJlZ2lzdGVyKHJh KTsKLSsgICAgICBpbnQ2NF90IHJiX3ZhbCA9IGdldFJlZ2lzdGVyKHJiKTsKLSsgICAgICBpbnQ2 NF90IHJlc3VsdCA9IHJhX3ZhbCArIHJiX3ZhbDsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgcmVz dWx0KTsKLSsgICAgICAvLyBPdmVyZmxvdyBpZiBzaWducyBvZiBpbnB1dHMgYXJlIHNhbWUgYnV0 IHJlc3VsdCBzaWduIGRpZmZlcnMuCi0rICAgICAgYm9vbCBvdiA9ICgocmFfdmFsIF4gcmVzdWx0 KSAmIChyYl92YWwgXiByZXN1bHQpKSA8IDA7Ci0rICAgICAgc2V0WEVST1Yob3YpOwotKyAgICAg IGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAg Y2FzZSAxMDogewotKyAgICAgIC8vIGFkZGMKLSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQo Z2V0UmVnaXN0ZXIocmEpKTsKLSsgICAgICB1aW50NjRfdCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0 ZXIocmIpKTsKLSsgICAgICB1aW50NjRfdCByZXN1bHQgPSByYV92YWwgKyByYl92YWw7Ci0rICAg ICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKLSsgICAgICBzZXRYRVJDQShyZXN1bHQg PCByYV92YWwpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKEk2NChyZXN1bHQpKTsKLSsgICAg ICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDEzODogewotKyAgICAgIC8vIGFkZGU6IFJUID0g UkEgKyBSQiArIENBCi0rICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJh KSk7Ci0rICAgICAgdWludDY0X3QgcmJfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJiKSk7Ci0rICAg ICAgdWludDY0X3QgY2EgPSBnZXRYRVJDQSgpID8gMVVMTCA6IDBVTEw7Ci0rICAgICAgdWludDY0 X3QgcmVzdWx0ID0gcmFfdmFsICsgcmJfdmFsICsgY2E7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQs IEk2NChyZXN1bHQpKTsKLSsgICAgICAvLyBDYXJyeS1vdXQ6IHdoZW4gY2E9PTAsIG9ubHkgdGhl IHJhK3JiIHdyYXAgbWF0dGVyczsgd2hlbiBjYT09MSwKLSsgICAgICAvLyBhbiBhZGRpdGlvbmFs IHdyYXAgb2NjdXJzIGlmZiByZXN1bHQgPD0gcmFfdmFsLgotKyAgICAgIGJvb2wgbmV3Q0EgPSBj YSA/IChyZXN1bHQgPD0gcmFfdmFsKSA6IChyZXN1bHQgPCByYV92YWwpOwotKyAgICAgIHNldFhF UkNBKG5ld0NBKTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChJNjQocmVzdWx0KSk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyMzQ6IHsKLSsgICAgICAvLyBhZGRtZTogUlQg PSBSQSArIENBIC0gMQotKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3Rlcihy YSkpOwotKyAgICAgIHVpbnQ2NF90IGNhID0gZ2V0WEVSQ0EoKSA/IDFVTEwgOiAwVUxMOwotKyAg ICAgIHVpbnQ2NF90IHJlc3VsdCA9IHJhX3ZhbCArIGNhICsgfjBVTEw7ICAvLyArIENBICsgKC0x KQotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0KSk7Ci0rICAgICAgLy8gQ0EgaWYg Y2Fycnkgb3V0IG9mIChSQSArIENBICsgMHhGRkZGRkZGRkZGRkZGRkZGKQotKyAgICAgIGJvb2wg bmV3Q0EgPSAocmFfdmFsICE9IDApIHx8IChjYSAhPSAwKTsKLSsgICAgICBzZXRYRVJDQShuZXdD QSk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoSTY0KHJlc3VsdCkpOwotKyAgICAgIGJyZWFr OwotKyAgICB9Ci0rICAgIGNhc2UgMjAyOiB7Ci0rICAgICAgLy8gYWRkemU6IFJUID0gUkEgKyBD QQotKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOwotKyAgICAg IHVpbnQ2NF90IGNhID0gZ2V0WEVSQ0EoKSA/IDFVTEwgOiAwVUxMOwotKyAgICAgIHVpbnQ2NF90 IHJlc3VsdCA9IHJhX3ZhbCArIGNhOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0 KSk7Ci0rICAgICAgc2V0WEVSQ0EocmVzdWx0IDwgcmFfdmFsKTsKLSsgICAgICBpZiAocmMpIHVw ZGF0ZUNSMChJNjQocmVzdWx0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0 MDogewotKyAgICAgIC8vIHN1YmY6IFJUID0gUkIgLSBSQQotKyAgICAgIGludDY0X3QgcmVzdWx0 ID0gZ2V0UmVnaXN0ZXIocmIpIC0gZ2V0UmVnaXN0ZXIocmEpOwotKyAgICAgIHNldFJlZ2lzdGVy KHJ0LCByZXN1bHQpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1NTI6IHsKLSsgICAgICAvLyBzdWJmbzogUlQgPSBS QiAtIFJBLCBzZXQgT1YKLSsgICAgICBpbnQ2NF90IHJhX3ZhbCA9IGdldFJlZ2lzdGVyKHJhKTsK LSsgICAgICBpbnQ2NF90IHJiX3ZhbCA9IGdldFJlZ2lzdGVyKHJiKTsKLSsgICAgICBpbnQ2NF90 IHJlc3VsdCA9IHJiX3ZhbCAtIHJhX3ZhbDsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0 KTsKLSsgICAgICBib29sIG92ID0gKChyYl92YWwgXiByYV92YWwpICYgKHJiX3ZhbCBeIHJlc3Vs dCkpIDwgMDsKLSsgICAgICBzZXRYRVJPVihvdik7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAo cmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDg6IHsKLSsgICAgICAv LyBzdWJmYzogUlQgPSB+UkEgKyBSQiArIDEKLSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQo Z2V0UmVnaXN0ZXIocmEpKTsKLSsgICAgICB1aW50NjRfdCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0 ZXIocmIpKTsKLSsgICAgICB1aW50NjRfdCByZXN1bHQgPSB+cmFfdmFsICsgcmJfdmFsICsgMTsK LSsgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJlc3VsdCkpOwotKyAgICAgIC8vIENBID0gbm8g Ym9ycm93ID0gKFJCID49IFJBIHVuc2lnbmVkKQotKyAgICAgIHNldFhFUkNBKHJiX3ZhbCA+PSBy YV92YWwpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKEk2NChyZXN1bHQpKTsKLSsgICAgICBi cmVhazsKLSsgICAgfQotKyAgICBjYXNlIDEzNjogewotKyAgICAgIC8vIHN1YmZlOiBSVCA9IH5S QSArIFJCICsgQ0EKLSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEp KTsKLSsgICAgICB1aW50NjRfdCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmIpKTsKLSsgICAg ICB1aW50NjRfdCBjYSA9IGdldFhFUkNBKCkgPyAxVUxMIDogMFVMTDsKLSsgICAgICB1aW50NjRf dCByZXN1bHQgPSB+cmFfdmFsICsgcmJfdmFsICsgY2E7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQs IEk2NChyZXN1bHQpKTsKLSsgICAgICBfX3VpbnQxMjhfdCB3aWRlID0gKF9fdWludDEyOF90KSh+ cmFfdmFsKSArIChfX3VpbnQxMjhfdClyYl92YWwgKyBjYTsKLSsgICAgICBzZXRYRVJDQSgod2lk ZSA+PiA2NCkgIT0gMCk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoSTY0KHJlc3VsdCkpOwot KyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjMyOiB7Ci0rICAgICAgLy8gc3ViZnpl OiBSVCA9IH5SQSArIENBCi0rICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdldFJlZ2lzdGVy KHJhKSk7Ci0rICAgICAgdWludDY0X3QgY2EgPSBnZXRYRVJDQSgpID8gMVVMTCA6IDBVTEw7Ci0r ICAgICAgdWludDY0X3QgcmVzdWx0ID0gfnJhX3ZhbCArIGNhOwotKyAgICAgIHNldFJlZ2lzdGVy KHJ0LCBJNjQocmVzdWx0KSk7Ci0rICAgICAgc2V0WEVSQ0EoY2EgPiByYV92YWwpOyAgLy8gQ0Eg aWYgflJBICsgQ0Egb3ZlcmZsb3dzCi0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoSTY0KHJlc3Vs dCkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTA0OiB7Ci0rICAgICAgLy8g bmVnOiBSVCA9IC1SQQotKyAgICAgIGludDY0X3QgcmVzdWx0ID0gLWdldFJlZ2lzdGVyKHJhKTsK LSsgICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNS MChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vIC0tLSBNdWx0aXBs eSAtLS0KLSsgICAgY2FzZSAyMzM6IHsKLSsgICAgICAvLyBtdWxsZDogUlQgPSBSQSAqIFJCIChs b3cgNjQgYml0cykKLSsgICAgICBpbnQ2NF90IHJlc3VsdCA9IGdldFJlZ2lzdGVyKHJhKSAqIGdl dFJlZ2lzdGVyKHJiKTsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0KTsKLSsgICAgICBp ZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNh c2UgNzQ1OiB7Ci0rICAgICAgLy8gbXVsbGRvOiBSVCA9IFJBICogUkIsIHNldCBPVgotKyAgICAg IGludDY0X3QgcmFfdmFsID0gZ2V0UmVnaXN0ZXIocmEpOwotKyAgICAgIGludDY0X3QgcmJfdmFs ID0gZ2V0UmVnaXN0ZXIocmIpOwotKyAgICAgIGludDY0X3QgcmVzdWx0ID0gcmFfdmFsICogcmJf dmFsOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOwotKyAgICAgIC8vIE9WIGlmIGhp Z2ggcGFydCBvZiBmdWxsIDEyOC1iaXQgcHJvZHVjdCBpcyBub3QgYWxsLXNpZ24uCi0rICAgICAg aW50NjRfdCBoaSA9IE11bHRpcGx5SGlnaFNpZ25lZChyYV92YWwsIHJiX3ZhbCk7Ci0rICAgICAg Ym9vbCBvdiA9IChoaSAhPSAocmVzdWx0ID4+IDYzKSk7Ci0rICAgICAgc2V0WEVST1Yob3YpOwot KyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0K LSsgICAgY2FzZSAyMzU6IHsKLSsgICAgICAvLyBtdWxsdzogUlQgPSBzaWduX2V4dChSQVszMjo2 M10gKiBSQlszMjo2M10pCi0rICAgICAgaW50NjRfdCByZXN1bHQgPSAoaW50NjRfdClJMzIoZ2V0 UmVnaXN0ZXIocmEpKSAqCi0rICAgICAgICAgICAgICAgICAgICAgICAoaW50NjRfdClJMzIoZ2V0 UmVnaXN0ZXIocmIpKTsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0KTsKLSsgICAgICBp ZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNh c2UgNzQ3OiB7Ci0rICAgICAgLy8gbXVsbHdvCi0rICAgICAgaW50NjRfdCByYV92YWwgPSBJMzIo Z2V0UmVnaXN0ZXIocmEpKTsKLSsgICAgICBpbnQ2NF90IHJiX3ZhbCA9IEkzMihnZXRSZWdpc3Rl cihyYikpOwotKyAgICAgIGludDY0X3QgcmVzdWx0ID0gcmFfdmFsICogcmJfdmFsOwotKyAgICAg IHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOwotKyAgICAgIGJvb2wgb3YgPSAocmVzdWx0ICE9IChp bnQ2NF90KUkzMihyZXN1bHQpKTsKLSsgICAgICBzZXRYRVJPVihvdik7Ci0rICAgICAgaWYgKHJj KSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDcz OiB7Ci0rICAgICAgLy8gbXVsaGQ6IFJUID0gaGlnaCA2NCBiaXRzIG9mIFJBICogUkIgKHNpZ25l ZCkKLSsgICAgICBzZXRSZWdpc3RlcihydCwgTXVsdGlwbHlIaWdoU2lnbmVkKGdldFJlZ2lzdGVy KHJhKSwgZ2V0UmVnaXN0ZXIocmIpKSk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVn aXN0ZXIocnQpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDk6IHsKLSsgICAg ICAvLyBtdWxoZHU6IFJUID0gaGlnaCA2NCBiaXRzIG9mIFJBICogUkIgKHVuc2lnbmVkKQotKyAg ICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQoTXVsdGlwbHlIaWdoVW5zaWduZWQoVTY0KGdldFJlZ2lz dGVyKHJhKSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVNjQoZ2V0UmVnaXN0ZXIocmIpKSkpKTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRS ZWdpc3RlcihydCkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNzU6IHsKLSsg ICAgICAvLyBtdWxodzogUlQgPSBoaWdoIDMyIGJpdHMgb2YgKFJBWzMyOjYzXSAqIFJCWzMyOjYz XSksIHNpZ25lZAotKyAgICAgIGludDY0X3QgcmVzdWx0ID0KLSsgICAgICAgICAgKGludDY0X3Qp STMyKGdldFJlZ2lzdGVyKHJhKSkgKiAoaW50NjRfdClJMzIoZ2V0UmVnaXN0ZXIocmIpKTsKLSsg ICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0ID4+IDMyKTsKLSsgICAgICBpZiAocmMpIHVwZGF0 ZUNSMChnZXRSZWdpc3RlcihydCkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2Ug MTE6IHsKLSsgICAgICAvLyBtdWxod3U6IFJUID0gaGlnaCAzMiBiaXRzLCB1bnNpZ25lZAotKyAg ICAgIHVpbnQ2NF90IHJlc3VsdCA9Ci0rICAgICAgICAgICh1aW50NjRfdClVMzIoZ2V0UmVnaXN0 ZXIocmEpKSAqICh1aW50NjRfdClVMzIoZ2V0UmVnaXN0ZXIocmIpKTsKLSsgICAgICBzZXRSZWdp c3RlcihydCwgSTY0KHJlc3VsdCA+PiAzMikpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdl dFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0tIERp dmlkZSAtLS0KLSsgICAgY2FzZSA0ODk6IHsKLSsgICAgICAvLyBkaXZkOiBSVCA9IFJBIC8gUkIg KHNpZ25lZCwgNjQtYml0KQotKyAgICAgIGludDY0X3QgcmFfdmFsID0gZ2V0UmVnaXN0ZXIocmEp OwotKyAgICAgIGludDY0X3QgcmJfdmFsID0gZ2V0UmVnaXN0ZXIocmIpOwotKyAgICAgIGlmIChy Yl92YWwgPT0gMCB8fCAocmFfdmFsID09IElOVDY0X01JTiAmJiByYl92YWwgPT0gLTEpKSB7Ci0r ICAgICAgICBzZXRSZWdpc3RlcihydCwgMCk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHNl dFJlZ2lzdGVyKHJ0LCByYV92YWwgLyByYl92YWwpOwotKyAgICAgIH0KLSsgICAgICBpZiAocmMp IHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGNhc2UgMTAwMTogewotKyAgICAgIC8vIGRpdmRvCi0rICAgICAgaW50NjRfdCByYV92YWwgPSBn ZXRSZWdpc3RlcihyYSk7Ci0rICAgICAgaW50NjRfdCByYl92YWwgPSBnZXRSZWdpc3RlcihyYik7 Ci0rICAgICAgYm9vbCBvdiA9IChyYl92YWwgPT0gMCkgfHwgKHJhX3ZhbCA9PSBJTlQ2NF9NSU4g JiYgcmJfdmFsID09IC0xKTsKLSsgICAgICBpZiAob3YpIHsKLSsgICAgICAgIHNldFJlZ2lzdGVy KHJ0LCAwKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIHJhX3Zh bCAvIHJiX3ZhbCk7Ci0rICAgICAgfQotKyAgICAgIHNldFhFUk9WKG92KTsKLSsgICAgICBpZiAo cmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0r ICAgIGNhc2UgNDU3OiB7Ci0rICAgICAgLy8gZGl2ZHU6IHVuc2lnbmVkIDY0LWJpdCBkaXZpZGUK LSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKLSsgICAgICB1 aW50NjRfdCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmIpKTsKLSsgICAgICBpZiAocmJfdmFs ID09IDApIHsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKLSsgICAgICB9IGVsc2Ugewot KyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyYV92YWwgLyByYl92YWwpKTsKLSsgICAgICB9 Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICBicmVh azsKLSsgICAgfQotKyAgICBjYXNlIDk2OTogewotKyAgICAgIC8vIGRpdmR1bwotKyAgICAgIHVp bnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOwotKyAgICAgIHVpbnQ2NF90IHJi X3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYikpOwotKyAgICAgIGJvb2wgb3YgPSAocmJfdmFsID09 IDApOwotKyAgICAgIGlmIChvdikgewotKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIDApOwotKyAg ICAgIH0gZWxzZSB7Ci0rICAgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJhX3ZhbCAvIHJiX3Zh bCkpOwotKyAgICAgIH0KLSsgICAgICBzZXRYRVJPVihvdik7Ci0rICAgICAgaWYgKHJjKSB1cGRh dGVDUjAoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNl IDQ5MTogewotKyAgICAgIC8vIGRpdnc6IHNpZ25lZCAzMi1iaXQgZGl2aWRlCi0rICAgICAgaW50 MzJfdCByYV92YWwgPSBJMzIoZ2V0UmVnaXN0ZXIocmEpKTsKLSsgICAgICBpbnQzMl90IHJiX3Zh bCA9IEkzMihnZXRSZWdpc3RlcihyYikpOwotKyAgICAgIGlmIChyYl92YWwgPT0gMCB8fCAocmFf dmFsID09IElOVDMyX01JTiAmJiByYl92YWwgPT0gLTEpKSB7Ci0rICAgICAgICBzZXRSZWdpc3Rl cihydCwgMCk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50 NjRfdCkocmFfdmFsIC8gcmJfdmFsKSk7Ci0rICAgICAgfQotKyAgICAgIGlmIChyYykgdXBkYXRl Q1IwKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAx MDAzOiB7Ci0rICAgICAgLy8gZGl2d28KLSsgICAgICBpbnQzMl90IHJhX3ZhbCA9IEkzMihnZXRS ZWdpc3RlcihyYSkpOwotKyAgICAgIGludDMyX3QgcmJfdmFsID0gSTMyKGdldFJlZ2lzdGVyKHJi KSk7Ci0rICAgICAgYm9vbCBvdiA9IChyYl92YWwgPT0gMCkgfHwgKHJhX3ZhbCA9PSBJTlQzMl9N SU4gJiYgcmJfdmFsID09IC0xKTsKLSsgICAgICBpZiAob3YpIHsKLSsgICAgICAgIHNldFJlZ2lz dGVyKHJ0LCAwKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIChp bnQ2NF90KShyYV92YWwgLyByYl92YWwpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0WEVST1Yob3Yp OwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0NTk6IHsKLSsgICAgICAvLyBkaXZ3dTogdW5zaWduZWQg MzItYml0IGRpdmlkZQotKyAgICAgIHVpbnQzMl90IHJhX3ZhbCA9IFUzMihnZXRSZWdpc3Rlcihy YSkpOwotKyAgICAgIHVpbnQzMl90IHJiX3ZhbCA9IFUzMihnZXRSZWdpc3RlcihyYikpOwotKyAg ICAgIGlmIChyYl92YWwgPT0gMCkgewotKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIDApOwotKyAg ICAgIH0gZWxzZSB7Ci0rICAgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3QpKHJhX3ZhbCAv IHJiX3ZhbCkpOwotKyAgICAgIH0KLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3Rl cihydCkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgOTcxOiB7Ci0rICAgICAg Ly8gZGl2d3VvCi0rICAgICAgdWludDMyX3QgcmFfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJhKSk7 Ci0rICAgICAgdWludDMyX3QgcmJfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJiKSk7Ci0rICAgICAg Ym9vbCBvdiA9IChyYl92YWwgPT0gMCk7Ci0rICAgICAgaWYgKG92KSB7Ci0rICAgICAgICBzZXRS ZWdpc3RlcihydCwgMCk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0 LCAoaW50NjRfdCkocmFfdmFsIC8gcmJfdmFsKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFhFUk9W KG92KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOwotKyAgICAg IGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vIC0tLSBQT1dFUjkgbW9kdWxvIChJU0EgMy4wKSAt LS0KLSsgICAgLy8gUmVzdWx0IG9mICJ1bmRlZmluZWQiIGRpdmlzaW9uIChyYl92YWwgPT0gMCwg b3Igc2lnbmVkIElOVF9NSU4gLyAtMSkKLSsgICAgLy8gaXMgaW1wbGVtZW50YXRpb24tZGVmaW5l ZCBwZXIgUG93ZXIgSVNBOyBtYXRjaGluZyB0aGUgZGl2WCBiZWhhdmlvdXIKLSsgICAgLy8gYWJv dmUsIHdlIHlpZWxkIDAgaW4gdGhvc2UgY2FzZXMuIFJjIGhhcyBubyBlbmNvZGluZyBmb3IgdGhl c2Ugb3BzLgotKyAgICBjYXNlIDc3OTogewotKyAgICAgIC8vIG1vZHN3OiBSVCA9IFJBICUgUkIg KHNpZ25lZCwgMzItYml0KQotKyAgICAgIGludDMyX3QgcmFfdmFsID0gSTMyKGdldFJlZ2lzdGVy KHJhKSk7Ci0rICAgICAgaW50MzJfdCByYl92YWwgPSBJMzIoZ2V0UmVnaXN0ZXIocmIpKTsKLSsg ICAgICBpZiAocmJfdmFsID09IDAgfHwgKHJhX3ZhbCA9PSBJTlQzMl9NSU4gJiYgcmJfdmFsID09 IC0xKSkgewotKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIDApOwotKyAgICAgIH0gZWxzZSB7Ci0r ICAgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3QpKHJhX3ZhbCAlIHJiX3ZhbCkpOwotKyAg ICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDI2NzogewotKyAgICAgIC8v IG1vZHV3OiBSVCA9IFJBICUgUkIgKHVuc2lnbmVkLCAzMi1iaXQpCi0rICAgICAgdWludDMyX3Qg cmFfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJhKSk7Ci0rICAgICAgdWludDMyX3QgcmJfdmFsID0g VTMyKGdldFJlZ2lzdGVyKHJiKSk7Ci0rICAgICAgaWYgKHJiX3ZhbCA9PSAwKSB7Ci0rICAgICAg ICBzZXRSZWdpc3RlcihydCwgMCk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHNldFJlZ2lz dGVyKHJ0LCAoaW50NjRfdCkocmFfdmFsICUgcmJfdmFsKSk7Ci0rICAgICAgfQotKyAgICAgIGJy ZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNzc3OiB7Ci0rICAgICAgLy8gbW9kc2Q6IFJUID0gUkEg JSBSQiAoc2lnbmVkLCA2NC1iaXQpCi0rICAgICAgaW50NjRfdCByYV92YWwgPSBnZXRSZWdpc3Rl cihyYSk7Ci0rICAgICAgaW50NjRfdCByYl92YWwgPSBnZXRSZWdpc3RlcihyYik7Ci0rICAgICAg aWYgKHJiX3ZhbCA9PSAwIHx8IChyYV92YWwgPT0gSU5UNjRfTUlOICYmIHJiX3ZhbCA9PSAtMSkp IHsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAg ICAgc2V0UmVnaXN0ZXIocnQsIHJhX3ZhbCAlIHJiX3ZhbCk7Ci0rICAgICAgfQotKyAgICAgIGJy ZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjY1OiB7Ci0rICAgICAgLy8gbW9kdWQ6IFJUID0gUkEg JSBSQiAodW5zaWduZWQsIDY0LWJpdCkKLSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0 UmVnaXN0ZXIocmEpKTsKLSsgICAgICB1aW50NjRfdCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIo cmIpKTsKLSsgICAgICBpZiAocmJfdmFsID09IDApIHsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJ0 LCAwKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyYV92 YWwgJSByYl92YWwpKTsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAg Ly8gLS0tIExvZ2ljYWwgLS0tCi0rICAgIGNhc2UgMjg6IHsKLSsgICAgICAvLyBhbmQ6IFJBID0g UlMgJiBSQgotKyAgICAgIGludDY0X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIocnQpICYgZ2V0UmVn aXN0ZXIocmIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOwotKyAgICAgIGlmIChy YykgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA2 MDogewotKyAgICAgIC8vIGFuZGM6IFJBID0gUlMgJiB+UkIKLSsgICAgICBpbnQ2NF90IHJlc3Vs dCA9IGdldFJlZ2lzdGVyKHJ0KSAmIH5nZXRSZWdpc3RlcihyYik7Ci0rICAgICAgc2V0UmVnaXN0 ZXIocmEsIHJlc3VsdCk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAg ICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDQ0NDogewotKyAgICAgIC8vIG9yOiBSQSA9IFJT IHwgUkIKLSsgICAgICBpbnQ2NF90IHJlc3VsdCA9IGdldFJlZ2lzdGVyKHJ0KSB8IGdldFJlZ2lz dGVyKHJiKTsKLSsgICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKLSsgICAgICBpZiAocmMp IHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNDEy OiB7Ci0rICAgICAgLy8gb3JjOiBSQSA9IFJTIHwgflJCCi0rICAgICAgaW50NjRfdCByZXN1bHQg PSBnZXRSZWdpc3RlcihydCkgfCB+Z2V0UmVnaXN0ZXIocmIpOwotKyAgICAgIHNldFJlZ2lzdGVy KHJhLCByZXN1bHQpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAzMTY6IHsKLSsgICAgICAvLyB4b3I6IFJBID0gUlMg XiBSQgotKyAgICAgIGludDY0X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIocnQpIF4gZ2V0UmVnaXN0 ZXIocmIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOwotKyAgICAgIGlmIChyYykg dXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0NzY6 IHsKLSsgICAgICAvLyBuYW5kOiBSQSA9IH4oUlMgJiBSQikKLSsgICAgICBpbnQ2NF90IHJlc3Vs dCA9IH4oZ2V0UmVnaXN0ZXIocnQpICYgZ2V0UmVnaXN0ZXIocmIpKTsKLSsgICAgICBzZXRSZWdp c3RlcihyYSwgcmVzdWx0KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAg ICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTI0OiB7Ci0rICAgICAgLy8gbm9yOiBSQSA9 IH4oUlMgfCBSQikKLSsgICAgICBpbnQ2NF90IHJlc3VsdCA9IH4oZ2V0UmVnaXN0ZXIocnQpIHwg Z2V0UmVnaXN0ZXIocmIpKTsKLSsgICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKLSsgICAg ICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGNhc2UgMjg0OiB7Ci0rICAgICAgLy8gZXF2OiBSQSA9IH4oUlMgXiBSQikKLSsgICAgICBpbnQ2 NF90IHJlc3VsdCA9IH4oZ2V0UmVnaXN0ZXIocnQpIF4gZ2V0UmVnaXN0ZXIocmIpKTsKLSsgICAg ICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1 bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vIC0tLSBTaGlmdHMgLS0tCi0r ICAgIGNhc2UgMjc6IHsKLSsgICAgICAvLyBzbGQ6IFJBID0gUlMgPDwgUkJbNTg6NjNdIGlmIFJC WzU3XT09MCwgZWxzZSBSQT0wCi0rICAgICAgdWludDY0X3Qgc2hpZnQgPSBVNjQoZ2V0UmVnaXN0 ZXIocmIpKTsKLSsgICAgICB1aW50NjRfdCByc192YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocnQpKTsK LSsgICAgICBpbnQ2NF90IHJlc3VsdDsKLSsgICAgICBpZiAoc2hpZnQgJiAweDQwKSB7Ci0rICAg ICAgICByZXN1bHQgPSAwOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICByZXN1bHQgPSBJNjQo cnNfdmFsIDw8IChzaGlmdCAmIDB4M0YpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0UmVnaXN0ZXIo cmEsIHJlc3VsdCk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBi cmVhazsKLSsgICAgfQotKyAgICBjYXNlIDI0OiB7Ci0rICAgICAgLy8gc2x3OiBSQSA9IFJTWzMy OjYzXSA8PCBSQls1OTo2M10gaWYgUkJbNThdPT0wLCBlbHNlIFJBPTAgKDMyLWJpdCkKLSsgICAg ICB1aW50MzJfdCBzaGlmdCA9IFUzMihnZXRSZWdpc3RlcihyYikpOwotKyAgICAgIHVpbnQzMl90 IHJzX3ZhbCA9IFUzMihnZXRSZWdpc3RlcihydCkpOwotKyAgICAgIHVpbnQzMl90IHJlc3VsdDsK LSsgICAgICBpZiAoc2hpZnQgJiAweDIwKSB7Ci0rICAgICAgICByZXN1bHQgPSAwOwotKyAgICAg IH0gZWxzZSB7Ci0rICAgICAgICByZXN1bHQgPSByc192YWwgPDwgKHNoaWZ0ICYgMHgxRik7Ci0r ICAgICAgfQotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCAoaW50NjRfdCkoaW50MzJfdClyZXN1bHQp OwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJhKSk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1Mzk6IHsKLSsgICAgICAvLyBzcmQ6IFJBID0gUlMgPj4g UkJbNTg6NjNdIGlmIFJCWzU3XT09MCwgZWxzZSBSQT0wIChsb2dpY2FsKQotKyAgICAgIHVpbnQ2 NF90IHNoaWZ0ID0gVTY0KGdldFJlZ2lzdGVyKHJiKSk7Ci0rICAgICAgdWludDY0X3QgcnNfdmFs ID0gVTY0KGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgaW50NjRfdCByZXN1bHQ7Ci0rICAgICAg aWYgKHNoaWZ0ICYgMHg0MCkgewotKyAgICAgICAgcmVzdWx0ID0gMDsKLSsgICAgICB9IGVsc2Ug ewotKyAgICAgICAgcmVzdWx0ID0gSTY0KHJzX3ZhbCA+PiAoc2hpZnQgJiAweDNGKSk7Ci0rICAg ICAgfQotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOwotKyAgICAgIGlmIChyYykgdXBk YXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1MzY6IHsK LSsgICAgICAvLyBzcnc6IFJBID0gUlNbMzI6NjNdID4+IFJCWzU5OjYzXSBsb2dpY2FsICgzMi1i aXQpCi0rICAgICAgdWludDMyX3Qgc2hpZnQgPSBVMzIoZ2V0UmVnaXN0ZXIocmIpKTsKLSsgICAg ICB1aW50MzJfdCByc192YWwgPSBVMzIoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICB1aW50MzJf dCByZXN1bHQ7Ci0rICAgICAgaWYgKHNoaWZ0ICYgMHgyMCkgewotKyAgICAgICAgcmVzdWx0ID0g MDsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgcmVzdWx0ID0gcnNfdmFsID4+IChzaGlmdCAm IDB4MUYpOwotKyAgICAgIH0KLSsgICAgICBzZXRSZWdpc3RlcihyYSwgKGludDY0X3QpKGludDMy X3QpcmVzdWx0KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihyYSkpOwot KyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNzk0OiB7Ci0rICAgICAgLy8gc3JhZDog UkEgPSBSUyA+PiBSQls1ODo2M10gYXJpdGhtZXRpYyAoNjQtYml0KSwgc2V0IENBCi0rICAgICAg dWludDY0X3Qgc2hpZnQgPSBVNjQoZ2V0UmVnaXN0ZXIocmIpKTsKLSsgICAgICBpbnQ2NF90IHJz X3ZhbCA9IGdldFJlZ2lzdGVyKHJ0KTsKLSsgICAgICBpbnQ2NF90IHJlc3VsdDsKLSsgICAgICBi b29sIGNhcnJ5OwotKyAgICAgIGlmIChzaGlmdCAmIDB4NDApIHsKLSsgICAgICAgIHJlc3VsdCA9 IHJzX3ZhbCA+PiA2MzsgIC8vIGFsbCBzaWduIGJpdHMKLSsgICAgICAgIGNhcnJ5ID0gKHJzX3Zh bCA8IDApOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICB1aW50MzJfdCBzaCA9IHNoaWZ0ICYg MHgzRjsKLSsgICAgICAgIHJlc3VsdCA9IHJzX3ZhbCA+PiBzaDsKLSsgICAgICAgIC8vIENBID0g MSBpZiBSUyBpcyBuZWdhdGl2ZSBhbmQgYW55IDEtYml0cyB3ZXJlIHNoaWZ0ZWQgb3V0LgotKyAg ICAgICAgY2FycnkgPSAocnNfdmFsIDwgMCkgJiYgKChyc192YWwgJiAoKDFVTEwgPDwgc2gpIC0g MSkpICE9IDApOwotKyAgICAgIH0KLSsgICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKLSsg ICAgICBzZXRYRVJDQShjYXJyeSk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsK LSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDc5MjogewotKyAgICAgIC8vIHNyYXc6 IFJBID0gUlNbMzI6NjNdID4+IFJCWzU5OjYzXSBhcml0aG1ldGljICgzMi1iaXQpLCBzZXQgQ0EK LSsgICAgICB1aW50MzJfdCBzaGlmdCA9IFUzMihnZXRSZWdpc3RlcihyYikpOwotKyAgICAgIGlu dDMyX3QgcnNfdmFsID0gSTMyKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgaW50MzJfdCByZXN1 bHQ7Ci0rICAgICAgYm9vbCBjYXJyeTsKLSsgICAgICBpZiAoc2hpZnQgJiAweDIwKSB7Ci0rICAg ICAgICByZXN1bHQgPSByc192YWwgPj4gMzE7Ci0rICAgICAgICBjYXJyeSA9IChyc192YWwgPCAw KTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgdWludDMyX3Qgc2ggPSBzaGlmdCAmIDB4MUY7 Ci0rICAgICAgICByZXN1bHQgPSByc192YWwgPj4gc2g7Ci0rICAgICAgICBjYXJyeSA9IChyc192 YWwgPCAwKSAmJiAoKHJzX3ZhbCAmICgoMVUgPDwgc2gpIC0gMSkpICE9IDApOwotKyAgICAgIH0K LSsgICAgICBzZXRSZWdpc3RlcihyYSwgKGludDY0X3QpcmVzdWx0KTsKLSsgICAgICBzZXRYRVJD QShjYXJyeSk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocmEpKTsKLSsg ICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDgyNjoKLSsgICAgY2FzZSA4Mjc6IHsKLSsg ICAgICAvLyBzcmFkaSBSQSwgUlMsIFNIOiBSQSA9IEVYVFMoUlMpID4+IHNoIGFyaXRobWV0aWMg KDY0LWJpdCksIHNldCBDQS4KLSsgICAgICAvLyBYUy1mb3JtLCBYTz00MTMgKDktYml0LCBiaXRz IDIxLTI5KSwgc2hbNV0gYXQgYml0IDMwLCBSYyBhdCBiaXQgMzEuCi0rICAgICAgLy8gT3VyIHhv VmFsdWUoKSBleHRyYWN0cyBiaXRzIDEwOjEgKDEwIGJpdHMpCi0rICAgICAgLy8gd2hpY2ggeWll bGRzIDQxMyoyICsgc2hbNV0gPSA4MjYgKHNoWzVdPTApIG9yIDgyNyAoc2hbNV09MSkuCi0rICAg ICAgLy8gc2hbMDo0XSBhdCBpbnN0cnVjdGlvbiBiaXRzIDE1OjExICg9IHJhVmFsdWUgZmllbGQg cG9zaXRpb24sIGJ1dAotKyAgICAgIC8vIGZvciB0aGlzIFhTLWZvcm0gdGhleSdyZSB0aGUgU0hb MDo0XSBzdWJmaWVsZCkuCi0rICAgICAgdWludDMyX3Qgc2ggPSBpbnN0ci0+Yml0cygxNSwgMTEp IHwgKGluc3RyLT5iaXQoMSkgPDwgNSk7Ci0rICAgICAgaW50NjRfdCByc192YWwgPSBnZXRSZWdp c3RlcihydCk7Ci0rICAgICAgaW50NjRfdCByZXN1bHQgPSAoc2ggPT0gMCkgPyByc192YWwgOiAo cnNfdmFsID4+IHNoKTsKLSsgICAgICAvLyBDQSA6PSByc192YWwgPCAwICYmIGFueSBiaXRzIHNo aWZ0ZWQgb3V0IGFyZSAxLgotKyAgICAgIGJvb2wgY2FycnkgPSAocnNfdmFsIDwgMCkgJiYgc2gg PiAwICYmCi0rICAgICAgICAgICAgICAgICAgICgoVTY0KHJzX3ZhbCkgJiAoKDFVTEwgPDwgc2gp IC0gMSkpICE9IDApOwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOwotKyAgICAgIHNl dFhFUkNBKGNhcnJ5KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAg IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgODI0OiB7Ci0rICAgICAgLy8gc3Jhd2k6IFJBID0g UlNbMzI6NjNdID4+IFNIIGFyaXRobWV0aWMgKDMyLWJpdCksIHNldCBDQQotKyAgICAgIHVpbnQz Ml90IHNoID0gaW5zdHItPmJpdHMoMTUsIDExKTsKLSsgICAgICBpbnQzMl90IHJzX3ZhbCA9IEkz MihnZXRSZWdpc3RlcihydCkpOwotKyAgICAgIGludDMyX3QgcmVzdWx0ID0gcnNfdmFsID4+IHNo OwotKyAgICAgIGJvb2wgY2FycnkgPSAocnNfdmFsIDwgMCkgJiYgc2ggPiAwICYmCi0rICAgICAg ICAgICAgICAgICAgICgoVTMyKHJzX3ZhbCkgJiAoKDFVIDw8IHNoKSAtIDEpKSAhPSAwKTsKLSsg ICAgICBzZXRSZWdpc3RlcihyYSwgKGludDY0X3QpcmVzdWx0KTsKLSsgICAgICBzZXRYRVJDQShj YXJyeSk7Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocmEpKTsKLSsgICAg ICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyAtLS0gRXh0ZW5kIC8gY291bnQgLS0tCi0rICAg IGNhc2UgOTU0OiB7Ci0rICAgICAgLy8gZXh0c2I6IFJBID0gc2lnbl9leHQoUlNbNTY6NjNdKQot KyAgICAgIGludDY0X3QgcmVzdWx0ID0gKGludDY0X3QpKGludDhfdCkoZ2V0UmVnaXN0ZXIocnQp ICYgMHhGRik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7Ci0rICAgICAgaWYgKHJj KSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDky MjogewotKyAgICAgIC8vIGV4dHNoOiBSQSA9IHNpZ25fZXh0KFJTWzQ4OjYzXSkKLSsgICAgICBp bnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90KShpbnQxNl90KShnZXRSZWdpc3RlcihydCkgJiAweEZG RkYpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOwotKyAgICAgIGlmIChyYykgdXBk YXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA5ODY6IHsK LSsgICAgICAvLyBleHRzdzogUkEgPSBzaWduX2V4dChSU1szMjo2M10pCi0rICAgICAgaW50NjRf dCByZXN1bHQgPSAoaW50NjRfdCkoaW50MzJfdCkoZ2V0UmVnaXN0ZXIocnQpICYgMHhGRkZGRkZG Rik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7Ci0rICAgICAgaWYgKHJjKSB1cGRh dGVDUjAocmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDU4OiB7Ci0r ICAgICAgLy8gY250bHpkOiBSQSA9IGNvdW50IGxlYWRpbmcgemVyb3Mgb2YgUlMgKDY0LWJpdCkK LSsgICAgICBzZXRSZWdpc3RlcihyYSwgQ291bnRMZWFkaW5nWmVyb3M2NChVNjQoZ2V0UmVnaXN0 ZXIocnQpKSkpOwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJhKSk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAyNjogewotKyAgICAgIC8vIGNudGx6dzog UkEgPSBjb3VudCBsZWFkaW5nIHplcm9zIG9mIFJTWzMyOjYzXSAoMzItYml0KQotKyAgICAgIHNl dFJlZ2lzdGVyKHJhLCBDb3VudExlYWRpbmdaZXJvczMyKFUzMihnZXRSZWdpc3RlcihydCkpKSk7 Ci0rICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocmEpKTsKLSsgICAgICBicmVh azsKLSsgICAgfQotKyAgICBjYXNlIDU3MDogewotKyAgICAgIC8vIGNudHR6ZAotKyAgICAgIHNl dFJlZ2lzdGVyKHJhLCBDb3VudFRyYWlsaW5nWmVyb3M2NChVNjQoZ2V0UmVnaXN0ZXIocnQpKSkp OwotKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJhKSk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1Mzg6IHsKLSsgICAgICAvLyBjbnR0encKLSsgICAgICBz ZXRSZWdpc3RlcihyYSwgQ291bnRUcmFpbGluZ1plcm9zMzIoVTMyKGdldFJlZ2lzdGVyKHJ0KSkp KTsKLSsgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihyYSkpOwotKyAgICAgIGJy ZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNTA2OiB7Ci0rICAgICAgLy8gcG9wY250ZAotKyAgICAg IHNldFJlZ2lzdGVyKHJhLCBQb3BDb3VudDY0KFU2NChnZXRSZWdpc3RlcihydCkpKSk7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAzNzg6IHsKLSsgICAgICAvLyBwb3BjbnR3OiBw b3Bjb3VudCBlYWNoIDMyLWJpdCBoYWxmIGluZGVwZW5kZW50bHksIHN1bSBpbiBlYWNoIGhhbGYK LSsgICAgICB1aW50NjRfdCB2YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICB1aW50 MzJfdCBsbyA9IFBvcENvdW50MzIoVTMyKHZhbCkpOwotKyAgICAgIHVpbnQzMl90IGhpID0gUG9w Q291bnQzMihVMzIodmFsID4+IDMyKSk7Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIEk2NCgoKHVp bnQ2NF90KWhpIDw8IDMyKSB8IGxvKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2Fz ZSAxMjI6IHsKLSsgICAgICAvLyBwb3BjbnRiOiBwb3Bjb3VudCBlYWNoIGJ5dGUgaW5kZXBlbmRl bnRseQotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBJNjQoUG9wQ291bnRQZXJCeXRlKFU2NChnZXRS ZWdpc3RlcihydCkpKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTg3OiB7 Ci0rICAgICAgLy8gYnJkIChQT1dFUjEwKTogUkEgPSBieXRlLXJldmVyc2UoUlMpIGZ1bGwgNjQt Yml0IGRvdWJsZXdvcmQuCi0rICAgICAgc2V0UmVnaXN0ZXIocmEsIEk2NChfX2J1aWx0aW5fYnN3 YXA2NChVNjQoZ2V0UmVnaXN0ZXIocnQpKSkpKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAg ICBjYXNlIDIxOTogewotKyAgICAgIC8vIGJyaCAoUE9XRVIxMCk6IGJ5dGUtcmV2ZXJzZSBlYWNo IG9mIHRoZSA0IGhhbGZ3b3JkcyBpbiBSUy4KLSsgICAgICB1aW50NjRfdCB2ID0gVTY0KGdldFJl Z2lzdGVyKHJ0KSk7Ci0rICAgICAgdWludDY0X3Qgb3V0ID0gKCh2ICYgMHhGRjAwRkYwMEZGMDBG RjAwVUxMKSA+PiA4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgKCh2ICYgMHgwMEZGMDBGRjAw RkYwMEZGVUxMKSA8PCA4KTsKLSsgICAgICBzZXRSZWdpc3RlcihyYSwgSTY0KG91dCkpOwotKyAg ICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTU1OiB7Ci0rICAgICAgLy8gYnJ3IChQT1dF UjEwKTogYnl0ZS1yZXZlcnNlIGVhY2ggb2YgdGhlIDIgd29yZHMgaW4gUlMuCi0rICAgICAgdWlu dDY0X3QgdiA9IFU2NChnZXRSZWdpc3RlcihydCkpOwotKyAgICAgIHVpbnQ2NF90IG91dCA9ICgo dWludDY0X3QpX19idWlsdGluX2Jzd2FwMzIoKHVpbnQzMl90KSh2ID4+IDMyKSkgPDwgMzIpIHwK LSsgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpX19idWlsdGluX2Jzd2FwMzIoKHVpbnQz Ml90KXYpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBJNjQob3V0KSk7Ci0rICAgICAgYnJlYWs7 Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0tIENvbXBhcmUgKFgtZm9ybSkgLS0tCi0rICAgIGNhc2Ug MDogewotKyAgICAgIC8vIGNtcCAoY21wdy9jbXBkKTogc2lnbmVkIGNvbXBhcmUKLSsgICAgICB1 aW50MzJfdCBiZiA9IGluc3RyLT5iZlZhbHVlKCk7Ci0rICAgICAgYm9vbCBsID0gaW5zdHItPmxC aXQoKTsKLSsgICAgICBpZiAobCkgewotKyAgICAgICAgc2V0Q1JGaWVsZENtcChiZiwgZ2V0UmVn aXN0ZXIocmEpLCBnZXRSZWdpc3RlcihyYikpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBz ZXRDUkZpZWxkQ21wKGJmLCAoaW50NjRfdClJMzIoZ2V0UmVnaXN0ZXIocmEpKSwKLSsgICAgICAg ICAgICAgICAgICAgICAgKGludDY0X3QpSTMyKGdldFJlZ2lzdGVyKHJiKSkpOwotKyAgICAgIH0K LSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDMyOiB7Ci0rICAgICAgLy8gY21wbCAo Y21wbHcvY21wbGQpOiB1bnNpZ25lZCBjb21wYXJlCi0rICAgICAgdWludDMyX3QgYmYgPSBpbnN0 ci0+YmZWYWx1ZSgpOwotKyAgICAgIGJvb2wgbCA9IGluc3RyLT5sQml0KCk7Ci0rICAgICAgaWYg KGwpIHsKLSsgICAgICAgIHNldENSRmllbGRDbXBVKGJmLCBVNjQoZ2V0UmVnaXN0ZXIocmEpKSwg VTY0KGdldFJlZ2lzdGVyKHJiKSkpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBzZXRDUkZp ZWxkQ21wVShiZiwgKHVpbnQ2NF90KVUzMihnZXRSZWdpc3RlcihyYSkpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgKHVpbnQ2NF90KVUzMihnZXRSZWdpc3RlcihyYikpKTsKLSsgICAgICB9Ci0r ICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0tIFRyYXAgLS0tCi0rICAgIGNhc2Ug NDogewotKyAgICAgIC8vIHR3OiBUcmFwIFdvcmQuIFRoZSBKSVQgdXNlcyB0aGlzIGZvciBkZWJ1 Z2dpbmcgLyB0YWdnaW5nLgotKyAgICAgIC8vIEluIHRoZSBzaW11bGF0b3Igd2UganVzdCB0cmVh dCBpdCBhcyBhIE5PUCAodGhlIEpJVCB1c2VzIHRhZ2dlZAotKyAgICAgIC8vIHRyYXAgd29yZHMg dGhhdCBhcmUgbmV2ZXIgYWN0dWFsbHkgcmVhY2hlZCBkdXJpbmcgbm9ybWFsIGV4ZWN1dGlvbiwK LSsgICAgICAvLyB0aGV5IHNlcnZlIGFzIG1ldGFkYXRhIGZvciB0aGUgcGF0Y2hlcikuCi0rICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0tIFNQUiAtLS0KLSsgICAgY2FzZSAzMzk6 IHsKLSsgICAgICAvLyBtZnNwcjogUlQgPSBTUFIKLSsgICAgICAvLyBTUFIgZW5jb2Rpbmc6IHNw cls0OjBdIGF0IGJpdHMgMTYuLjIwLCBzcHJbOTo1XSBhdCBiaXRzIDExLi4xNQotKyAgICAgIHVp bnQzMl90IHNwcl9sbyA9IGluc3RyLT5yYVZhbHVlKCk7ICAvLyBiaXRzIDE2Li4yMAotKyAgICAg IHVpbnQzMl90IHNwcl9oaSA9IGluc3RyLT5yYlZhbHVlKCk7ICAvLyBiaXRzIDExLi4xNQotKyAg ICAgIHVpbnQzMl90IHNwciA9IChzcHJfbG8pIHwgKHNwcl9oaSA8PCA1KTsKLSsgICAgICBzd2l0 Y2ggKHNwcikgewotKyAgICAgICAgY2FzZSA4OiAgLy8gTFIKLSsgICAgICAgICAgc2V0UmVnaXN0 ZXIocnQsIGdldExSKCkpOwotKyAgICAgICAgICBicmVhazsKLSsgICAgICAgIGNhc2UgOTogIC8v IENUUgotKyAgICAgICAgICBzZXRSZWdpc3RlcihydCwgZ2V0Q1RSKCkpOwotKyAgICAgICAgICBi cmVhazsKLSsgICAgICAgIGNhc2UgMTogIC8vIFhFUgotKyAgICAgICAgICBzZXRSZWdpc3Rlcihy dCwgSTY0KGdldFhFUigpKSk7Ci0rICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgZGVmYXVsdDoK LSsgICAgICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoIm1mc3ByOiB1bmhhbmRsZWQgU1BS ICV1Iiwgc3ByKTsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0 Njc6IHsKLSsgICAgICAvLyBtdHNwcjogU1BSID0gUlMKLSsgICAgICB1aW50MzJfdCBzcHJfbG8g PSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgICAgIHVpbnQzMl90IHNwcl9oaSA9IGluc3RyLT5yYlZh bHVlKCk7Ci0rICAgICAgdWludDMyX3Qgc3ByID0gKHNwcl9sbykgfCAoc3ByX2hpIDw8IDUpOwot KyAgICAgIGludDY0X3QgdmFsID0gZ2V0UmVnaXN0ZXIocnQpOwotKyAgICAgIHN3aXRjaCAoc3By KSB7Ci0rICAgICAgICBjYXNlIDg6ICAvLyBMUgotKyAgICAgICAgICBzZXRMUih2YWwpOwotKyAg ICAgICAgICBicmVhazsKLSsgICAgICAgIGNhc2UgOTogIC8vIENUUgotKyAgICAgICAgICBzZXRD VFIodmFsKTsKLSsgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICBjYXNlIDE6ICAvLyBYRVIKLSsg ICAgICAgICAgc2V0WEVSKFU2NCh2YWwpKTsKLSsgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICBk ZWZhdWx0OgotKyAgICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigibXRzcHI6IHVuaGFu ZGxlZCBTUFIgJXUiLCBzcHIpOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgfQotKyAg ICBjYXNlIDE5OiB7Ci0rICAgICAgLy8gbWZvY3JmOiByZWFkIG9uZSBDUiBmaWVsZCBzZWxlY3Rl ZCBieSB0aGUgRlhNIGJpdG1hc2sgaW50byBSVC4KLSsgICAgICAvLyAoUGxhaW4gbWZjciBzaGFy ZXMgdGhpcyBYTyB3aXRoIEZYTT0wOyB3ZSBtb2RlbCBib3RoIGJ5IHJlYWRpbmcKLSsgICAgICAv LyB0aGUgZnVsbCBDUiDigJQgdGhlIEpJVCBvbmx5IGVtaXRzIG1mb2NyZiBhbmQgdGhlIGJpdHMg b3V0c2lkZSB0aGUKLSsgICAgICAvLyBzZWxlY3RlZCBmaWVsZCBhcmUgc3BlYydkICJ1bmRlZmlu ZWQiLCBzbyByZWFkaW5nIHRoZSBmdWxsIENSIGlzCi0rICAgICAgLy8gYSB2YWxpZCBpbXBsZW1l bnRhdGlvbi4pCi0rICAgICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KWdldENSKCkpOwotKyAg ICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTQ0OiB7Ci0rICAgICAgLy8gbXRjcmY6IG1v dmUgdG8gQ1IgZmllbGRzCi0rICAgICAgLy8gRlhNIGZpZWxkIGlzIGluIGJpdHMgMTIuLjE5Lgot KyAgICAgIHVpbnQzMl90IGZ4bSA9IGluc3RyLT5iaXRzKDE5LCAxMik7Ci0rICAgICAgdWludDMy X3QgcnNfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJ0KSk7Ci0rICAgICAgdWludDMyX3QgY3IgPSBn ZXRDUigpOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBp ZiAoZnhtICYgKDB4ODAgPj4gaSkpIHsKLSsgICAgICAgICAgdWludDMyX3Qgc2hpZnQgPSA0ICog KDcgLSBpKTsKLSsgICAgICAgICAgY3IgPSAoY3IgJiB+KDB4RnUgPDwgc2hpZnQpKSB8IChyc192 YWwgJiAoMHhGdSA8PCBzaGlmdCkpOwotKyAgICAgICAgfQotKyAgICAgIH0KLSsgICAgICBzZXRD Uihjcik7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1NzY6IHsKLSsgICAgICAv LyBtY3J4cng6IG1vdmUgWEVSW09WLE9WMzIsQ0EsQ0EzMl0gdG8gQ1IgZmllbGQgQkYKLSsgICAg ICB1aW50MzJfdCBiZiA9IGluc3RyLT5iZlZhbHVlKCk7Ci0rICAgICAgdWludDhfdCBmaWVsZCA9 IDA7Ci0rICAgICAgaWYgKGdldFhFUk9WKCkpIGZpZWxkIHw9IDB4ODsKLSsgICAgICAvLyBPVjMy IGF0IGJpdCAxOSBvZiBYRVIKLSsgICAgICBpZiAoKGdldFhFUigpID4+IGtYRVJPVjMyQml0KSAm IDEpIGZpZWxkIHw9IDB4NDsKLSsgICAgICBpZiAoZ2V0WEVSQ0EoKSkgZmllbGQgfD0gMHgyOwot KyAgICAgIGlmICgoZ2V0WEVSKCkgPj4ga1hFUkNBMzJCaXQpICYgMSkgZmllbGQgfD0gMHgxOwot KyAgICAgIHNldENSRmllbGQoYmYsIGZpZWxkKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAg ICBjYXNlIDM4NDoKLSsgICAgY2FzZSA0MTY6IHsKLSsgICAgICAvLyBQT1dFUjEwIHNldGJjL3Nl dGJjcjogUlQgPSAoQ1JbQkldPT1OKSA/IDEgOiAwCi0rICAgICAgLy8gQkkgYXQgYml0cyAxMS4u MTU7IHhvPTM4NCAoc2V0YmMsIE49MSksIHhvPTQxNiAoc2V0YmNyLCBOPTApLgotKyAgICAgIHVp bnQzMl90IGJpID0gaW5zdHItPnJhVmFsdWUoKTsKLSsgICAgICB1aW50MzJfdCBjckZpZWxkID0g YmkgLyA0OwotKyAgICAgIHVpbnQzMl90IGNyQml0ID0gYmkgJSA0OwotKyAgICAgIHVpbnQ4X3Qg Y3JGaWVsZFZhbCA9IGdldENSRmllbGQoY3JGaWVsZCk7Ci0rICAgICAgYm9vbCBiaXRTZXQ7Ci0r ICAgICAgc3dpdGNoIChjckJpdCkgewotKyAgICAgICAgY2FzZSAwOiBiaXRTZXQgPSAoY3JGaWVs ZFZhbCAmIGtDUkZpZWxkTFQpICE9IDA7IGJyZWFrOwotKyAgICAgICAgY2FzZSAxOiBiaXRTZXQg PSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkR1QpICE9IDA7IGJyZWFrOwotKyAgICAgICAgY2FzZSAy OiBiaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkRVEpICE9IDA7IGJyZWFrOwotKyAgICAg ICAgY2FzZSAzOiBiaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkU08pICE9IDA7IGJyZWFr OwotKyAgICAgICAgZGVmYXVsdDogYml0U2V0ID0gZmFsc2U7IGJyZWFrOwotKyAgICAgIH0KLSsg ICAgICBib29sIHdhbnQgPSAoeG8gPT0gMzg0KSA/IGJpdFNldCA6ICFiaXRTZXQ7Ci0rICAgICAg c2V0UmVnaXN0ZXIocnQsIHdhbnQgPyAxIDogMCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsK LSsgICAgLy8gLS0tIEluZGV4ZWQgbG9hZHMgLS0tCi0rICAgIGNhc2UgMjE6IHsKLSsgICAgICAv LyBsZHg6IFJUID0gW1JBfDAgKyBSQl0sIDggYnl0ZXMKLSsgICAgICB1aW50NjRfdCBlYSA9IFhG b3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZWFkRFcoZWEsIGlu c3RyKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1MzogewotKyAgICAgIC8v IGxkdXg6IFJUID0gW1JBICsgUkJdLCB1cGRhdGUgUkEKLSsgICAgICB1aW50NjRfdCBlYSA9IFhG b3JtRUFVcGRhdGUodGhpcywgaW5zdHIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZWFkRFco ZWEsIGluc3RyKSk7Ci0rICAgICAgc2V0UmVnaXN0ZXIocmEsIGVhKTsKLSsgICAgICBicmVhazsK LSsgICAgfQotKyAgICBjYXNlIDIzOiB7Ci0rICAgICAgLy8gbHd6eDogUlQgPSB6ZXJvX2V4dChb UkF8MCArIFJCXSwgNCBieXRlcykKLSsgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywg aW5zdHIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBVNjQocmVhZFdVKGVhLCBpbnN0cikpKTsK LSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDM0MTogewotKyAgICAgIC8vIGx3YXg6 IFJUID0gc2lnbl9leHQoW1JBfDAgKyBSQl0sIDQgYnl0ZXMpCi0rICAgICAgdWludDY0X3QgZWEg PSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3Qp cmVhZFcoZWEsIGluc3RyKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA4Nzog ewotKyAgICAgIC8vIGxiengKLSsgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5z dHIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBVNjQocmVhZEJVKGVhKSkpOwotKyAgICAgIGJy ZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjc5OiB7Ci0rICAgICAgLy8gbGh6eAotKyAgICAgIHVp bnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQs IFU2NChyZWFkSFUoZWEsIGluc3RyKSkpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNh c2UgMzQzOiB7Ci0rICAgICAgLy8gbGhheAotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0 aGlzLCBpbnN0cik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KXJlYWRIKGVhLCBp bnN0cikpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNTM1OiB7Ci0rICAgICAg Ly8gbGZzeDogbG9hZCBmbG9hdCBzaW5nbGUgaW5kZXhlZCwgd2lkZW4gdG8gZG91YmxlIChOYU4t cHJlc2VydmluZykKLSsgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwot KyAgICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCA0KSkgewotKyAgICAgICAgZmxvYXQg dmFsID0gKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihlYSk7Ci0rICAgICAgICBzZXRGcHVSZWdp c3RlckRvdWJsZShydCwgcHJvbW90ZUZsb2F0UHJlc2VydmluZ05hTih2YWwpKTsKLSsgICAgICB9 Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1OTk6IHsKLSsgICAgICAvLyBsZmR4 OiBsb2FkIGZsb2F0IGRvdWJsZSBpbmRleGVkCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVB KHRoaXMsIGluc3RyKTsKLSsgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVhZEQoZWEs IGluc3RyKSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA4NTU6IHsKLSsgICAg ICAvLyBsZml3YXg6IGxvYWQgZmxvYXQgYXMgaW50ZWdlciB3b3JkIGFsZ2VicmFpYwotKyAgICAg IHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgaW50MzJfdCB2YWwg PSByZWFkVyhlYSwgaW5zdHIpOwotKyAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0LCAoaW50NjRfdCl2 YWwpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgODg3OiB7Ci0rICAgICAgLy8g bGZpd3p4OiBsb2FkIGZsb2F0IGFzIGludGVnZXIgd29yZCB6ZXJvCi0rICAgICAgdWludDY0X3Qg ZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICB1aW50MzJfdCB2YWwgPSByZWFkV1Uo ZWEsIGluc3RyKTsKLSsgICAgICBzZXRGcHVSZWdpc3RlcihydCwgKGludDY0X3QpKHVpbnQ2NF90 KXZhbCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0tIEluZGV4ZWQgc3Rv cmVzIC0tLQotKyAgICBjYXNlIDE0OTogewotKyAgICAgIC8vIHN0ZHgKLSsgICAgICB1aW50NjRf dCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIHdyaXRlRFcoZWEsIGdldFJlZ2lz dGVyKHJ0KSwgaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTUxOiB7 Ci0rICAgICAgLy8gc3R3eAotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0 cik7Ci0rICAgICAgd3JpdGVXKGVhLCBJMzIoZ2V0UmVnaXN0ZXIocnQpKSwgaW5zdHIpOwotKyAg ICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjE1OiB7Ci0rICAgICAgLy8gc3RieAotKyAg ICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgd3JpdGVCKGVh LCAodWludDhfdCkoZ2V0UmVnaXN0ZXIocnQpICYgMHhGRikpOwotKyAgICAgIGJyZWFrOwotKyAg ICB9Ci0rICAgIGNhc2UgNDA3OiB7Ci0rICAgICAgLy8gc3RoeAotKyAgICAgIHVpbnQ2NF90IGVh ID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgd3JpdGVIKGVhLCBVMTYoZ2V0UmVnaXN0 ZXIocnQpKSwgaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNjYzOiB7 Ci0rICAgICAgLy8gc3Rmc3g6IHN0b3JlIGZsb2F0IHNpbmdsZSBpbmRleGVkIChOYU4tcHJlc2Vy dmluZykKLSsgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAg IGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCA0KSkgewotKyAgICAgICAgZmxvYXQgZnZhbCA9 IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZ2V0RnB1UmVnaXN0ZXJEb3VibGUocnQpKTsKLSsg ICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0Kj4oZWEpID0gZnZhbDsKLSsgICAgICAgIExM Qml0XyA9IGZhbHNlOwotKyAgICAgIH0KLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNl IDcyNzogewotKyAgICAgIC8vIHN0ZmR4OiBzdG9yZSBmbG9hdCBkb3VibGUgaW5kZXhlZAotKyAg ICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgd3JpdGVEKGVh LCBnZXRGcHVSZWdpc3RlckRvdWJsZShydCksIGluc3RyKTsKLSsgICAgICBicmVhazsKLSsgICAg fQotKwotKyAgICAvLyAtLS0gQnl0ZS1yZXZlcnNlZCBzdG9yZXMgLS0tCi0rICAgIGNhc2UgNjYy OiB7Ci0rICAgICAgLy8gc3R3YnJ4Ci0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMs IGluc3RyKTsKLSsgICAgICB1aW50MzJfdCB2YWwgPSBVMzIoZ2V0UmVnaXN0ZXIocnQpKTsKLSsg ICAgICB3cml0ZVcoZWEsIChpbnQzMl90KV9fYnVpbHRpbl9ic3dhcDMyKHZhbCksIGluc3RyKTsK LSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyAtLS0gQXRvbWljIGxvYWQvc3RvcmUg LS0tCi0rICAgIC8vCi0rICAgIC8vIExvYWQtcmVzZXJ2ZSBhbmQgc3RvcmUtY29uZGl0aW9uYWwu IFN1Yi13b3JkIHZhcmlhbnRzCi0rICAgIC8vIChsYmFyeC9saGFyeC9zdGJjeC4vc3RoY3guKSB3 ZXJlIGFkZGVkIGluIElTQSB2Mi4wNiAoUE9XRVI3KykuCi0rICAgIC8vIFdvcmQvZG91Ymxld29y ZCB2YXJpYW50cyAobHdhcngvc3R3Y3guL2xkYXJ4L3N0ZGN4LikgZ28gYmFjawotKyAgICAvLyB0 byB0aGUgYmFzZSBJU0EuCi0rICAgIGNhc2UgNTI6IHsKLSsgICAgICAvLyBsYmFyeCBSVCwgUkEs IFJCLCBFSAotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAg ICAgdWludDhfdCB2YWwgPSBsb2FkTGlua2VkQihlYSwgaW5zdHIpOwotKyAgICAgIHNldFJlZ2lz dGVyKHJ0LCAoaW50NjRfdCl2YWwpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2Ug MTE2OiB7Ci0rICAgICAgLy8gbGhhcnggUlQsIFJBLCBSQiwgRUgKLSsgICAgICB1aW50NjRfdCBl YSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIHVpbnQxNl90IHZhbCA9IGxvYWRMaW5r ZWRIKGVhLCBpbnN0cik7Ci0rICAgICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KXZhbCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA2OTQ6IHsKLSsgICAgICAvLyBzdGJjeC4g UlMsIFJBLCBSQjogYWx3YXlzIFJjPTEuCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRo aXMsIGluc3RyKTsKLSsgICAgICB1aW50OF90IHZhbCA9IHVpbnQ4X3QoZ2V0UmVnaXN0ZXIocnQp KTsKLSsgICAgICBpbnQgcmVzdWx0ID0gc3RvcmVDb25kaXRpb25hbEIoZWEsIHZhbCwgaW5zdHIp OwotKyAgICAgIGlmIChyZXN1bHQpIHsKLSsgICAgICAgIHNldENSRmllbGQoMCwga0NSRmllbGRF USB8IChrQ1JGaWVsZFNPICogZ2V0WEVSU08oKSkpOwotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAg ICBzZXRDUkZpZWxkKDAsIGtDUkZpZWxkU08gKiBnZXRYRVJTTygpKTsKLSsgICAgICB9Ci0rICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA3MjY6IHsKLSsgICAgICAvLyBzdGhjeC4gUlMs IFJBLCBSQjogYWx3YXlzIFJjPTEuCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMs IGluc3RyKTsKLSsgICAgICB1aW50MTZfdCB2YWwgPSB1aW50MTZfdChnZXRSZWdpc3RlcihydCkp OwotKyAgICAgIGludCByZXN1bHQgPSBzdG9yZUNvbmRpdGlvbmFsSChlYSwgdmFsLCBpbnN0cik7 Ci0rICAgICAgaWYgKHJlc3VsdCkgewotKyAgICAgICAgc2V0Q1JGaWVsZCgwLCBrQ1JGaWVsZEVR IHwgKGtDUkZpZWxkU08gKiBnZXRYRVJTTygpKSk7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAg IHNldENSRmllbGQoMCwga0NSRmllbGRTTyAqIGdldFhFUlNPKCkpOwotKyAgICAgIH0KLSsgICAg ICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDIwOiB7Ci0rICAgICAgLy8gbHdhcngKLSsgICAg ICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIGludDMyX3QgdmFs ID0gbG9hZExpbmtlZFcoZWEsIGluc3RyKTsKLSsgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0 X3QpdmFsKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDE1MDogewotKyAgICAg IC8vIHN0d2N4LgotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0r ICAgICAgaW50MzJfdCB2YWwgPSBJMzIoZ2V0UmVnaXN0ZXIocnQpKTsKLSsgICAgICBpbnQgcmVz dWx0ID0gc3RvcmVDb25kaXRpb25hbFcoZWEsIHZhbCwgaW5zdHIpOwotKyAgICAgIC8vIHN0d2N4 LiBhbHdheXMgdXBkYXRlcyBDUjA6IEVRIGlmIHN0b3JlIHN1Y2NlZWRlZCwgZWxzZSBjbGVhci4K LSsgICAgICBpZiAocmVzdWx0KSB7Ci0rICAgICAgICBzZXRDUkZpZWxkKDAsIGtDUkZpZWxkRVEg fCAoa0NSRmllbGRTTyAqIGdldFhFUlNPKCkpKTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAg c2V0Q1JGaWVsZCgwLCBrQ1JGaWVsZFNPICogZ2V0WEVSU08oKSk7Ci0rICAgICAgfQotKyAgICAg IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgODQ6IHsKLSsgICAgICAvLyBsZGFyeAotKyAgICAg IHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgaW50NjRfdCB2YWwg PSBsb2FkTGlua2VkRChlYSwgaW5zdHIpOwotKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCB2YWwpOwot KyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjE0OiB7Ci0rICAgICAgLy8gc3RkY3gu Ci0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKLSsgICAgICBpbnQ2 NF90IHZhbCA9IGdldFJlZ2lzdGVyKHJ0KTsKLSsgICAgICBpbnQgcmVzdWx0ID0gc3RvcmVDb25k aXRpb25hbEQoZWEsIHZhbCwgaW5zdHIpOwotKyAgICAgIGlmIChyZXN1bHQpIHsKLSsgICAgICAg IHNldENSRmllbGQoMCwga0NSRmllbGRFUSB8IChrQ1JGaWVsZFNPICogZ2V0WEVSU08oKSkpOwot KyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBzZXRDUkZpZWxkKDAsIGtDUkZpZWxkU08gKiBnZXRY RVJTTygpKTsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0t IFN5bmNocm9uaXphdGlvbiAtLS0KLSsgICAgY2FzZSA1OTg6Ci0rICAgICAgLy8gc3luYyAvIGx3 c3luYyAvIHB0ZXN5bmM6IG5vLW9wIGluIHNpbXVsYXRvcgotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIDg1NDoKLSsgICAgICAvLyBlaWVpbzogbm8tb3AgaW4gc2ltdWxhdG9yCi0rICAgICAgYnJl YWs7Ci0rCi0rICAgIC8vIC0tLSBHUFIgPC0+IFZTUiBtb3ZlIChtYWpvciBvcGNvZGUgMzEsIFhY MS1mb3JtKSAtLS0KLSsgICAgLy8KLSsgICAgLy8gVHdvIHN1Yi1lbmNvZGluZ3M6Ci0rICAgIC8v ICAgbXR2c3IqIFhULFJBeyxSQn06IFhYMUZvcm0g4oCUIFhUIGF0IGJpdHMgMjU6MjEgKDUpICsg VFggYXQgYml0IDAgKDEpOwotKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICBSQSBhdCBiaXRz IDIwOjE2OyBSQiAoaWYgYW55KSBhdCBiaXRzIDE1OjExLgotKyAgICAvLyAgIG1mdnNyKiBSQSxY UzogICAgICBYWDFGb3JtTWZ2c3Ig4oCUIFhTIGF0IGJpdHMgMjU6MjEgKDUpICsgU1ggYXQgYml0 IDAgKDEpOwotKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICBSQSAoR1BSIGRlc3QpIGF0IGJp dHMgMjA6MTYuCi0rICAgIC8vCi0rICAgIC8vIFRoZSBvcmlnaW5hbCBkZWNvZGVyIHRyZWF0ZWQg InJzVmFsdWUoKSIgKGJpdHMgMjU6MjEgPSBWU1IgZmllbGQpIGFzIGEKLSsgICAgLy8gR1BSIGlu ZGV4IOKAlCBkb3VibHkgd3Jvbmc6IHRoZSBHUFIgc2lkZSBsaXZlcyBhdCBiaXRzIDIwOjE2ICg9 IHJhVmFsdWUoKSkKLSsgICAgLy8gYW5kIHRoZSBWU1Igc2lkZSBpcyA2IGJpdHMgKDUtYml0IGZp ZWxkICsgZXh0ZW5zaW9uIGJpdCBhdCBiaXQgMCkuIEZpeGVkCi0rICAgIC8vIGhlcmUgYW5kIGV4 dGVuZGVkIGZvciB0aGUgZnVsbCBWU1IgbmFtZXNwYWNlICgwLTYzKS4KLSsgICAgLy8gVGhlIElT QSBuYW1lcyBlYWNoIGZpZWxkIGluIEJFLiAiWFQuRFcwIiBpcyB0aGUgQkUgZG91Ymxld29yZCB3 aGljaCBvbgotKyAgICAvLyBQUEM2NExFIHJlZ2lzdGVyIHN0b3JhZ2UgbGl2ZXMgYXQgTEUgYnl0 ZXMgOC0xNSAob3VyIGJ5dGVzW10gaXMgTEUtbmF0dXJhbDoKLSsgICAgLy8gYnl0ZXNbMF0gPSBs b3dlc3QgYWRkcmVzcykuIFdpdGggYG10dnNyZCAvIG1mdnNyZCAvIG10dnNyZGQgLyBtZnZzcmxk Ci0rICAgIC8vIC8gc3R4dnhgOiBtdHZzcmQgb2YgMHgxMTIyMzM0NDU1NjY3Nzg4IHByb2R1Y2Vz IGAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAotKyAgICAvLyA4OCA3NyA2NiA1NSA0NCAzMyAyMiAx MWAgaW4gbWVtb3J5IChMRSBieXRlcyA4LTE1IGhvbGQgdGhlIEdQUiBiaXRzIHdpdGgKLSsgICAg Ly8gTFNCIGF0IGJ5dGUgOCkuIE1hdGNoaW5nIHNlbWFudGljcyBoZXJlIG1lYW5zIHRoZSBzaW0g cmVzcGVjdHMKLSsgICAgLy8gdGhlIGZ1bGwgUG93ZXIgSVNBLCBub3QgYSBzZWxmLWNvbnNpc3Rl bnQgTEUtcmV2ZXJzZWQKLSsgICAgLy8gY29udmVudGlvbi4KLSsgICAgY2FzZSA1MTogewotKyAg ICAgIC8vIG1mdnNyZCBSQSwgWFM6IEdQUltSQV0gPSBYUy5EVzAgPSBMRSBieXRlcyA4Li4xNS4K LSsgICAgICBpbnQgeHMgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8 IDUpKTsgIC8vIFQgKyBTWChUWCkKLSsgICAgICB1aW50OF90IGJ5dGVzWzE2XTsKLSsgICAgICBn ZXRWU1IxMjgoeHMsIGJ5dGVzKTsKLSsgICAgICBpbnQ2NF90IHZhbDsKLSsgICAgICBtZW1jcHko JnZhbCwgYnl0ZXMgKyA4LCA4KTsKLSsgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgp LCB2YWwpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjExOiB7Ci0rICAgICAg Ly8gbXR2c3J3YSBYVCwgUkE6IFhULkRXMCA9IHNpZ25fZXh0XzY0KFJBWzMyOjYzXSk7IFhULkRX MSA9IDAuCi0rICAgICAgLy8gUE9XRVI4KyAoSVNBIDIuMDcpLiBDb21iaW5lcyBleHRzdyArIG10 dnNyZC4gTEUgbGF5b3V0OiBieXRlcwotKyAgICAgIC8vIDgtMTUg4oaQIHNpZ24tZXh0ZW5kZWQg bG93IDMyIG9mIFJBOyBieXRlcyAwLTcg4oaQIDAuCi0rICAgICAgaW50IHh0ID0gaW50KGluc3Ry LT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCBieXRl c1sxNl07Ci0rICAgICAgaW50NjRfdCB2YWwgPSAoaW50NjRfdCkoaW50MzJfdClnZXRSZWdpc3Rl cihpbnN0ci0+cmFWYWx1ZSgpKTsKLSsgICAgICBtZW1zZXQoYnl0ZXMsIDAsIDgpOwotKyAgICAg IG1lbWNweShieXRlcyArIDgsICZ2YWwsIDgpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgYnl0ZXMp OwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMTc5OiB7Ci0rICAgICAgLy8gbXR2 c3JkIFhULCBSQTogWFQuRFcwID0gUkE7IFhULkRXMSA9IDAuCi0rICAgICAgLy8gTEUgbGF5b3V0 OiBieXRlcyA4LTE1IOKGkCBSQSwgYnl0ZXMgMC03IOKGkCAwLgotKyAgICAgIGludCB4dCA9IGlu dChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAgIHVpbnQ4 X3QgYnl0ZXNbMTZdOwotKyAgICAgIGludDY0X3QgdmFsID0gZ2V0UmVnaXN0ZXIoaW5zdHItPnJh VmFsdWUoKSk7Ci0rICAgICAgbWVtc2V0KGJ5dGVzLCAwLCA4KTsKLSsgICAgICBtZW1jcHkoYnl0 ZXMgKyA4LCAmdmFsLCA4KTsKLSsgICAgICBzZXRWU1IxMjgoeHQsIGJ5dGVzKTsKLSsgICAgICBi cmVhazsKLSsgICAgfQotKyAgICBjYXNlIDI0MzogewotKyAgICAgIC8vIG10dnNyd3ogWFQsIFJB OiBYVC5EVzAgPSB6ZXJvX2V4dChSQVszMjo2M10pOyBYVC5EVzEgPSAwLgotKyAgICAgIC8vIFRo ZSAzMi1iaXQgdmFsdWUgbGl2ZXMgaW4gdGhlIGxvdyAzMiBiaXRzIG9mIERXMCA9IEJFIHdvcmQg MSwKLSsgICAgICAvLyB3aGljaCBvbiBMRSBzdG9yYWdlIGlzIExFIGJ5dGVzIDguLjExIChMRSB3 b3JkIDIpOyBMRSBieXRlcwotKyAgICAgIC8vIDEyLi4xNSA9IDAgKHVwcGVyIGhhbGYgb2YgRFcw ID0gQkUgd29yZCAwID0gemVyby1leHRlbmRlZCkuCi0rICAgICAgaW50IHh0ID0gaW50KGluc3Ry LT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCBieXRl c1sxNl07Ci0rICAgICAgdWludDMyX3QgbG8gPSBVMzIoZ2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFs dWUoKSkpOwotKyAgICAgIG1lbXNldChieXRlcywgMCwgMTYpOwotKyAgICAgIGJ5dGVzWzhdICA9 ICh1aW50OF90KShsbyk7Ci0rICAgICAgYnl0ZXNbOV0gID0gKHVpbnQ4X3QpKGxvID4+IDgpOwot KyAgICAgIGJ5dGVzWzEwXSA9ICh1aW50OF90KShsbyA+PiAxNik7Ci0rICAgICAgYnl0ZXNbMTFd ID0gKHVpbnQ4X3QpKGxvID4+IDI0KTsKLSsgICAgICBzZXRWU1IxMjgoeHQsIGJ5dGVzKTsKLSsg ICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDMwNzogewotKyAgICAgIC8vIG1mdnNybGQg UkEsIFhTOiBHUFJbUkFdID0gWFMuRFcxID0gTEUgYnl0ZXMgMC4uNy4KLSsgICAgICAvLyBQT1dF UjkuCi0rICAgICAgaW50IHhzID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgw KSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCBieXRlc1sxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhz LCBieXRlcyk7Ci0rICAgICAgaW50NjRfdCB2YWw7Ci0rICAgICAgbWVtY3B5KCZ2YWwsIGJ5dGVz LCA4KTsKLSsgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCB2YWwpOwotKyAgICAg IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNDAzOiB7Ci0rICAgICAgLy8gbXR2c3J3cyBYVCwg UkEgKFBPV0VSOSk6IHNwbGF0IGxvdyAzMiBiaXRzIG9mIFJBIGludG8gYWxsIGZvdXIKLSsgICAg ICAvLyB3b3JkIGVsZW1lbnRzIG9mIFhULiBUaGUgc2FtZSAzMi1iaXQgdmFsdWUgYXBwZWFycyBp biBsYW5lcyAwLi4zLAotKyAgICAgIC8vIHNvIHRoZSBieXRlIGxheW91dCBpcyBpZGVudGljYWwg aW4gTEUgYW5kIEJFIOKAlAotKyAgICAgIC8vIGJ5dGVzIDAuLjE1ID0gbG8gfCBsbyB8IGxvIHwg bG8uCi0rICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgw KSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCBieXRlc1sxNl07Ci0rICAgICAgdWludDMyX3QgbG8g PSBVMzIoZ2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSkpOwotKyAgICAgIHVpbnQ2NF90IHZh bCA9ICgodWludDY0X3QpbG8gPDwgMzIpIHwgbG87Ci0rICAgICAgbWVtY3B5KGJ5dGVzLCAmdmFs LCA4KTsKLSsgICAgICBtZW1jcHkoYnl0ZXMgKyA4LCAmdmFsLCA4KTsKLSsgICAgICBzZXRWU1Ix MjgoeHQsIGJ5dGVzKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDQzNTogewot KyAgICAgIC8vIG10dnNyZGQgWFQsIFJBLCBSQjogWFQuRFcwID0gUkE7IFhULkRXMSA9IFJCLiBQ T1dFUjkuCi0rICAgICAgLy8gTEU6IGJ5dGVzIDgtMTUg4oaQIFJBLCBieXRlcyAwLTcg4oaQIFJC LgotKyAgICAgIGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkg PDwgNSkpOwotKyAgICAgIHVpbnQ4X3QgYnl0ZXNbMTZdOwotKyAgICAgIGludDY0X3QgZHcwID0g Z2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSk7Ci0rICAgICAgaW50NjRfdCBkdzEgPSBnZXRS ZWdpc3RlcihpbnN0ci0+cmJWYWx1ZSgpKTsKLSsgICAgICBtZW1jcHkoYnl0ZXMsICAgICAmZHcx LCA4KTsKLSsgICAgICBtZW1jcHkoYnl0ZXMgKyA4LCAmZHcwLCA4KTsKLSsgICAgICBzZXRWU1Ix MjgoeHQsIGJ5dGVzKTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyAtLS0gVk1Y IHZlY3RvciBtZW1vcnkgKG1ham9yIG9wY29kZSAzMSkgLS0tCi0rICAgIC8vCi0rICAgIC8vIGx2 eCAvIHN0dnggLyBsdnhsIC8gc3R2eGwuCi0rICAgIC8vICAgRUEgPSAoUkF8MCkgKyBSQjsgRUEg PSBFQSAmIH4weEYgKGFsaWdubWVudCkKLSsgICAgLy8gICBsdng6ICBWUlRbMDoxMjddIDwtIE1F TShFQSwgMTYpICAgICAgIGJ5dGVzWzBdID0gKihFQSswKQotKyAgICAvLyAgIHN0dng6IE1FTShF QSwgMTYpIDwtIFZSU1swOjEyN10gICAgICAgKihFQSswKSA9IGJ5dGVzWzBdCi0rICAgIC8vIGx2 eGwgLyBzdHZ4bCBhcmUgaWRlbnRpY2FsIGluIGVmZmVjdCB0byBsdnggLyBzdHZ4ICh0aGUgImwi IGZvcm0KLSsgICAgLy8gaGludHMgImxlYXN0IHJlY2VudGx5IHVzZWQiOyBzZW1hbnRpY2FsbHkg aW5kaXN0aW5ndWlzaGFibGUpLgotKyAgICBjYXNlIDEwMzogewotKyAgICAgIC8vIGx2eDogVlJU ID0gTUVNKEVBICYgfjB4RiwgMTYgYnl0ZXMpCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVB KHRoaXMsIGluc3RyKSAmIH51aW50NjRfdCgweEYpOwotKyAgICAgIGlmIChoYW5kbGVXYXNtU2Vn RmF1bHQoZWEsIDE2KSkgYnJlYWs7Ci0rICAgICAgbWVtY3B5KFZScmVnaXN0ZXJzX1tydF0sIHJl aW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KGVhKSwgMTYpOwotKyAgICAgIGJyZWFrOwotKyAg ICB9Ci0rICAgIGNhc2UgMjMxOiB7Ci0rICAgICAgLy8gc3R2eDogTUVNKEVBICYgfjB4RiwgMTYg Ynl0ZXMpID0gVlJTCi0rICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKSAm IH51aW50NjRfdCgweEYpOwotKyAgICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDE2KSkg YnJlYWs7Ci0rICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVhKSwgVlJyZWdp c3RlcnNfW3J0XSwgMTYpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMzU5OiB7 Ci0rICAgICAgLy8gbHZ4bDogc2VtYW50aWNhbGx5IGlkZW50aWNhbCB0byBsdngKLSsgICAgICB1 aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpICYgfnVpbnQ2NF90KDB4Rik7Ci0rICAg ICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsKLSsgICAgICBtZW1jcHko VlJyZWdpc3RlcnNfW3J0XSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oZWEpLCAxNik7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0ODc6IHsKLSsgICAgICAvLyBzdHZ4 bDogc2VtYW50aWNhbGx5IGlkZW50aWNhbCB0byBzdHZ4Ci0rICAgICAgdWludDY0X3QgZWEgPSBY Rm9ybUVBKHRoaXMsIGluc3RyKSAmIH51aW50NjRfdCgweEYpOwotKyAgICAgIGlmIChoYW5kbGVX YXNtU2VnRmF1bHQoZWEsIDE2KSkgYnJlYWs7Ci0rICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nh c3Q8dm9pZCo+KGVhKSwgVlJyZWdpc3RlcnNfW3J0XSwgMTYpOwotKyAgICAgIGJyZWFrOwotKyAg ICB9Ci0rCi0rICAgIC8vIC0tLSBWU1ggdmVjdG9yIG1lbW9yeSBpbmRleGVkIChtYWpvciBvcGNv ZGUgMzEpIC0tLQotKyAgICAvLwotKyAgICAvLyBUaGVzZSBvcHMgdGFrZSBhIDYtYml0IFZTUiBy ZWdpc3RlciwKLSsgICAgLy8gZW5jb2RlZCBhcyA1LWJpdCBUL1MgKyAxLWJpdCBUWC9TWCBleHRl bnNpb24gYXQgaW5zdHJ1Y3Rpb24gTFNCCi0rICAgIC8vIGJpdCAwICg9IG91ciBpbnN0ci0+Yml0 KDApKS4gRUEgPSAoUkF8MCkgKyBSQi4gMTYtYnl0ZSBhY2Nlc3MsCi0rICAgIC8vIG5vdCBmb3Jj ZWQtYWxpZ25lZCAoaGFyZHdhcmUgbWF5IGhhbmRsZSBtaXNhbGlnbmVkIHZpYSBzdWItYWNjZXNz Ci0rICAgIC8vIG9yIGFsaWdubWVudCBpbnRlcnJ1cHQgcGVyIGltcGwpLgotKyAgICAvLwotKyAg ICAvLyBCeXRlLW9yZGVyIG5vdGU6IGx4dngvc3R4dnggcGVyZm9ybSBhIG5hdHVyYWwgMTYtYnl0 ZSBMRQotKyAgICAvLyBtZW1jcHkuIGx4dmQyeC9zdHh2ZDJ4IG9uIHJlYWwgUFBDNjQgTEUgaGFy ZHdhcmUgbG9hZC9zdG9yZQotKyAgICAvLyBkb3VibGV3b3JkcyBpbiBCRS1wYWlyIG9yZGVyIOKA lCBpLmUuIGx4dmQyeCBwbGFjZXMgbWVtb3J5IGJ5dGVzCi0rICAgIC8vIDAtNyBpbiB0aGUgcmVn aXN0ZXIncyBCRS1EVzAgKD0gTEUgYnl0ZXMgOC0xNSkgYW5kIGJ5dGVzIDgtMTUKLSsgICAgLy8g aW4gQkUtRFcxICg9IExFIGJ5dGVzIDAtNykuIFRoZSBKSVQgYnJhY2tldHMgZXZlcnkgd2FzbSBT SU1ECi0rICAgIC8vIGxvYWQvc3RvcmUgd2l0aCBhIGNvbXBlbnNhdGluZyB4eHBlcm1kaSBETT0y IHNvIHRoZSBuZXQgZWZmZWN0Ci0rICAgIC8vIGlzIGEgbmF0dXJhbCBMRSBieXRlIG9yZGVyLiBU aGUgY29uc3RhbnQgcG9vbCBlbWl0cyB0aGUgc2FtZQotKyAgICAvLyBseHZkMnggKyB4eHBlcm1k aSBzZXF1ZW5jZSAocGVyIFBhdGNoQ29uc3RhbnRQb29sTG9hZCkgYnV0Ci0rICAgIC8vIGFzc3Vt ZXMgdGhlIGhhcmR3YXJlIHNlbWFudGljcywgbm90IGEgcGxhaW4gbWVtY3B5LiBTbyB0aGUgc2lt Ci0rICAgIC8vIG11c3QgbWF0Y2ggcmVhbC1oYXJkd2FyZSBseHZkMngvc3R4dmQyeCBzZW1hbnRp Y3MgaW5jbHVkaW5nIHRoZQotKyAgICAvLyBCRS1EVyBieXRlIG9yZGVyIOKAlCBvdGhlcndpc2Ug dGhlIHBvc3QtbG9hZCB4eHBlcm1kaSB1bnN3YXBzCi0rICAgIC8vIGJ5dGVzIHRoYXQgd2VyZSBu ZXZlciBzd2FwcGVkLCBhbmQgY29uc3RhbnQtcG9vbCBTaW1kMTI4IGxvYWRzCi0rICAgIC8vIChl LmcuIHNodWZmbGUgbWFza3MpIGNvbWUgb3V0IHdpdGggaGFsdmVzIHRyYW5zcG9zZWQuCi0rICAg IGNhc2UgMjY4OiB7Ci0rICAgICAgLy8gbHh2eDogWFQgPSBNRU0oKFJBfDApK1JCLCAxNikKLSsg ICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIGlmIChoYW5k bGVXYXNtU2VnRmF1bHQoZWEsIDE2KSkgYnJlYWs7Ci0rICAgICAgaW50IHh0ID0gaW50KGluc3Ry LT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCBidWZb MTZdOwotKyAgICAgIG1lbWNweShidWYsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KGVh KSwgMTYpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgYnVmKTsKLSsgICAgICBicmVhazsKLSsgICAg fQotKyAgICBjYXNlIDM5NjogewotKyAgICAgIC8vIHN0eHZ4OiBNRU0oKFJBfDApK1JCLCAxNikg PSBYUwotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAg aWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsKLSsgICAgICBpbnQgeHMgPSBp bnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50 OF90IGJ1ZlsxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhzLCBidWYpOwotKyAgICAgIG1lbWNweShy ZWludGVycHJldF9jYXN0PHZvaWQqPihlYSksIGJ1ZiwgMTYpOwotKyAgICAgIGJyZWFrOwotKyAg ICB9Ci0rICAgIGNhc2UgODEzOiB7Ci0rICAgICAgLy8gbHhzaWh6eCBYVCwgUkEsIFJCOiBQOSAo SVNBIDMuMCkuIExvYWQgaGFsZndvcmQgdG8gVlNSICYgemVybywKLSsgICAgICAvLyBpbmRleGVk LiBNRU0oRUEsIDIpIChMRS1uYXR1cmFsIGhhbGZ3b3JkKSBpcyBwbGFjZWQgaW4gZHdbMF0KLSsg ICAgICAvLyBsb3cgMTYgYml0czsgdGhlIHJlc3Qgb2YgdGhlIFZTUiBpcyB6ZXJvZWQuIEluIHNp bSBMRS1ieXRlCi0rICAgICAgLy8gc3RvcmFnZSwgdGhhdCBpcyBieXRlc1s4Li45XSAobG93IGJ5 dGUgYXQgYnl0ZXNbOF0pLgotKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0 cik7Ci0rICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMikpIGJyZWFrOwotKyAgICAg IGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwot KyAgICAgIHVpbnQxNl90IGhhbGZ3b3JkID0gcmVhZEgoZWEsIGluc3RyKTsKLSsgICAgICB1aW50 OF90IGJ1ZlsxNl07Ci0rICAgICAgbWVtc2V0KGJ1ZiwgMCwgMTYpOwotKyAgICAgIGJ1Zls4XSA9 ICh1aW50OF90KShoYWxmd29yZCAmIDB4RkYpOwotKyAgICAgIGJ1Zls5XSA9ICh1aW50OF90KSgo aGFsZndvcmQgPj4gOCkgJiAweEZGKTsKLSsgICAgICBzZXRWU1IxMjgoeHQsIGJ1Zik7Ci0rICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA5NDE6IHsKLSsgICAgICAvLyBzdHhzaWh4IFhT LCBSQSwgUkI6IFA5IChJU0EgMy4wKS4gU3RvcmUgaGFsZndvcmQgZnJvbSBWU1IsCi0rICAgICAg Ly8gaW5kZXhlZC4gZHdbMF0gbG93IDE2IGJpdHMgKHNpbSBieXRlc1s4Li45XSBpbiBob3N0LUxF IG9yZGVyKQotKyAgICAgIC8vIGFyZSB3cml0dGVuIGFzIGEgaGFsZndvcmQgYXQgTUVNKEVBLCAy KS4KLSsgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIGlm IChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDIpKSBicmVhazsKLSsgICAgICBpbnQgeHMgPSBpbnQo aW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50OF90 IGJ1ZlsxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhzLCBidWYpOwotKyAgICAgIHVpbnQxNl90IGhh bGZ3b3JkID0KLSsgICAgICAgICAgKHVpbnQxNl90KWJ1Zls4XSB8ICgodWludDE2X3QpYnVmWzld IDw8IDgpOwotKyAgICAgIHdyaXRlSChlYSwgaGFsZndvcmQsIGluc3RyKTsKLSsgICAgICBicmVh azsKLSsgICAgfQotKyAgICBjYXNlIDg0NDogewotKyAgICAgIC8vIGx4dmQyeDogWFQgPSBNRU0o KFJBfDApK1JCLCAxNikgd2l0aCBCRS1EVyBieXRlIG9yZGVyaW5nLgotKyAgICAgIC8vIE1lbW9y eSBieXRlcyAwLTcgbGFuZCBpbiBCRS1EVzAgKD0gTEUgYnl0ZXMgOC0xNSk7IG1lbW9yeQotKyAg ICAgIC8vIGJ5dGVzIDgtMTUgbGFuZCBpbiBCRS1EVzEgKD0gTEUgYnl0ZXMgMC03KS4KLSsgICAg ICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOwotKyAgICAgIGlmIChoYW5kbGVX YXNtU2VnRmF1bHQoZWEsIDE2KSkgYnJlYWs7Ci0rICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5y dFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgdWludDhfdCBtZW1bMTZd LCBidWZbMTZdOwotKyAgICAgIG1lbWNweShtZW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9p ZCo+KGVhKSwgMTYpOwotKyAgICAgIG1lbWNweShidWYsIG1lbSArIDgsIDgpOwotKyAgICAgIG1l bWNweShidWYgKyA4LCBtZW0sIDgpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgYnVmKTsKLSsgICAg ICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDk3MjogewotKyAgICAgIC8vIHN0eHZkMng6IE1F TSgoUkF8MCkrUkIsIDE2KSA9IFhTIHdpdGggQkUtRFcgYnl0ZSBvcmRlcmluZy4KLSsgICAgICAv LyBJbnZlcnNlIG9mIGx4dmQyeDogcmVnaXN0ZXIgTEUgYnl0ZXMgMC03IOKGkiBtZW1vcnkgYnl0 ZXMgOC0xNTsKLSsgICAgICAvLyBMRSBieXRlcyA4LTE1IOKGkiBtZW1vcnkgYnl0ZXMgMC03Lgot KyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7Ci0rICAgICAgaWYgKGhh bmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsKLSsgICAgICBpbnQgeHMgPSBpbnQoaW5z dHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50OF90IGJ1 ZlsxNl0sIG1lbVsxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhzLCBidWYpOwotKyAgICAgIG1lbWNw eShtZW0sIGJ1ZiArIDgsIDgpOwotKyAgICAgIG1lbWNweShtZW0gKyA4LCBidWYsIDgpOwotKyAg ICAgIG1lbWNweShyZWludGVycHJldF9jYXN0PHZvaWQqPihlYSksIG1lbSwgMTYpOwotKyAgICAg IGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIGRlZmF1bHQ6Ci0rICAgICAgTU9aX0NSQVNIX1VOU0FG RV9QUklOVEYoCi0rICAgICAgICAgICJkZWNvZGVYRm9ybTogdW5pbXBsZW1lbnRlZCBYTz0ldSAo aW5zdHJ1Y3Rpb24gMHglMDh4KSIsIHhvLAotKyAgICAgICAgICBpbnN0ci0+aW5zdHJ1Y3Rpb25C aXRzKCkpOwotKyAgfQotK30KLSsKLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIGRlY29k ZVJvdGF0ZU1hc2s6IHJsd2lubSgyMSksIHJsd25tKDIzKSwgcmx3aW1pKDIwKSwKLSsvLyAgIHJs ZGljbCgzMCksIHJsZGljcigzMCksIHJsZGljKDMwKSwgcmxkaW1pKDMwKSwgcmxkY2woMzApLCBy bGRjcigzMCkKLSsKLSt2b2lkIFNpbXVsYXRvcjo6ZGVjb2RlUm90YXRlTWFzayhTaW1JbnN0cnVj dGlvbiogaW5zdHIpIHsKLSsgIHVpbnQzMl90IG9wY29kZSA9IGluc3RyLT5vcGNvZGUoKTsKLSsK LSsgIGlmIChvcGNvZGUgPT0gMjEpIHsKLSsgICAgLy8gcmx3aW5tOiBSQSA9IFJPVEwzMihSUyxT SCkgJiBNQVNLKE1CLE1FKSwgUmMKLSsgICAgdWludDMyX3QgcnNfdmFsID0gVTMyKGdldFJlZ2lz dGVyKGluc3RyLT5yc1ZhbHVlKCkpKTsKLSsgICAgdWludDMyX3Qgc2ggPSBpbnN0ci0+bVNIVmFs dWUoKTsKLSsgICAgdWludDMyX3QgbWIgPSBpbnN0ci0+bU1CVmFsdWUoKTsKLSsgICAgdWludDMy X3QgbWUgPSBpbnN0ci0+bU1FVmFsdWUoKTsKLSsgICAgdWludDMyX3Qgcm90YXRlZCA9IFJvdGF0 ZUxlZnQzMihyc192YWwsIHNoKTsKLSsgICAgdWludDMyX3QgbWFzayA9IE1BU0szMihtYiwgbWUp OwotKyAgICBpbnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90KSh1aW50NjRfdCkocm90YXRlZCAmIG1h c2spOwotKyAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCByZXN1bHQpOwotKyAgICBp ZiAoaW5zdHItPnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgfSBlbHNlIGlmIChvcGNv ZGUgPT0gMjMpIHsKLSsgICAgLy8gcmx3bm06IFJBID0gUk9UTDMyKFJTLFJCWzI3OjMxXSkgJiBN QVNLKE1CLE1FKSwgUmMKLSsgICAgdWludDMyX3QgcnNfdmFsID0gVTMyKGdldFJlZ2lzdGVyKGlu c3RyLT5yc1ZhbHVlKCkpKTsKLSsgICAgdWludDMyX3Qgc2ggPSBVMzIoZ2V0UmVnaXN0ZXIoaW5z dHItPnJiVmFsdWUoKSkpICYgMHgxRjsKLSsgICAgdWludDMyX3QgbWIgPSBpbnN0ci0+bU1CVmFs dWUoKTsKLSsgICAgdWludDMyX3QgbWUgPSBpbnN0ci0+bU1FVmFsdWUoKTsKLSsgICAgdWludDMy X3Qgcm90YXRlZCA9IFJvdGF0ZUxlZnQzMihyc192YWwsIHNoKTsKLSsgICAgdWludDMyX3QgbWFz ayA9IE1BU0szMihtYiwgbWUpOwotKyAgICBpbnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90KSh1aW50 NjRfdCkocm90YXRlZCAmIG1hc2spOwotKyAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgp LCByZXN1bHQpOwotKyAgICBpZiAoaW5zdHItPnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1bHQpOwot KyAgfSBlbHNlIGlmIChvcGNvZGUgPT0gMjApIHsKLSsgICAgLy8gcmx3aW1pOiBSQSA9IChST1RM MzIoUlMsU0gpICYgTUFTSykgfCAoUkEgJiB+TUFTSyksIFJjCi0rICAgIHVpbnQzMl90IHJzX3Zh bCA9IFUzMihnZXRSZWdpc3RlcihpbnN0ci0+cnNWYWx1ZSgpKSk7Ci0rICAgIHVpbnQzMl90IHNo ID0gaW5zdHItPm1TSFZhbHVlKCk7Ci0rICAgIHVpbnQzMl90IG1iID0gaW5zdHItPm1NQlZhbHVl KCk7Ci0rICAgIHVpbnQzMl90IG1lID0gaW5zdHItPm1NRVZhbHVlKCk7Ci0rICAgIHVpbnQzMl90 IHJvdGF0ZWQgPSBSb3RhdGVMZWZ0MzIocnNfdmFsLCBzaCk7Ci0rICAgIHVpbnQzMl90IG1hc2sg PSBNQVNLMzIobWIsIG1lKTsKLSsgICAgdWludDMyX3QgcmFfdmFsID0gVTMyKGdldFJlZ2lzdGVy KGluc3RyLT5yYVZhbHVlKCkpKTsKLSsgICAgaW50NjRfdCByZXN1bHQgPSAoaW50NjRfdCkodWlu dDY0X3QpKChyb3RhdGVkICYgbWFzaykgfCAocmFfdmFsICYgfm1hc2spKTsKLSsgICAgc2V0UmVn aXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgcmVzdWx0KTsKLSsgICAgaWYgKGluc3RyLT5yY0JpdCgp KSB1cGRhdGVDUjAocmVzdWx0KTsKLSsgIH0gZWxzZSBpZiAob3Bjb2RlID09IDMwKSB7Ci0rICAg IC8vIE1ELWZvcm0gLyBNRFMtZm9ybTogNjQtYml0IHJvdGF0ZS9tYXNrCi0rICAgIHVpbnQzMl90 IHJzID0gaW5zdHItPnJzVmFsdWUoKTsKLSsgICAgdWludDY0X3QgcnNfdmFsID0gVTY0KGdldFJl Z2lzdGVyKHJzKSk7Ci0rICAgIHVpbnQzMl90IHJhX3JlZyA9IGluc3RyLT5yYVZhbHVlKCk7Ci0r Ci0rICAgIC8vIERldGVybWluZSB3aGljaCBzdWItb3Bjb2RlOiBiaXRzIDIuLjQgZm9yIE1ELWZv cm0sIGJpdCA0IGZvciBNRFMuCi0rICAgIC8vIE1EOiBiaXRzIDIuLjQKLSsgICAgLy8gTURTOiBi aXQgNCAocmxkY2wgaGFzIGJpdDQ9MCwgYml0My4uMj0wMCB3aXRoIGJpdDE9MTsgcmxkY3IgaGFz Ci0rICAgIC8vICAgICAgYml0ND0wLCBiaXQzLi4yPTAxIHdpdGggYml0MT0xKS4gQWN0dWFsbHk6 Ci0rICAgIC8vICAgcmxkaWNsOiAgMzAgfCBNRC1YTz0wIChiaXRzIDIuLjQgPSAwMDApLCBiaXQx PTAKLSsgICAgLy8gICBybGRpY3I6ICAzMCB8IE1ELVhPPTEgKGJpdHMgMi4uNCA9IDAwMSksIGJp dDE9MAotKyAgICAvLyAgIHJsZGljOiAgIDMwIHwgTUQtWE89MiAoYml0cyAyLi40ID0gMDEwKSwg Yml0MT0wCi0rICAgIC8vICAgcmxkaW1pOiAgMzAgfCBNRC1YTz0zIChiaXRzIDIuLjQgPSAwMTEp LCBiaXQxPTAKLSsgICAgLy8gICBybGRjbDogICAzMCB8IE1EUywgYml0ND0wLCBiaXQzLi4xPTAw MCwgYml0MD1SYyA9PiBiaXRzIDEuLjQ9MTAwMAotKyAgICAvLyAgICAgICAgICAgIEFjdHVhbGx5 IHJsZGNsOiBiaXRzIDEuLjQgPSAxMDAwLCBpLmUuIGJpdCg0KT0xLGJpdCgzKT0wLAotKyAgICAv LyAgICAgICAgICAgIGJpdCgyKT0wLGJpdCgxKT0wCi0rICAgIC8vICAgcmxkY3I6ICAgMzAgfCBN RFMsIGJpdHMgMS4uNCA9IDEwMDEKLSsgICAgLy8KLSsgICAgLy8gTGV0J3MgY2hlY2sgYml0IDQg Zmlyc3Q6IGlmIGJpdCg0KT09MSwgaXQncyBNRFMtZm9ybSAocmxkY2wvcmxkY3IpLgotKyAgICBp ZiAoaW5zdHItPmJpdCg0KSkgewotKyAgICAgIC8vIE1EUy1mb3JtOiBzaGlmdCBhbW91bnQgZnJv bSBSQiByZWdpc3RlcgotKyAgICAgIHVpbnQzMl90IHNoID0gVTMyKGdldFJlZ2lzdGVyKGluc3Ry LT5yYlZhbHVlKCkpKSAmIDB4M0Y7Ci0rICAgICAgdWludDY0X3Qgcm90YXRlZCA9IFJvdGF0ZUxl ZnQ2NChyc192YWwsIHNoKTsKLSsgICAgICB1aW50MzJfdCBtYiA9IGluc3RyLT5tZHNNQlZhbHVl KCk7Ci0rCi0rICAgICAgaWYgKCFpbnN0ci0+Yml0KDEpKSB7Ci0rICAgICAgICAvLyBybGRjbDog UkEgPSBST1RMNjQoUlMsIFJCWzU4OjYzXSkgJiBNQVNLKG1iLCA2MykKLSsgICAgICAgIHVpbnQ2 NF90IG1hc2sgPSBNQVNLNjQobWIsIDYzKTsKLSsgICAgICAgIGludDY0X3QgcmVzdWx0ID0gSTY0 KHJvdGF0ZWQgJiBtYXNrKTsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJhX3JlZywgcmVzdWx0KTsK LSsgICAgICAgIGlmIChpbnN0ci0+cmNCaXQoKSkgdXBkYXRlQ1IwKHJlc3VsdCk7Ci0rICAgICAg fSBlbHNlIHsKLSsgICAgICAgIC8vIHJsZGNyOiBSQSA9IFJPVEw2NChSUywgUkJbNTg6NjNdKSAm IE1BU0soMCwgbWUpCi0rICAgICAgICB1aW50MzJfdCBtZSA9IGluc3RyLT5tZHNNQlZhbHVlKCk7 Ci0rICAgICAgICB1aW50NjRfdCBtYXNrID0gTUFTSzY0KDAsIG1lKTsKLSsgICAgICAgIGludDY0 X3QgcmVzdWx0ID0gSTY0KHJvdGF0ZWQgJiBtYXNrKTsKLSsgICAgICAgIHNldFJlZ2lzdGVyKHJh X3JlZywgcmVzdWx0KTsKLSsgICAgICAgIGlmIChpbnN0ci0+cmNCaXQoKSkgdXBkYXRlQ1IwKHJl c3VsdCk7Ci0rICAgICAgfQotKyAgICB9IGVsc2UgewotKyAgICAgIC8vIE1ELWZvcm0KLSsgICAg ICB1aW50MzJfdCBzaCA9IGluc3RyLT5tZFNIVmFsdWUoKTsKLSsgICAgICB1aW50NjRfdCByb3Rh dGVkID0gUm90YXRlTGVmdDY0KHJzX3ZhbCwgc2gpOwotKyAgICAgIHVpbnQzMl90IHhvX21kID0g aW5zdHItPmJpdHMoMywgMik7Ci0rCi0rICAgICAgc3dpdGNoICh4b19tZCkgewotKyAgICAgICAg Y2FzZSAwOiB7Ci0rICAgICAgICAgIC8vIHJsZGljbDogUkEgPSBST1RMNjQoUlMsIFNIKSAmIE1B U0sobWIsIDYzKQotKyAgICAgICAgICB1aW50MzJfdCBtYiA9IGluc3RyLT5tZE1CVmFsdWUoKTsK LSsgICAgICAgICAgdWludDY0X3QgbWFzayA9IE1BU0s2NChtYiwgNjMpOwotKyAgICAgICAgICBp bnQ2NF90IHJlc3VsdCA9IEk2NChyb3RhdGVkICYgbWFzayk7Ci0rICAgICAgICAgIHNldFJlZ2lz dGVyKHJhX3JlZywgcmVzdWx0KTsKLSsgICAgICAgICAgaWYgKGluc3RyLT5yY0JpdCgpKSB1cGRh dGVDUjAocmVzdWx0KTsKLSsgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICB9Ci0rICAgICAgICBj YXNlIDE6IHsKLSsgICAgICAgICAgLy8gcmxkaWNyOiBSQSA9IFJPVEw2NChSUywgU0gpICYgTUFT SygwLCBtZSkKLSsgICAgICAgICAgdWludDMyX3QgbWUgPSBpbnN0ci0+bWRNRVZhbHVlKCk7Ci0r ICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBNQVNLNjQoMCwgbWUpOwotKyAgICAgICAgICBpbnQ2 NF90IHJlc3VsdCA9IEk2NChyb3RhdGVkICYgbWFzayk7Ci0rICAgICAgICAgIHNldFJlZ2lzdGVy KHJhX3JlZywgcmVzdWx0KTsKLSsgICAgICAgICAgaWYgKGluc3RyLT5yY0JpdCgpKSB1cGRhdGVD UjAocmVzdWx0KTsKLSsgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICB9Ci0rICAgICAgICBjYXNl IDI6IHsKLSsgICAgICAgICAgLy8gcmxkaWM6IFJBID0gUk9UTDY0KFJTLCBTSCkgJiBNQVNLKG1i LCB+U0gpCi0rICAgICAgICAgIC8vIEFjdHVhbGx5OiBNQVNLKG1iLCA2My1TSCkKLSsgICAgICAg ICAgdWludDMyX3QgbWIgPSBpbnN0ci0+bWRNQlZhbHVlKCk7Ci0rICAgICAgICAgIHVpbnQ2NF90 IG1hc2sgPSBNQVNLNjQobWIsIDYzIC0gc2gpOwotKyAgICAgICAgICBpbnQ2NF90IHJlc3VsdCA9 IEk2NChyb3RhdGVkICYgbWFzayk7Ci0rICAgICAgICAgIHNldFJlZ2lzdGVyKHJhX3JlZywgcmVz dWx0KTsKLSsgICAgICAgICAgaWYgKGluc3RyLT5yY0JpdCgpKSB1cGRhdGVDUjAocmVzdWx0KTsK LSsgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICB9Ci0rICAgICAgICBjYXNlIDM6IHsKLSsgICAg ICAgICAgLy8gcmxkaW1pOiBSQSA9IChST1RMNjQoUlMsU0gpICYgTUFTSykgfCAoUkEgJiB+TUFT SykKLSsgICAgICAgICAgdWludDMyX3QgbWIgPSBpbnN0ci0+bWRNQlZhbHVlKCk7Ci0rICAgICAg ICAgIHVpbnQ2NF90IG1hc2sgPSBNQVNLNjQobWIsIDYzIC0gc2gpOwotKyAgICAgICAgICB1aW50 NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmFfcmVnKSk7Ci0rICAgICAgICAgIGludDY0 X3QgcmVzdWx0ID0gSTY0KChyb3RhdGVkICYgbWFzaykgfCAocmFfdmFsICYgfm1hc2spKTsKLSsg ICAgICAgICAgc2V0UmVnaXN0ZXIocmFfcmVnLCByZXN1bHQpOwotKyAgICAgICAgICBpZiAoaW5z dHItPnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1bHQpOwotKyAgICAgICAgICBicmVhazsKLSsgICAg ICAgIH0KLSsgICAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJ TlRGKCJkZWNvZGVSb3RhdGVNYXNrOiBNRCB4bz0ldSIsIHhvX21kKTsKLSsgICAgICB9Ci0rICAg IH0KLSsgIH0gZWxzZSB7Ci0rICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVSb3Rh dGVNYXNrOiBvcGNvZGU9JXUiLCBvcGNvZGUpOwotKyAgfQotK30KLSsKLSsvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotKy8vIENSLWJpdCBhY2Nlc3NvcnMgdXNlZCBieSB0aGUgWEwtZm9ybSBDUi1s b2dpYyBvcHMgKGNyYW5kLCBjcmFuZGMsIGNyb3IsCi0rLy8gY3JvcmMsIGNyeG9yLCBjcmVxdiku IEJpdCBpbmRleCBpcyBpbiBCSUYqNCt4IGZvcm06IGZpZWxkPWIvNCwgYml0PWIlNAotKy8vIHdo ZXJlIDA9TFQsIDE9R1QsIDI9RVEsIDM9U08uCi0rc3RhdGljIGlubGluZSB1aW50OF90IENSQml0 TWFzayh1aW50MzJfdCBiaXRJbkZpZWxkKSB7Ci0rICBzd2l0Y2ggKGJpdEluRmllbGQpIHsKLSsg ICAgY2FzZSAwOiByZXR1cm4ga0NSRmllbGRMVDsKLSsgICAgY2FzZSAxOiByZXR1cm4ga0NSRmll bGRHVDsKLSsgICAgY2FzZSAyOiByZXR1cm4ga0NSRmllbGRFUTsKLSsgICAgY2FzZSAzOiByZXR1 cm4ga0NSRmllbGRTTzsKLSsgIH0KLSsgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW5saW5l IGJvb2wgR2V0Q1JCaXQoU2ltdWxhdG9yJiBzLCB1aW50MzJfdCBiKSB7Ci0rICByZXR1cm4gKHMu Z2V0Q1JGaWVsZChiIC8gNCkgJiBDUkJpdE1hc2soYiAlIDQpKSAhPSAwOwotK30KLSsKLStzdGF0 aWMgaW5saW5lIHZvaWQgU2V0Q1JCaXQoU2ltdWxhdG9yJiBzLCB1aW50MzJfdCBiLCBib29sIHZh bCkgewotKyAgdWludDhfdCBmdiA9IHMuZ2V0Q1JGaWVsZChiIC8gNCk7Ci0rICB1aW50OF90IG1h c2sgPSBDUkJpdE1hc2soYiAlIDQpOwotKyAgcy5zZXRDUkZpZWxkKGIgLyA0LCB2YWwgPyAoZnYg fCBtYXNrKSA6IChmdiAmIH5tYXNrKSk7Ci0rfQotKwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0rLy8gZGVjb2RlQnJhbmNoOiBiKDE4KSwgYmMoMTYpLCBYTC1mb3JtKDE5KQotKwotK3ZvaWQg U2ltdWxhdG9yOjpkZWNvZGVCcmFuY2goU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Ci0rICB1aW50 MzJfdCBvcGNvZGUgPSBpbnN0ci0+b3Bjb2RlKCk7Ci0rCi0rICBpZiAob3Bjb2RlID09IDE4KSB7 Ci0rICAgIC8vIGIgLyBibDogSS1mb3JtIHVuY29uZGl0aW9uYWwgYnJhbmNoCi0rICAgIGludDMy X3Qgb2Zmc2V0ID0gaW5zdHItPmxpMjZWYWx1ZSgpOwotKyAgICBib29sIGxrID0gaW5zdHItPmxr Qml0KCk7Ci0rICAgIGJvb2wgYWEgPSBpbnN0ci0+YWFCaXQoKTsKLSsKLSsgICAgaW50NjRfdCB0 YXJnZXQ7Ci0rICAgIGlmIChhYSkgewotKyAgICAgIHRhcmdldCA9IChpbnQ2NF90KW9mZnNldDsK LSsgICAgfSBlbHNlIHsKLSsgICAgICB0YXJnZXQgPSBnZXRfcGMoKSArIChpbnQ2NF90KW9mZnNl dDsKLSsgICAgfQotKwotKyAgICBpZiAobGspIHsKLSsgICAgICBzZXRMUihnZXRfcGMoKSArIFNp bUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKLSsgICAgfQotKwotKyAgICBzZXRfcGModGFyZ2V0 KTsKLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgaWYgKG9wY29kZSA9PSAxNikgewotKyAgICAv LyBiYyAvIGJjbDogQi1mb3JtIGNvbmRpdGlvbmFsIGJyYW5jaAotKyAgICB1aW50MzJfdCBibyA9 IGluc3RyLT5ib1ZhbHVlKCk7Ci0rICAgIHVpbnQzMl90IGJpID0gaW5zdHItPmJpVmFsdWUoKTsK LSsgICAgaW50MzJfdCBiZCA9IGluc3RyLT5iZDE2VmFsdWUoKTsKLSsgICAgYm9vbCBsayA9IGlu c3RyLT5sa0JpdCgpOwotKyAgICBib29sIGFhID0gaW5zdHItPmFhQml0KCk7Ci0rCi0rICAgIC8v IERlY3JlbWVudCBDVFIgaWYgQk9bMl0gKGJpdCAyIG9mIEJPLCB3aGljaCBpcyBibyAmIDB4MDQp IGlzIGNsZWFyLgotKyAgICBpZiAoIShibyAmIDB4MDQpKSB7Ci0rICAgICAgc2V0Q1RSKGdldENU UigpIC0gMSk7Ci0rICAgIH0KLSsKLSsgICAgLy8gRXZhbHVhdGUgQ1RSIGNvbmRpdGlvbi4KLSsg ICAgYm9vbCBjdHJfb2sgPSAoYm8gJiAweDA0KSB8fAotKyAgICAgICAgICAgICAgICAgICgoZ2V0 Q1RSKCkgIT0gMCkgXiAoKGJvICYgMHgwMikgIT0gMCkpOwotKwotKyAgICAvLyBFdmFsdWF0ZSBD UiBjb25kaXRpb24uCi0rICAgIHVpbnQzMl90IGNyRmllbGQgPSBiaSAvIDQ7Ci0rICAgIHVpbnQz Ml90IGNyQml0ID0gYmkgJSA0OwotKyAgICB1aW50OF90IGNyRmllbGRWYWwgPSBnZXRDUkZpZWxk KGNyRmllbGQpOwotKyAgICBib29sIGNyQml0U2V0OwotKyAgICBzd2l0Y2ggKGNyQml0KSB7Ci0r ICAgICAgY2FzZSAwOiBjckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRMVCkgIT0gMDsg YnJlYWs7Ci0rICAgICAgY2FzZSAxOiBjckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRH VCkgIT0gMDsgYnJlYWs7Ci0rICAgICAgY2FzZSAyOiBjckJpdFNldCA9IChjckZpZWxkVmFsICYg a0NSRmllbGRFUSkgIT0gMDsgYnJlYWs7Ci0rICAgICAgY2FzZSAzOiBjckJpdFNldCA9IChjckZp ZWxkVmFsICYga0NSRmllbGRTTykgIT0gMDsgYnJlYWs7Ci0rICAgICAgZGVmYXVsdDogY3JCaXRT ZXQgPSBmYWxzZTsgYnJlYWs7Ci0rICAgIH0KLSsgICAgYm9vbCBjb25kX29rID0gKGJvICYgMHgx MCkgfHwgKGNyQml0U2V0ID09ICgoYm8gJiAweDA4KSAhPSAwKSk7Ci0rCi0rICAgIGlmIChjdHJf b2sgJiYgY29uZF9vaykgewotKyAgICAgIGludDY0X3QgdGFyZ2V0OwotKyAgICAgIGlmIChhYSkg ewotKyAgICAgICAgdGFyZ2V0ID0gKGludDY0X3QpYmQ7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAg ICAgIHRhcmdldCA9IGdldF9wYygpICsgKGludDY0X3QpYmQ7Ci0rICAgICAgfQotKyAgICAgIGlm IChsaykgewotKyAgICAgICAgc2V0TFIoZ2V0X3BjKCkgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3Ry U2l6ZSk7Ci0rICAgICAgfQotKyAgICAgIHNldF9wYyh0YXJnZXQpOwotKyAgICB9IGVsc2Ugewot KyAgICAgIC8vIEJyYW5jaCBub3QgdGFrZW4uCi0rICAgICAgc2V0X3BjKGdldF9wYygpICsgU2lt SW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOwotKyAgICB9Ci0rICAgIHJldHVybjsKLSsgIH0KLSsK LSsgIGlmIChvcGNvZGUgPT0gMTkpIHsKLSsgICAgLy8gWEwtZm9ybTogYmNsciwgYmNjdHIsIGNy YW5kLCBjcmFuZGMsIGNyb3IsIGNyb3JjLCBjcnhvciwgY3JlcXYsCi0rICAgIC8vICAgICAgICAg IG1jcmYsIGlzeW5jCi0rICAgIHVpbnQzMl90IHhsID0gaW5zdHItPnhsVmFsdWUoKTsKLSsKLSsg ICAgc3dpdGNoICh4bCkgewotKyAgICAgIGNhc2UgMTY6IHsKLSsgICAgICAgIC8vIGJjbHI6IGNv bmRpdGlvbmFsIGJyYW5jaCB0byBMUgotKyAgICAgICAgdWludDMyX3QgYm8gPSBpbnN0ci0+Ym9W YWx1ZSgpOwotKyAgICAgICAgdWludDMyX3QgYmkgPSBpbnN0ci0+YmlWYWx1ZSgpOwotKyAgICAg ICAgYm9vbCBsayA9IGluc3RyLT5sa0JpdCgpOwotKwotKyAgICAgICAgaWYgKCEoYm8gJiAweDA0 KSkgewotKyAgICAgICAgICBzZXRDVFIoZ2V0Q1RSKCkgLSAxKTsKLSsgICAgICAgIH0KLSsKLSsg ICAgICAgIGJvb2wgY3RyX29rID0gKGJvICYgMHgwNCkgfHwKLSsgICAgICAgICAgICAgICAgICAg ICAgKChnZXRDVFIoKSAhPSAwKSBeICgoYm8gJiAweDAyKSAhPSAwKSk7Ci0rCi0rICAgICAgICB1 aW50MzJfdCBjckZpZWxkID0gYmkgLyA0OwotKyAgICAgICAgdWludDMyX3QgY3JCaXQgPSBiaSAl IDQ7Ci0rICAgICAgICB1aW50OF90IGNyRmllbGRWYWwgPSBnZXRDUkZpZWxkKGNyRmllbGQpOwot KyAgICAgICAgYm9vbCBjckJpdFNldDsKLSsgICAgICAgIHN3aXRjaCAoY3JCaXQpIHsKLSsgICAg ICAgICAgY2FzZSAwOiBjckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRMVCkgIT0gMDsg YnJlYWs7Ci0rICAgICAgICAgIGNhc2UgMTogY3JCaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZp ZWxkR1QpICE9IDA7IGJyZWFrOwotKyAgICAgICAgICBjYXNlIDI6IGNyQml0U2V0ID0gKGNyRmll bGRWYWwgJiBrQ1JGaWVsZEVRKSAhPSAwOyBicmVhazsKLSsgICAgICAgICAgY2FzZSAzOiBjckJp dFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRTTykgIT0gMDsgYnJlYWs7Ci0rICAgICAgICAg IGRlZmF1bHQ6IGNyQml0U2V0ID0gZmFsc2U7IGJyZWFrOwotKyAgICAgICAgfQotKyAgICAgICAg Ym9vbCBjb25kX29rID0gKGJvICYgMHgxMCkgfHwgKGNyQml0U2V0ID09ICgoYm8gJiAweDA4KSAh PSAwKSk7Ci0rCi0rICAgICAgICBpZiAoY3RyX29rICYmIGNvbmRfb2spIHsKLSsgICAgICAgICAg aW50NjRfdCB0YXJnZXQgPSBnZXRMUigpICYgfjNMTDsKLSsgICAgICAgICAgaWYgKGxrKSB7Ci0r ICAgICAgICAgICAgc2V0TFIoZ2V0X3BjKCkgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7 Ci0rICAgICAgICAgIH0KLSsgICAgICAgICAgc2V0X3BjKHRhcmdldCk7Ci0rICAgICAgICB9IGVs c2UgewotKyAgICAgICAgICBzZXRfcGMoZ2V0X3BjKCkgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3Ry U2l6ZSk7Ci0rICAgICAgICB9Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2Fz ZSA1Mjg6IHsKLSsgICAgICAgIC8vIGJjY3RyOiBjb25kaXRpb25hbCBicmFuY2ggdG8gQ1RSCi0r ICAgICAgICB1aW50MzJfdCBibyA9IGluc3RyLT5ib1ZhbHVlKCk7Ci0rICAgICAgICB1aW50MzJf dCBiaSA9IGluc3RyLT5iaVZhbHVlKCk7Ci0rICAgICAgICBib29sIGxrID0gaW5zdHItPmxrQml0 KCk7Ci0rCi0rICAgICAgICAvLyBDVFIgaXMgbm90IGRlY3JlbWVudGVkIGZvciBiY2N0ci4KLSsg ICAgICAgIHVpbnQzMl90IGNyRmllbGQgPSBiaSAvIDQ7Ci0rICAgICAgICB1aW50MzJfdCBjckJp dCA9IGJpICUgNDsKLSsgICAgICAgIHVpbnQ4X3QgY3JGaWVsZFZhbCA9IGdldENSRmllbGQoY3JG aWVsZCk7Ci0rICAgICAgICBib29sIGNyQml0U2V0OwotKyAgICAgICAgc3dpdGNoIChjckJpdCkg ewotKyAgICAgICAgICBjYXNlIDA6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZExU KSAhPSAwOyBicmVhazsKLSsgICAgICAgICAgY2FzZSAxOiBjckJpdFNldCA9IChjckZpZWxkVmFs ICYga0NSRmllbGRHVCkgIT0gMDsgYnJlYWs7Ci0rICAgICAgICAgIGNhc2UgMjogY3JCaXRTZXQg PSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkRVEpICE9IDA7IGJyZWFrOwotKyAgICAgICAgICBjYXNl IDM6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZFNPKSAhPSAwOyBicmVhazsKLSsg ICAgICAgICAgZGVmYXVsdDogY3JCaXRTZXQgPSBmYWxzZTsgYnJlYWs7Ci0rICAgICAgICB9Ci0r ICAgICAgICBib29sIGNvbmRfb2sgPSAoYm8gJiAweDEwKSB8fCAoY3JCaXRTZXQgPT0gKChibyAm IDB4MDgpICE9IDApKTsKLSsKLSsgICAgICAgIGlmIChjb25kX29rKSB7Ci0rICAgICAgICAgIGlu dDY0X3QgdGFyZ2V0ID0gZ2V0Q1RSKCkgJiB+M0xMOwotKyAgICAgICAgICBpZiAobGspIHsKLSsg ICAgICAgICAgICBzZXRMUihnZXRfcGMoKSArIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsK LSsgICAgICAgICAgfQotKyAgICAgICAgICBzZXRfcGModGFyZ2V0KTsKLSsgICAgICAgIH0gZWxz ZSB7Ci0rICAgICAgICAgIHNldF9wYyhnZXRfcGMoKSArIFNpbUluc3RydWN0aW9uOjprSW5zdHJT aXplKTsKLSsgICAgICAgIH0KLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNl IDI1NzogewotKyAgICAgICAgLy8gY3JhbmQ6IENSW0JUXSA9IENSW0JBXSAmIENSW0JCXQotKyAg ICAgICAgdWludDMyX3QgYnQgPSBpbnN0ci0+cnRWYWx1ZSgpOwotKyAgICAgICAgdWludDMyX3Qg YmEgPSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgICAgICAgdWludDMyX3QgYmIgPSBpbnN0ci0+cmJW YWx1ZSgpOwotKyAgICAgICAgU2V0Q1JCaXQoKnRoaXMsIGJ0LCBHZXRDUkJpdCgqdGhpcywgYmEp ICYmIEdldENSQml0KCp0aGlzLCBiYikpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAg ICAgIGNhc2UgMTI5OiB7Ci0rICAgICAgICAvLyBjcmFuZGM6IENSW0JUXSA9IENSW0JBXSAmIH5D UltCQl0KLSsgICAgICAgIHVpbnQzMl90IGJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsKLSsgICAgICAg IHVpbnQzMl90IGJhID0gaW5zdHItPnJhVmFsdWUoKTsKLSsgICAgICAgIHVpbnQzMl90IGJiID0g aW5zdHItPnJiVmFsdWUoKTsKLSsgICAgICAgIFNldENSQml0KCp0aGlzLCBidCwgR2V0Q1JCaXQo KnRoaXMsIGJhKSAmJiAhR2V0Q1JCaXQoKnRoaXMsIGJiKSk7Ci0rICAgICAgICBicmVhazsKLSsg ICAgICB9Ci0rICAgICAgY2FzZSA0NDk6IHsKLSsgICAgICAgIC8vIGNyb3I6IENSW0JUXSA9IENS W0JBXSB8IENSW0JCXQotKyAgICAgICAgdWludDMyX3QgYnQgPSBpbnN0ci0+cnRWYWx1ZSgpOwot KyAgICAgICAgdWludDMyX3QgYmEgPSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgICAgICAgdWludDMy X3QgYmIgPSBpbnN0ci0+cmJWYWx1ZSgpOwotKyAgICAgICAgU2V0Q1JCaXQoKnRoaXMsIGJ0LCBH ZXRDUkJpdCgqdGhpcywgYmEpIHx8IEdldENSQml0KCp0aGlzLCBiYikpOwotKyAgICAgICAgYnJl YWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgNDE3OiB7Ci0rICAgICAgICAvLyBjcm9yYzogQ1Jb QlRdID0gQ1JbQkFdIHwgfkNSW0JCXQotKyAgICAgICAgdWludDMyX3QgYnQgPSBpbnN0ci0+cnRW YWx1ZSgpOwotKyAgICAgICAgdWludDMyX3QgYmEgPSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgICAg ICAgdWludDMyX3QgYmIgPSBpbnN0ci0+cmJWYWx1ZSgpOwotKyAgICAgICAgU2V0Q1JCaXQoKnRo aXMsIGJ0LCBHZXRDUkJpdCgqdGhpcywgYmEpIHx8ICFHZXRDUkJpdCgqdGhpcywgYmIpKTsKLSsg ICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDE5MzogewotKyAgICAgICAgLy8g Y3J4b3I6IENSW0JUXSA9IENSW0JBXSBeIENSW0JCXQotKyAgICAgICAgdWludDMyX3QgYnQgPSBp bnN0ci0+cnRWYWx1ZSgpOwotKyAgICAgICAgdWludDMyX3QgYmEgPSBpbnN0ci0+cmFWYWx1ZSgp OwotKyAgICAgICAgdWludDMyX3QgYmIgPSBpbnN0ci0+cmJWYWx1ZSgpOwotKyAgICAgICAgU2V0 Q1JCaXQoKnRoaXMsIGJ0LCBHZXRDUkJpdCgqdGhpcywgYmEpIF4gR2V0Q1JCaXQoKnRoaXMsIGJi KSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAyODk6IHsKLSsgICAg ICAgIC8vIGNyZXF2OiBDUltCVF0gPSB+KENSW0JBXSBeIENSW0JCXSkKLSsgICAgICAgIHVpbnQz Ml90IGJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsKLSsgICAgICAgIHVpbnQzMl90IGJhID0gaW5zdHIt PnJhVmFsdWUoKTsKLSsgICAgICAgIHVpbnQzMl90IGJiID0gaW5zdHItPnJiVmFsdWUoKTsKLSsg ICAgICAgIFNldENSQml0KCp0aGlzLCBidCwgIShHZXRDUkJpdCgqdGhpcywgYmEpIF4gR2V0Q1JC aXQoKnRoaXMsIGJiKSkpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2Ug MTUwOiB7Ci0rICAgICAgICAvLyBpc3luYzogbm8tb3AgaW4gc2ltdWxhdG9yCi0rICAgICAgICBi cmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAzNzA6IHsKLSsgICAgICAgIC8vIFBQQ19zdG9w ICgweDRDMDAwMkU0KSBkZWNvZGVkIGFzIFhMLWZvcm0gb3Bjb2RlIDE5LCBYTD0zNzAuCi0rICAg ICAgICAvLyBUaGlzIGlzIG91ciBrQ2FsbFJlZGlySW5zdHIuIEhhbmRsZSB2aWEgc29mdHdhcmVJ bnRlcnJ1cHQuCi0rICAgICAgICBzb2Z0d2FyZUludGVycnVwdChpbnN0cik7Ci0rICAgICAgICBi cmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAyOiB7Ci0rICAgICAgICAvLyBQT1dFUjkgYWRk cGNpcyByVCwgRCAoRFgtZm9ybSkuIENvbXB1dGVzIHJUID0gKENJQSArIDQpICsKLSsgICAgICAg IC8vIChzZXh0MTYoRCkgPDwgMTYpLiBUaGUgMTYtYml0IHNpZ25lZCBkaXNwbGFjZW1lbnQgRCBp cyBzcGxpdAotKyAgICAgICAgLy8gYWNyb3NzIHRocmVlIHN1Yi1maWVsZHM6Ci0rICAgICAgICAv LyAgIGQwID0gYml0cyBMRSA2Li4xNSAoMTAgYml0cykg4oCUIERbMTU6Nl0KLSsgICAgICAgIC8v ICAgZDEgPSBiaXRzIExFIDE2Li4yMCAoNSBiaXRzKSAg4oCUIERbNToxXQotKyAgICAgICAgLy8g ICBkMiA9IGJpdCAgTEUgMCAgICAgICgxIGJpdCkgICDigJQgRFswXQotKyAgICAgICAgLy8gKE1p cnJvcnMgdGhlIGVuY29kZXIgaW4gQXNzZW1ibGVyLXBwYzY0LmNwcDphc19hZGRwY2lzLikKLSsg ICAgICAgIHVpbnQzMl90IHJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsKLSsgICAgICAgIHVpbnQzMl90 IGQwID0gaW5zdHItPmJpdHMoMTUsIDYpOwotKyAgICAgICAgdWludDMyX3QgZDEgPSBpbnN0ci0+ Yml0cygyMCwgMTYpOwotKyAgICAgICAgdWludDMyX3QgZDIgPSBpbnN0ci0+Yml0KDApOwotKyAg ICAgICAgaW50MTZfdCBEID0gKGludDE2X3QpKChkMCA8PCA2KSB8IChkMSA8PCAxKSB8IGQyKTsK LSsgICAgICAgIGludDY0X3QgY2lhID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihpbnN0cik7 Ci0rICAgICAgICBzZXRSZWdpc3RlcihydCwgY2lhICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNp emUgKwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50NjRfdD4o RCkgPDwgMTYpKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBkZWZhdWx0Ogot KyAgICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoImRlY29kZUJyYW5jaDogWEwgb3Bjb2Rl IDE5LCB4bD0ldSIsIHhsKTsKLSsgICAgfQotKyAgICByZXR1cm47Ci0rICB9Ci0rCi0rICBNT1pf Q1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlQnJhbmNoOiBvcGNvZGU9JXUiLCBvcGNvZGUpOwot K30KLSsKLSsvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKy8vIGRlY29kZUZQOiBNYWpvciBvcGNv ZGVzIDU5IChBLWZvcm0gc2luZ2xlKSBhbmQgNjMgKFgtZm9ybSAvIEEtZm9ybSBkb3VibGUpCi0r Ci0rdm9pZCBTaW11bGF0b3I6OmRlY29kZUZQKFNpbUluc3RydWN0aW9uKiBpbnN0cikgewotKyAg dWludDMyX3Qgb3Bjb2RlID0gaW5zdHItPm9wY29kZSgpOwotKyAgdWludDMyX3QgcnQgPSBpbnN0 ci0+cnRWYWx1ZSgpOyAgLy8gRlJUCi0rICB1aW50MzJfdCByYSA9IGluc3RyLT5yYVZhbHVlKCk7 ICAvLyBGUkEKLSsgIHVpbnQzMl90IHJiID0gaW5zdHItPnJiVmFsdWUoKTsgIC8vIEZSQgotKyAg dWludDMyX3QgcmNfcmVnID0gaW5zdHItPnJjVmFsdWUoKTsgIC8vIEZSQyAoQS1mb3JtKQotKwot KyAgaWYgKG9wY29kZSA9PSA2MykgewotKyAgICAvLyBYLWZvcm0gYW5kIEEtZm9ybSBkb3VibGUt cHJlY2lzaW9uIGluc3RydWN0aW9ucy4KLSsgICAgLy8gRm9yIEEtZm9ybSwgdGhlIHN1Yi1vcGNv ZGUgaXMgaW4gYml0cyAxLi41LgotKyAgICAvLyBGb3IgWC1mb3JtLCB0aGUgc3ViLW9wY29kZSBp cyBpbiBiaXRzIDEuLjEwLgotKyAgICB1aW50MzJfdCB4b19hID0gaW5zdHItPmJpdHMoNSwgMSk7 ICAvLyBBLWZvcm0gc3ViLW9wY29kZQotKyAgICB1aW50MzJfdCB4b194ID0gaW5zdHItPmJpdHMo MTAsIDEpOyAvLyBYLWZvcm0gc3ViLW9wY29kZQotKwotKyAgICAvLyBUcnkgQS1mb3JtIGZpcnN0 ICg1LWJpdCBzdWItb3Bjb2RlIGluIGJpdHMgMS4uNSkuCi0rICAgIHN3aXRjaCAoeG9fYSkgewot KyAgICAgIGNhc2UgMjE6IHsKLSsgICAgICAgIC8vIGZhZGQKLSsgICAgICAgIGRvdWJsZSByZXN1 bHQgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYSkgKyBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7 Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKLSsgICAgICAgIHJl dHVybjsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAyMDogewotKyAgICAgICAgLy8gZnN1YgotKyAg ICAgICAgZG91YmxlIHJlc3VsdCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSAtIGdldEZwdVJl Z2lzdGVyRG91YmxlKHJiKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1 bHQpOwotKyAgICAgICAgcmV0dXJuOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDI1OiB7Ci0rICAg ICAgICAvLyBmbXVsOiBGUlQgPSBGUkEgKiBGUkMgKG5vdGU6IEZSQywgbm90IEZSQiEpCi0rICAg ICAgICBkb3VibGUgcmVzdWx0ID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpICogZ2V0RnB1UmVn aXN0ZXJEb3VibGUocmNfcmVnKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBy ZXN1bHQpOwotKyAgICAgICAgcmV0dXJuOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDE4OiB7Ci0r ICAgICAgICAvLyBmZGl2Ci0rICAgICAgICBkb3VibGUgcmVzdWx0ID0gZ2V0RnB1UmVnaXN0ZXJE b3VibGUocmEpIC8gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwotKyAgICAgICAgc2V0RnB1UmVn aXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgfQotKyAg ICAgIGNhc2UgMjI6IHsKLSsgICAgICAgIC8vIGZzcXJ0Ci0rICAgICAgICBkb3VibGUgcmVzdWx0 ID0gc3FydChnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0 ZXJEb3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgfQotKyAgICAg IGNhc2UgMjk6IHsKLSsgICAgICAgIC8vIGZtYWRkOiBGUlQgPSBGUkEgKiBGUkMgKyBGUkIKLSsg ICAgICAgIGRvdWJsZSByZXN1bHQgPSBzdGQ6OmZtYShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUo cmNfcmVnKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdpc3Rl ckRvdWJsZShyYikpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7 Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMzA6IHsKLSsgICAgICAg IC8vIGZubXN1YjogRlJUID0gLShGUkEgKiBGUkMgLSBGUkIpCi0rICAgICAgICBkb3VibGUgcmVz dWx0ID0gLShzdGQ6OmZtYShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSksCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWdldEZwdVJlZ2lzdGVyRG91YmxlKHJi KSkpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAg ICByZXR1cm47Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMjg6IHsKLSsgICAgICAgIC8vIGZtc3Vi OiBGUlQgPSBGUkEgKiBGUkMgLSBGUkIKLSsgICAgICAgIGRvdWJsZSByZXN1bHQgPSBzdGQ6OmZt YShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKTsKLSsgICAgICAgIHNldEZw dVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOwotKyAgICAgICAgcmV0dXJuOwotKyAgICAgIH0K LSsgICAgICBjYXNlIDMxOiB7Ci0rICAgICAgICAvLyBmbm1hZGQ6IEZSVCA9IC0oRlJBICogRlJD ICsgRlJCKQotKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IC0oc3RkOjpmbWEoZ2V0RnB1UmVnaXN0 ZXJEb3VibGUocmEpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1 UmVnaXN0ZXJEb3VibGUocmNfcmVnKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJE b3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAgICAgfQotKyAgICAgIGNh c2UgMjM6IHsKLSsgICAgICAgIC8vIGZzZWw6IEZSVCA9IChGUkEgPj0gMCkgPyBGUkMgOiBGUkIK LSsgICAgICAgIGRvdWJsZSBmcmEgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYSk7Ci0rICAgICAg ICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgKGZyYSA+PSAwLjApID8gZ2V0RnB1UmVnaXN0ZXJE b3VibGUocmNfcmVnKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiBnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpOwotKyAgICAgICAgcmV0dXJuOwotKyAg ICAgIH0KLSsgICAgICBjYXNlIDI2OiB7Ci0rICAgICAgICAvLyBmcnNxcnRlOiBGUlQgPSAxLjAg LyBzcXJ0KEZSQikgKGVzdGltYXRlKQotKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IDEuMCAvIHNx cnQoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91 YmxlKHJ0LCByZXN1bHQpOwotKyAgICAgICAgcmV0dXJuOwotKyAgICAgIH0KLSsgICAgfQotKwot KyAgICAvLyBYLWZvcm0gKDEwLWJpdCBzdWItb3Bjb2RlKS4KLSsgICAgc3dpdGNoICh4b194KSB7 Ci0rICAgICAgY2FzZSA3MjogewotKyAgICAgICAgLy8gZm1yOiBGUlQgPSBGUkIKLSsgICAgICAg IHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpOwotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgNDA6IHsKLSsgICAgICAgIC8vIGZu ZWc6IEZSVCA9IC1GUkIKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCAtZ2V0RnB1 UmVnaXN0ZXJEb3VibGUocmIpKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBj YXNlIDI2NDogewotKyAgICAgICAgLy8gZmFiczogRlJUID0gfEZSQnwKLSsgICAgICAgIHNldEZw dVJlZ2lzdGVyRG91YmxlKHJ0LCBmYWJzKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOwotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMTM2OiB7Ci0rICAgICAgICAvLyBm bmFiczogRlJUID0gLXxGUkJ8Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgLWZh YnMoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9 Ci0rICAgICAgY2FzZSA4OiB7Ci0rICAgICAgICAvLyBmY3BzZ246IEZSVCA9IHNpZ24oRlJBKSB8 fCBtYWduaXR1ZGUoRlJCKQotKyAgICAgICAgZG91YmxlIGZyYSA9IGdldEZwdVJlZ2lzdGVyRG91 YmxlKHJhKTsKLSsgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7 Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgc3RkOjpjb3B5c2lnbihmcmIsIGZy YSkpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMDogewotKyAgICAg ICAgLy8gZmNtcHU6IGNvbXBhcmUgRlJBLCBGUkIgdW5vcmRlcmVkCi0rICAgICAgICB1aW50MzJf dCBiZiA9IGluc3RyLT5iZlZhbHVlKCk7Ci0rICAgICAgICBkb3VibGUgZnJhID0gZ2V0RnB1UmVn aXN0ZXJEb3VibGUocmEpOwotKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91 YmxlKHJiKTsKLSsgICAgICAgIHVpbnQ4X3QgZmllbGQgPSAwOwotKyAgICAgICAgaWYgKHN0ZDo6 aXNuYW4oZnJhKSB8fCBzdGQ6OmlzbmFuKGZyYikpIHsKLSsgICAgICAgICAgZmllbGQgPSBrQ1JG aWVsZFNPOwotKyAgICAgICAgfSBlbHNlIGlmIChmcmEgPCBmcmIpIHsKLSsgICAgICAgICAgZmll bGQgPSBrQ1JGaWVsZExUOwotKyAgICAgICAgfSBlbHNlIGlmIChmcmEgPiBmcmIpIHsKLSsgICAg ICAgICAgZmllbGQgPSBrQ1JGaWVsZEdUOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAg ZmllbGQgPSBrQ1JGaWVsZEVROwotKyAgICAgICAgfQotKyAgICAgICAgc2V0Q1JGaWVsZChiZiwg ZmllbGQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMzI6IHsKLSsg ICAgICAgIC8vIGZjbXBvOiBjb21wYXJlIEZSQSwgRlJCIG9yZGVyZWQKLSsgICAgICAgIHVpbnQz Ml90IGJmID0gaW5zdHItPmJmVmFsdWUoKTsKLSsgICAgICAgIGRvdWJsZSBmcmEgPSBnZXRGcHVS ZWdpc3RlckRvdWJsZShyYSk7Ci0rICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJE b3VibGUocmIpOwotKyAgICAgICAgdWludDhfdCBmaWVsZCA9IDA7Ci0rICAgICAgICBpZiAoc3Rk Ojppc25hbihmcmEpIHx8IHN0ZDo6aXNuYW4oZnJiKSkgewotKyAgICAgICAgICBmaWVsZCA9IGtD UkZpZWxkU087Ci0rICAgICAgICB9IGVsc2UgaWYgKGZyYSA8IGZyYikgewotKyAgICAgICAgICBm aWVsZCA9IGtDUkZpZWxkTFQ7Ci0rICAgICAgICB9IGVsc2UgaWYgKGZyYSA+IGZyYikgewotKyAg ICAgICAgICBmaWVsZCA9IGtDUkZpZWxkR1Q7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAg ICBmaWVsZCA9IGtDUkZpZWxkRVE7Ci0rICAgICAgICB9Ci0rICAgICAgICBzZXRDUkZpZWxkKGJm LCBmaWVsZCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgLy8gRm9yIGZjdGlk KiBhbmQgZmN0aXcqIHRoZSBJU0Egc3BlY2lmaWVzIHRoYXQgYml0IDIzIG9mIEZQU0NSIChWWENW SSwKLSsgICAgICAvLyAiaW52YWxpZCBvcCBmb3IgaW50ZWdlciBjb252ZXJ0IikgaXMgc2V0IHdo ZW4gdGhlIHNvdXJjZSBpcyBOYU4sICtJbmYsCi0rICAgICAgLy8gLUluZiwgb3Igb3V0IG9mIHRo ZSBkZXN0aW5hdGlvbidzIHJhbmdlLiBXYXNtJ3Mgb3V0LW9mLXJhbmdlIHRyYXAKLSsgICAgICAv LyBzZXF1ZW5jZSBpcyBgbXRmc2IwIDIzOyBmY3RpZHo7IG1mdnNyZDsgbWNyZnMgY3IwLDU7IGJ0 IFNPQml0LHRyYXBgLAotKyAgICAgIC8vIHNvIHRoZSBzaW11bGF0b3IgTVVTVCB1cGRhdGUgVlhD VkkgaGVyZSBmb3IgdGhlIHRyYXAgdG8gZmlyZS4gV2l0aAotKyAgICAgIC8vIEZQU0NSXyBpbiB0 aGUgbG93LWhhbGYgUFBDIGxheW91dCAoUFBDIGJpdCBOIOKGkiBpbnQ2NCBiaXQgKDMxLU4pKSwK LSsgICAgICAvLyBWWENWSSBsaXZlcyBhdCBpbnQ2NCBiaXQgKDMxLTIzKSA9IDguCi0rICAgICAg Y2FzZSA4MTQ6IHsKLSsgICAgICAgIC8vIGZjdGlkOiBjb252ZXJ0IGRvdWJsZSB0byBpbnQ2NCAo Y3VycmVudCByb3VuZGluZykKLSsgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRv dWJsZShyYik7Ci0rICAgICAgICBpbnQ2NF90IHJlc3VsdDsKLSsgICAgICAgIGJvb2wgaW52YWxp ZCA9IGZhbHNlOwotKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZnJiKSkgewotKyAgICAgICAgICBy ZXN1bHQgPSBJTlQ2NF9NSU47Ci0rICAgICAgICAgIGludmFsaWQgPSB0cnVlOwotKyAgICAgICAg fSBlbHNlIGlmIChmcmIgPj0gLShkb3VibGUpSU5UNjRfTUlOIHx8IGZyYiA8IChkb3VibGUpSU5U NjRfTUlOKSB7Ci0rICAgICAgICAgIHJlc3VsdCA9IChmcmIgPCAwKSA/IElOVDY0X01JTiA6IElO VDY0X01BWDsKLSsgICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICB9IGVsc2Ugewot KyAgICAgICAgICBzd2l0Y2ggKEZQU0NSXyAmIGtGUFNDUlJOTWFzaykgewotKyAgICAgICAgICAg IGNhc2UgUk46IHJlc3VsdCA9IChpbnQ2NF90KWxscmludChmcmIpOyBicmVhazsKLSsgICAgICAg ICAgICBjYXNlIFJaOiByZXN1bHQgPSAoaW50NjRfdClmcmI7IGJyZWFrOwotKyAgICAgICAgICAg IGNhc2UgUlA6IHJlc3VsdCA9IChpbnQ2NF90KWNlaWwoZnJiKTsgYnJlYWs7Ci0rICAgICAgICAg ICAgY2FzZSBSTTogcmVzdWx0ID0gKGludDY0X3QpZmxvb3IoZnJiKTsgYnJlYWs7Ci0rICAgICAg ICAgICAgZGVmYXVsdDogcmVzdWx0ID0gKGludDY0X3QpZnJiOyBicmVhazsKLSsgICAgICAgICAg fQotKyAgICAgICAgfQotKyAgICAgICAgaWYgKGludmFsaWQpIEZQU0NSXyB8PSAoMVVMTCA8PCA4 KTsgIC8qIFZYQ1ZJOiBQUEMgYml0IDIzIGluIGxvdy1oYWxmIGxheW91dCAqLwotKyAgICAgICAg c2V0RnB1UmVnaXN0ZXIocnQsIHJlc3VsdCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0r ICAgICAgY2FzZSA4MTU6IHsKLSsgICAgICAgIC8vIGZjdGlkejogY29udmVydCBkb3VibGUgdG8g aW50NjQgKHJvdW5kIHRvd2FyZCB6ZXJvKQotKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJl Z2lzdGVyRG91YmxlKHJiKTsKLSsgICAgICAgIGludDY0X3QgcmVzdWx0OwotKyAgICAgICAgYm9v bCBpbnZhbGlkID0gZmFsc2U7Ci0rICAgICAgICBpZiAoc3RkOjppc25hbihmcmIpKSB7Ci0rICAg ICAgICAgIHJlc3VsdCA9IElOVDY0X01JTjsKLSsgICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0r ICAgICAgICB9IGVsc2UgaWYgKGZyYiA+PSAtKGRvdWJsZSlJTlQ2NF9NSU4pIHsKLSsgICAgICAg ICAgcmVzdWx0ID0gSU5UNjRfTUFYOwotKyAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAg ICAgIH0gZWxzZSBpZiAoZnJiIDwgKGRvdWJsZSlJTlQ2NF9NSU4pIHsKLSsgICAgICAgICAgcmVz dWx0ID0gSU5UNjRfTUlOOwotKyAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAgICAgIH0g ZWxzZSB7Ci0rICAgICAgICAgIHJlc3VsdCA9IChpbnQ2NF90KWZyYjsKLSsgICAgICAgIH0KLSsg ICAgICAgIGlmIChpbnZhbGlkKSBGUFNDUl8gfD0gKDFVTEwgPDwgOCk7ICAvKiBWWENWSTogUFBD IGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlvdXQgKi8KLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0 LCByZXN1bHQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgOTQyOiB7 Ci0rICAgICAgICAvLyBmY3RpZHU6IGNvbnZlcnQgZG91YmxlIHRvIHVpbnQ2NCAoY3VycmVudCBy b3VuZGluZykuCi0rICAgICAgICAvLyBWWENWSSBpcyBzaWduYWxlZCB3aGVuIHNvdXJjZSBpcyBO YU4sIMKxSW5mLCBvciB0aGUgcm91bmRlZCB2YWx1ZQotKyAgICAgICAgLy8gaXMgb3V0c2lkZSBb MCwgMl42NC0xXS4gTm90YWJseSwKLSsgICAgICAgIC8vIGEgbmVnYXRpdmUgc291cmNlIHdob3Nl IHJvdW5kZWQgdmFsdWUgaXMgMCAoZS5nLiAtMC40IGluIFJOLCBvcgotKyAgICAgICAgLy8gYW55 IHZhbHVlIGluICgtMSwgMCkgaW4gUlopIGlzIE5PVCBpbnZhbGlkLgotKyAgICAgICAgZG91Ymxl IGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKLSsgICAgICAgIHVpbnQ2NF90IHJlc3Vs dDsKLSsgICAgICAgIGJvb2wgaW52YWxpZCA9IGZhbHNlOwotKyAgICAgICAgaWYgKHN0ZDo6aXNu YW4oZnJiKSkgewotKyAgICAgICAgICByZXN1bHQgPSAwOwotKyAgICAgICAgICBpbnZhbGlkID0g dHJ1ZTsKLSsgICAgICAgIH0gZWxzZSBpZiAoZnJiID49IC0yLjAgKiAoZG91YmxlKUlOVDY0X01J TiAvKiAyXjY0ICovKSB7Ci0rICAgICAgICAgIHJlc3VsdCA9IFVJTlQ2NF9NQVg7Ci0rICAgICAg ICAgIGludmFsaWQgPSB0cnVlOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgZG91Ymxl IHJvdW5kZWQ7Ci0rICAgICAgICAgIHN3aXRjaCAoRlBTQ1JfICYga0ZQU0NSUk5NYXNrKSB7Ci0r ICAgICAgICAgICAgY2FzZSBSTjogcm91bmRlZCA9IG5lYXJieWludChmcmIpOyBicmVhazsKLSsg ICAgICAgICAgICBjYXNlIFJaOiByb3VuZGVkID0gdHJ1bmMoZnJiKTsgYnJlYWs7Ci0rICAgICAg ICAgICAgY2FzZSBSUDogcm91bmRlZCA9IGNlaWwoZnJiKTsgYnJlYWs7Ci0rICAgICAgICAgICAg Y2FzZSBSTTogcm91bmRlZCA9IGZsb29yKGZyYik7IGJyZWFrOwotKyAgICAgICAgICAgIGRlZmF1 bHQ6IHJvdW5kZWQgPSB0cnVuYyhmcmIpOyBicmVhazsKLSsgICAgICAgICAgfQotKyAgICAgICAg ICBpZiAocm91bmRlZCA8IDAuMCkgewotKyAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0rICAgICAg ICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAg cmVzdWx0ID0gKHVpbnQ2NF90KXJvdW5kZWQ7Ci0rICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsg ICAgICAgIGlmIChpbnZhbGlkKSBGUFNDUl8gfD0gKDFVTEwgPDwgOCk7ICAvKiBWWENWSTogUFBD IGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlvdXQgKi8KLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0 LCBJNjQocmVzdWx0KSk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSA5 NDM6IHsKLSsgICAgICAgIC8vIGZjdGlkdXo6IGNvbnZlcnQgZG91YmxlIHRvIHVpbnQ2NCAocm91 bmQgdG93YXJkIHplcm8pLgotKyAgICAgICAgLy8gU2FtZSBWWENWSSBydWxlIGFzIGZjdGlkdSBi dXQgcm91bmRpbmcgaXMgZml4ZWQgdG8gdHJ1bmNhdGUKLSsgICAgICAgIC8vIHRvd2FyZCB6ZXJv LiBTb3VyY2UgaW4gKC0xLCAwKSB0cnVuY2F0ZXMgdG8gMCDigJQgVkFMSUQuCi0rICAgICAgICBk b3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwotKyAgICAgICAgdWludDY0X3Qg cmVzdWx0OwotKyAgICAgICAgYm9vbCBpbnZhbGlkID0gZmFsc2U7Ci0rICAgICAgICBpZiAoc3Rk Ojppc25hbihmcmIpKSB7Ci0rICAgICAgICAgIHJlc3VsdCA9IDA7Ci0rICAgICAgICAgIGludmFs aWQgPSB0cnVlOwotKyAgICAgICAgfSBlbHNlIGlmIChmcmIgPj0gLTIuMCAqIChkb3VibGUpSU5U NjRfTUlOIC8qIDJeNjQgKi8pIHsKLSsgICAgICAgICAgcmVzdWx0ID0gVUlOVDY0X01BWDsKLSsg ICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICB9IGVsc2UgaWYgKGZyYiA8PSAtMS4w KSB7Ci0rICAgICAgICAgIC8vIFRydW5jYXRlZCB2YWx1ZSBpcyBuZWdhdGl2ZSDigJQgaW52YWxp ZCBmb3IgdW5zaWduZWQuCi0rICAgICAgICAgIHJlc3VsdCA9IDA7Ci0rICAgICAgICAgIGludmFs aWQgPSB0cnVlOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgLy8gU291cmNlIGlzIGlu ICgtMSwgMl42NCk7IHRydW5jYXRpb24gdG93YXJkIHplcm8geWllbGRzIGEgdmFsdWUKLSsgICAg ICAgICAgLy8gaW4gWzAsIDJeNjQpLgotKyAgICAgICAgICByZXN1bHQgPSAodWludDY0X3QpdHJ1 bmMoZnJiKTsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmIChpbnZhbGlkKSBGUFNDUl8gfD0gKDFV TEwgPDwgOCk7ICAvKiBWWENWSTogUFBDIGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlvdXQgKi8KLSsg ICAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0KSk7Ci0rICAgICAgICBicmVhazsK LSsgICAgICB9Ci0rICAgICAgY2FzZSAxNDogewotKyAgICAgICAgLy8gZmN0aXc6IGNvbnZlcnQg ZG91YmxlIHRvIGludDMyIChjdXJyZW50IHJvdW5kaW5nKS4KLSsgICAgICAgIC8vIEludmFsaWQg cmFuZ2U6IHJvdW5kZWQgdmFsdWUgPCBJTlQzMl9NSU4gb3IgPiBJTlQzMl9NQVguIFRoZQotKyAg ICAgICAgLy8gZG91YmxlLXByZWNpc2lvbiBib3VuZGFyeSBvbiB0aGUgbmVnYXRpdmUgc2lkZSBp cyBJTlQzMl9NSU4tMSA9Ci0rICAgICAgICAvLyAtMl4zMS0xID0gLTIxNDc0ODM2NDkuMCAoZXhh Y3RseSByZXByZXNlbnRhYmxlOyBkb3VibGVzIGluCi0rICAgICAgICAvLyAoLTJeMzEtMSwgLTJe MzEpIGFsbCByb3VuZC10by1uZWFyZXN0IHRvIC0yXjMxIHdoaWNoIGlzIHZhbGlkKS4KLSsgICAg ICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7Ci0rICAgICAgICBpbnQz Ml90IHJlc3VsdDsKLSsgICAgICAgIGJvb2wgaW52YWxpZCA9IGZhbHNlOwotKyAgICAgICAgaWYg KHN0ZDo6aXNuYW4oZnJiKSkgewotKyAgICAgICAgICByZXN1bHQgPSBJTlQzMl9NSU47Ci0rICAg ICAgICAgIGludmFsaWQgPSB0cnVlOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgZG91 YmxlIHJvdW5kZWQ7Ci0rICAgICAgICAgIHN3aXRjaCAoRlBTQ1JfICYga0ZQU0NSUk5NYXNrKSB7 Ci0rICAgICAgICAgICAgY2FzZSBSTjogcm91bmRlZCA9IG5lYXJieWludChmcmIpOyBicmVhazsK LSsgICAgICAgICAgICBjYXNlIFJaOiByb3VuZGVkID0gdHJ1bmMoZnJiKTsgYnJlYWs7Ci0rICAg ICAgICAgICAgY2FzZSBSUDogcm91bmRlZCA9IGNlaWwoZnJiKTsgYnJlYWs7Ci0rICAgICAgICAg ICAgY2FzZSBSTTogcm91bmRlZCA9IGZsb29yKGZyYik7IGJyZWFrOwotKyAgICAgICAgICAgIGRl ZmF1bHQ6IHJvdW5kZWQgPSB0cnVuYyhmcmIpOyBicmVhazsKLSsgICAgICAgICAgfQotKyAgICAg ICAgICBpZiAocm91bmRlZCA+IChkb3VibGUpSU5UMzJfTUFYKSB7Ci0rICAgICAgICAgICAgcmVz dWx0ID0gSU5UMzJfTUFYOwotKyAgICAgICAgICAgIGludmFsaWQgPSB0cnVlOwotKyAgICAgICAg ICB9IGVsc2UgaWYgKHJvdW5kZWQgPCAoZG91YmxlKUlOVDMyX01JTikgewotKyAgICAgICAgICAg IHJlc3VsdCA9IElOVDMyX01JTjsKLSsgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKLSsgICAg ICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICByZXN1bHQgPSAoaW50MzJfdClyb3VuZGVkOwot KyAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoaW52YWxpZCkgRlBTQ1JfIHw9 ICgxVUxMIDw8IDgpOyAgLyogVlhDVkk6IFBQQyBiaXQgMjMgaW4gbG93LWhhbGYgbGF5b3V0ICov Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlcihydCwgKGludDY0X3QpcmVzdWx0KTsKLSsgICAgICAg IGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDE1OiB7Ci0rICAgICAgICAvLyBmY3Rpd3o6 IGNvbnZlcnQgZG91YmxlIHRvIGludDMyIChyb3VuZCB0b3dhcmQgemVybykuCi0rICAgICAgICAv LyBUcnVuY2F0aW9uIG9mIGEgdmFsdWUgaW4gKC0yXjMxLTEsIElOVDMyX01JTikgdG93YXJkIHpl cm8gZ2l2ZXMKLSsgICAgICAgIC8vIElOVDMyX01JTiDigJQgdmFsaWQuIE9ubHkgYGZyYiA8PSAt Ml4zMS0xYCAoaS5lLiBgZnJiIDwgSU5UMzJfTUlOLTErMWAKLSsgICAgICAgIC8vID0gYGZyYiA8 IC0yMTQ3NDgzNjQ4YCAuLi4gd2FpdCwgc2ltcGxlc3Q6IGNoZWNrIHRydW5jYXRlZCB2YWx1ZSBp bgotKyAgICAgICAgLy8gcmFuZ2UgQUZURVIgdHJ1bmNhdGlvbi4pCi0rICAgICAgICBkb3VibGUg ZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwotKyAgICAgICAgaW50MzJfdCByZXN1bHQ7 Ci0rICAgICAgICBib29sIGludmFsaWQgPSBmYWxzZTsKLSsgICAgICAgIGlmIChzdGQ6OmlzbmFu KGZyYikpIHsKLSsgICAgICAgICAgcmVzdWx0ID0gSU5UMzJfTUlOOwotKyAgICAgICAgICBpbnZh bGlkID0gdHJ1ZTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIGRvdWJsZSB0cnVuY2F0 ZWQgPSB0cnVuYyhmcmIpOwotKyAgICAgICAgICBpZiAodHJ1bmNhdGVkID4gKGRvdWJsZSlJTlQz Ml9NQVgpIHsKLSsgICAgICAgICAgICByZXN1bHQgPSBJTlQzMl9NQVg7Ci0rICAgICAgICAgICAg aW52YWxpZCA9IHRydWU7Ci0rICAgICAgICAgIH0gZWxzZSBpZiAodHJ1bmNhdGVkIDwgKGRvdWJs ZSlJTlQzMl9NSU4pIHsKLSsgICAgICAgICAgICByZXN1bHQgPSBJTlQzMl9NSU47Ci0rICAgICAg ICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAg cmVzdWx0ID0gKGludDMyX3QpdHJ1bmNhdGVkOwotKyAgICAgICAgICB9Ci0rICAgICAgICB9Ci0r ICAgICAgICBpZiAoaW52YWxpZCkgRlBTQ1JfIHw9ICgxVUxMIDw8IDgpOyAgLyogVlhDVkk6IFBQ QyBiaXQgMjMgaW4gbG93LWhhbGYgbGF5b3V0ICovCi0rICAgICAgICBzZXRGcHVSZWdpc3Rlcihy dCwgKGludDY0X3QpcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBj YXNlIDE0MjogewotKyAgICAgICAgLy8gZmN0aXd1OiBjb252ZXJ0IGRvdWJsZSB0byB1aW50MzIg KGN1cnJlbnQgcm91bmRpbmcpLiBUaGUgY2hlY2sgaXMKLSsgICAgICAgIC8vIG9uIHRoZSBST1VO REVEIHZhbHVlOiBWWENWSSBpZmYgcm91bmRlZCA8IDAgb3Igcm91bmRlZCA+IFVJTlQzMl9NQVgu Ci0rICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwotKyAgICAg ICAgdWludDMyX3QgcmVzdWx0OwotKyAgICAgICAgYm9vbCBpbnZhbGlkID0gZmFsc2U7Ci0rICAg ICAgICBpZiAoc3RkOjppc25hbihmcmIpKSB7Ci0rICAgICAgICAgIHJlc3VsdCA9IDA7Ci0rICAg ICAgICAgIGludmFsaWQgPSB0cnVlOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgZG91 YmxlIHJvdW5kZWQ7Ci0rICAgICAgICAgIHN3aXRjaCAoRlBTQ1JfICYga0ZQU0NSUk5NYXNrKSB7 Ci0rICAgICAgICAgICAgY2FzZSBSTjogcm91bmRlZCA9IG5lYXJieWludChmcmIpOyBicmVhazsK LSsgICAgICAgICAgICBjYXNlIFJaOiByb3VuZGVkID0gdHJ1bmMoZnJiKTsgYnJlYWs7Ci0rICAg ICAgICAgICAgY2FzZSBSUDogcm91bmRlZCA9IGNlaWwoZnJiKTsgYnJlYWs7Ci0rICAgICAgICAg ICAgY2FzZSBSTTogcm91bmRlZCA9IGZsb29yKGZyYik7IGJyZWFrOwotKyAgICAgICAgICAgIGRl ZmF1bHQ6IHJvdW5kZWQgPSB0cnVuYyhmcmIpOyBicmVhazsKLSsgICAgICAgICAgfQotKyAgICAg ICAgICBpZiAocm91bmRlZCA8IDAuMCkgewotKyAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0rICAg ICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICAgIH0gZWxzZSBpZiAocm91bmRlZCA+ IChkb3VibGUpVUlOVDMyX01BWCkgewotKyAgICAgICAgICAgIHJlc3VsdCA9IFVJTlQzMl9NQVg7 Ci0rICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAgICAgICAgIH0gZWxzZSB7Ci0rICAg ICAgICAgICAgcmVzdWx0ID0gKHVpbnQzMl90KXJvdW5kZWQ7Ci0rICAgICAgICAgIH0KLSsgICAg ICAgIH0KLSsgICAgICAgIGlmIChpbnZhbGlkKSBGUFNDUl8gfD0gKDFVTEwgPDwgOCk7ICAvKiBW WENWSTogUFBDIGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlvdXQgKi8KLSsgICAgICAgIHNldEZwdVJl Z2lzdGVyKHJ0LCAoaW50NjRfdCkodWludDY0X3QpcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwot KyAgICAgIH0KLSsgICAgICBjYXNlIDE0MzogewotKyAgICAgICAgLy8gZmN0aXd1ejogY29udmVy dCBkb3VibGUgdG8gdWludDMyIChyb3VuZCB0b3dhcmQgemVybykuCi0rICAgICAgICAvLyBTb3Vy Y2UgaW4gKC0xLCAwKSB0cnVuY2F0ZXMgdG8gMCDigJQgVkFMSUQuCi0rICAgICAgICBkb3VibGUg ZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwotKyAgICAgICAgdWludDMyX3QgcmVzdWx0 OwotKyAgICAgICAgYm9vbCBpbnZhbGlkID0gZmFsc2U7Ci0rICAgICAgICBpZiAoc3RkOjppc25h bihmcmIpKSB7Ci0rICAgICAgICAgIHJlc3VsdCA9IDA7Ci0rICAgICAgICAgIGludmFsaWQgPSB0 cnVlOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgZG91YmxlIHRydW5jYXRlZCA9IHRy dW5jKGZyYik7Ci0rICAgICAgICAgIGlmICh0cnVuY2F0ZWQgPiAoZG91YmxlKVVJTlQzMl9NQVgp IHsKLSsgICAgICAgICAgICByZXN1bHQgPSBVSU5UMzJfTUFYOwotKyAgICAgICAgICAgIGludmFs aWQgPSB0cnVlOwotKyAgICAgICAgICB9IGVsc2UgaWYgKHRydW5jYXRlZCA8IDAuMCkgewotKyAg ICAgICAgICAgIHJlc3VsdCA9IDA7Ci0rICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7Ci0rICAg ICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgcmVzdWx0ID0gKHVpbnQzMl90KXRydW5jYXRl ZDsKLSsgICAgICAgICAgfQotKyAgICAgICAgfQotKyAgICAgICAgaWYgKGludmFsaWQpIEZQU0NS XyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZYQ1ZJOiBQUEMgYml0IDIzIGluIGxvdy1oYWxmIGxheW91 dCAqLwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXIocnQsIChpbnQ2NF90KSh1aW50NjRfdClyZXN1 bHQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgODQ2OiB7Ci0rICAg ICAgICAvLyBmY2ZpZDogY29udmVydCBpbnQ2NCBpbiBGUFIgdG8gZG91YmxlCi0rICAgICAgICBp bnQ2NF90IHZhbCA9IGdldEZwdVJlZ2lzdGVyKHJiKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVy RG91YmxlKHJ0LCAoZG91YmxlKXZhbCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAg ICAgY2FzZSA5NzQ6IHsKLSsgICAgICAgIC8vIGZjZmlkdTogY29udmVydCB1aW50NjQgaW4gRlBS IHRvIGRvdWJsZQotKyAgICAgICAgdWludDY0X3QgdmFsID0gVTY0KGdldEZwdVJlZ2lzdGVyKHJi KSk7Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgKGRvdWJsZSl2YWwpOwotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMTI6IHsKLSsgICAgICAgIC8vIGZy c3A6IHJvdW5kIGRvdWJsZSB0byBzaW5nbGUgcHJlY2lzaW9uICh0aGVuIHJlLWV4dGVuZCBpbiBG UFIpLgotKyAgICAgICAgLy8gc05hTiBpbnB1dHMgYXJlIHF1aWV0ZWQgKHRoZSByZXN1bHQgcGF5 bG9hZCBNU0IgaXMgc2V0KS4KLSsgICAgICAgIC8vIHdhc20gZjMyLmRlbW90ZV9mNjQgbG93ZXJz IHRvIHRoaXMgb3Agd2hlbgotKyAgICAgICAgLy8gbm90IHVzaW5nIHhzY3ZkcHNwIGRpcmVjdGx5 LgotKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKLSsgICAg ICAgIGZsb2F0IHJlc3VsdCA9IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZnJiKTsKLSsgICAg ICAgIHVpbnQzMl90IGZiaXRzOwotKyAgICAgICAgbWVtY3B5KCZmYml0cywgJnJlc3VsdCwgc2l6 ZW9mKGZiaXRzKSk7Ci0rICAgICAgICBpZiAoKGZiaXRzICYgMHg3RjgwMDAwMHUpID09IDB4N0Y4 MDAwMDB1ICYmCi0rICAgICAgICAgICAgKGZiaXRzICYgMHgwMDdGRkZGRnUpICE9IDApIHsKLSsg ICAgICAgICAgZmJpdHMgfD0gMHgwMDQwMDAwMHU7Ci0rICAgICAgICAgIG1lbWNweSgmcmVzdWx0 LCAmZmJpdHMsIHNpemVvZihyZXN1bHQpKTsKLSsgICAgICAgIH0KLSsgICAgICAgIHNldEZwdVJl Z2lzdGVyRG91YmxlKHJ0LCBwcm9tb3RlRmxvYXRQcmVzZXJ2aW5nTmFOKHJlc3VsdCkpOwotKyAg ICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMzkyOiB7Ci0rICAgICAgICAvLyBm cmluOiByb3VuZCB0byBuZWFyZXN0IGludGVnZXIgKHRpZXMgYXdheSBmcm9tIHplcm8pCi0rICAg ICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwotKyAgICAgICAgc2V0 RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJvdW5kKGZyYikpOwotKyAgICAgICAgYnJlYWs7Ci0rICAg ICAgfQotKyAgICAgIGNhc2UgNDI0OiB7Ci0rICAgICAgICAvLyBmcml6OiByb3VuZCB0b3dhcmQg emVybwotKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKLSsg ICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCB0cnVuYyhmcmIpKTsKLSsgICAgICAgIGJy ZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDQ1NjogewotKyAgICAgICAgLy8gZnJpcDogcm91 bmQgdG93YXJkICtpbmZpbml0eSAoY2VpbCkuIFhPPTQ1Ni4KLSsgICAgICAgIGRvdWJsZSBmcmIg PSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJs ZShydCwgY2VpbChmcmIpKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNl IDQ4ODogewotKyAgICAgICAgLy8gZnJpbTogcm91bmQgdG93YXJkIC1pbmZpbml0eSAoZmxvb3Ip LiBYTz00ODguCi0rICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIp OwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIGZsb29yKGZyYikpOwotKyAgICAg ICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgNTgzOiB7Ci0rICAgICAgICAvLyBtZmZz OiBGUlQgPSBGUFNDUiAoYXMgZG91YmxlIGJpdCBwYXR0ZXJuKQotKyAgICAgICAgc2V0RnB1UmVn aXN0ZXIocnQsIEk2NChGUFNDUl8pKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAg ICAvLyBGUFNDUiBpcyB0cmVhdGVkIGFzIGEgMzItYml0IHJlZ2lzdGVyIHN0b3JlZCBpbiB0aGUg bG93IDMyIGJpdHMgb2YKLSsgICAgICAvLyBGUFNDUl8gKHVpbnQ2NF90KSwgd2l0aCBQUEMgYml0 IG51bWJlcmluZzogUFBDIGJpdCBOICh3aGVyZSBiaXQgMCBpcwotKyAgICAgIC8vIHRoZSBNU0Ip IGxpdmVzIGF0IGludDY0IGJpdCAoMzEtTikuIEZpZWxkIEYgKDQgYml0cykgY292ZXJzIFBQQyBi aXRzCi0rICAgICAgLy8gNEYuLjRGKzMg4oaSIGludDY0IGJpdC1MU0IgKDI4LTRGKSB0byBiaXQt TVNCICgzMS00RikuIFRoaXMgbWF0Y2hlcwotKyAgICAgIC8vIG1jcmZzLCBtdGZzZmksIGtGUFND UlJOTWFzayAod2hpY2ggY2hlY2tzIGJpdHMgMzAtMzEgUFBDID0gaW50NjQgYml0cwotKyAgICAg IC8vIDAtMSksIGFuZCBtZmZzICh3aGljaCBjb3BpZXMgRlBTQ1IgaW50byBGUFIgYml0cyAzMi4u NjMgUFBDID0gaW50NjQKLSsgICAgICAvLyBiaXRzIDAuLjMxKS4gRWFybGllciBtdGZzYjAvbXRm c2IxIHVzZWQgKDYzLWJ0KSB3aGljaCBwbGFjZWQgYml0cyBpbgotKyAgICAgIC8vIHRoZSBoaWdo IGhhbGYgb2YgRlBTQ1JfIHdoZXJlIG1jcmZzIGV0Yy4gd291bGQgbmV2ZXIgc2VlIHRoZW0g4oCU IHNvCi0rICAgICAgLy8gdGhlIHdhc20gdHJhcCBzZXF1ZW5jZSBgbXRmc2IwIDIzOyBmY3RpZHo7 IG1jcmZzIGNyMCw1OyBidCBTTyxvb2xFbnRyeWAKLSsgICAgICAvLyBjb3VsZCBub3QgZGV0ZWN0 IFZYQ1ZJLgotKyAgICAgIGNhc2UgNzA6IHsKLSsgICAgICAgIC8vIG10ZnNiMDogY2xlYXIgRlBT Q1IgYml0LiBYTz03MC4KLSsgICAgICAgIC8vIChDYXNlcyAzOCBhbmQgNzAgaGFkIHRoZSBsYWJl bHMgc3dhcHBlZCwgc28gd2FzbSdzCi0rICAgICAgICAvLyBgbXRmc2IwIDIzOyBmY3RpZHo7IG1j cmZzIGNyMCw1OyBidCBTTyx0cmFwYCBzZXF1ZW5jZSBhY2NpZGVudGFsbHkKLSsgICAgICAgIC8v IFNFVCBWWENWSSBiZWZvcmUgdGhlIGNvbnZlcnQgcmFuLCBjYXVzaW5nIGV2ZXJ5IGZjdGlkKiB0 byB0cmFwLikKLSsgICAgICAgIHVpbnQzMl90IGJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsKLSsgICAg ICAgIEZQU0NSXyAmPSB+KDFVTEwgPDwgKDMxIC0gYnQpKTsKLSsgICAgICAgIGJyZWFrOwotKyAg ICAgIH0KLSsgICAgICBjYXNlIDY0OiB7Ci0rICAgICAgICAvLyBtY3JmczogY29weSBGUFNDUiBm aWVsZCB0byBDUiBmaWVsZAotKyAgICAgICAgdWludDMyX3QgYmYgPSBpbnN0ci0+YmZWYWx1ZSgp OwotKyAgICAgICAgdWludDMyX3QgYmZhID0gaW5zdHItPmJpdHMoMjAsIDE4KTsKLSsgICAgICAg IHVpbnQzMl90IHNoaWZ0ID0gNCAqICg3IC0gYmZhKTsKLSsgICAgICAgIHVpbnQ4X3QgdmFsID0g KEZQU0NSXyA+PiBzaGlmdCkgJiAweEY7Ci0rICAgICAgICBzZXRDUkZpZWxkKGJmLCB2YWwpOwot KyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGRlZmF1bHQ6Ci0rICAgICAgICBNT1pf Q1JBU0hfVU5TQUZFX1BSSU5URigKLSsgICAgICAgICAgICAiZGVjb2RlRlA6IG9wY29kZSA2Mywg eG9feD0ldSAoaW5zdHJ1Y3Rpb24gMHglMDh4KSIsIHhvX3gsCi0rICAgICAgICAgICAgaW5zdHIt Pmluc3RydWN0aW9uQml0cygpKTsKLSsgICAgfQotKyAgfSBlbHNlIGlmIChvcGNvZGUgPT0gNTkp IHsKLSsgICAgLy8gQS1mb3JtIHNpbmdsZS1wcmVjaXNpb24gaW5zdHJ1Y3Rpb25zLgotKyAgICB1 aW50MzJfdCB4b19hID0gaW5zdHItPmJpdHMoNSwgMSk7Ci0rCi0rICAgIHN3aXRjaCAoeG9fYSkg ewotKyAgICAgIGNhc2UgMjE6IHsKLSsgICAgICAgIC8vIGZhZGRzCi0rICAgICAgICBkb3VibGUg cmVzdWx0ID0gKGRvdWJsZSkoKGZsb2F0KShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSkgKwotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3Vi bGUocmIpKSk7Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKLSsg ICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDIwOiB7Ci0rICAgICAgICAvLyBm c3VicwotKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IChkb3VibGUpKChmbG9hdCkoZ2V0RnB1UmVn aXN0ZXJEb3VibGUocmEpIC0KLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJE b3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2Fz ZSAyNTogewotKyAgICAgICAgLy8gZm11bHM6IEZSVCA9IChmbG9hdCkoRlJBICogRlJDKQotKyAg ICAgICAgZG91YmxlIHJlc3VsdCA9IChkb3VibGUpKChmbG9hdCkoZ2V0RnB1UmVnaXN0ZXJEb3Vi bGUocmEpICoKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZw dVJlZ2lzdGVyRG91YmxlKHJjX3JlZykpKTsKLSsgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91Ymxl KHJ0LCByZXN1bHQpOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgfQotKyAgICAgIGNhc2UgMTg6 IHsKLSsgICAgICAgIC8vIGZkaXZzCi0rICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRvdWJsZSko KGZsb2F0KShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSkgLwotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7Ci0rICAgICAg ICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKLSsgICAgICAgIGJyZWFrOwotKyAg ICAgIH0KLSsgICAgICBjYXNlIDIyOiB7Ci0rICAgICAgICAvLyBmc3FydHMKLSsgICAgICAgIGRv dWJsZSByZXN1bHQgPSAoZG91YmxlKXNxcnRmKChmbG9hdClnZXRGcHVSZWdpc3RlckRvdWJsZShy YikpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAg ICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAyOTogewotKyAgICAgICAgLy8gZm1hZGRz Ci0rICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRvdWJsZSkoKGZsb2F0KXN0ZDo6Zm1hKGdldEZw dVJlZ2lzdGVyRG91YmxlKHJhKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3Vi bGUocmIpKSk7Ci0rICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0KTsKLSsg ICAgICAgIGJyZWFrOwotKyAgICAgIH0KLSsgICAgICBjYXNlIDMwOiB7Ci0rICAgICAgICAvLyBm bm1zdWJzCi0rICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRvdWJsZSkoLShmbG9hdClzdGQ6OmZt YShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyY19yZWcpLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWdldEZwdVJl Z2lzdGVyRG91YmxlKHJiKSkpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJl c3VsdCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAyODogewotKyAg ICAgICAgLy8gZm1zdWJzCi0rICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRvdWJsZSkoKGZsb2F0 KXN0ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVn KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWdl dEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUo cnQsIHJlc3VsdCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAgY2FzZSAzMTog ewotKyAgICAgICAgLy8gZm5tYWRkcwotKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IChkb3VibGUp KC0oZmxvYXQpc3RkOjpmbWEoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3Vi bGUocmNfcmVnKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOwotKyAgICAgICAgc2V0RnB1UmVnaXN0 ZXJEb3VibGUocnQsIHJlc3VsdCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICB9Ci0rICAgICAg ZGVmYXVsdDogewotKyAgICAgICAgLy8gVHJ5IFgtZm9ybSBzdWItb3Bjb2RlcyBmb3Igb3Bjb2Rl IDU5IChlLmcuLCBmY2ZpZHMsIGZjZmlkdXMpLgotKyAgICAgICAgdWludDMyX3QgeG9feCA9IGlu c3RyLT5iaXRzKDEwLCAxKTsKLSsgICAgICAgIHN3aXRjaCAoeG9feCkgewotKyAgICAgICAgICBj YXNlIDg0NjogewotKyAgICAgICAgICAgIC8vIGZjZmlkczogY29udmVydCBpbnQ2NCB0byBmbG9h dCBzaW5nbGUgKHJlc3VsdCBzdG9yZWQgYXMgZG91YmxlKQotKyAgICAgICAgICAgIGludDY0X3Qg dmFsID0gZ2V0RnB1UmVnaXN0ZXIocmIpOwotKyAgICAgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91 YmxlKHJ0LCAoZG91YmxlKShmbG9hdCl2YWwpOwotKyAgICAgICAgICAgIGJyZWFrOwotKyAgICAg ICAgICB9Ci0rICAgICAgICAgIGNhc2UgOTc0OiB7Ci0rICAgICAgICAgICAgLy8gZmNmaWR1czog Y29udmVydCB1aW50NjQgdG8gZmxvYXQgc2luZ2xlCi0rICAgICAgICAgICAgdWludDY0X3QgdmFs ID0gVTY0KGdldEZwdVJlZ2lzdGVyKHJiKSk7Ci0rICAgICAgICAgICAgc2V0RnB1UmVnaXN0ZXJE b3VibGUocnQsIChkb3VibGUpKGZsb2F0KXZhbCk7Ci0rICAgICAgICAgICAgYnJlYWs7Ci0rICAg ICAgICAgIH0KLSsgICAgICAgICAgZGVmYXVsdDoKLSsgICAgICAgICAgICBNT1pfQ1JBU0hfVU5T QUZFX1BSSU5URigKLSsgICAgICAgICAgICAgICAgImRlY29kZUZQOiBvcGNvZGUgNTksIHhvX2E9 JXUgeG9feD0ldSIsIHhvX2EsIHhvX3gpOwotKyAgICAgICAgfQotKyAgICAgICAgYnJlYWs7Ci0r ICAgICAgfQotKyAgICB9Ci0rICB9IGVsc2UgewotKyAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5U RigiZGVjb2RlRlA6IG9wY29kZT0ldSIsIG9wY29kZSk7Ci0rICB9Ci0rfQotKwotKy8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0rLy8gZGVjb2RlVk1YOiBNYWpvciBvcGNvZGUgNCAoQWx0aVZlYy9W TVggdmVjdG9yIG9wcyBvbiBWUjAtVlIzMSkuCi0rLy8KLSsvLyBWUi1mb3JtIChWWC1mb3JtKTog Yml0cyAwLTUgPSBwcmltYXJ5IG9wY29kZSAoNCksIGJpdHMgNi0xMCA9IFZSVCwKLSsvLyBiaXRz IDExLTE1ID0gVlJBLCBiaXRzIDE2LTIwID0gVlJCLCBiaXRzIDIxLTMxID0gWE8gKDExIGJpdHMp LgotKy8vIFhPIGV4dHJhY3RlZCB2aWEgYGluc3RydWN0aW9uQml0cygpICYgMHg3RkZgLgotKy8v Ci0rLy8gSGVscGVycyBiZWxvdyBwYWNrL3VucGFjayBlYWNoIFZSIHZpYSB0aGUgVlJyZWdpc3Rl cnNfIGJ5dGUgc3RvcmFnZQotKy8vICgxNiBieXRlcywgYmlnLWVuZGlhbiBQUEMgbnVtYmVyaW5n OiBieXRlc1swXSBpcyB0aGUgbW9zdC1zaWduaWZpY2FudAotKy8vIGJ5dGUgb2YgdGhlIGFyY2hp dGVjdHVyYWwgcmVnaXN0ZXIsIGJ1dCBvbiBQUEM2NCBMRSB3YXNtIHRoZSBsYW5lCi0rLy8gb3Jk ZXJpbmcgaXMgd2hhdCB0aGUgSklUIGV4cGVjdHMpLiBBbGwgb3BzIGhlcmUgdXNlIGJ5dGUtbGV2 ZWwKLSsvLyBhY2Nlc3NvcnMgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIGV4aXN0aW5nIFZNWCBt ZW1vcnkgb3BzLgotKwotK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVWTVgoU2ltSW5zdHJ1Y3Rpb24q IGluc3RyKSB7Ci0rICB1aW50MzJfdCB4byA9IGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSAmIDB4 N0ZGdTsKLSsgIHVpbnQzMl90IHZydCA9IGluc3RyLT5ydFZhbHVlKCk7ICAgLy8gYml0cyA2Li4x MAotKyAgdWludDMyX3QgdnJhID0gaW5zdHItPnJhVmFsdWUoKTsgICAvLyBiaXRzIDExLi4xNQot KyAgdWludDMyX3QgdnJiID0gaW5zdHItPnJiVmFsdWUoKTsgICAvLyBiaXRzIDE2Li4yMAotKyAg dWludDMyX3QgdWltbSA9IGluc3RyLT5yYVZhbHVlKCk7ICAvLyBWQS1mb3JtOiA1LWJpdCBpbW1l ZGlhdGUgYXQgYml0cyAxMS4uMTUKLSsKLSsgIHVpbnQ4X3QgYVsxNl0sIGJbMTZdLCByWzE2XTsK LSsgIGdldFZSQnl0ZXModnJhLCBhKTsKLSsgIGdldFZSQnl0ZXModnJiLCBiKTsKLSsKLSsgIC8v IEhlbHBlcnMgZm9yIHRyZWF0aW5nIHRoZSBieXRlIHN0b3JhZ2UgYXMgdHlwZWQgbGFuZSBhcnJh eXMuCi0rICAvLyBUaGUgUFBDNjRMRSB3YXNtIFNJTUQgbG93ZXJpbmcgc3RvcmVzIGVhY2ggbGFu ZSdzIGJ5dGVzIGluCi0rICAvLyBsaXR0bGUtZW5kaWFuIG9yZGVyLCBzbyBsYW5lIGkgb2YgYW4g Ti1ieXRlIGVsZW1lbnQgb2NjdXBpZXMgYnl0ZXMKLSsgIC8vIChpKk4pIC4uIChpKk4gKyBOIC0g MSkgd2l0aCB0aGUgTFNCIGF0IGJ5dGUgKGkqTikuIEZvciBleGFtcGxlLAotKyAgLy8gYSB2MTI4 LmNvbnN0IGkzMng0IDB4MTIzNDU2NzggaGFzIGJ5dGVzIFs3OCA1NiAzNCAxMiDigKZdLgotKyAg I2RlZmluZSBMQU5FX1U4KGJ1ZiwgaSkgICgodWludDhfdCkoYnVmKVsoaSldKQotKyAgI2RlZmlu ZSBMQU5FX1M4KGJ1ZiwgaSkgICgoaW50OF90KShidWYpWyhpKV0pCi0rICAjZGVmaW5lIExBTkVf VTE2KGJ1ZiwgaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAo KHVpbnQxNl90KSgodWludDE2X3QpKGJ1ZilbKGkpICogMl0gfCAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgICAgICAgICAoKHVpbnQxNl90KShidWYpWyhpKSAqIDIgKyAxXSA8PCA4KSkp Ci0rICAjZGVmaW5lIExBTkVfUzE2KGJ1ZiwgaSkgKChpbnQxNl90KUxBTkVfVTE2KGJ1ZiwgaSkp Ci0rICAjZGVmaW5lIExBTkVfVTMyKGJ1ZiwgaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAoKHVpbnQzMl90KSgodWludDMyX3QpKGJ1ZilbKGkpICogNF0gfCAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShidWYpWyhp KSAqIDQgKyAxXSA8PCA4KSB8ICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90 KShidWYpWyhpKSAqIDQgKyAyXSA8PCAxNikgfCAgICAgICAgXAotKyAgICAgICAgICAgICAgICAo KHVpbnQzMl90KShidWYpWyhpKSAqIDQgKyAzXSA8PCAyNCkpKQotKyAgI2RlZmluZSBMQU5FX1Mz MihidWYsIGkpICgoaW50MzJfdClMQU5FX1UzMihidWYsIGkpKQotKyAgI2RlZmluZSBMQU5FX1U2 NChidWYsIGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKCh1 aW50NjRfdCkoKHVpbnQ2NF90KShidWYpWyhpKSAqIDhdIHwgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgICAgICAgKCh1aW50NjRfdCkoYnVmKVsoaSkgKiA4ICsgMV0gPDwgOCkgfCAg ICAgICAgIFwKLSsgICAgICAgICAgICAgICAgKCh1aW50NjRfdCkoYnVmKVsoaSkgKiA4ICsgMl0g PDwgMTYpIHwgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgKCh1aW50NjRfdCkoYnVmKVsoaSkg KiA4ICsgM10gPDwgMjQpIHwgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgKCh1aW50NjRfdCko YnVmKVsoaSkgKiA4ICsgNF0gPDwgMzIpIHwgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgKCh1 aW50NjRfdCkoYnVmKVsoaSkgKiA4ICsgNV0gPDwgNDApIHwgICAgICAgIFwKLSsgICAgICAgICAg ICAgICAgKCh1aW50NjRfdCkoYnVmKVsoaSkgKiA4ICsgNl0gPDwgNDgpIHwgICAgICAgIFwKLSsg ICAgICAgICAgICAgICAgKCh1aW50NjRfdCkoYnVmKVsoaSkgKiA4ICsgN10gPDwgNTYpKSkKLSsg ICNkZWZpbmUgTEFORV9TNjQoYnVmLCBpKSAoKGludDY0X3QpTEFORV9VNjQoYnVmLCBpKSkKLSsg ICNkZWZpbmUgU0VUX0xBTkVfVTgoYnVmLCBpLCB2KSAgZG8geyAoYnVmKVsoaSldID0gKHVpbnQ4 X3QpKHYpOyB9IHdoaWxlICgwKQotKyAgI2RlZmluZSBTRVRfTEFORV9VMTYoYnVmLCBpLCB2KSBk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIChidWYp WyhpKSAqIDJdICAgICA9ICh1aW50OF90KSgodWludDE2X3QpKHYpICYgMHhGRik7ICAgICAgICAg ICAgICAgICBcCi0rICAgICAgKGJ1ZilbKGkpICogMiArIDFdID0gKHVpbnQ4X3QpKCgodWludDE2 X3QpKHYpID4+IDgpICYgMHhGRik7ICAgICAgICAgIFwKLSsgICAgfSB3aGlsZSAoMCkKLSsgICNk ZWZpbmUgU0VUX0xBTkVfVTMyKGJ1ZiwgaSwgdikgZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAoYnVmKVsoaSkgKiA0XSAgICAgPSAodWludDhfdCko KHVpbnQzMl90KSh2KSAmIDB4RkYpOyAgICAgICAgICAgICAgICAgXAotKyAgICAgIChidWYpWyhp KSAqIDQgKyAxXSA9ICh1aW50OF90KSgoKHVpbnQzMl90KSh2KSA+PiA4KSAmIDB4RkYpOyAgICAg ICAgICBcCi0rICAgICAgKGJ1ZilbKGkpICogNCArIDJdID0gKHVpbnQ4X3QpKCgodWludDMyX3Qp KHYpID4+IDE2KSAmIDB4RkYpOyAgICAgICAgIFwKLSsgICAgICAoYnVmKVsoaSkgKiA0ICsgM10g PSAodWludDhfdCkoKCh1aW50MzJfdCkodikgPj4gMjQpICYgMHhGRik7ICAgICAgICAgXAotKyAg ICB9IHdoaWxlICgwKQotKyAgI2RlZmluZSBTRVRfTEFORV9VNjQoYnVmLCBpLCB2KSBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIChidWYpWyhpKSAq IDhdICAgICA9ICh1aW50OF90KSgodWludDY0X3QpKHYpICYgMHhGRik7ICAgICAgICAgICAgICAg ICBcCi0rICAgICAgKGJ1ZilbKGkpICogOCArIDFdID0gKHVpbnQ4X3QpKCgodWludDY0X3QpKHYp ID4+IDgpICYgMHhGRik7ICAgICAgICAgIFwKLSsgICAgICAoYnVmKVsoaSkgKiA4ICsgMl0gPSAo dWludDhfdCkoKCh1aW50NjRfdCkodikgPj4gMTYpICYgMHhGRik7ICAgICAgICAgXAotKyAgICAg IChidWYpWyhpKSAqIDggKyAzXSA9ICh1aW50OF90KSgoKHVpbnQ2NF90KSh2KSA+PiAyNCkgJiAw eEZGKTsgICAgICAgICBcCi0rICAgICAgKGJ1ZilbKGkpICogOCArIDRdID0gKHVpbnQ4X3QpKCgo dWludDY0X3QpKHYpID4+IDMyKSAmIDB4RkYpOyAgICAgICAgIFwKLSsgICAgICAoYnVmKVsoaSkg KiA4ICsgNV0gPSAodWludDhfdCkoKCh1aW50NjRfdCkodikgPj4gNDApICYgMHhGRik7ICAgICAg ICAgXAotKyAgICAgIChidWYpWyhpKSAqIDggKyA2XSA9ICh1aW50OF90KSgoKHVpbnQ2NF90KSh2 KSA+PiA0OCkgJiAweEZGKTsgICAgICAgICBcCi0rICAgICAgKGJ1ZilbKGkpICogOCArIDddID0g KHVpbnQ4X3QpKCgodWludDY0X3QpKHYpID4+IDU2KSAmIDB4RkYpOyAgICAgICAgIFwKLSsgICAg fSB3aGlsZSAoMCkKLSsKLSsgIC8vIC0tLSBWQS1mb3JtIHByZS1kaXNwYXRjaCAtLS0KLSsgIC8v Ci0rICAvLyBWQS1mb3JtIGhhcyBhIDYtYml0IFhPIGF0IGJpdHMgMjYtMzEgYW5kIGEgNS1iaXQg VlJDIGF0IGJpdHMgMjEtMjUuCi0rICAvLyBkZWNvZGVWTVgncyAxMS1iaXQgWE8gbWFzayBjb25m bGF0ZXMgVlJDIHdpdGgKLSsgIC8vIFhPLCBzbyBhIHBsYWluIGBzd2l0Y2ggKHhvKWAgb3ZlciAx MS1iaXQgdmFsdWVzIG9ubHkgbWF0Y2hlcyB3aGVuCi0rICAvLyBWUkMgPT0gMC4gUGVlbCBvZmYg dGhlIHRocmVlIFZBLWZvcm0gb3BzIGFjdHVhbGx5IHVzZWQgYnkgdGhlIEpJVAotKyAgLy8gKHZt bGFkZHVobSwgdnNlbCwgdnBlcm0pIGJlZm9yZSB0aGUgbWFpbiBzd2l0Y2ggc28gYW55IFZSQyB2 YWx1ZQotKyAgLy8gd29ya3MuIHZzbGRvaSAoWE89NDQpIGlzIFZYLWZvcm0gd2l0aCBTSCBhdCBi aXRzIDIyLTI1LCBub3QgVkEg4oCUCi0rICAvLyBoYW5kbGVkIGluIHRoZSBzd2l0Y2ggYmVsb3cu Ci0rICB7Ci0rICAgIHVpbnQzMl90IHZhX3hvID0geG8gJiAweDNGdTsKLSsgICAgaWYgKHZhX3hv ID09IDMyIHx8IHZhX3hvID09IDMzIHx8IHZhX3hvID09IDM0IHx8IHZhX3hvID09IDM4IHx8Ci0r ICAgICAgICB2YV94byA9PSA0MCB8fCB2YV94byA9PSA0MiB8fCB2YV94byA9PSA0MykgewotKyAg ICAgIHVpbnQzMl90IHZyYyA9IChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gNikgJiAweDFG OwotKyAgICAgIHVpbnQ4X3QgY3ZbMTZdOwotKyAgICAgIGdldFZSQnl0ZXModnJjLCBjdik7Ci0r ICAgICAgaWYgKHZhX3hvID09IDMyKSB7Ci0rICAgICAgICAvLyB2bWhhZGRzaHMgVlQsVkEsVkIs VkMgOiBWVFtpXSA9IHNhdF9zMTYoCi0rICAgICAgICAvLyAgIChzMzIpVkEuaFtpXSAqIChzMzIp VkIuaFtpXSA+PiAxNSArIChzMzIpVkMuaFtpXSkKLSsgICAgICAgIC8vIChubyByb3VuZGluZyB0 ZXJtIOKAlCB1c2Ugdm1ocmFkZHNocyBmb3IgdGhlIHJvdW5kZWQgZm9ybSkuCi0rICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgICBpbnQzMl90IHByb2QgPSAo aW50MzJfdClMQU5FX1MxNihhLCBpKSAqIChpbnQzMl90KUxBTkVfUzE2KGIsIGkpOwotKyAgICAg ICAgICBpbnQzMl90IHN1bSA9IChwcm9kID4+IDE1KSArIChpbnQzMl90KUxBTkVfUzE2KGN2LCBp KTsKLSsgICAgICAgICAgaWYgKHN1bSA+IElOVDE2X01BWCkgc3VtID0gSU5UMTZfTUFYOwotKyAg ICAgICAgICBpZiAoc3VtIDwgSU5UMTZfTUlOKSBzdW0gPSBJTlQxNl9NSU47Ci0rICAgICAgICAg IFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2X3QpKGludDE2X3Qpc3VtKTsKLSsgICAgICAgIH0K LSsgICAgICB9IGVsc2UgaWYgKHZhX3hvID09IDMzKSB7Ci0rICAgICAgICAvLyB2bWhyYWRkc2hz IFZULFZBLFZCLFZDIDogcm91bmRlZCBRMTUgbXVsdGlwbHktYWRkLXNhdHVyYXRlLgotKyAgICAg ICAgLy8gICBWVFtpXSA9IHNhdF9zMTYoKChzMzIpVkEuaFtpXSAqIChzMzIpVkIuaFtpXSArIDB4 NDAwMCkKLSsgICAgICAgIC8vICAgICAgICAgICAgICAgICAgID4+IDE1ICsgKHMzMilWQy5oW2ld KQotKyAgICAgICAgLy8gVXNlZCBieSB3YXNtIGkxNng4LnExNW11bHJfc2F0X3MgKFZDIGlzIHpl cm8pLgotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAgICAg aW50MzJfdCBwcm9kID0gKGludDMyX3QpTEFORV9TMTYoYSwgaSkgKiAoaW50MzJfdClMQU5FX1Mx NihiLCBpKTsKLSsgICAgICAgICAgaW50MzJfdCBzdW0gPSAoKHByb2QgKyAweDQwMDApID4+IDE1 KSArIChpbnQzMl90KUxBTkVfUzE2KGN2LCBpKTsKLSsgICAgICAgICAgaWYgKHN1bSA+IElOVDE2 X01BWCkgc3VtID0gSU5UMTZfTUFYOwotKyAgICAgICAgICBpZiAoc3VtIDwgSU5UMTZfTUlOKSBz dW0gPSBJTlQxNl9NSU47Ci0rICAgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2X3Qp KGludDE2X3Qpc3VtKTsKLSsgICAgICAgIH0KLSsgICAgICB9IGVsc2UgaWYgKHZhX3hvID09IDM0 KSB7Ci0rICAgICAgICAvLyB2bWxhZGR1aG0gVlQsVkEsVkIsVkMgOiBWVCA9IGxvdzE2KFZBKlZC ICsgVkMpCi0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAg ICB1aW50MTZfdCBwcm9kID0gTEFORV9VMTYoYSwgaSkgKiBMQU5FX1UxNihiLCBpKTsKLSsgICAg ICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIHByb2QgKyBMQU5FX1UxNihjdiwgaSkpOwotKyAgICAg ICAgfQotKyAgICAgIH0gZWxzZSBpZiAodmFfeG8gPT0gNDApIHsKLSsgICAgICAgIC8vIHZtc3Vt c2htIFZULFZBLFZCLFZDIDogcGFpcndpc2UgbXVsdGlwbHktc3VtIG9mIHNpZ25lZCBoYWxmd29y ZHMKLSsgICAgICAgIC8vIGludG8gaTMyIGxhbmVzLCBtb2R1bG8gaTMyIHdyYXAuCi0rICAgICAg ICAvLyAgIFZULmkzMltrXSA9IFZDLmkzMltrXSArIFZBLmkxNlsya10qVkIuaTE2WzJrXQotKyAg ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgKyBWQS5pMTZbMmsrMV0qVkIuaTE2WzJr KzFdCi0rICAgICAgICAvLyBVc2VkIGJ5IHdhc20gaTMyeDQuZG90X2kxNng4X3Mgd2l0aCBWQyA9 IDAsIGFuZCBieQotKyAgICAgICAgLy8gaTMyeDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3Mgd2l0 aCBWQiA9IHNwbGF0KDEpIGFuZCBWQyA9IDAuCi0rICAgICAgICBmb3IgKGludCBrID0gMDsgayA8 IDQ7IGsrKykgewotKyAgICAgICAgICBpbnQzMl90IGEwID0gKGludDMyX3QpTEFORV9TMTYoYSwg MiAqIGspOwotKyAgICAgICAgICBpbnQzMl90IGExID0gKGludDMyX3QpTEFORV9TMTYoYSwgMiAq IGsgKyAxKTsKLSsgICAgICAgICAgaW50MzJfdCBiMCA9IChpbnQzMl90KUxBTkVfUzE2KGIsIDIg KiBrKTsKLSsgICAgICAgICAgaW50MzJfdCBiMSA9IChpbnQzMl90KUxBTkVfUzE2KGIsIDIgKiBr ICsgMSk7Ci0rICAgICAgICAgIGludDMyX3QgYyAgPSBMQU5FX1MzMihjdiwgayk7Ci0rICAgICAg ICAgIGludDMyX3QgcmVzdWx0ID0gKGludDMyX3QpKCh1aW50MzJfdCljICsgKHVpbnQzMl90KShh MCAqIGIwKSArCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJf dCkoYTEgKiBiMSkpOwotKyAgICAgICAgICBTRVRfTEFORV9VMzIociwgaywgKHVpbnQzMl90KXJl c3VsdCk7Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIGlmICh2YV94byA9PSAzOCkgewotKyAg ICAgICAgLy8gdm1zdW11aG0gVlQsVkEsVkIsVkMgOiBzYW1lIGFzIHZtc3Vtc2htIGJ1dCB1bnNp Z25lZCBoYWxmd29yZHMuCi0rICAgICAgICAvLyAgIFZULnUzMltrXSA9IFZDLnUzMltrXSArIFZB LnUxNlsya10qVkIudTE2WzJrXQotKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAg KyBWQS51MTZbMmsrMV0qVkIudTE2WzJrKzFdCi0rICAgICAgICAvLyBVc2VkIGJ5IHdhc20gaTMy eDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3Ugd2l0aCBWQiA9IHNwbGF0KDEpCi0rICAgICAgICAv LyBhbmQgVkMgPSAwLgotKyAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyBrKyspIHsKLSsg ICAgICAgICAgdWludDMyX3QgYTAgPSAodWludDMyX3QpTEFORV9VMTYoYSwgMiAqIGspOwotKyAg ICAgICAgICB1aW50MzJfdCBhMSA9ICh1aW50MzJfdClMQU5FX1UxNihhLCAyICogayArIDEpOwot KyAgICAgICAgICB1aW50MzJfdCBiMCA9ICh1aW50MzJfdClMQU5FX1UxNihiLCAyICogayk7Ci0r ICAgICAgICAgIHVpbnQzMl90IGIxID0gKHVpbnQzMl90KUxBTkVfVTE2KGIsIDIgKiBrICsgMSk7 Ci0rICAgICAgICAgIHVpbnQzMl90IGMgID0gTEFORV9VMzIoY3YsIGspOwotKyAgICAgICAgICB1 aW50MzJfdCByZXN1bHQgPSBjICsgYTAgKiBiMCArIGExICogYjE7Ci0rICAgICAgICAgIFNFVF9M QU5FX1UzMihyLCBrLCByZXN1bHQpOwotKyAgICAgICAgfQotKyAgICAgIH0gZWxzZSBpZiAodmFf eG8gPT0gNDIpIHsKLSsgICAgICAgIC8vIHZzZWwgVlQsVkEsVkIsVkMgOiBWVFtpXSA9IChWQ1tp XSAmIFZCW2ldKSB8ICh+VkNbaV0gJiBWQVtpXSkKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgMTY7IGkrKykgewotKyAgICAgICAgICByW2ldID0gKHVpbnQ4X3QpKChjdltpXSAmIGJbaV0p IHwgKH5jdltpXSAmIGFbaV0pKTsKLSsgICAgICAgIH0KLSsgICAgICB9IGVsc2UgewotKyAgICAg ICAgLy8gdnBlcm0gVlQsVkEsVkIsVkM7IGVtcGlyaWNhbCBMRToKLSsgICAgICAgIC8vICAgcltM RV9pXSA9IChWQ1tMRV9pXSA8IDE2KSA/IFZBW0xFXygxNS1WQ1tpXSldCi0rICAgICAgICAvLyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBWQltMRV8oMzEtVkNbaV0pXQotKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICAgIHVpbnQ4X3QgaWR4ID0g Y3ZbaV0gJiAweDFGOwotKyAgICAgICAgICByW2ldID0gKGlkeCA8IDE2KSA/IGFbMTUgLSBpZHhd IDogYlszMSAtIGlkeF07Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXMo dnJ0LCByKTsKLSsgICAgICBnb3RvIHZteF9kb25lOwotKyAgICB9Ci0rICB9Ci0rCi0rICBzd2l0 Y2ggKHhvKSB7Ci0rICAgIC8vID09PSBJbnRlZ2VyIGFkZCAobW9kdWxvKSA9PT0KLSsgICAgY2Fz ZSAwOiAgICAvLyB2YWRkdWJtCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7 Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCBpLCBMQU5FX1U4KGEsIGkpICsgTEFORV9VOChiLCBp KSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNh c2UgNjQ6ICAgLy8gdmFkZHVobQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7 Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFORV9VMTYoYSwgaSkgKyBMQU5FX1UxNihi LCBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAg IGNhc2UgMTI4OiAgLy8gdmFkZHV3bQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr KSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgTEFORV9VMzIoYSwgaSkgKyBMQU5FX1Uz MihiLCBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0r ICAgIGNhc2UgMTkyOiAgLy8gdmFkZHVkbQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsg aSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VNjQociwgaSwgTEFORV9VNjQoYSwgaSkgKyBMQU5F X1U2NChiLCBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7 Ci0rCi0rICAgIC8vID09PSBJbnRlZ2VyIHN1YiAobW9kdWxvKSA9PT0KLSsgICAgY2FzZSAxMDI0 OiAvLyB2c3VidWJtCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAg ICAgICBTRVRfTEFORV9VOChyLCBpLCBMQU5FX1U4KGEsIGkpIC0gTEFORV9VOChiLCBpKSk7Ci0r ICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgMTA4 ODogLy8gdnN1YnVobQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAg ICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFORV9VMTYoYSwgaSkgLSBMQU5FX1UxNihiLCBpKSk7 Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2Ug MTE1MjogLy8gdnN1YnV3bQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0r ICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgTEFORV9VMzIoYSwgaSkgLSBMQU5FX1UzMihiLCBp KSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNh c2UgMTIxNjogLy8gdnN1YnVkbQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7 Ci0rICAgICAgICBTRVRfTEFORV9VNjQociwgaSwgTEFORV9VNjQoYSwgaSkgLSBMQU5FX1U2NChi LCBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rCi0r ICAgIC8vID09PSBJbnRlZ2VyIGFkZCAoc2F0dXJhdGluZywgc2lnbmVkKSA9PT0KLSsgICAgY2Fz ZSA3Njg6ICAvLyB2YWRkc2JzCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7 Ci0rICAgICAgICBpbnQgcyA9IChpbnQpTEFORV9TOChhLCBpKSArIChpbnQpTEFORV9TOChiLCBp KTsKLSsgICAgICAgIGlmIChzID4gSU5UOF9NQVgpIHMgPSBJTlQ4X01BWDsKLSsgICAgICAgIGlm IChzIDwgSU5UOF9NSU4pIHMgPSBJTlQ4X01JTjsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIGks ICh1aW50OF90KXMpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFr OwotKyAgICBjYXNlIDgzMjogIC8vIHZhZGRzaHMKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDg7IGkrKykgewotKyAgICAgICAgaW50IHMgPSAoaW50KUxBTkVfUzE2KGEsIGkpICsgKGludClM QU5FX1MxNihiLCBpKTsKLSsgICAgICAgIGlmIChzID4gSU5UMTZfTUFYKSBzID0gSU5UMTZfTUFY OwotKyAgICAgICAgaWYgKHMgPCBJTlQxNl9NSU4pIHMgPSBJTlQxNl9NSU47Ci0rICAgICAgICBT RVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KXMpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5 dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDg5NjogIC8vIHZhZGRzd3MKLSsgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgaW50NjRfdCBzID0gKGludDY0 X3QpTEFORV9TMzIoYSwgaSkgKyAoaW50NjRfdClMQU5FX1MzMihiLCBpKTsKLSsgICAgICAgIGlm IChzID4gSU5UMzJfTUFYKSBzID0gSU5UMzJfTUFYOwotKyAgICAgICAgaWYgKHMgPCBJTlQzMl9N SU4pIHMgPSBJTlQzMl9NSU47Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgKHVpbnQzMl90 KXMpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKwotKyAg ICAvLyA9PT0gSW50ZWdlciBhZGQgKHNhdHVyYXRpbmcsIHVuc2lnbmVkKSA9PT0KLSsgICAgY2Fz ZSA1MTI6ICAvLyB2YWRkdWJzCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7 Ci0rICAgICAgICB1bnNpZ25lZCBzID0gKHVuc2lnbmVkKUxBTkVfVTgoYSwgaSkgKyAodW5zaWdu ZWQpTEFORV9VOChiLCBpKTsKLSsgICAgICAgIGlmIChzID4gVUlOVDhfTUFYKSBzID0gVUlOVDhf TUFYOwotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgKHVpbnQ4X3Qpcyk7Ci0rICAgICAgfQot KyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgNTc2OiAgLy8gdmFk ZHVocwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICB1bnNp Z25lZCBzID0gKHVuc2lnbmVkKUxBTkVfVTE2KGEsIGkpICsgKHVuc2lnbmVkKUxBTkVfVTE2KGIs IGkpOwotKyAgICAgICAgaWYgKHMgPiBVSU5UMTZfTUFYKSBzID0gVUlOVDE2X01BWDsKLSsgICAg ICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2X3Qpcyk7Ci0rICAgICAgfQotKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgNjQwOiAgLy8gdmFkZHV3cwotKyAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICB1aW50NjRfdCBzID0g KHVpbnQ2NF90KUxBTkVfVTMyKGEsIGkpICsgKHVpbnQ2NF90KUxBTkVfVTMyKGIsIGkpOwotKyAg ICAgICAgaWYgKHMgPiBVSU5UMzJfTUFYKSBzID0gVUlOVDMyX01BWDsKLSsgICAgICAgIFNFVF9M QU5FX1UzMihyLCBpLCAodWludDMyX3Qpcyk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXMo dnJ0LCByKTsgYnJlYWs7Ci0rCi0rICAgIC8vID09PSBJbnRlZ2VyIHN1YiAoc2F0dXJhdGluZywg c2lnbmVkKSA9PT0KLSsgICAgY2FzZSAxNzkyOiAvLyB2c3Vic2JzCi0rICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICBpbnQgcyA9IChpbnQpTEFORV9TOChhLCBp KSAtIChpbnQpTEFORV9TOChiLCBpKTsKLSsgICAgICAgIGlmIChzID4gSU5UOF9NQVgpIHMgPSBJ TlQ4X01BWDsKLSsgICAgICAgIGlmIChzIDwgSU5UOF9NSU4pIHMgPSBJTlQ4X01JTjsKLSsgICAg ICAgIFNFVF9MQU5FX1U4KHIsIGksICh1aW50OF90KXMpOwotKyAgICAgIH0KLSsgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDE4NTY6IC8vIHZzdWJzaHMKLSsgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgaW50IHMgPSAoaW50KUxB TkVfUzE2KGEsIGkpIC0gKGludClMQU5FX1MxNihiLCBpKTsKLSsgICAgICAgIGlmIChzID4gSU5U MTZfTUFYKSBzID0gSU5UMTZfTUFYOwotKyAgICAgICAgaWYgKHMgPCBJTlQxNl9NSU4pIHMgPSBJ TlQxNl9NSU47Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KXMpOwotKyAg ICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKwotKyAgICAvLyA9PT0g SW50ZWdlciBzdWIgKHNhdHVyYXRpbmcsIHVuc2lnbmVkKSA9PT0KLSsgICAgY2FzZSAxNTM2OiAv LyB2c3VidWJzCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAg ICBpbnQgcyA9IChpbnQpTEFORV9VOChhLCBpKSAtIChpbnQpTEFORV9VOChiLCBpKTsKLSsgICAg ICAgIGlmIChzIDwgMCkgcyA9IDA7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCBpLCAodWludDhf dClzKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAg Y2FzZSAxNjAwOiAvLyB2c3VidWhzCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKysp IHsKLSsgICAgICAgIGludCBzID0gKGludClMQU5FX1UxNihhLCBpKSAtIChpbnQpTEFORV9VMTYo YiwgaSk7Ci0rICAgICAgICBpZiAocyA8IDApIHMgPSAwOwotKyAgICAgICAgU0VUX0xBTkVfVTE2 KHIsIGksICh1aW50MTZfdClzKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIp OyBicmVhazsKLSsKLSsgICAgLy8gPT09IEF2ZXJhZ2UgdW5zaWduZWQgKHJvdW5kZWQ6IChhK2Ir MSk+PjEpID09PQotKyAgICBjYXNlIDEwMjY6IC8vIHZhdmd1YgotKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgMTY7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwKLSsgICAgICAg ICAgICAgICAgICAgICgodW5zaWduZWQpTEFORV9VOChhLCBpKSArIExBTkVfVTgoYiwgaSkgKyAx KSA+PiAxKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsg ICAgY2FzZSAxMDkwOiAvLyB2YXZndWgKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkr KykgewotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAg KCh1bnNpZ25lZClMQU5FX1UxNihhLCBpKSArIExBTkVfVTE2KGIsIGkpICsgMSkgPj4gMSk7Ci0r ICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rCi0rICAgIC8vID09 PSBWZWN0b3IgbXVsdGlwbHkgcGVyLWxhbmUgKGkzMng0Lm11bCkgPT09Ci0rICAgIGNhc2UgMTM3 OiB7IC8vIHZtdWx1d206IHBlci1sYW5lIGkzMiBtdWx0aXBseSAobG93IDMyIGJpdHMpCi0rICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihy LCBpLCBMQU5FX1UzMihhLCBpKSAqIExBTkVfVTMyKGIsIGkpKTsKLSsgICAgICB9Ci0rICAgICAg c2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gUE9XRVIx MCB2bXVsbGQ6IHBlci1sYW5lIGk2NCBtdWx0aXBseSAobG93IDY0IGJpdHMpID09PQotKyAgICBj YXNlIDQ1NzogewotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAgICAg ICB1aW50NjRfdCBhdiA9IDAsIGJ2ID0gMDsKLSsgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg ODsgaisrKSB7Ci0rICAgICAgICAgIGF2IHw9ICgodWludDY0X3QpYVtpICogOCArIGpdKSA8PCAo aiAqIDgpOwotKyAgICAgICAgICBidiB8PSAoKHVpbnQ2NF90KWJbaSAqIDggKyBqXSkgPDwgKGog KiA4KTsKLSsgICAgICAgIH0KLSsgICAgICAgIHVpbnQ2NF90IHByb2QgPSBhdiAqIGJ2OyAgLy8g bG93IDY0IGJpdHMsIG1vZHVsbyB3cmFwCi0rICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDg7 IGorKykgewotKyAgICAgICAgICByW2kgKiA4ICsgal0gPSAodWludDhfdCkocHJvZCA+PiAoaiAq IDgpKTsKLSsgICAgICAgIH0KLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBi cmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gdm11bGUvdm11bG8qIChtdWx0aXBseSBldmVu L29kZCBsYW5lcywgd2lkZW5pbmcpID09PQotKyAgICAvLwotKyAgICAvLyBBbGwgWE8gdmFsdWVz IGJlbG93IHdlcmUgdmVyaWZpZWQgYnkgZGlzYXNzZW1ibGluZyB0aGUKLSsgICAgLy8gUFBDX3Zt dWxlKi9QUENfdm11bG8qIGNvbnN0YW50cyBmcm9tIEFzc2VtYmxlci1wcGM2NC5oIHdpdGgKLSsg ICAgLy8gYGFzIC1tcHBjNjQgLW1saXR0bGVgICsgYG9iamR1bXAgLU1wb3dlcjkgLWRgLiBUaGUg cHJldmlvdXMKLSsgICAgLy8gdmVyc2lvbiBoYWQgYWxsIDEyIFhPIGxhYmVscyBzd2FwcGVkIHdp dGggZWFjaCBvdGhlcidzIHNlbWFudGljCi0rICAgIC8vIHBhaXIgKHNvIHRoZSBKSVQncyB2bXVs ZXNiIHdhcyBkZWNvZGVkIGFzIHZtdWxvc2IgYW5kIHZpY2UKLSsgICAgLy8gdmVyc2EpLCBjYXVz aW5nIGk4eDE24oaSaTE2eDggZXh0bXVsIHRvIHByb2R1Y2Ugd3JvbmcgaGFsZndvcmRzLgotKyAg ICAvLwotKyAgICAvLyAgIFBQQ192bXVsb3ViID0gMHgxMDAwMDAwOCDihpIgWE89OCAgICAgdm11 bG91YiAoTEUgZXZlbi1ieXRlIHBhaXJzKQotKyAgICAvLyAgIFBQQ192bXVsb3VoID0gMHgxMDAw MDA0OCDihpIgWE89NzIgICAgdm11bG91aAotKyAgICAvLyAgIFBQQ192bXVsb3V3ID0gMHgxMDAw MDA4OCDihpIgWE89MTM2ICAgdm11bG91dwotKyAgICAvLyAgIFBQQ192bXVsb3NiID0gMHgxMDAw MDEwOCDihpIgWE89MjY0ICAgdm11bG9zYgotKyAgICAvLyAgIFBQQ192bXVsb3NoID0gMHgxMDAw MDE0OCDihpIgWE89MzI4ICAgdm11bG9zaAotKyAgICAvLyAgIFBQQ192bXVsb3N3ID0gMHgxMDAw MDE4OCDihpIgWE89MzkyICAgdm11bG9zdwotKyAgICAvLyAgIFBQQ192bXVsZXViID0gMHgxMDAw MDIwOCDihpIgWE89NTIwICAgdm11bGV1YiAoTEUgb2RkLWJ5dGUgcGFpcnMpCi0rICAgIC8vICAg UFBDX3ZtdWxldWggPSAweDEwMDAwMjQ4IOKGkiBYTz01ODQgICB2bXVsZXVoCi0rICAgIC8vICAg UFBDX3ZtdWxldXcgPSAweDEwMDAwMjg4IOKGkiBYTz02NDggICB2bXVsZXV3Ci0rICAgIC8vICAg UFBDX3ZtdWxlc2IgPSAweDEwMDAwMzA4IOKGkiBYTz03NzYgICB2bXVsZXNiCi0rICAgIC8vICAg UFBDX3ZtdWxlc2ggPSAweDEwMDAwMzQ4IOKGkiBYTz04NDAgICB2bXVsZXNoCi0rICAgIC8vICAg UFBDX3ZtdWxlc3cgPSAweDEwMDAwMzg4IOKGkiBYTz05MDQgICB2bXVsZXN3Ci0rICAgIC8vCi0r ICAgIC8vIExhbmUgaW5kZXhpbmcgb24gTEUgc3RvcmFnZTogIkJFLWV2ZW4gYnl0ZSBpIiBpcyBz dG9yZWQgYXQgTEUKLSsgICAgLy8gYnl0ZSBpbmRleCAoMTUgLSAyaSk7IHNpbmNlIG91ciBMQU5F X1M4IHVzZXMgTEUgYnl0ZSBpbmRleCwgdGhlCi0rICAgIC8vICJCRS1ldmVuIiA9ICJMRS1vZGQi IG1hcHBpbmcgZ2l2ZXMgYDIqaSArIDFgIGZvciB2bXVsZSwgYDIqaWAKLSsgICAgLy8gZm9yIHZt dWxvLiBUaGUgSklUJ3MgZXh0bXVsIGhlbHBlcnMgZW1pdCBgdm11bGVzYiArIHZtdWxvc2IgKwot KyAgICAvLyB2bXJnbGhgIHRvIHBhY2sgYm90aCBoYWx2ZXM7IGdldHRpbmcgdGhlIHNlbWFudGlj cyBzd2FwcGVkIGhlcmUKLSsgICAgLy8gcHJvZHVjZXMgdGhlIHJpZ2h0IHJlc3VsdCByZWdpc3Rl ciBidXQgd2l0aCB0aGUgaGFsdmVzIGluIHRoZQotKyAgICAvLyB3cm9uZyBtZXJnZSBvcmRlciwg YnJlYWtpbmcgZXh0bXVsLgotKyAgICBjYXNlIDc3NjogeyAvLyB2bXVsZXNiOiBzaWduZWQgQkUt ZXZlbiBieXRlIOKGkiBoYWxmd29yZCAoOCByZXN1bHRzKQotKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwKLSsgICAgICAgICAg ICAgICAgICAgICAoaW50MTZfdClMQU5FX1M4KGEsIDIgKiBpICsgMSkgKgotKyAgICAgICAgICAg ICAgICAgICAgIChpbnQxNl90KUxBTkVfUzgoYiwgMiAqIGkgKyAxKSk7Ci0rICAgICAgfQotKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA1MjA6IHsg Ly8gdm11bGV1YjogdW5zaWduZWQgQkUtZXZlbiBieXRlIOKGkiBoYWxmd29yZAotKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMTYociwgaSwK LSsgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpTEFORV9VOChhLCAyICogaSArIDEpICoK LSsgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpTEFORV9VOChiLCAyICogaSArIDEpKTsK LSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKyAg ICBjYXNlIDg0MDogeyAvLyB2bXVsZXNoOiBzaWduZWQgQkUtZXZlbiBoYWxmd29yZCDihpIgd29y ZAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFO RV9VMzIociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICAoaW50MzJfdClMQU5FX1MxNihhLCAy ICogaSArIDEpICoKLSsgICAgICAgICAgICAgICAgICAgICAoaW50MzJfdClMQU5FX1MxNihiLCAy ICogaSArIDEpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsK LSsgICAgfQotKyAgICBjYXNlIDU4NDogeyAvLyB2bXVsZXVoOiB1bnNpZ25lZCBCRS1ldmVuIGhh bGZ3b3JkIOKGkiB3b3JkCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsg ICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJf dClMQU5FX1UxNihhLCAyICogaSArIDEpICoKLSsgICAgICAgICAgICAgICAgICAgICAodWludDMy X3QpTEFORV9VMTYoYiwgMiAqIGkgKyAxKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXMo dnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA5MDQ6IHsgLy8gdm11bGVzdzogc2ln bmVkIEJFLWV2ZW4gd29yZCDihpIgZHdvcmQgKFBPV0VSOCkKLSsgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksCi0rICAgICAgICAg ICAgICAgICAgICAgKGludDY0X3QpTEFORV9TMzIoYSwgMiAqIGkgKyAxKSAqCi0rICAgICAgICAg ICAgICAgICAgICAgKGludDY0X3QpTEFORV9TMzIoYiwgMiAqIGkgKyAxKSk7Ci0rICAgICAgfQot KyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA2NDg6 IHsgLy8gdm11bGV1dzogdW5zaWduZWQgQkUtZXZlbiB3b3JkIOKGkiBkd29yZCAoUE9XRVI4KQot KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9V NjQociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpTEFORV9VMzIoYSwgMiAq IGkgKyAxKSAqCi0rICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KUxBTkVfVTMyKGIsIDIg KiBpICsgMSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwot KyAgICB9Ci0rICAgIGNhc2UgMjY0OiB7IC8vIHZtdWxvc2I6IHNpZ25lZCBCRS1vZGQgYnl0ZSDi hpIgaGFsZndvcmQKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAg ICAgU0VUX0xBTkVfVTE2KHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAgKGludDE2X3QpTEFO RV9TOChhLCAyICogaSkgKgotKyAgICAgICAgICAgICAgICAgICAgIChpbnQxNl90KUxBTkVfUzgo YiwgMiAqIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsK LSsgICAgfQotKyAgICBjYXNlIDg6IHsgLy8gdm11bG91YjogdW5zaWduZWQgQkUtb2RkIGJ5dGUK LSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVf VTE2KHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KUxBTkVfVTgoYSwgMiAq IGkpICoKLSsgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpTEFORV9VOChiLCAyICogaSkp OwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICB9Ci0r ICAgIGNhc2UgMzI4OiB7IC8vIHZtdWxvc2g6IHNpZ25lZCBCRS1vZGQgaGFsZndvcmQg4oaSIHdv cmQKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgU0VUX0xB TkVfVTMyKHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAgKGludDMyX3QpTEFORV9TMTYoYSwg MiAqIGkpICoKLSsgICAgICAgICAgICAgICAgICAgICAoaW50MzJfdClMQU5FX1MxNihiLCAyICog aSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICB9 Ci0rICAgIGNhc2UgNzI6IHsgLy8gdm11bG91aDogdW5zaWduZWQgQkUtb2RkIGhhbGZ3b3JkIOKG kiB3b3JkCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIFNF VF9MQU5FX1UzMihyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClMQU5FX1Ux NihhLCAyICogaSkgKgotKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClMQU5FX1UxNihi LCAyICogaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwot KyAgICB9Ci0rICAgIGNhc2UgMzkyOiB7IC8vIHZtdWxvc3c6IHNpZ25lZCBCRS1vZGQgd29yZAot KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9V NjQociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICAoaW50NjRfdClMQU5FX1MzMihhLCAyICog aSkgKgotKyAgICAgICAgICAgICAgICAgICAgIChpbnQ2NF90KUxBTkVfUzMyKGIsIDIgKiBpKSk7 Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsg ICAgY2FzZSAxMzY6IHsgLy8gdm11bG91dzogdW5zaWduZWQgQkUtb2RkIHdvcmQKLSsgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGks Ci0rICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KUxBTkVfVTMyKGEsIDIgKiBpKSAqCi0r ICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KUxBTkVfVTMyKGIsIDIgKiBpKSk7Ci0rICAg ICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAg Ly8gPT09IFBlci1sYW5lIHJvdGF0ZSBsZWZ0ICh2cmx7YixoLHcsZH0pID09PQotKyAgICBjYXNl IDQ6ICAgIC8vIHZybGIKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsg ICAgICAgIHVpbnQ4X3QgdiA9IExBTkVfVTgoYSwgaSk7Ci0rICAgICAgICB1aW50MzJfdCBzID0g TEFORV9VOChiLCBpKSAmIDc7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCBpLCAodWludDhfdCko KHYgPDwgcykgfCAodiA+PiAoKDggLSBzKSAmIDcpKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDY4OiAgIC8vIHZybGgKLSsgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgdWludDE2X3QgdiA9IExBTkVf VTE2KGEsIGkpOwotKyAgICAgICAgdWludDMyX3QgcyA9IExBTkVfVTE2KGIsIGkpICYgMTU7Ci0r ICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KSgodiA8PCBzKSB8ICh2ID4+ICgo MTYgLSBzKSAmIDE1KSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBi cmVhazsKLSsgICAgY2FzZSAxMzI6ICAvLyB2cmx3Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA0OyBpKyspIHsKLSsgICAgICAgIHVpbnQzMl90IHYgPSBMQU5FX1UzMihhLCBpKTsKLSsgICAg ICAgIHVpbnQzMl90IHMgPSBMQU5FX1UzMihiLCBpKSAmIDMxOwotKyAgICAgICAgU0VUX0xBTkVf VTMyKHIsIGksICh2IDw8IHMpIHwgKHYgPj4gKCgzMiAtIHMpICYgMzEpKSk7Ci0rICAgICAgfQot KyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgMTk2OiAgLy8gdnJs ZAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAgICAgICB1aW50NjRf dCB2ID0gTEFORV9VNjQoYSwgaSk7Ci0rICAgICAgICB1aW50MzJfdCBzID0gTEFORV9VNjQoYiwg aSkgJiA2MzsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCAodiA8PCBzKSB8ICh2ID4+ICgo NjQgLSBzKSAmIDYzKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJy ZWFrOwotKwotKyAgICAvLyA9PT0gTWluIC8gTWF4IHNpZ25lZCA9PT0KLSsgICAgY2FzZSAyNTg6 ICAvLyB2bWF4c2IKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAg ICAgIFNFVF9MQU5FX1U4KHIsIGksIHN0ZDo6bWF4KExBTkVfUzgoYSwgaSksIExBTkVfUzgoYiwg aSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAg Y2FzZSAzMjI6ICAvLyB2bWF4c2gKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykg ewotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIHN0ZDo6bWF4KExBTkVfUzE2KGEsIGkpLCBM QU5FX1MxNihiLCBpKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJy ZWFrOwotKyAgICBjYXNlIDM4NjogIC8vIHZtYXhzdwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgc3RkOjptYXgoTEFORV9T MzIoYSwgaSksIExBTkVfUzMyKGIsIGkpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXMo dnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgNDUwOiAgLy8gdm1heHNkCi0rICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCBzdGQ6 Om1heChMQU5FX1M2NChhLCBpKSwgTEFORV9TNjQoYiwgaSkpKTsKLSsgICAgICB9Ci0rICAgICAg c2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA3NzA6ICAvLyB2bWluc2IKLSsg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U4 KHIsIGksIHN0ZDo6bWluKExBTkVfUzgoYSwgaSksIExBTkVfUzgoYiwgaSkpKTsKLSsgICAgICB9 Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA4MzQ6ICAvLyB2 bWluc2gKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgU0VU X0xBTkVfVTE2KHIsIGksIHN0ZDo6bWluKExBTkVfUzE2KGEsIGkpLCBMQU5FX1MxNihiLCBpKSkp OwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNl IDg5ODogIC8vIHZtaW5zdwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0r ICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgc3RkOjptaW4oTEFORV9TMzIoYSwgaSksIExBTkVf UzMyKGIsIGkpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7 Ci0rICAgIGNhc2UgOTYyOiAgLy8gdm1pbnNkCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCBzdGQ6Om1pbihMQU5FX1M2NChh LCBpKSwgTEFORV9TNjQoYiwgaSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQs IHIpOyBicmVhazsKLSsKLSsgICAgLy8gPT09IE1pbiAvIE1heCB1bnNpZ25lZCA9PT0KLSsgICAg Y2FzZSAyOiAgICAvLyB2bWF4dWIKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKysp IHsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIHN0ZDo6bWF4KExBTkVfVTgoYSwgaSksIExB TkVfVTgoYiwgaSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVh azsKLSsgICAgY2FzZSA2NjogICAvLyB2bWF4dWgKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDg7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIHN0ZDo6bWF4KExBTkVfVTE2 KGEsIGkpLCBMQU5FX1UxNihiLCBpKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZy dCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDEzMDogIC8vIHZtYXh1dwotKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgc3RkOjpt YXgoTEFORV9VMzIoYSwgaSksIExBTkVfVTMyKGIsIGkpKSk7Ci0rICAgICAgfQotKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgMTk0OiAgLy8gdm1heHVkCi0rICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChy LCBpLCBzdGQ6Om1heChMQU5FX1U2NChhLCBpKSwgTEFORV9VNjQoYiwgaSkpKTsKLSsgICAgICB9 Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA1MTQ6ICAvLyB2 bWludWIKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAgIFNF VF9MQU5FX1U4KHIsIGksIHN0ZDo6bWluKExBTkVfVTgoYSwgaSksIExBTkVfVTgoYiwgaSkpKTsK LSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA1 Nzg6ICAvLyB2bWludWgKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAg ICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIHN0ZDo6bWluKExBTkVfVTE2KGEsIGkpLCBMQU5FX1Ux NihiLCBpKSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwot KyAgICBjYXNlIDY0MjogIC8vIHZtaW51dwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsg aSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgc3RkOjptaW4oTEFORV9VMzIoYSwg aSksIExBTkVfVTMyKGIsIGkpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCBy KTsgYnJlYWs7Ci0rICAgIGNhc2UgNzA2OiAgLy8gdm1pbnVkCi0rICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCBzdGQ6Om1pbihM QU5FX1U2NChhLCBpKSwgTEFORV9VNjQoYiwgaSkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJC eXRlcyh2cnQsIHIpOyBicmVhazsKLSsKLSsgICAgLy8gPT09IFZlY3RvciBjb21wYXJlIChlcSwg Z3Qgc2lnbmVkLCBndCB1bnNpZ25lZCwgbmUgUE9XRVI5KSA9PT0KLSsgICAgLy8KLSsgICAgLy8g QWxsIHZjbXAqIG9wcyBzZXQgcGVyLWxhbmUgYWxsLTFzIG9uIHRydWUsIGFsbC0wcyBvbiBmYWxz ZS4gVGhlCi0rICAgIC8vIHJlY29yZCBmb3JtIChSYz0xLCBYTyBNU0IgYml0IHNldDsgWE9fcmVj ID0gWE9fYmFzZSArIDEwMjQpIG11c3QKLSsgICAgLy8gYWRkaXRpb25hbGx5IHdyaXRlIENSNjoK LSsgICAgLy8gICBDUjYuTFQgPSAxIGlmZiBBTEwgbGFuZXMgYXJlIHRydWU7Ci0rICAgIC8vICAg Q1I2LkdUID0gMCAoYWx3YXlzKTsKLSsgICAgLy8gICBDUjYuRVEgPSAxIGlmZiBOTyBsYW5lIGlz IHRydWU7Ci0rICAgIC8vICAgQ1I2LlNPID0gMCAoYWx3YXlzKS4KLSsgICAgLy8gYGk4eDE2LmFs bF90cnVlYCBldGMuIGluIHdhc20gcmVseSBvbiBDUjYuRVEgdmlhIGBtZm9jcmYgY3I2YDsgdGhl Ci0rICAgIC8vIHByZXZpb3VzIHNpbXVsYXRvciBpbXBsZW1lbnRhdGlvbiBsZWZ0IENSNiB1bnRv dWNoZWQsIHNvIHRoZQotKyAgICAvLyBwcmVkaWNhdGUgd2FzIGFsd2F5cyB3cm9uZy4KLSsgICAg Ly8KLSsgICAgLy8gSGVscGVyOiBjb3VudCB0cnVlIGxhbmVzIGJ5IGxvb2tpbmcgYXQgYnl0ZSAw IG9mIGVhY2ggbGFuZSAoYWxsCi0rICAgIC8vIGJ5dGVzIHdpdGhpbiBhICJ0cnVlIiBsYW5lIGFy ZSAweEZGIHNvIGJ5dGUgMCBpcyBhIHNvdW5kIHByb3h5KS4KLSsgICAgI2RlZmluZSBWQ01QX0RP TkUobGFuZXNfLCBsYW5lX2J5dGVzXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBpZiAo eG8gPj0gMTAyNCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgICBpbnQgbnVtVHJ1ZV8gPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgZm9yIChpbnQgaV8gPSAw OyBpXyA8IChsYW5lc18pOyBpXysrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgaWYgKHJbaV8gKiAobGFuZV9ieXRlc18pXSA9PSAweEZGKSBudW1UcnVlXysrOyAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgdWludDhf dCBmaWVsZF8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICAgIGlmIChudW1UcnVlXyA9PSAobGFuZXNfKSkgZmllbGRfIHw9IGtDUkZp ZWxkTFQ7ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBpZiAobnVtVHJ1ZV8gPT0gMCkg ZmllbGRfIHw9IGtDUkZpZWxkRVE7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg ICAgc2V0Q1JGaWVsZCg2LCBmaWVsZF8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIH0gd2hpbGUgKDApCi0r Ci0rICAgIGNhc2UgNjogICAgLy8gdmNtcGVxdWIgKFJjPTApCi0rICAgIGNhc2UgMTAzMDogLy8g dmNtcGVxdWIuIChyZWNvcmQsIENSNiB1cGRhdGVkKQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgMTY7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgTEFORV9VOChhLCBpKSA9 PSBMQU5FX1U4KGIsIGkpID8gMHhGRiA6IDApOwotKyAgICAgIH0KLSsgICAgICBWQ01QX0RPTkUo MTYsIDEpOyBicmVhazsKLSsgICAgY2FzZSA3MDogICAvLyB2Y21wZXF1aAotKyAgICBjYXNlIDEw OTQ6IC8vIHZjbXBlcXVoLgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0r ICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFORV9VMTYoYSwgaSkgPT0gTEFORV9VMTYoYiwg aSkgPyAweEZGRkYgOiAwKTsKLSsgICAgICB9Ci0rICAgICAgVkNNUF9ET05FKDgsIDIpOyBicmVh azsKLSsgICAgY2FzZSAxMzQ6ICAvLyB2Y21wZXF1dwotKyAgICBjYXNlIDExNTg6IC8vIHZjbXBl cXV3LgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRf TEFORV9VMzIociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICBMQU5FX1UzMihhLCBpKSA9PSBM QU5FX1UzMihiLCBpKSA/IDB4RkZGRkZGRkZ1IDogMCk7Ci0rICAgICAgfQotKyAgICAgIFZDTVBf RE9ORSg0LCA0KTsgYnJlYWs7Ci0rICAgIGNhc2UgMTk5OiAgLy8gdmNtcGVxdWQKLSsgICAgY2Fz ZSAxMjIzOiAvLyB2Y21wZXF1ZC4KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykg ewotKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAgTEFO RV9VNjQoYSwgaSkgPT0gTEFORV9VNjQoYiwgaSkKLSsgICAgICAgICAgICAgICAgICAgICAgICAg PyBVSU5UNjRfTUFYCi0rICAgICAgICAgICAgICAgICAgICAgICAgIDogMCk7Ci0rICAgICAgfQot KyAgICAgIFZDTVBfRE9ORSgyLCA4KTsgYnJlYWs7Ci0rCi0rICAgIC8vID09PSBDb21wYXJlIGdy ZWF0ZXItdGhhbiBzaWduZWQgPT09Ci0rICAgIGNhc2UgNzc0OiAgLy8gdmNtcGd0c2IKLSsgICAg Y2FzZSAxNzk4OiAvLyB2Y21wZ3RzYi4KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBp KyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIExBTkVfUzgoYSwgaSkgPiBMQU5FX1M4 KGIsIGkpID8gMHhGRiA6IDApOwotKyAgICAgIH0KLSsgICAgICBWQ01QX0RPTkUoMTYsIDEpOyBi cmVhazsKLSsgICAgY2FzZSA4Mzg6ICAvLyB2Y21wZ3RzaAotKyAgICBjYXNlIDE4NjI6IC8vIHZj bXBndHNoLgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBT RVRfTEFORV9VMTYociwgaSwgTEFORV9TMTYoYSwgaSkgPiBMQU5FX1MxNihiLCBpKSA/IDB4RkZG RiA6IDApOwotKyAgICAgIH0KLSsgICAgICBWQ01QX0RPTkUoOCwgMik7IGJyZWFrOwotKyAgICBj YXNlIDkwMjogIC8vIHZjbXBndHN3Ci0rICAgIGNhc2UgMTkyNjogLy8gdmNtcGd0c3cuCi0rICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihy LCBpLAotKyAgICAgICAgICAgICAgICAgICAgIExBTkVfUzMyKGEsIGkpID4gTEFORV9TMzIoYiwg aSkgPyAweEZGRkZGRkZGdSA6IDApOwotKyAgICAgIH0KLSsgICAgICBWQ01QX0RPTkUoNCwgNCk7 IGJyZWFrOwotKyAgICBjYXNlIDk2NzogIC8vIHZjbXBndHNkCi0rICAgIGNhc2UgMTk5MTogLy8g dmNtcGd0c2QuCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAg IFNFVF9MQU5FX1U2NChyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgIExBTkVfUzY0KGEsIGkp ID4gTEFORV9TNjQoYiwgaSkgPyBVSU5UNjRfTUFYIDogMCk7Ci0rICAgICAgfQotKyAgICAgIFZD TVBfRE9ORSgyLCA4KTsgYnJlYWs7Ci0rCi0rICAgIC8vID09PSBDb21wYXJlIGdyZWF0ZXItdGhh biB1bnNpZ25lZCA9PT0KLSsgICAgY2FzZSA1MTg6ICAvLyB2Y21wZ3R1YgotKyAgICBjYXNlIDE1 NDI6IC8vIHZjbXBndHViLgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewot KyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgTEFORV9VOChhLCBpKSA+IExBTkVfVTgoYiwgaSkg PyAweEZGIDogMCk7Ci0rICAgICAgfQotKyAgICAgIFZDTVBfRE9ORSgxNiwgMSk7IGJyZWFrOwot KyAgICBjYXNlIDU4MjogIC8vIHZjbXBndHVoCi0rICAgIGNhc2UgMTYwNjogLy8gdmNtcGd0dWgu Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5F X1UxNihyLCBpLCBMQU5FX1UxNihhLCBpKSA+IExBTkVfVTE2KGIsIGkpID8gMHhGRkZGIDogMCk7 Ci0rICAgICAgfQotKyAgICAgIFZDTVBfRE9ORSg4LCAyKTsgYnJlYWs7Ci0rICAgIGNhc2UgNjQ2 OiAgLy8gdmNtcGd0dXcKLSsgICAgY2FzZSAxNjcwOiAvLyB2Y21wZ3R1dy4KLSsgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksCi0r ICAgICAgICAgICAgICAgICAgICAgTEFORV9VMzIoYSwgaSkgPiBMQU5FX1UzMihiLCBpKSA/IDB4 RkZGRkZGRkZ1IDogMCk7Ci0rICAgICAgfQotKyAgICAgIFZDTVBfRE9ORSg0LCA0KTsgYnJlYWs7 Ci0rICAgIGNhc2UgNzExOiAgLy8gdmNtcGd0dWQKLSsgICAgY2FzZSAxNzM1OiAvLyB2Y21wZ3R1 ZC4KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xB TkVfVTY0KHIsIGksCi0rICAgICAgICAgICAgICAgICAgICAgTEFORV9VNjQoYSwgaSkgPiBMQU5F X1U2NChiLCBpKSA/IFVJTlQ2NF9NQVggOiAwKTsKLSsgICAgICB9Ci0rICAgICAgVkNNUF9ET05F KDIsIDgpOyBicmVhazsKLSsKLSsgICAgLy8gPT09IFNwbGF0IGZyb20gaW1tZWRpYXRlICg1LWJp dCBzaWduZWQgc3BsYXQgaW50byBhbGwgbGFuZXMpID09PQotKyAgICAvLyBJU0EgZGVmaW5lcyBV SU0gaW4gQkUgZWxlbWVudCBudW1iZXJpbmcuIEZvciBMRSBzdG9yYWdlLCBCRSBlbGVtZW50IGkg PSBMRSBlbGVtZW50IChOLTEtaSkuCi0rICAgIGNhc2UgNTI0OiAgLy8gdnNwbHRiOiBWUlRbKl0g PSBWUkJbQkUtYnl0ZS1VSU1dOyB1aW1tIGZyb20gVlJBIGZpZWxkIChiaXRzIDExLi4xNSkKLSsg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U4 KHIsIGksIExBTkVfVTgoYiwgMTUgLSAodWltbSAmIDB4RikpKTsKLSsgICAgICB9Ci0rICAgICAg c2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA1ODg6ICAvLyB2c3BsdGgKLSsg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTE2 KHIsIGksIExBTkVfVTE2KGIsIDcgLSAodWltbSAmIDB4NykpKTsKLSsgICAgICB9Ci0rICAgICAg c2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA2NTI6ICAvLyB2c3BsdHcKLSsg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTMy KHIsIGksIExBTkVfVTMyKGIsIDMgLSAodWltbSAmIDB4MykpKTsKLSsgICAgICB9Ci0rICAgICAg c2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsKLSsgICAgLy8gPT09IFNwbGF0IDUtYml0IHNp Z25lZCBpbW1lZGlhdGUgdG8gYWxsIGJ5dGUgbGFuZXMgPT09Ci0rICAgIGNhc2UgNzgwOiB7ICAv LyB2c3BsdGlzYiBWUlQsIFNJTU01Ci0rICAgICAgaW50MzJfdCBzaW1tNSA9IChpbnQzMl90KSgo aW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDE2KSAmIDB4MUYpOwotKyAgICAgIGlmIChzaW1t NSAmIDB4MTApIHNpbW01IHw9IH4weDFGOwotKyAgICAgIHVpbnQ4X3QgYiA9ICh1aW50OF90KShp bnQ4X3Qpc2ltbTU7Ci0rICAgICAgbWVtc2V0KHIsIGIsIDE2KTsKLSsgICAgICBzZXRWUkJ5dGVz KHZydCwgcik7IGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vID09PSBTcGxhdCA1LWJpdCBzaWdu ZWQgaW1tZWRpYXRlIHRvIGFsbCBoYWxmd29yZCBsYW5lcyA9PT0KLSsgICAgY2FzZSA4NDQ6IHsg IC8vIHZzcGx0aXNoIFZSVCwgU0lNTTUKLSsgICAgICAvLyBTSU1NNSBvY2N1cGllcyBiaXRzIDEx Li4xNSBvZiB0aGUgaW5zdHJ1Y3Rpb24gKFZSQSBmaWVsZCkuIEl0Ci0rICAgICAgLy8gaXMgc2ln bi1leHRlbmRlZCB0byAxNiBiaXRzIGFuZCByZXBsaWNhdGVkIGFjcm9zcyBhbGwgOCBoYWxmd29y ZAotKyAgICAgIC8vIGxhbmVzIG9mIFZSVC4gUmFuZ2U6IFstMTYsIDE1XS4KLSsgICAgICBpbnQz Ml90IHNpbW01ID0gKGludDMyX3QpKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMTYpICYg MHgxRik7Ci0rICAgICAgaWYgKHNpbW01ICYgMHgxMCkgc2ltbTUgfD0gfjB4MUY7ICAvLyBzaWdu LWV4dGVuZCBiaXQgNAotKyAgICAgIGludDE2X3QgaHcgPSAoaW50MTZfdClzaW1tNTsKLSsgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIs IGksICh1aW50MTZfdClodyk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gPT09IFNwbGF0IDUtYml0IHNpZ25lZCBpbW1lZGlh dGUgdG8gYWxsIHdvcmQgbGFuZXMgPT09Ci0rICAgIGNhc2UgOTA4OiB7ICAvLyB2c3BsdGlzdyBW UlQsIFNJTU01Ci0rICAgICAgaW50MzJfdCBzaW1tNSA9IChpbnQzMl90KSgoaW5zdHItPmluc3Ry dWN0aW9uQml0cygpID4+IDE2KSAmIDB4MUYpOwotKyAgICAgIGlmIChzaW1tNSAmIDB4MTApIHNp bW01IHw9IH4weDFGOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAg ICAgICBTRVRfTEFORV9VMzIociwgaSwgKHVpbnQzMl90KXNpbW01KTsKLSsgICAgICB9Ci0rICAg ICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gTWVy Z2UgKGludGVybGVhdmUpID09PQotKyAgICAvLwotKyAgICAvLyBUaGUgSVNBIGRlZmluZXMgdm1y Z2gqIC8gdm1yZ2wqIGluIEJFIG51bWJlcmluZzsgdGhlCi0rICAgIC8vIGVtcGlyaWNhbCBMRSBz dG9yYWdlIGJlaGF2aW91ciBpczoKLSsgICAgLy8gICB2bXJnaCogVlQsVkEsVkI6IGZvciBpIGlu IDAuLk4vMi0xLAotKyAgICAvLyAgICAgVlQubGFuZV9MRVsyaV0gICA9IFZCLmxhbmVfTEVbKE4v MikgKyBpXQotKyAgICAvLyAgICAgVlQubGFuZV9MRVsyaSsxXSA9IFZBLmxhbmVfTEVbKE4vMikg KyBpXQotKyAgICAvLyAgIHZtcmdsKiBWVCxWQSxWQjogZm9yIGkgaW4gMC4uTi8yLTEsCi0rICAg IC8vICAgICBWVC5sYW5lX0xFWzJpXSAgID0gVkIubGFuZV9MRVtpXQotKyAgICAvLyAgICAgVlQu bGFuZV9MRVsyaSsxXSA9IFZBLmxhbmVfTEVbaV0KLSsgICAgLy8gaS5lLiB0aGUgVkIgb3BlcmFu ZCBnb2VzIHRvIHRoZSBldmVuIHJlc3VsdCBwb3NpdGlvbnMgKHJldmVyc2VkCi0rICAgIC8vIGZy b20gd2hhdCBhIG5hw692ZSBCRSByZWFkaW5nIHdvdWxkIHN1Z2dlc3QpIGFuZCB0aGUgImhpZ2gi IGZvcm0KLSsgICAgLy8gc2VsZWN0cyB0aGUgdXBwZXItaGFsZiBvZiBMRSBzdG9yYWdlLgotKyAg ICAvLwotKyAgICAvLyBQcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBoYWQgYm90aCB0aGUgb3BlcmFu ZCBvcmRlciBzd2FwcGVkIEFORAotKyAgICAvLyB0aGUgaGlnaC9sb3cgaGFsdmVzIHN3YXBwZWQg KGNvbnNpc3RlbnQgd2l0aCBlYWNoIG90aGVyLCBzbwotKyAgICAvLyBKSVQtb25seS12aXNpYmxl IG9wcyB0aGF0IHJvdW5kLXRyaXBwZWQgdGhyb3VnaCB2bXJnKiBoYXBwZW5lZAotKyAgICAvLyB0 byBwcm9kdWNlIHRoZSByaWdodCBhbnN3ZXIsIGJ1dCB3YXNtLXZpc2libGUgZXh0bXVsIGV4cG9z ZWQKLSsgICAgLy8gdGhlIGJ1ZykuCi0rICAgIGNhc2UgMTI6ICAgLy8gdm1yZ2hiCi0rICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIDIg KiBpLCBMQU5FX1U4KGIsIDggKyBpKSk7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCAyICogaSAr IDEsIExBTkVfVTgoYSwgOCArIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQs IHIpOyBicmVhazsKLSsgICAgY2FzZSA3NjogICAvLyB2bXJnaGgKLSsgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIDIgKiBpLCBMQU5F X1UxNihiLCA0ICsgaSkpOwotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIDIgKiBpICsgMSwgTEFO RV9VMTYoYSwgNCArIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBi cmVhazsKLSsgICAgY2FzZSAxNDA6ICAvLyB2bXJnaHcKLSsgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIDIgKiBpLCBMQU5FX1UzMihi LCAyICsgaSkpOwotKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIDIgKiBpICsgMSwgTEFORV9VMzIo YSwgMiArIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsK LSsgICAgY2FzZSAyNjg6ICAvLyB2bXJnbGIKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7 IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTgociwgMiAqIGksIExBTkVfVTgoYiwgaSkpOwot KyAgICAgICAgU0VUX0xBTkVfVTgociwgMiAqIGkgKyAxLCBMQU5FX1U4KGEsIGkpKTsKLSsgICAg ICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSAzMzI6ICAv LyB2bXJnbGgKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAg U0VUX0xBTkVfVTE2KHIsIDIgKiBpLCBMQU5FX1UxNihiLCBpKSk7Ci0rICAgICAgICBTRVRfTEFO RV9VMTYociwgMiAqIGkgKyAxLCBMQU5FX1UxNihhLCBpKSk7Ci0rICAgICAgfQotKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgMzk2OiAgLy8gdm1yZ2x3Ci0rICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UzMihy LCAyICogaSwgTEFORV9VMzIoYiwgaSkpOwotKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIDIgKiBp ICsgMSwgTEFORV9VMzIoYSwgaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwg cik7IGJyZWFrOwotKwotKyAgICAvLyA9PT0gUGVyLWxhbmUgc2hpZnQgbGVmdCAoY291bnQgZnJv bSBWUkIsIGxvdyBOIGJpdHMgcGVyIGVsZW1lbnQpID09PQotKyAgICBjYXNlIDI2MDogIC8vIHZz bGIKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAgIFNFVF9M QU5FX1U4KHIsIGksIExBTkVfVTgoYSwgaSkgPDwgKExBTkVfVTgoYiwgaSkgJiA3KSk7Ci0rICAg ICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgMzI0OiAg Ly8gdnNsaAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBT RVRfTEFORV9VMTYociwgaSwgTEFORV9VMTYoYSwgaSkgPDwgKExBTkVfVTE2KGIsIGkpICYgMTUp KTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2Fz ZSAzODg6ICAvLyB2c2x3Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsg ICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBMQU5FX1UzMihhLCBpKSA8PCAoTEFORV9VMzIoYiwg aSkgJiAzMSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwot KyAgICBjYXNlIDE0NzY6IC8vIHZzbGQKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkr KykgewotKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksIExBTkVfVTY0KGEsIGkpIDw8IChMQU5F X1U2NChiLCBpKSAmIDYzKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7Ci0rCi0rICAgIC8vID09PSBQZXItbGFuZSBzaGlmdCByaWdodCB1bnNpZ25lZCA9PT0K LSsgICAgY2FzZSA1MTY6ICAvLyB2c3JiCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsg aSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VOChyLCBpLCBMQU5FX1U4KGEsIGkpID4+IChMQU5F X1U4KGIsIGkpICYgNykpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJy ZWFrOwotKyAgICBjYXNlIDU4MDogIC8vIHZzcmgKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDg7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIExBTkVfVTE2KGEsIGkpID4+ IChMQU5FX1UxNihiLCBpKSAmIDE1KSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0 LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgNjQ0OiAgLy8gdnNydwotKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgTEFORV9VMzIo YSwgaSkgPj4gKExBTkVfVTMyKGIsIGkpICYgMzEpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJC eXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSAxNzMyOiAvLyB2c3JkCi0rICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCBM QU5FX1U2NChhLCBpKSA+PiAoTEFORV9VNjQoYiwgaSkgJiA2MykpOwotKyAgICAgIH0KLSsgICAg ICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKwotKyAgICAvLyA9PT0gUGVyLWxhbmUgc2hp ZnQgcmlnaHQgYWxnZWJyYWljIChzaWduZWQpID09PQotKyAgICBjYXNlIDc3MjogIC8vIHZzcmFi Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFO RV9VOChyLCBpLAotKyAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QpKExBTkVfUzgoYSwgaSkg Pj4gKExBTkVfVTgoYiwgaSkgJiA3KSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZy dCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDgzNjogIC8vIHZzcmFoCi0rICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLAotKyAgICAg ICAgICAgICAgICAgICAgICh1aW50MTZfdCkoTEFORV9TMTYoYSwgaSkgPj4gKExBTkVfVTE2KGIs IGkpICYgMTUpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7 Ci0rICAgIGNhc2UgOTAwOiAgLy8gdnNyYXcKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7 IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksCi0rICAgICAgICAgICAgICAgICAg ICAgKHVpbnQzMl90KShMQU5FX1MzMihhLCBpKSA+PiAoTEFORV9VMzIoYiwgaSkgJiAzMSkpKTsK LSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA5 NjQ6ICAvLyB2c3JhZAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAg ICAgICBTRVRfTEFORV9VNjQociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICAodWludDY0X3Qp KExBTkVfUzY0KGEsIGkpID4+IChMQU5FX1U2NChiLCBpKSAmIDYzKSkpOwotKyAgICAgIH0KLSsg ICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKwotKyAgICAvLyA9PT0gUE9XRVI5IHBl ci1sYW5lIGludGVnZXIgbmVnYXRlIChzdWJvcCBpbiBWUkEgZmllbGQpID09PQotKyAgICAvLyBQ UENfdm5lZ3cgPSAweDEwMDYwNjAyIOKGkiBYTz0weDYwMj0xNTM4LCBWUkE9NgotKyAgICAvLyBQ UENfdm5lZ2QgPSAweDEwMDcwNjAyIOKGkiBYTz0weDYwMj0xNTM4LCBWUkE9NwotKyAgICBjYXNl IDE1Mzg6Ci0rICAgICAgaWYgKHZyYSA9PSA2KSB7ICAvLyB2bmVndwotKyAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksICh1 aW50MzJfdCkoLUxBTkVfUzMyKGIsIGkpKSk7Ci0rICAgICAgICB9Ci0rICAgICAgfSBlbHNlIGlm ICh2cmEgPT0gNykgeyAgLy8gdm5lZ2QKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsg aSsrKSB7Ci0rICAgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCAodWludDY0X3QpKC1MQU5FX1M2 NChiLCBpKSkpOwotKyAgICAgICAgfQotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICBNT1pfQ1JB U0hfVU5TQUZFX1BSSU5URigiZGVjb2RlVk1YIFhPPTE1Mzg6IHVua25vd24gc3Vib3AgJXUiLCB2 cmEpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKwotKyAg ICAvLyA9PT0gUE9XRVIxMCB2ZXh0cmFjdHtiLGgsdyxkfW0gKFhPPTE2MDI9MHg2NDIpID09PQot KyAgICAvLyBSVCAoR1BSKSBnZXRzIHRoZSB3YXNtLXNwZWMgYml0bWFzayBpbiBsb3cgMTYvOC80 LzIgYml0cy4gVUlNIGF0Ci0rICAgIC8vIGJpdHMgMTEuLjE1ICg9IHNpbSBgdnJhYCkgc2VsZWN0 cyBsYW5lIHdpZHRoOiA4PWJ5dGUsIDk9aGFsZndvcmQsCi0rICAgIC8vIDEwPXdvcmQsIDExPWRv dWJsZXdvcmQuCi0rICAgIGNhc2UgMTYwMjogewotKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IDA7 Ci0rICAgICAgc3dpdGNoICh2cmEpIHsKLSsgICAgICAgIGNhc2UgODogIC8vIHZleHRyYWN0Ym06 IDE2IGJ5dGUgbGFuZXMKLSsgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7 Ci0rICAgICAgICAgICAgaWYgKGJbaV0gJiAweDgwKSByZXN1bHQgfD0gKDFVTEwgPDwgaSk7Ci0r ICAgICAgICAgIH0KLSsgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICBjYXNlIDk6ICAvLyB2ZXh0 cmFjdGhtOiA4IGhhbGZ3b3JkIGxhbmVzOyBNU0IgbGl2ZXMgYXQgYnl0ZSAyaSsxCi0rICAgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICAgICAgaWYgKGJbMiAq IGkgKyAxXSAmIDB4ODApIHJlc3VsdCB8PSAoMVVMTCA8PCBpKTsKLSsgICAgICAgICAgfQotKyAg ICAgICAgICBicmVhazsKLSsgICAgICAgIGNhc2UgMTA6ICAvLyB2ZXh0cmFjdHdtOiA0IHdvcmQg bGFuZXM7IE1TQiBhdCBieXRlIDRpKzMKLSsgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0 OyBpKyspIHsKLSsgICAgICAgICAgICBpZiAoYls0ICogaSArIDNdICYgMHg4MCkgcmVzdWx0IHw9 ICgxVUxMIDw8IGkpOwotKyAgICAgICAgICB9Ci0rICAgICAgICAgIGJyZWFrOwotKyAgICAgICAg Y2FzZSAxMTogIC8vIHZleHRyYWN0ZG06IDIgZHdvcmQgbGFuZXM7IE1TQiBhdCBieXRlIDhpKzcK LSsgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSsgICAgICAgICAgICBp ZiAoYls4ICogaSArIDddICYgMHg4MCkgcmVzdWx0IHw9ICgxVUxMIDw8IGkpOwotKyAgICAgICAg ICB9Ci0rICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgZGVmYXVsdDoKLSsgICAgICAgICAgTU9a X0NSQVNIX1VOU0FGRV9QUklOVEYoImRlY29kZVZNWCBYTz0xNjAyOiB1bmtub3duIFVJTSAldSIs IHZyYSk7Ci0rICAgICAgfQotKyAgICAgIC8vIHZydCBpcyB0aGUgR1BSIHRhcmdldCAoUlQgZmll bGQgYXQgYml0cyA2Li4xMCkuCi0rICAgICAgc2V0UmVnaXN0ZXIoaW50KHZydCksIGludDY0X3Qo cmVzdWx0KSk7Ci0rICAgICAgZ290byB2bXhfZG9uZTsgIC8vIFNraXAgdGhlIHRyYWlsaW5nIHNl dFZSQnl0ZXMgdXNlZCBieSBWUi10YXJnZXRpbmcgb3BzLgotKyAgICB9Ci0rCi0rICAgIC8vID09 PSBQT1dFUjkgdmluc2VydGIgKFhPPTc4MSkgLyB2aW5zZXJ0aCAoWE89ODQ1KSA9PT0KLSsgICAg Ly8gSW5zZXJ0IGJ5dGUvaGFsZndvcmQgZnJvbSBhIFZSIChOT1QgYSBHUFIpIGF0IGFuIGltbWVk aWF0ZSBieXRlCi0rICAgIC8vIHBvc2l0aW9uIFVJTSAoQkUpLgotKyAgICAvLyAgIHZpbnNlcnRi OiBWUlQuYnl0ZVtVSU1dICAgKEJFKSDihpAgVlJCLmJ5dGVbN10gKEJFKQotKyAgICAvLyAgIHZp bnNlcnRoOiBWUlQuYnl0ZVtVSU1dICAgKEJFKSDihpAgVlJCLmJ5dGVbNl0gKEJFKQotKyAgICAv LyAgICAgICAgICAgICBWUlQuYnl0ZVtVSU0rMV0gKEJFKSDihpAgVlJCLmJ5dGVbN10gKEJFKQot KyAgICAvLyBCRSBieXRlIGkg4oaUIExFIGJ5dGUgKDE1LWkpLiBTbyBWUkIuYnl0ZVs2XSAoQkUp ID0gTEUgYnl0ZSA5IG9mCi0rICAgIC8vIFZSQiwgVlJCLmJ5dGVbN10gKEJFKSA9IExFIGJ5dGUg OC4gKEJ5dGUtcGFpciBvcmRlciBtYXR0ZXJzLikKLSsgICAgY2FzZSA3ODE6ICAgIC8vIHZpbnNl cnRiCi0rICAgIGNhc2UgODQ1OiB7ICAvLyB2aW5zZXJ0aAotKyAgICAgIGdldFZSQnl0ZXModnJ0 LCByKTsgIC8vIHN0YXJ0IGZyb20gY3VycmVudCBWUlQKLSsgICAgICBpZiAoeG8gPT0gODQ1KSB7 Ci0rICAgICAgICAvLyB2aW5zZXJ0aDogY29weSAyLWJ5dGUgaGFsZndvcmQgKEJFIGJ5dGVzIDYu Ljcgb2YgVlJCKS4KLSsgICAgICAgIHJbMTUgLSB1aW1tXSAgICAgPSBiWzldOyAgLy8gQkUgYnl0 ZSBVSU0gICDihpAgVlJCIEJFIGJ5dGUgNgotKyAgICAgICAgclsxNCAtIHVpbW1dICAgICA9IGJb OF07ICAvLyBCRSBieXRlIFVJTSsxIOKGkCBWUkIgQkUgYnl0ZSA3Ci0rICAgICAgfSBlbHNlIHsK LSsgICAgICAgIC8vIHZpbnNlcnRiOiBjb3B5IGEgc2luZ2xlIGJ5dGUgKEJFIGJ5dGUgNyBvZiBW UkIpLgotKyAgICAgICAgclsxNSAtIHVpbW1dICAgICA9IGJbOF07ICAvLyBCRSBieXRlIFVJTSAg IOKGkCBWUkIgQkUgYnl0ZSA3Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gPT09IFBPV0VSOSB2ZXh0cmFjdHViIChYTz01MjUp IC8gdmV4dHJhY3R1aCAoWE89NTg5KSA9PT0KLSsgICAgLy8gRXh0cmFjdCBvbmUgYnl0ZS9oYWxm d29yZCBmcm9tIFZSQiBhdCBpbW1lZGlhdGUgQkUgcG9zaXRpb24gVUlNCi0rICAgIC8vIGFuZCBw bGFjZSBpdCBhdCBCRSBieXRlIDcgb2YgVlJULCB3aXRoIGFsbCBvdGhlciBieXRlcyBvZiBWUlQK LSsgICAgLy8gemVyb2VkLiBDb21wYW5pb24gdG8gdmluc2VydGIvaDsgY2hvb3NlcyBhbiBpbW1l ZGlhdGUgQkUgcG9zaXRpb24KLSsgICAgLy8gYW5kIGxhbmRzIHRoZSByZXN1bHQgYXQgdGhlIGxv dyBieXRlIG9mIFZSVCAoPSBsb3cgYnl0ZSBvZiBtZnZzcmQpLgotKyAgICAvLyAgIHZleHRyYWN0 dWI6IFZSVC5ieXRlWzddIChCRSkg4oaQIFZSQi5ieXRlW1VJTV0gKEJFKSwgcmVzdCA9IDAKLSsg ICAgLy8gICB2ZXh0cmFjdHVoOiBWUlQuYnl0ZVs2XSAoQkUpIOKGkCBWUkIuYnl0ZVtVSU1dICAg KEJFKQotKyAgICAvLyAgICAgICAgICAgICAgIFZSVC5ieXRlWzddIChCRSkg4oaQIFZSQi5ieXRl W1VJTSsxXSAoQkUpLCByZXN0ID0gMAotKyAgICBjYXNlIDUyNTogICAgLy8gdmV4dHJhY3R1Ygot KyAgICBjYXNlIDU4OTogeyAgLy8gdmV4dHJhY3R1aAotKyAgICAgIG1lbXNldChyLCAwLCBzaXpl b2YocikpOwotKyAgICAgIGlmICh4byA9PSA1ODkpIHsKLSsgICAgICAgIHJbOV0gPSBiWzE1IC0g dWltbV07ICAvLyBWUlQgQkUgYnl0ZSA2IOKGkCBWUkIgQkUgYnl0ZSBVSU0KLSsgICAgICAgIHJb OF0gPSBiWzE0IC0gdWltbV07ICAvLyBWUlQgQkUgYnl0ZSA3IOKGkCBWUkIgQkUgYnl0ZSBVSU0r MQotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICByWzhdID0gYlsxNSAtIHVpbW1dOyAgLy8gVlJU IEJFIGJ5dGUgNyDihpAgVlJCIEJFIGJ5dGUgVUlNCi0rICAgICAgfQotKyAgICAgIHNldFZSQnl0 ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gPT09IFBPV0VSMTAgdmluc2Jy eCAoWE89NzgzKSAvIHZpbnNocnggKFhPPTg0NykgPT09Ci0rICAgIC8vIFJpZ2h0LWluZGV4ZWQg KExFLW5hdHVyYWwpIGJ5dGUvaGFsZndvcmQgaW5zZXJ0IGZyb20gR1BSLiBSQSdzCi0rICAgIC8v IGxvdyA0IGJpdHMgc3VwcGx5IHRoZSBieXRlIHBvc2l0aW9uIChtb2QgMTYpOyBmb3Igdmluc2hy eCB0aGUKLSsgICAgLy8gcG9zaXRpb24gaXMgYWxzbyBtYXNrZWQgdG8gZXZlbiAoJiAweEUpIHNv IHRoZSBoYWxmd29yZCBpcwotKyAgICAvLyAyLWJ5dGUgYWxpZ25lZC4gUkIncyBsb3cgOCAvIDE2 IGJpdHMgYXJlIGluc2VydGVkOyBvdGhlciBieXRlcwotKyAgICAvLyBvZiBWUlQgYXJlIHVuY2hh bmdlZC4gUkEgYW5kIFJCIGFyZSBHUFJzIChOT1QgVlJzKSDigJQgc2ltJ3MKLSsgICAgLy8gcHJl LWZldGNoZWQgYGFgIGFuZCBgYmAgZnJvbSBnZXRWUkJ5dGVzIGFyZSB1bnVzZWQgaGVyZS4KLSsg ICAgY2FzZSA3ODM6ICAgIC8vIHZpbnNicngKLSsgICAgY2FzZSA4NDc6IHsgIC8vIHZpbnNocngK LSsgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIoaW50KHZyYSkpKTsKLSsg ICAgICB1aW50NjRfdCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIoaW50KHZyYikpKTsKLSsgICAg ICBnZXRWUkJ5dGVzKHZydCwgcik7ICAvLyBzdGFydCBmcm9tIGN1cnJlbnQgVlJUCi0rICAgICAg Y29uc3QgYm9vbCBpc0hhbGYgPSAoeG8gPT0gODQ3KTsKLSsgICAgICBjb25zdCB1aW50MzJfdCBw b3MgPSBpc0hhbGYgPyB1aW50MzJfdChyYV92YWwgJiAweEVVTEwpCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogdWludDMyX3QocmFfdmFsICYgMHhGVUxMKTsKLSsgICAgICBy W3Bvc10gPSAodWludDhfdCkocmJfdmFsICYgMHhGRlVMTCk7Ci0rICAgICAgaWYgKGlzSGFsZikg ewotKyAgICAgICAgcltwb3MgKyAxXSA9ICh1aW50OF90KSgocmJfdmFsID4+IDgpICYgMHhGRlVM TCk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0K LSsKLSsgICAgLy8gPT09IFBPV0VSMTAgdmluc3cgKFhPPTIwNykgLyB2aW5zZCAoWE89NDYzKSA9 PT0KLSsgICAgLy8gVlJUW1VJTSo4OlVJTSo4K04tMV0gKEJFIGJpdHMpIOKGkCBSQiBsb3cgTiBi aXRzLCB3aGVyZSBOID0gMzIgb3IgNjQuCi0rICAgIC8vIFJCIGlzIGEgR1BSICh0aGUgYHZyYmAg ZmllbGQgYXQgc2ltIGJpdHMgMTUuLjExKS4gVUlNIGlzIGF0IHNpbQotKyAgICAvLyBiaXRzIDIw Li4xNiAoPSB0aGUgYHVpbW1gIC8gYHZyYWAgZGVjb2RlKS4gT3RoZXIgYnl0ZXMgb2YgVlJUIGFy ZQotKyAgICAvLyB1bmNoYW5nZWQsIHNvIHdlIHJlYWQgVlJUIGZpcnN0IHRoZW4gcGF0Y2ggVUlN Li5VSU0rKE4vOC0xKS4KLSsgICAgY2FzZSAyMDc6ICAgIC8vIHZpbnN3Ci0rICAgIGNhc2UgNDYz OiB7ICAvLyB2aW5zZAotKyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRSZWdpc3Rlcihp bnQodnJiKSkpOwotKyAgICAgIGdldFZSQnl0ZXModnJ0LCByKTsgIC8vIHN0YXJ0IGZyb20gY3Vy cmVudCBWUlQKLSsgICAgICBjb25zdCBpbnQgd2lkdGggPSAoeG8gPT0gNDYzKSA/IDggOiA0OyAg Ly8gYnl0ZXMKLSsgICAgICAvLyBCRSBieXRlIFVJTStpIG9mIFZSVCA9IExFIGJ5dGUgKDE1IC0g VUlNIC0gaSkuCi0rICAgICAgLy8gRm9yIHZpbnNkLCBSQi5kd29yZFswXSAoQkUpID0gYml0cyA1 Ni4uNjMgb2YgcmJfdmFsIChob3N0IExTQiBlbmQKLSsgICAgICAvLyBvZiB0aGUgR1BSIOKAlCBy ZWNhbGwgVTY0KCkgcHV0cyB0aGUgY2Fub25pY2FsIDY0LWJpdCB2YWx1ZSBpbiBhCi0rICAgICAg Ly8gaG9zdCB1aW50NjRfdCB3aXRoIGJpdCA2MyA9IE1TQikuCi0rICAgICAgLy8gRm9yIHZpbnN3 LCBzb3VyY2UgaXMgUkJbMzI6NjNdID0gbG93IDMyIGJpdHMgb2YgcmJfdmFsLgotKyAgICAgIHVp bnQ2NF90IHNyYyA9ICh3aWR0aCA9PSA4KSA/IHJiX3ZhbCA6IChyYl92YWwgJiAweEZGRkZGRkZG VUxMKTsKLSsgICAgICBjb25zdCBpbnQgc3JjTXNiU2hpZnQgPSAod2lkdGggKiA4KSAtIDg7ICAv LyA1NiBvciAyNAotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykgewotKyAg ICAgICAgclsxNSAtIHVpbW0gLSBpXSA9ICh1aW50OF90KShzcmMgPj4gKHNyY01zYlNoaWZ0IC0g OCAqIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsg ICAgfQotKwotKyAgICAvLyA9PT0gUE9XRVI4KyB2YnBlcm1xIChYTz0xMzU2PTB4NTRDKTogcGVy LWJ5dGUgYml0IHBlcm11dGUgPT09Ci0rICAgIC8vIEZvciBlYWNoIGkgaW4gMC4uMTUsIHRha2Ug VlJCIEJFLWJ5dGUgaSAoPSBzaW0gYlsxNS1pXSk7IGlmIGl0cwotKyAgICAvLyBoaWdoIGJpdCBp cyBzZXQsIHBlcm1baV09MDsgZWxzZSBwZXJtW2ldID0gYml0IGF0IEJFIHBvc2l0aW9uCi0rICAg IC8vIChsb3cgNyBiaXRzKSBvZiBWUkEuIElTQSBzYXlzIHBlcm1bMC4uMTVdIGdvIGludG8gVlJU LmR3WzFdIGxvdwotKyAgICAvLyAxNiBiaXRzLCBidXQgb24gcmVhbCBMRSBzaWxpY29uIHRoZSBi aXRtYXAgaXMgb2JzZXJ2YWJsZSBpbiBkd1swXQotKyAgICAvLyBsb3cgMTYgYml0cyDigJQgaS5l LiwgcmVjb3ZlcmFibGUgdmlhIG1mdnNyZC4gTWF0Y2ggdGhhdCBvYnNlcnZhYmxlCi0rICAgIC8v IGJlaGF2aW91cjogd3JpdGUgdGhlIGJpdG1hcCBpbnRvIHNpbSBieXRlc1s4Li45XSAod2hlcmUg bWZ2c3JkCi0rICAgIC8vIHJlYWRzIGR3WzBdIGZyb20pLCB6ZXJvIHRoZSByZXN0LgotKyAgICBj YXNlIDEzNTY6IHsKLSsgICAgICB1aW50OF90IHBlcm1bMTZdOwotKyAgICAgIGZvciAoaW50IGsg PSAwOyBrIDwgMTY7IGsrKykgewotKyAgICAgICAgdWludDhfdCBjdGwgPSBiWzE1IC0ga107Ci0r ICAgICAgICBpZiAoY3RsICYgMHg4MCkgewotKyAgICAgICAgICBwZXJtW2tdID0gMDsKLSsgICAg ICAgIH0gZWxzZSB7Ci0rICAgICAgICAgIGludCBwID0gY3RsICYgMHg3RjsKLSsgICAgICAgICAg aW50IGxlX2lkeCA9IDE1IC0gKHAgLyA4KTsKLSsgICAgICAgICAgaW50IGJpdF9pbl9ieXRlID0g NyAtIChwICUgOCk7Ci0rICAgICAgICAgIHBlcm1ba10gPSAoYVtsZV9pZHhdID4+IGJpdF9pbl9i eXRlKSAmIDE7Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIHVpbnQ4X3QgbG8gPSAwLCBo aSA9IDA7Ci0rICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIGhpID0gKGhpIDw8IDEp IHwgcGVybVtrXTsKLSsgICAgICBmb3IgKGludCBrID0gODsgayA8IDE2OyBrKyspIGxvID0gKGxv IDw8IDEpIHwgcGVybVtrXTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHJb aV0gPSAwOwotKyAgICAgIHJbOF0gPSBsbzsKLSsgICAgICByWzldID0gaGk7Ci0rICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyBWQS1mb3JtIG9wcyB2 bWxhZGR1aG0gKFhPPTM0KSwgdnNlbCAoWE89NDIpLCB2cGVybSAoWE89NDMpIGFyZQotKyAgICAv LyBwZWVsZWQgb2ZmIGluIHRoZSBwcmUtZGlzcGF0Y2ggYWJvdmUgKHNlZSAiVkEtZm9ybSBwcmUt ZGlzcGF0Y2giCi0rICAgIC8vIGNvbW1lbnQgbmVhciB0aGUgdG9wIG9mIHRoaXMgZnVuY3Rpb24p LCBzaW5jZSB0aGUgMTEtYml0IFhPCi0rICAgIC8vIG1hc2sgY29uZmxhdGVzIFZSQyBpbnRvIHRo ZSBjYXNlIGxhYmVsLgotKwotKyAgICAvLyA9PT0gVW5wYWNrIGhpZ2ggc2lnbmVkIChCRS1udW1i ZXJpbmcgPSBMRSBpbmRpY2VzIDguLjE1KSA9PT0KLSsgICAgLy8gdnVwa2hzYjogVlJUW2ldID0g c2lnbl9leHRlbmRfdG9fMTYoVlJBW2krMC4uN10pLiBPbiBMRSBzdG9yYWdlIHdpdGgKLSsgICAg Ly8gQkUtbmFtZWQgImhpZ2giIGJlaW5nIHRoZSBsb3ctaW5kZXhlZCBieXRlcywgdnVwa2hzYiBz aWduLWV4dGVuZHMgdGhlCi0rICAgIC8vIGxvdyA4IGJ5dGVzIG9mIFZSQSBpbnRvIDggaGFsZndv cmRzLiBQUEM2NExFIHdhc20gY2FsbHMgdGhlc2UgdGhlCi0rICAgIC8vICJoaWdoIiBsYW5lcyBw ZXIgUFBDIGNvbnZlbnRpb247IHRoZSBKSVQgY29tcGVuc2F0ZXMgaW50ZXJuYWxseSB2aWEKLSsg ICAgLy8gdGhlIHZ1cGtsc2IvdnVwa2hzYiBzd2FwIGRvY3VtZW50ZWQgaW4gTWFjcm9Bc3NlbWJs ZXItcHBjNjQtaW5sLmguCi0rICAgIGNhc2UgNTI2OiAgLy8gdnVwa2hzYiAoaGlnaCBzaWduZWQg Ynl0ZSDihpIgaGFsZndvcmQpCi0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsK LSsgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2X3QpKGludDE2X3QpTEFORV9TOChi LCA4ICsgaSkpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwot KyAgICBjYXNlIDU5MDogIC8vIHZ1cGtoc2ggKGhpZ2ggc2lnbmVkIGhhbGZ3b3JkIOKGkiB3b3Jk KQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFO RV9VMzIociwgaSwgKHVpbnQzMl90KShpbnQzMl90KUxBTkVfUzE2KGIsIDQgKyBpKSk7Ci0rICAg ICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIGNhc2UgMTYxNDog Ly8gdnVwa2hzdyAoaGlnaCBzaWduZWQgd29yZCDihpIgZHdvcmQpIFBPV0VSOCsKLSsgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGks ICh1aW50NjRfdCkoaW50NjRfdClMQU5FX1MzMihiLCAyICsgaSkpOwotKyAgICAgIH0KLSsgICAg ICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICBjYXNlIDY1NDogIC8vIHZ1cGtsc2Ig KGxvdyBzaWduZWQgYnl0ZSDihpIgaGFsZndvcmQpIOKAlCBQUEMgTEU6IHRha2VzIGhpZ2ggbGFu ZXMKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAgICAgU0VUX0xB TkVfVTE2KHIsIGksICh1aW50MTZfdCkoaW50MTZfdClMQU5FX1M4KGIsIGkpKTsKLSsgICAgICB9 Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSA3MTg6ICAvLyB2 dXBrbHNoIChsb3cgc2lnbmVkIGhhbGZ3b3JkIOKGkiB3b3JkKQotKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgKHVpbnQzMl90 KShpbnQzMl90KUxBTkVfUzE2KGIsIGkpKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2 cnQsIHIpOyBicmVhazsKLSsgICAgY2FzZSAxNzQyOiAvLyB2dXBrbHN3IChsb3cgc2lnbmVkIHdv cmQg4oaSIGR3b3JkKQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0rICAg ICAgICBTRVRfTEFORV9VNjQociwgaSwgKHVpbnQ2NF90KShpbnQ2NF90KUxBTkVfUzMyKGIsIGkp KTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsKLSsgICAg Ly8gPT09IFBhY2sgKHNhdHVyYXRlIG9yIG1vZHVsbykgPT09Ci0rICAgIC8vCi0rICAgIC8vIHZw ayogZGVmaW5pdGlvbnMgYXJlIEJFLXNwZWNpZmllZDoKLSsgICAgLy8gVlQuYnl0ZVswLi43XSA9 IHNhdHVyYXRlKFZBLmhhbGZ3b3JkWzAuLjddKSwgVlQuYnl0ZVs4Li4xNV0gPQotKyAgICAvLyBz YXR1cmF0ZShWQi5oYWxmd29yZFswLi43XSkgKEJFLW51bWJlcmVkIHRocm91Z2hvdXQpLiBPbgot KyAgICAvLyBQUEM2NExFIHJlZ2lzdGVyIHN0b3JhZ2UgdGhhdCBpbnZlcnRzIHRvOiBMRSBieXRl cyAwLTcgPSBWQidzCi0rICAgIC8vIHNhdHVyYXRlZCBoYWxmd29yZHMsIExFIGJ5dGVzIDgtMTUg PSBWQSdzLgotKyAgICAvLwotKyAgICAvLyAgIHZwa3NodXMgPSBYTyAyNzAgICAoczE2IOKGkiB1 OCBzYXQpCi0rICAgIC8vICAgdnBrc2hzcyA9IFhPIDM5OCAgIChzMTYg4oaSIHM4IHNhdCkKLSsg ICAgLy8gICB2cGtzd3VzID0gWE8gMzM0ICAgKHMzMiDihpIgdTE2IHNhdCkKLSsgICAgLy8gICB2 cGtzd3NzID0gWE8gNDYyICAgKHMzMiDihpIgczE2IHNhdCkKLSsgICAgLy8gVGhlIHNpbSBwcmV2 aW91c2x5IGhhZCB0aHJlZSBvZiB0aGVzZSBmb3VyIGxhYmVscyByb3RhdGVkCi0rICAgIC8vICgy NzA9dnBrc2hzcywgMzM0PXZwa3NodXMsIDM5OD12cGtzd3VzKSBzbyBldmVyeSBpOHgxNi9pMTZ4 OAotKyAgICAvLyBuYXJyb3dfKiBjYWxsIHNpbGVudGx5IHVzZWQgdGhlIHdyb25nIHNhdHVyYXRp b24ga2luZCBvcgotKyAgICAvLyBsYW5lIHdpZHRoIOKAlCB2cGtzaHNzIHdhcyBjb21wbGV0ZWx5 IGFic2VudC4KLSsgICAgY2FzZSAzOTg6IHsgLy8gdnBrc2hzcyAoc2lnbmVkIGhhbGZ3b3JkIOKG kiBzaWduZWQgYnl0ZSkKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAg ICAgICAgaW50IHYgPSBMQU5FX1MxNihiLCBpKTsKLSsgICAgICAgIGlmICh2ID4gSU5UOF9NQVgp IHYgPSBJTlQ4X01BWDsKLSsgICAgICAgIGlmICh2IDwgSU5UOF9NSU4pIHYgPSBJTlQ4X01JTjsK LSsgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksICh1aW50OF90KShpbnQ4X3Qpdik7Ci0rICAgICAg fQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBpbnQgdiA9 IExBTkVfUzE2KGEsIGkpOwotKyAgICAgICAgaWYgKHYgPiBJTlQ4X01BWCkgdiA9IElOVDhfTUFY OwotKyAgICAgICAgaWYgKHYgPCBJTlQ4X01JTikgdiA9IElOVDhfTUlOOwotKyAgICAgICAgU0VU X0xBTkVfVTgociwgOCArIGksICh1aW50OF90KShpbnQ4X3Qpdik7Ci0rICAgICAgfQotKyAgICAg IHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSA0NjI6IHsgLy8g dnBrc3dzcyAoc2lnbmVkIHdvcmQg4oaSIHNpZ25lZCBoYWxmd29yZCkKLSsgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgaW50NjRfdCB2ID0gTEFORV9TMzIoYiwg aSk7Ci0rICAgICAgICBpZiAodiA+IElOVDE2X01BWCkgdiA9IElOVDE2X01BWDsKLSsgICAgICAg IGlmICh2IDwgSU5UMTZfTUlOKSB2ID0gSU5UMTZfTUlOOwotKyAgICAgICAgU0VUX0xBTkVfVTE2 KHIsIGksICh1aW50MTZfdCkoaW50MTZfdCl2KTsKLSsgICAgICB9Ci0rICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgIGludDY0X3QgdiA9IExBTkVfUzMyKGEsIGkp OwotKyAgICAgICAgaWYgKHYgPiBJTlQxNl9NQVgpIHYgPSBJTlQxNl9NQVg7Ci0rICAgICAgICBp ZiAodiA8IElOVDE2X01JTikgdiA9IElOVDE2X01JTjsKLSsgICAgICAgIFNFVF9MQU5FX1UxNihy LCA0ICsgaSwgKHVpbnQxNl90KShpbnQxNl90KXYpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5 dGVzKHZydCwgcik7IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjcwOiB7IC8vIHZwa3NodXMg KHNpZ25lZCBoYWxmd29yZCDihpIgdW5zaWduZWQgYnl0ZSwgc2F0KQotKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBpbnQgdiA9IExBTkVfUzE2KGIsIGkpOwot KyAgICAgICAgaWYgKHYgPiBVSU5UOF9NQVgpIHYgPSBVSU5UOF9NQVg7Ci0rICAgICAgICBpZiAo diA8IDApIHYgPSAwOwotKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgKHVpbnQ4X3Qpdik7Ci0r ICAgICAgfQotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0rICAgICAgICBp bnQgdiA9IExBTkVfUzE2KGEsIGkpOwotKyAgICAgICAgaWYgKHYgPiBVSU5UOF9NQVgpIHYgPSBV SU5UOF9NQVg7Ci0rICAgICAgICBpZiAodiA8IDApIHYgPSAwOwotKyAgICAgICAgU0VUX0xBTkVf VTgociwgOCArIGksICh1aW50OF90KXYpOwotKyAgICAgIH0KLSsgICAgICBzZXRWUkJ5dGVzKHZy dCwgcik7IGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMzM0OiB7IC8vIHZwa3N3dXMgKHNpZ25l ZCB3b3JkIOKGkiB1bnNpZ25lZCBoYWxmd29yZCwgc2F0KQotKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICBpbnQ2NF90IHYgPSBMQU5FX1MzMihiLCBpKTsKLSsg ICAgICAgIGlmICh2ID4gVUlOVDE2X01BWCkgdiA9IFVJTlQxNl9NQVg7Ci0rICAgICAgICBpZiAo diA8IDApIHYgPSAwOwotKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50MTZfdCl2KTsK LSsgICAgICB9Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAg IGludDY0X3QgdiA9IExBTkVfUzMyKGEsIGkpOwotKyAgICAgICAgaWYgKHYgPiBVSU5UMTZfTUFY KSB2ID0gVUlOVDE2X01BWDsKLSsgICAgICAgIGlmICh2IDwgMCkgdiA9IDA7Ci0rICAgICAgICBT RVRfTEFORV9VMTYociwgNCArIGksICh1aW50MTZfdCl2KTsKLSsgICAgICB9Ci0rICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gUE9XRVI5IGNv bXBhcmUgbm90LWVxdWFsICh2Y21wbmV7YixoLHd9KSDigJQgUmM9MCBhbmQgUmM9MSA9PT0KLSsg ICAgY2FzZSA3OiAgICAvLyB2Y21wbmViCi0rICAgIGNhc2UgMTAzMTogLy8gdmNtcG5lYi4KLSsg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1U4 KHIsIGksIExBTkVfVTgoYSwgaSkgIT0gTEFORV9VOChiLCBpKSA/IDB4RkYgOiAwKTsKLSsgICAg ICB9Ci0rICAgICAgVkNNUF9ET05FKDE2LCAxKTsgYnJlYWs7Ci0rICAgIGNhc2UgNzE6ICAgLy8g dmNtcG5laAotKyAgICBjYXNlIDEwOTU6IC8vIHZjbXBuZWguCi0rICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCA4OyBpKyspIHsKLSsgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBMQU5FX1UxNihh LCBpKSAhPSBMQU5FX1UxNihiLCBpKSA/IDB4RkZGRiA6IDApOwotKyAgICAgIH0KLSsgICAgICBW Q01QX0RPTkUoOCwgMik7IGJyZWFrOwotKyAgICBjYXNlIDEzNTogIC8vIHZjbXBuZXcKLSsgICAg Y2FzZSAxMTU5OiAvLyB2Y21wbmV3LgotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr KSB7Ci0rICAgICAgICBTRVRfTEFORV9VMzIociwgaSwKLSsgICAgICAgICAgICAgICAgICAgICBM QU5FX1UzMihhLCBpKSAhPSBMQU5FX1UzMihiLCBpKSA/IDB4RkZGRkZGRkZ1IDogMCk7Ci0rICAg ICAgfQotKyAgICAgIFZDTVBfRE9ORSg0LCA0KTsgYnJlYWs7Ci0rICAgICN1bmRlZiBWQ01QX0RP TkUKLSsKLSsgICAgLy8gPT09IFBvcHVsYXRpb24gY291bnQgcGVyIGJ5dGUgKFBPV0VSOCkgPT09 Ci0rICAgIGNhc2UgMTc5NTogeyAvLyB2cG9wY250YiAoWE8gMHg3MDMgPSAxNzk1KS4gVlJBIGZp ZWxkIHVudXNlZC4KLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKLSsgICAg ICAgIFNFVF9MQU5FX1U4KHIsIGksICh1aW50OF90KV9fYnVpbHRpbl9wb3Bjb3VudChMQU5FX1U4 KGIsIGkpKSk7Ci0rICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0r ICAgIH0KLSsKLSsgICAgLy8gPT09IHZzbGRvaTogVlJUID0gKFZSQSB8fCBWUkIpIHNoaWZ0ZWQg bGVmdCBieSBTSCBieXRlcyAoU0ggYXQgYml0cyAyMi4uMjUpID09PQotKyAgICBjYXNlIDQ0OiBj YXNlIDQ1OiBjYXNlIDQ2OiBjYXNlIDQ3OiB7Ci0rICAgICAgLy8gU0ggaXMgYXQgYml0cyAyMi4u MjUgKFBQQykg4oaSIExTQiBiaXRzIDYuLjkgb2YgdGhlIGluc3RydWN0aW9uIOKGkgotKyAgICAg IC8vIChpbnN0cnVjdGlvbkJpdHMgPj4gNikgJiAweEYuIE91ciBYTyBtYXNrIGFscmVhZHkgYm90 dG9tcy1vdXQgYXQKLSsgICAgICAvLyBiaXQgMCwgc28gZXh0cmFjdCBmcm9tIHRoZSByYXcgaW5z dHJ1Y3Rpb24uCi0rICAgICAgdWludDMyX3Qgc2ggPSAoaW5zdHItPmluc3RydWN0aW9uQml0cygp ID4+IDYpICYgMHhGOwotKyAgICAgIHVpbnQ4X3QgY2F0WzMyXTsKLSsgICAgICBtZW1jcHkoY2F0 LCBhLCAxNik7Ci0rICAgICAgbWVtY3B5KGNhdCArIDE2LCBiLCAxNik7Ci0rICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0rICAgICAgICByW2ldID0gY2F0W3NoICsgaV07Ci0r ICAgICAgfQotKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Ci0rICAgIH0KLSsKLSsK LSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKLSsgICAgICAg ICAgImRlY29kZVZNWDogdW5pbXBsZW1lbnRlZCBYTz0ldSAoaW5zdHJ1Y3Rpb24gMHglMDh4KSIs IHhvLAotKyAgICAgICAgICBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkpOwotKyAgfQotKwotK3Zt eF9kb25lOgotKyAgI3VuZGVmIExBTkVfVTgKLSsgICN1bmRlZiBMQU5FX1M4Ci0rICAjdW5kZWYg TEFORV9VMTYKLSsgICN1bmRlZiBMQU5FX1MxNgotKyAgI3VuZGVmIExBTkVfVTMyCi0rICAjdW5k ZWYgTEFORV9TMzIKLSsgICN1bmRlZiBMQU5FX1U2NAotKyAgI3VuZGVmIExBTkVfUzY0Ci0rICAj dW5kZWYgU0VUX0xBTkVfVTgKLSsgICN1bmRlZiBTRVRfTEFORV9VMTYKLSsgICN1bmRlZiBTRVRf TEFORV9VMzIKLSsgICN1bmRlZiBTRVRfTEFORV9VNjQKLSsgIDsgIC8vIGVtcHR5IHN0bXQgZm9y IGxhYmVsCi0rfQotKwotKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rLy8gZGVjb2RlVlNYOiBN YWpvciBvcGNvZGUgNjAgKFhYMS1mb3JtLCBYWDItZm9ybSkKLSsvLyBtZnZzcmQsIG10dnNyZCwg bXR2c3J3eiwgbXR2c3J3cywgeHNjdmRwc3AsIHhzY3ZkcHNwbiwgeHNjdnNwZHAsCi0rLy8geHNj dnNwZHBuLCB4eGJyZAotKwotK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVWU1goU2ltSW5zdHJ1Y3Rp b24qIGluc3RyKSB7Ci0rICAvLyBWU1ggbWFqb3Igb3Bjb2RlIDYwIGNvdmVycyBYWDEvWFgyL1hY My9YWDQgZm9ybXMuIFdlIGRpc3BhdGNoIFhYNAotKyAgLy8gKHh4c2VsKSBmaXJzdCBiZWNhdXNl IGl0cyBYTyBpcyBvbmx5IDIgYml0cyAoYXQgSVNBIDI2LTI3ID0gc2ltCi0rICAvLyBiaXRzIDUt NCksIGFuZCB0aGUgWEMgcmVnaXN0ZXIgZmllbGQgYXQgSVNBIDIxLTI1IHdvdWxkIG90aGVyd2lz ZQotKyAgLy8gcHJvZHVjZSAzMiBkaWZmZXJlbnQgOS1iaXQgWE8gdmFsdWVzIHRvIGVudW1lcmF0 ZSBpbiB0aGUgc3dpdGNoLgotKyAgLy8gUGVlbCBvZmYgYW55IGluc3RydWN0aW9uIHdpdGggWFg0 IFhPPTMgKHh4c2VsKS4gTm8gWFgyL1hYMyBvcCBjdXJyZW50bHkKLSsgIC8vIGVtaXR0ZWQgYnkg dGhlIEpJVCBoYXMgc2ltIGJpdHMgKDUsNCkgPT0gMy4KLSsgIGlmIChpbnN0ci0+Yml0cyg1LCA0 KSA9PSAzKSB7Ci0rICAgIC8vIHh4c2VsIFhULFhBLFhCLFhDICAoVkEtbGlrZSBYWDQtZm9ybSku Ci0rICAgIC8vICAgWFRbaV0gPSAoWEFbaV0gJiB+WENbaV0pIHwgKFhCW2ldICYgWENbaV0pCi0r ICAgIC8vIFJlZ2lzdGVyIGZpZWxkczogWEEvWEIvWFQgcGVyLWJ5dGU7IFhDIGF0IElTQSBiaXRz IDIxLTI1IChzaW0KLSsgICAgLy8gYml0cyAxMC02KSB3aXRoIENYIGV4dGVuc2lvbiBhdCBJU0Eg Yml0IDI4IChzaW0gYml0IDMpLgotKyAgICBpbnQgeGEgPSBpbnQoaW5zdHItPnJhVmFsdWUoKSB8 IChpbnN0ci0+Yml0KDIpIDw8IDUpKTsKLSsgICAgaW50IHhiID0gaW50KGluc3RyLT5yYlZhbHVl KCkgfCAoaW5zdHItPmJpdCgxKSA8PCA1KSk7Ci0rICAgIGludCB4dCA9IGludChpbnN0ci0+cnRW YWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICBpbnQgeGMgPSBpbnQoaW5zdHIt PmJpdHMoMTAsIDYpIHwgKGluc3RyLT5iaXQoMykgPDwgNSkpOwotKyAgICB1aW50OF90IGFiWzE2 XSwgYmJbMTZdLCBjYlsxNl0sIHJlc3VsdFsxNl07Ci0rICAgIGdldFZTUjEyOCh4YSwgYWIpOwot KyAgICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsgICAgZ2V0VlNSMTI4KHhjLCBjYik7Ci0rICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgewotKyAgICAgIHJlc3VsdFtpXSA9ICh1aW50OF90 KSgoYWJbaV0gJiB+Y2JbaV0pIHwgKGJiW2ldICYgY2JbaV0pKTsKLSsgICAgfQotKyAgICBzZXRW U1IxMjgoeHQsIHJlc3VsdCk7Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIC8vIFRoZSByZW1h aW5pbmcgZm9ybXMgKFhYMS9YWDIvWFgzKSBzaGFyZSBhIDktYml0IFhPIGF0IElTQSBiaXRzCi0r ICAvLyAyMS0yOSAoc2ltIGJpdHMgMTAtMikuIEZvciBYWDMgdGhpcyBpcyAoOC1iaXQgWE8gPDwg MSkgfCBBWDsgZm9yCi0rICAvLyBYWDIgdGhlIGZ1bGwgOSBiaXRzIGFyZSB0aGUgWE8gKG5vIEFY IGZpZWxkKS4KLSsgIHVpbnQzMl90IHhvID0gaW5zdHItPmJpdHMoMTAsIDIpOwotKyAgdWludDMy X3QgcnQgPSBpbnN0ci0+cnRWYWx1ZSgpOwotKyAgdWludDMyX3QgcmIgPSBpbnN0ci0+cmJWYWx1 ZSgpOwotKwotKyAgc3dpdGNoICh4bykgewotKyAgICAvLyB4c2N2ZHBzcCAvIHhzY3ZkcHNwbiAv IHhzY3ZzcGRwIC8geHNjdnNwZHBuIC8geHhicmQgYXJlCi0rICAgIC8vIFhYMi1mb3JtOiBYVC9Y QiBhcmUgZWFjaCA2LWJpdCAoNS1iaXQgZmllbGQgKyBUWC9CWCBleHRlbnNpb24gYXQKLSsgICAg Ly8gc2ltIGJpdHMgMC8xKS4gUG9zdC1QaGFzZS0yIHRoZSBKSVQgZW1pdHMgdGhlc2Ugd2l0aCBT aW1kMTI4Ci0rICAgIC8vIHRhcmdldHMgKGVuY29kaW5nIDMyLTYzKSwgd2hpY2ggcmVxdWlyZSB0 aGUgZXh0ZW5zaW9uIGJpdCB0bwotKyAgICAvLyBzZWxlY3QgVlItc3BhY2UgaW5zdGVhZCBvZiBG UFItc3BhY2UuIFRoZSBwcmV2aW91cyBjb2RlIHVzZWQKLSsgICAgLy8gb25seSB0aGUgNS1iaXQg ZmllbGQsIHNvIGFueSBWUi1zcGFjZSB0YXJnZXQgc2lsZW50bHkgY2xvYmJlcmVkCi0rICAgIC8v IEZQUiAwLi4zMSBhbmQgdGhlIHBvc3Qtc3BsYXQgZmJpdHMgaW4gc3BsYXRYNCBuZXZlciByZWFj aGVkIHRoZQotKyAgICAvLyB2ZWN0b3IgbGFuZXMuCi0rICAgIGNhc2UgMjY1OiB7Ci0rICAgICAg Ly8geHNjdmRwc3A6IGRvdWJsZeKGknNpbmdsZSB3aXRoIHNOYU4gcXVpZXRpbmcuIFRoZSBJU0Eg c2F5cwotKyAgICAgIC8vIHJlc3VsdCBsYW5kcyBhdCBYVFswOjMxXSAoQkUgd29yZCAwID0gTEUg Ynl0ZXMgMTIuLjE1KSBhbmQKLSsgICAgICAvLyBYVFszMjoxMjddIGlzICJ1bmRlZmluZWQiLiBS ZWFsIFBPV0VSOSBzaWxpY29uIGFjdHVhbGx5Ci0rICAgICAgLy8gZHVwbGljYXRlcyB0aGUgcmVz dWx0IGludG8gQkUgd29yZCAxIGFzIHdlbGwsIHNvIHRoZSBieXRlcwotKyAgICAgIC8vIGF0IExF IDguLjExIGhvbGQgdGhlIHNhbWUgc2luZ2xlLiBUaGUgSklUJ3MKLSsgICAgICAvLyByZXBsYWNl TGFuZUZsb2F0MzJ4NCBsb3dlcmluZyBkZXBlbmRzIG9uIHRoaXM6IGl0IGZvbGxvd3MKLSsgICAg ICAvLyB4c2N2ZHBzcG4gd2l0aCBgeHhpbnNlcnR3IOKApiwgMTJgLCB3aGljaCByZWFkcyBYQi53 b3JkWzFdCi0rICAgICAgLy8gKExFIGJ5dGVzIDguLjExKS4gWmVyb2luZyB0aG9zZSBieXRlcyBo ZXJlIHdvdWxkIHNpbGVudGx5Ci0rICAgICAgLy8gbG9zZSB0aGUgc2luZ2xlIHVuZGVyIHNpbS4g TWlycm9yIEhXLgotKyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUp KTsKLSsgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+ PiAxKSAmIDEpIDw8IDUpOwotKyAgICAgIHVpbnQ4X3QgYmJbMTZdOwotKyAgICAgIGdldFZTUjEy OCh4YiwgYmIpOwotKyAgICAgIC8vIFNvdXJjZSBkb3VibGUgYXQgQkUgRFcwID0gTEUgYnl0ZXMg OC4uMTUgb2YgeGIuCi0rICAgICAgdWludDY0X3QgZGJpdHMgPSAwOwotKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgODsgaSsrKSBkYml0cyB8PSAoKHVpbnQ2NF90KWJiWzggKyBpXSkgPDwgKGkg KiA4KTsKLSsgICAgICBkb3VibGUgZnJiOwotKyAgICAgIG1lbWNweSgmZnJiLCAmZGJpdHMsIHNp emVvZihmcmIpKTsKLSsgICAgICBmbG9hdCByZXN1bHQgPSBkZW1vdGVEb3VibGVQcmVzZXJ2aW5n TmFOKGZyYik7Ci0rICAgICAgdWludDMyX3QgZmJpdHM7Ci0rICAgICAgbWVtY3B5KCZmYml0cywg JnJlc3VsdCwgc2l6ZW9mKGZiaXRzKSk7Ci0rICAgICAgaWYgKChmYml0cyAmIDB4N0Y4MDAwMDB1 KSA9PSAweDdGODAwMDAwdSAmJiAoZmJpdHMgJiAweDAwN0ZGRkZGdSkgIT0gMCkgewotKyAgICAg ICAgZmJpdHMgfD0gMHgwMDQwMDAwMHU7Ci0rICAgICAgfQotKyAgICAgIHVpbnQ4X3Qgb3V0WzE2 XTsKLSsgICAgICBtZW1zZXQob3V0LCAwLCA4KTsKLSsgICAgICAvLyBCRSB3b3JkIDEgKExFIDgu LjExKSBhbmQgQkUgd29yZCAwIChMRSAxMi4uMTUpIGJvdGggPSBmYml0cy4KLSsgICAgICBmb3Ig KGludCBvZmYgOiB7OCwgMTJ9KSB7Ci0rICAgICAgICBvdXRbb2ZmXSAgICAgPSAodWludDhfdCko ZmJpdHMpOwotKyAgICAgICAgb3V0W29mZiArIDFdID0gKHVpbnQ4X3QpKGZiaXRzID4+IDgpOwot KyAgICAgICAgb3V0W29mZiArIDJdID0gKHVpbnQ4X3QpKGZiaXRzID4+IDE2KTsKLSsgICAgICAg IG91dFtvZmYgKyAzXSA9ICh1aW50OF90KShmYml0cyA+PiAyNCk7Ci0rICAgICAgfQotKyAgICAg IHNldFZTUjEyOCh4dCwgb3V0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDI2 NzogewotKyAgICAgIC8vIHhzY3ZkcHNwbjogc2FtZSBhcyB4c2N2ZHBzcCBidXQgbm9uLXNpZ25h bGluZy4gU2FtZSBIVy1vYnNlcnZlZAotKyAgICAgIC8vIHdvcmQtMSBkdXBsaWNhdGlvbiAoc2Vl IHhzY3ZkcHNwIGNvbW1lbnQgYWJvdmUpLgotKyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0 ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0 cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOwotKyAgICAgIHVpbnQ4X3QgYmJbMTZdOwot KyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAgICAgIHVpbnQ2NF90IGRiaXRzID0gMDsKLSsg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgZGJpdHMgfD0gKCh1aW50NjRfdCliYls4 ICsgaV0pIDw8IChpICogOCk7Ci0rICAgICAgZG91YmxlIGZyYjsKLSsgICAgICBtZW1jcHkoJmZy YiwgJmRiaXRzLCBzaXplb2YoZnJiKSk7Ci0rICAgICAgZmxvYXQgcmVzdWx0ID0gZGVtb3RlRG91 YmxlUHJlc2VydmluZ05hTihmcmIpOwotKyAgICAgIHVpbnQzMl90IGZiaXRzOwotKyAgICAgIG1l bWNweSgmZmJpdHMsICZyZXN1bHQsIHNpemVvZihmYml0cykpOwotKyAgICAgIHVpbnQ4X3Qgb3V0 WzE2XTsKLSsgICAgICBtZW1zZXQob3V0LCAwLCA4KTsKLSsgICAgICBmb3IgKGludCBvZmYgOiB7 OCwgMTJ9KSB7Ci0rICAgICAgICBvdXRbb2ZmXSAgICAgPSAodWludDhfdCkoZmJpdHMpOwotKyAg ICAgICAgb3V0W29mZiArIDFdID0gKHVpbnQ4X3QpKGZiaXRzID4+IDgpOwotKyAgICAgICAgb3V0 W29mZiArIDJdID0gKHVpbnQ4X3QpKGZiaXRzID4+IDE2KTsKLSsgICAgICAgIG91dFtvZmYgKyAz XSA9ICh1aW50OF90KShmYml0cyA+PiAyNCk7Ci0rICAgICAgfQotKyAgICAgIHNldFZTUjEyOCh4 dCwgb3V0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDM5MzogewotKyAgICAg IC8vIHh2Y3ZkcHNwOiBjb252ZXJ0IHR3byBkb3VibGVzIHRvIHR3byBzaW5nbGVzLCByZXBsaWNh dGluZyBlYWNoCi0rICAgICAgLy8gcmVzdWx0IGFjcm9zcyBpdHMgZHdvcmQuIEJFIHdvcmRzID0g W3MoQkVfZHcwKSwgcyhCRV9kdzApLAotKyAgICAgIC8vIHMoQkVfZHcxKSwgcyhCRV9kdzEpXS4g U0lHTkFMSU5HIGZvcm0gcGVyIElTQTogc05hTiBpbnB1dHMgYXJlCi0rICAgICAgLy8gcXVpZXRl ZCAoaGlnaC1vcmRlciBmcmFjdGlvbiBiaXQgc2V0IGluIHJlc3VsdCkuCi0rICAgICAgaW50IHh0 ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAgIGludCB4YiA9IGludChy YiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7Ci0rICAgICAg dWludDhfdCBiYlsxNl0sIG91dFsxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7Ci0rICAg ICAgdWludDMyX3QgZmJpdHNbMl07Ci0rICAgICAgLy8gQkVfZHcwID0gTEUgYnl0ZXMgOC4uMTUs IEJFX2R3MSA9IExFIGJ5dGVzIDAuLjcuCi0rICAgICAgZm9yIChpbnQgZHcgPSAwOyBkdyA8IDI7 IGR3KyspIHsKLSsgICAgICAgIGludCBsZU9mZiA9IChkdyA9PSAwKSA/IDggOiAwOwotKyAgICAg ICAgdWludDY0X3QgZGJpdHMgPSAwOwotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBp KyspIHsKLSsgICAgICAgICAgZGJpdHMgfD0gKCh1aW50NjRfdCliYltsZU9mZiArIGldKSA8PCAo aSAqIDgpOwotKyAgICAgICAgfQotKyAgICAgICAgZG91YmxlIGZyYjsKLSsgICAgICAgIG1lbWNw eSgmZnJiLCAmZGJpdHMsIHNpemVvZihmcmIpKTsKLSsgICAgICAgIGZsb2F0IHJlc3VsdCA9IGRl bW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZnJiKTsKLSsgICAgICAgIG1lbWNweSgmZmJpdHNbZHdd LCAmcmVzdWx0LCBzaXplb2YodWludDMyX3QpKTsKLSsgICAgICAgIGlmICgoZmJpdHNbZHddICYg MHg3RjgwMDAwMHUpID09IDB4N0Y4MDAwMDB1ICYmCi0rICAgICAgICAgICAgKGZiaXRzW2R3XSAm IDB4MDA3RkZGRkZ1KSAhPSAwKSB7Ci0rICAgICAgICAgIGZiaXRzW2R3XSB8PSAweDAwNDAwMDAw dTsgIC8vIHF1aWV0IHNOYU4gcmVzdWx0Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIC8v IExFIHdvcmRzOiBbcyhkdzEpLCBzKGR3MSksIHMoZHcwKSwgcyhkdzApXQotKyAgICAgIC8vIChM RSB3b3JkIDAgPSBCRSB3b3JkIDMgPSBzKGR3MSk7IExFIHdvcmQgMyA9IEJFIHdvcmQgMCA9IHMo ZHcwKSkuCi0rICAgICAgdWludDMyX3QgbGVXb3Jkc1s0XSA9IHtmYml0c1sxXSwgZmJpdHNbMV0s IGZiaXRzWzBdLCBmYml0c1swXX07Ci0rICAgICAgZm9yIChpbnQgdyA9IDA7IHcgPCA0OyB3Kysp IHsKLSsgICAgICAgIG91dFt3ICogNF0gICAgID0gKHVpbnQ4X3QpbGVXb3Jkc1t3XTsKLSsgICAg ICAgIG91dFt3ICogNCArIDFdID0gKHVpbnQ4X3QpKGxlV29yZHNbd10gPj4gOCk7Ci0rICAgICAg ICBvdXRbdyAqIDQgKyAyXSA9ICh1aW50OF90KShsZVdvcmRzW3ddID4+IDE2KTsKLSsgICAgICAg IG91dFt3ICogNCArIDNdID0gKHVpbnQ4X3QpKGxlV29yZHNbd10gPj4gMjQpOwotKyAgICAgIH0K LSsgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAg Y2FzZSAyMTY6ICAgIC8vIHh2Y3ZkcHN4d3M6IGRvdWJsZSDihpIgc2lnbmVkIHdvcmQsIHNhdHVy YXRpbmcsIFJUWiAodmVjdG9yKQotKyAgICBjYXNlIDIwMDogeyAgLy8geHZjdmRwdXh3czogZG91 YmxlIOKGkiB1bnNpZ25lZCB3b3JkLCBzYXR1cmF0aW5nLCBSVFogKHZlY3RvcikKLSsgICAgICAv LyAgIHNyYzEgOj0gWEIuZHdvcmRfQkVbMF07IHNyYzIgOj0gWEIuZHdvcmRfQkVbMV0KLSsgICAg ICAvLyAgIHIxIDo9IENvbnZlcnREUHRvU2F0KHNyYzEpOyByMiA6PSBDb252ZXJ0RFB0b1NhdChz cmMyKQotKyAgICAgIC8vICAgWFQud29yZF9CRVswXSA6PSByMTsgWFQud29yZF9CRVsxXSA6PSBy MSAocmVwbGljYXRlZCkKLSsgICAgICAvLyAgIFhULndvcmRfQkVbMl0gOj0gcjI7IFhULndvcmRf QkVbM10gOj0gcjIgKHJlcGxpY2F0ZWQpCi0rICAgICAgLy8gU2F0dXJhdGlvbjogc2lnbmVkIGNs YW1wcyB0byBbSU5UMzJfTUlOLCBJTlQzMl9NQVhdIHdpdGggTmFO4oaSSU5UMzJfTUlOOwotKyAg ICAgIC8vICAgICAgICAgICAgIHVuc2lnbmVkIGNsYW1wcyB0byBbMCwgVUlOVDMyX01BWF0gd2l0 aCBOYU7ihpIwIGFuZCBuZWfihpIwLgotKyAgICAgIC8vIEJFX2R3MCA9IExFIGJ5dGVzIDguLjE1 OyBCRV9kdzEgPSBMRSBieXRlcyAwLi43LgotKyAgICAgIGJvb2wgaXNTaWduZWQgPSAoeG8gPT0g MjE2KTsKLSsgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0r ICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkg JiAxKSA8PCA1KTsKLSsgICAgICB1aW50OF90IGJiWzE2XSwgb3V0WzE2XTsKLSsgICAgICBnZXRW U1IxMjgoeGIsIGJiKTsKLSsgICAgICBjb25zdCBpbnQgc3JjT2Zmc2V0c1syXSA9IHs4LCAwfTsg ICAvLyBCRV9kdzAgKExFIDguLjE1KSwgQkVfZHcxIChMRSAwLi43KQotKyAgICAgIHVpbnQzMl90 IHJlc3VsdHNbMl07Ci0rICAgICAgZm9yIChpbnQgbGFuZSA9IDA7IGxhbmUgPCAyOyBsYW5lKysp IHsKLSsgICAgICAgIHVpbnQ2NF90IGRiaXRzID0gMDsKLSsgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgODsgaisrKSB7Ci0rICAgICAgICAgIGRiaXRzIHw9ICgodWludDY0X3QpYmJbc3JjT2Zm c2V0c1tsYW5lXSArIGpdKSA8PCAoaiAqIDgpOwotKyAgICAgICAgfQotKyAgICAgICAgZG91Ymxl IGR2YWw7Ci0rICAgICAgICBtZW1jcHkoJmR2YWwsICZkYml0cywgc2l6ZW9mKGR2YWwpKTsKLSsg ICAgICAgIGlmIChzdGQ6OmlzbmFuKGR2YWwpKSB7Ci0rICAgICAgICAgIHJlc3VsdHNbbGFuZV0g PSBpc1NpZ25lZCA/IDB4ODAwMDAwMDB1IDogMHU7Ci0rICAgICAgICB9IGVsc2UgaWYgKGlzU2ln bmVkKSB7Ci0rICAgICAgICAgIGlmIChkdmFsID49IDIxNDc0ODM2NDcuMCkgewotKyAgICAgICAg ICAgIHJlc3VsdHNbbGFuZV0gPSAweDdGRkZGRkZGdTsKLSsgICAgICAgICAgfSBlbHNlIGlmIChk dmFsIDw9IC0yMTQ3NDgzNjQ4LjApIHsKLSsgICAgICAgICAgICByZXN1bHRzW2xhbmVdID0gMHg4 MDAwMDAwMHU7Ci0rICAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgcmVzdWx0c1tsYW5l XSA9ICh1aW50MzJfdCkoaW50MzJfdClkdmFsOyAgLy8gUlRaCi0rICAgICAgICAgIH0KLSsgICAg ICAgIH0gZWxzZSB7ICAvLyB1bnNpZ25lZAotKyAgICAgICAgICBpZiAoZHZhbCA8PSAwLjApIHsK LSsgICAgICAgICAgICByZXN1bHRzW2xhbmVdID0gMHU7Ci0rICAgICAgICAgIH0gZWxzZSBpZiAo ZHZhbCA+PSA0Mjk0OTY3Mjk1LjApIHsKLSsgICAgICAgICAgICByZXN1bHRzW2xhbmVdID0gMHhG RkZGRkZGRnU7Ci0rICAgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgcmVzdWx0c1tsYW5l XSA9ICh1aW50MzJfdClkdmFsOyAgLy8gUlRaCi0rICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsg ICAgICB9Ci0rICAgICAgLy8gUmVwbGljYXRlZCBsYXlvdXQ6IEJFIHdvcmRzIFtyMSwgcjEsIHIy LCByMl07IGluIExFIGJ5dGVzCi0rICAgICAgLy8gW3IyLCByMiwgcjEsIHIxXSAoTEUgd29yZCAw ID0gQkUgd29yZCAzID0gcjIsIExFIHdvcmQgMyA9IEJFIHdvcmQgMCA9IHIxKS4KLSsgICAgICB1 aW50MzJfdCBsZVdvcmRzWzRdID0ge3Jlc3VsdHNbMV0sIHJlc3VsdHNbMV0sIHJlc3VsdHNbMF0s IHJlc3VsdHNbMF19OwotKyAgICAgIGZvciAoaW50IHcgPSAwOyB3IDwgNDsgdysrKSB7Ci0rICAg ICAgICBvdXRbdyAqIDRdICAgICA9ICh1aW50OF90KWxlV29yZHNbd107Ci0rICAgICAgICBvdXRb dyAqIDQgKyAxXSA9ICh1aW50OF90KShsZVdvcmRzW3ddID4+IDgpOwotKyAgICAgICAgb3V0W3cg KiA0ICsgMl0gPSAodWludDhfdCkobGVXb3Jkc1t3XSA+PiAxNik7Ci0rICAgICAgICBvdXRbdyAq IDQgKyAzXSA9ICh1aW50OF90KShsZVdvcmRzW3ddID4+IDI0KTsKLSsgICAgICB9Ci0rICAgICAg c2V0VlNSMTI4KHh0LCBvdXQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgMjQ4 OiAgICAvLyB4dmN2c3h3ZHA6IHNpZ25lZCB3b3JkIOKGkiBkb3VibGUgKHZlY3RvcikKLSsgICAg Y2FzZSAyMzI6IHsgIC8vIHh2Y3Z1eHdkcDogdW5zaWduZWQgd29yZCDihpIgZG91YmxlICh2ZWN0 b3IpCi0rICAgICAgLy8gICBzcmMxIDo9IFhCLndvcmRfQkVbMF07IHNyYzIgOj0gWEIud29yZF9C RVsyXQotKyAgICAgIC8vICAgWFQuZHdvcmRfQkVbMF0gOj0gQ29udmVydChzcmMxKTsgWFQuZHdv cmRfQkVbMV0gOj0gQ29udmVydChzcmMyKQotKyAgICAgIC8vIEJFIHdvcmQgMCA9IExFIGJ5dGVz IDEyLi4xNTsgQkUgd29yZCAyID0gTEUgYnl0ZXMgNC4uNy4KLSsgICAgICAvLyBPdXRwdXQgQkUg ZHdvcmQgMCA9IExFIGJ5dGVzIDguLjE1OyBCRSBkd29yZCAxID0gTEUgYnl0ZXMgMC4uNy4KLSsg ICAgICAvLyBObyBOYU4gaGFuZGxpbmcgbmVlZGVkIChpbnRlZ2VyIHNvdXJjZSkuCi0rICAgICAg Ym9vbCBpc1NpZ25lZCA9ICh4byA9PSAyNDgpOwotKyAgICAgIGludCB4dCA9IGludChydCB8IChp bnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5p bnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOwotKyAgICAgIHVpbnQ4X3QgYmJbMTZd LCBvdXRbMTZdOwotKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAgICAgIGNvbnN0IGludCBz cmNPZmZzZXRzWzJdID0gezEyLCA0fTsKLSsgICAgICBjb25zdCBpbnQgZHN0T2Zmc2V0c1syXSA9 IHs4LCAwfTsKLSsgICAgICBmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8IDI7IGxhbmUrKykgewot KyAgICAgICAgdWludDMyX3QgYml0cyA9ICh1aW50MzJfdCliYltzcmNPZmZzZXRzW2xhbmVdXSB8 Ci0rICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltzcmNPZmZzZXRzW2xhbmVd ICsgMV0gPDwgOCkgfAotKyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbc3Jj T2Zmc2V0c1tsYW5lXSArIDJdIDw8IDE2KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgKCh1 aW50MzJfdCliYltzcmNPZmZzZXRzW2xhbmVdICsgM10gPDwgMjQpOwotKyAgICAgICAgZG91Ymxl IGR2YWwgPSBpc1NpZ25lZCA/IChkb3VibGUpKGludDMyX3QpYml0cyA6IChkb3VibGUpYml0czsK LSsgICAgICAgIHVpbnQ2NF90IGRiaXRzOwotKyAgICAgICAgbWVtY3B5KCZkYml0cywgJmR2YWws IHNpemVvZihkYml0cykpOwotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsK LSsgICAgICAgICAgb3V0W2RzdE9mZnNldHNbbGFuZV0gKyBpXSA9ICh1aW50OF90KShkYml0cyA+ PiAoaSAqIDgpKTsKLSsgICAgICAgIH0KLSsgICAgICB9Ci0rICAgICAgc2V0VlNSMTI4KHh0LCBv dXQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNhc2UgNDU3OiB7Ci0rICAgICAgLy8g eHZjdnNwZHA6IGNvbnZlcnQgdHdvIHNpbmdsZXMgdG8gdHdvIGRvdWJsZXMuIFNJR05BTElORyBm b3JtCi0rICAgICAgLy8gcGVyIElTQTogc05hTiBpbnB1dHMgYXJlIHF1aWV0ZWQgaW4gdGhlIHJl c3VsdCAoYml0IDUxIHNldCkuCi0rICAgICAgLy8gICBzcmMxIDo9IFhCLndvcmRfQkVbMF07IHNy YzIgOj0gWEIud29yZF9CRVsyXQotKyAgICAgIC8vICAgWFQuZHdvcmRfQkVbMF0gOj0gQ29udmVy dFNQdG9EUChzcmMxKQotKyAgICAgIC8vICAgWFQuZHdvcmRfQkVbMV0gOj0gQ29udmVydFNQdG9E UChzcmMyKQotKyAgICAgIC8vIEJFIHdvcmQgMCA9IExFIGJ5dGVzIDEyLi4xNTsgQkUgd29yZCAy ID0gTEUgYnl0ZXMgNC4uNy4KLSsgICAgICAvLyBPdXRwdXQgQkUgZHdvcmQgMCA9IExFIGJ5dGVz IDguLjE1OyBCRSBkd29yZCAxID0gTEUgYnl0ZXMgMC4uNy4KLSsgICAgICBpbnQgeHQgPSBpbnQo cnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KHJiIHwgKChp bnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKLSsgICAgICB1aW50OF90 IGJiWzE2XSwgb3V0WzE2XTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsgICAgICAvLyBz cmMxIGZyb20gQkUgd29yZCAwIChMRSAxMi4uMTUpLCBvdXRwdXQgZHdvcmQgYXQgTEUgOC4uMTUu Ci0rICAgICAgLy8gc3JjMiBmcm9tIEJFIHdvcmQgMiAoTEUgNC4uNyksICAgb3V0cHV0IGR3b3Jk IGF0IExFIDAuLjcuCi0rICAgICAgY29uc3QgaW50IHNyY09mZnNldHNbMl0gPSB7MTIsIDR9OyAg IC8vIExFIGJ5dGUgb2Zmc2V0cyBvZiB3b3JkX0JFWzBdLCB3b3JkX0JFWzJdCi0rICAgICAgY29u c3QgaW50IGRzdE9mZnNldHNbMl0gPSB7OCwgMH07ICAgIC8vIExFIGJ5dGUgb2Zmc2V0cyBvZiBk d29yZF9CRVswXSwgZHdvcmRfQkVbMV0KLSsgICAgICBmb3IgKGludCBsYW5lID0gMDsgbGFuZSA8 IDI7IGxhbmUrKykgewotKyAgICAgICAgdWludDMyX3QgZmJpdHMgPSAodWludDMyX3QpYmJbc3Jj T2Zmc2V0c1tsYW5lXV0gfAotKyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJi W3NyY09mZnNldHNbbGFuZV0gKyAxXSA8PCA4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICgodWludDMyX3QpYmJbc3JjT2Zmc2V0c1tsYW5lXSArIDJdIDw8IDE2KSB8Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbc3JjT2Zmc2V0c1tsYW5lXSArIDNdIDw8IDI0 KTsKLSsgICAgICAgIGZsb2F0IGZ2YWw7Ci0rICAgICAgICBtZW1jcHkoJmZ2YWwsICZmYml0cywg c2l6ZW9mKGZ2YWwpKTsKLSsgICAgICAgIGRvdWJsZSBkdmFsID0gcHJvbW90ZUZsb2F0UHJlc2Vy dmluZ05hTihmdmFsKTsKLSsgICAgICAgIHVpbnQ2NF90IGRiaXRzOwotKyAgICAgICAgbWVtY3B5 KCZkYml0cywgJmR2YWwsIHNpemVvZihkYml0cykpOwotKyAgICAgICAgaWYgKChkYml0cyAmIDB4 N0ZGMDAwMDAwMDAwMDAwMFVMTCkgPT0gMHg3RkYwMDAwMDAwMDAwMDAwVUxMICYmCi0rICAgICAg ICAgICAgKGRiaXRzICYgMHgwMDBGRkZGRkZGRkZGRkZGVUxMKSAhPSAwKSB7Ci0rICAgICAgICAg IGRiaXRzIHw9IDB4MDAwODAwMDAwMDAwMDAwMFVMTDsgIC8vIHF1aWV0IHNOYU4gcmVzdWx0Ci0r ICAgICAgICB9Ci0rICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewotKyAgICAg ICAgICBvdXRbZHN0T2Zmc2V0c1tsYW5lXSArIGldID0gKHVpbnQ4X3QpKGRiaXRzID4+IChpICog OCkpOwotKyAgICAgICAgfQotKyAgICAgIH0KLSsgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7Ci0r ICAgICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY2FzZSAzMjk6IHsKLSsgICAgICAvLyB4c2N2c3Bk cDogc2luZ2xl4oaSZG91YmxlIGZyb20gQkUgd29yZCAwIG9mIFhCLiBTSUdOQUxJTkcgZm9ybTsK LSsgICAgICAvLyBhbiBzTmFOIGlucHV0IHlpZWxkcyBhIHFOYU4gcmVzdWx0IHdpdGggdGhlIGhp Z2gtb3JkZXIKLSsgICAgICAvLyBmcmFjdGlvbiBiaXQgKHF1aWV0IGJpdCkgc2V0LgotKyAgICAg IGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICBpbnQgeGIg PSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOwot KyAgICAgIHVpbnQ4X3QgYmJbMTZdOwotKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAgICAg IC8vIEJFIHdvcmQgMCA9IExFIGJ5dGVzIDEyLi4xNSBvZiB4Yi4KLSsgICAgICB1aW50MzJfdCBm Yml0cyA9ICh1aW50MzJfdCliYlsxMl0gfAotKyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50 MzJfdCliYlsxM10gPDwgOCkgfAotKyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCli YlsxNF0gPDwgMTYpIHwKLSsgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbMTVd IDw8IDI0KTsKLSsgICAgICBmbG9hdCBmdmFsOwotKyAgICAgIG1lbWNweSgmZnZhbCwgJmZiaXRz LCBzaXplb2YoZnZhbCkpOwotKyAgICAgIGRvdWJsZSBkdmFsID0gcHJvbW90ZUZsb2F0UHJlc2Vy dmluZ05hTihmdmFsKTsKLSsgICAgICB1aW50NjRfdCBkYml0czsKLSsgICAgICBtZW1jcHkoJmRi aXRzLCAmZHZhbCwgc2l6ZW9mKGRiaXRzKSk7Ci0rICAgICAgLy8gUXVpZXQgYW55IE5hTiByZXN1 bHQgKHNpZ25hbGluZyBmb3JtKTogc2V0IGJpdCA1MSBvZiBtYW50aXNzYS4KLSsgICAgICBpZiAo KGRiaXRzICYgMHg3RkYwMDAwMDAwMDAwMDAwVUxMKSA9PSAweDdGRjAwMDAwMDAwMDAwMDBVTEwg JiYKLSsgICAgICAgICAgKGRiaXRzICYgMHgwMDBGRkZGRkZGRkZGRkZGVUxMKSAhPSAwKSB7Ci0r ICAgICAgICBkYml0cyB8PSAweDAwMDgwMDAwMDAwMDAwMDBVTEw7Ci0rICAgICAgfQotKyAgICAg IHVpbnQ4X3Qgb3V0WzE2XTsKLSsgICAgICBtZW1zZXQob3V0LCAwLCA4KTsKLSsgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IDg7IGkrKykgb3V0WzggKyBpXSA9ICh1aW50OF90KShkYml0cyA+PiAo aSAqIDgpKTsKLSsgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7Ci0rICAgICAgYnJlYWs7Ci0rICAg IH0KLSsgICAgY2FzZSAzMzE6IHsKLSsgICAgICAvLyB4c2N2c3BkcG46IG5vbi1zaWduYWxpbmcg dmFyaWFudCBvZiB4c2N2c3BkcC4KLSsgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJp dCgwKSA8PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rp b25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKLSsgICAgICB1aW50OF90IGJiWzE2XTsKLSsgICAg ICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsgICAgICB1aW50MzJfdCBmYml0cyA9ICh1aW50MzJfdCli YlsxMl0gfAotKyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYlsxM10gPDwgOCkg fAotKyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYlsxNF0gPDwgMTYpIHwKLSsg ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbMTVdIDw8IDI0KTsKLSsgICAgICBm bG9hdCBmdmFsOwotKyAgICAgIG1lbWNweSgmZnZhbCwgJmZiaXRzLCBzaXplb2YoZnZhbCkpOwot KyAgICAgIGRvdWJsZSBkdmFsID0gcHJvbW90ZUZsb2F0UHJlc2VydmluZ05hTihmdmFsKTsKLSsg ICAgICB1aW50NjRfdCBkYml0czsKLSsgICAgICBtZW1jcHkoJmRiaXRzLCAmZHZhbCwgc2l6ZW9m KGRiaXRzKSk7Ci0rICAgICAgdWludDhfdCBvdXRbMTZdOwotKyAgICAgIG1lbXNldChvdXQsIDAs IDgpOwotKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSBvdXRbOCArIGldID0gKHVp bnQ4X3QpKGRiaXRzID4+IChpICogOCkpOwotKyAgICAgIHNldFZTUjEyOCh4dCwgb3V0KTsKLSsg ICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDM0NzogewotKyAgICAgIC8vIFBPV0VSOSBY WDItZm9ybSBvcHMgc2hhcmluZyBYTz0zNDc7IGRpc2FtYmlndWF0ZWQgYnkgdGhlIDUtYml0Ci0r ICAgICAgLy8gQSBpbW1lZGlhdGUgKHNpbSBiaXRzIDIwLi4xNik6Ci0rICAgICAgLy8gICBBPTAg IC0+IHhzeGV4cGRwICAoZXh0cmFjdCBiaWFzZWQgZXhwb25lbnQgaW50byAxMSBMU0JzIG9mIFhU LmR3MCkKLSsgICAgICAvLyAgIEE9MTYgLT4geHNjdmhwZHAgIChGUDE2IC0+IEZQNjQpCi0rICAg ICAgLy8gICBBPTE3IC0+IHhzY3ZkcGhwICAoRlA2NCAtPiBGUDE2KQotKyAgICAgIC8vIEhhbGYg cGxhY2VtZW50OiB0aGUgRlAxNiB2YWx1ZSBsaXZlcyBhdCBMRSBieXRlcyA4Li45IG9mCi0rICAg ICAgLy8gdGhlIFZTUiAoPSBCRSBiaXRzIDQ4Li42MyBvZgotKyAgICAgIC8vIGR3b3JkWzBdKSwg d2l0aCB0aGUgcmVzdCBvZiBkd29yZFswXSB6ZXJvZWQuIFRoaXMgbWF0Y2hlcyB0aGUKLSsgICAg ICAvLyBseHNpaHp4IGxheW91dCBhbHJlYWR5IHVzZWQgYnkgdGhlIEpJVC4KLSsgICAgICB1aW50 MzJfdCBhSW1tID0gKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxNikgJiAweDFGOwotKyAg ICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICBpbnQg eGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUp OwotKyAgICAgIHVpbnQ4X3QgYmJbMTZdLCBvdXRbMTZdOwotKyAgICAgIGdldFZTUjEyOCh4Yiwg YmIpOwotKyAgICAgIG1lbXNldChvdXQsIDAsIDE2KTsKLSsgICAgICBpZiAoYUltbSA9PSAxNykg ewotKyAgICAgICAgLy8geHNjdmRwaHA6IHJlYWQgRlA2NCBmcm9tIEJFIDAuLjYzIG9mIFhCIChM RSBieXRlcyA4Li4xNSksCi0rICAgICAgICAvLyBjb252ZXJ0IHRvIEZQMTYsIHBsYWNlIGF0IExF IGJ5dGVzIDguLjkgb2YgWFQuCi0rICAgICAgICBkb3VibGUgZDsKLSsgICAgICAgIG1lbWNweSgm ZCwgYmIgKyA4LCA4KTsKLSsgICAgICAgIHVpbnQxNl90IGggPSBqczo6ZmxvYXQxNihkKS50b1Jh d0JpdHMoKTsKLSsgICAgICAgIG91dFs4XSA9ICh1aW50OF90KShoICYgMHhGRik7Ci0rICAgICAg ICBvdXRbOV0gPSAodWludDhfdCkoKGggPj4gOCkgJiAweEZGKTsKLSsgICAgICB9IGVsc2UgaWYg KGFJbW0gPT0gMTYpIHsKLSsgICAgICAgIC8vIHhzY3ZocGRwOiByZWFkIEZQMTYgZnJvbSBMRSBi eXRlcyA4Li45IG9mIFhCLCBjb252ZXJ0IHRvIEZQNjQsCi0rICAgICAgICAvLyBwbGFjZSBhdCBM RSBieXRlcyA4Li4xNSBvZiBYVC4KLSsgICAgICAgIHVpbnQxNl90IGggPSAodWludDE2X3QpYmJb OF0gfCAoKHVpbnQxNl90KWJiWzldIDw8IDgpOwotKyAgICAgICAgZG91YmxlIGQgPSBzdGF0aWNf Y2FzdDxkb3VibGU+KGpzOjpmbG9hdDE2Ojpmcm9tUmF3Qml0cyhoKSk7Ci0rICAgICAgICBtZW1j cHkob3V0ICsgOCwgJmQsIDgpOwotKyAgICAgIH0gZWxzZSBpZiAoYUltbSA9PSAwKSB7Ci0rICAg ICAgICAvLyB4c3hleHBkcDogcmVhZCBGUDY0IGZyb20gTEUgYnl0ZXMgOC4uMTUgb2YgWEIsIGV4 dHJhY3QgYmlhc2VkCi0rICAgICAgICAvLyBleHBvbmVudCAoYml0cyAxLi4xMSBvZiB0aGUgSUVF RS03NTQgZG91YmxlID0gYml0cyA1Mi4uNjIgb2YKLSsgICAgICAgIC8vIHRoZSA2NC1iaXQgcGF0 dGVybiksIHBsYWNlIGludG8gWFQuZHcwIHdpdGggcmVzdCB6ZXJvZWQuCi0rICAgICAgICB1aW50 NjRfdCBiaXRzID0gMDsKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSBiaXRz IHw9IHVpbnQ2NF90KGJiWzggKyBpXSkgPDwgKGkgKiA4KTsKLSsgICAgICAgIHVpbnQ2NF90IGV4 cCA9IChiaXRzID4+IDUyKSAmIDB4N0ZGOwotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4 OyBpKyspIG91dFs4ICsgaV0gPSAodWludDhfdCkoZXhwID4+IChpICogOCkpOwotKyAgICAgIH0g ZWxzZSB7Ci0rICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKLSsgICAgICAgICAgICAi ZGVjb2RlVlNYIFhPPTM0NyB3aXRoIHVuZXhwZWN0ZWQgQT0ldSAoaW5zdHIgMHglMDh4KSIsCi0r ICAgICAgICAgICAgYUltbSwgaW5zdHItPmluc3RydWN0aW9uQml0cygpKTsKLSsgICAgICB9Ci0r ICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAgIGNh c2UgNDc1OiB7Ci0rICAgICAgLy8geHhicmQ6IGJ5dGUtcmV2ZXJzZSBlYWNoIGRvdWJsZXdvcmQu Ci0rICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAg IGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkg PDwgNSk7Ci0rICAgICAgdWludDhfdCBiYlsxNl0sIG91dFsxNl07Ci0rICAgICAgZ2V0VlNSMTI4 KHhiLCBiYik7Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIG91dFtpXSA9IGJi WzcgLSBpXTsKLSsgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgb3V0WzggKyBpXSA9 IGJiWzE1IC0gaV07Ci0rICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOwotKyAgICAgIGJyZWFrOwot KyAgICB9Ci0rCi0rICAgIC8vID09PSBYWDMtZm9ybSBzY2FsYXI6IHhzbWF4amRwIC8geHNtaW5q ZHAgKFBPV0VSOSkgPT09Ci0rICAgIC8vCi0rICAgIC8vIHhze21heCxtaW59amRwIFhULCBYQSwg WEIuIFNjYWxhciBpbnB1dHMgYXQgQkUgYml0cyAwLi42MyBvZgotKyAgICAvLyBYQSAvIFhCICg9 IExFIGJ5dGVzIDguLjE1KTsgcmVzdWx0IGxhbmRzIGF0IEJFIDAuLjYzIG9mIFhUCi0rICAgIC8v ICh1cHBlciBiaXRzICJ1bmRlZmluZWQiIHBlciBJU0EpLgotKyAgICAvLwotKyAgICAvLyBTZW1h bnRpY3MgbWF0Y2ggRUNNQS0yNjIgTWF0aC57bWF4LG1pbn0gLyB3YXNtIGY2NC57bWF4LG1pbn06 Ci0rICAgIC8vICAgLSBOYU46IGlmIEEgaXMgTmFOIHJldHVybiBBOyBlbHNlIGlmIEIgaXMgTmFO IHJldHVybiBCLiBzTmFOCi0rICAgIC8vICAgICBwYXlsb2FkIHByZXNlcnZlZCBiaXQtZm9yLWJp dCAoTk9UIHF1aWV0ZWQpLgotKyAgICAvLyAgIC0gwrEwIHRpZTogc2lnbmVkLXplcm8gb3JkZXJp bmcuIHhzbWF4amRwIHJldHVybnMgKzAgZm9yIGFueQotKyAgICAvLyAgICAgbWl4IG9mICgtMCwg KzApOyB4c21pbmpkcCByZXR1cm5zIC0wLgotKyAgICAvLyAgIC0gT3RoZXJ3aXNlOiBzdGFuZGFy ZCBJRUVFIG1heCAvIG1pbi4KLSsgICAgY2FzZSAyODg6IGNhc2UgMjg5OiAgICAvLyB4c21heGpk cCAgKFhPOD0xNDQg4oaSIDktYml0IDI4OC8yODkpCi0rICAgIGNhc2UgMzA0OiBjYXNlIDMwNTog eyAgLy8geHNtaW5qZHAgIChYTzg9MTUyIOKGkiA5LWJpdCAzMDQvMzA1KQotKyAgICAgIGludCB4 YSA9IGludChpbnN0ci0+cmFWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMikgPDwgNSkpOwotKyAgICAg IGludCB4YiA9IGludChpbnN0ci0+cmJWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMSkgPDwgNSkpOwot KyAgICAgIGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwg NSkpOwotKyAgICAgIHVpbnQ4X3QgYWJbMTZdLCBiYlsxNl0sIG91dFsxNl07Ci0rICAgICAgZ2V0 VlNSMTI4KHhhLCBhYik7Ci0rICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7Ci0rICAgICAgZG91Ymxl IGEsIGI7Ci0rICAgICAgbWVtY3B5KCZhLCBhYiArIDgsIDgpOwotKyAgICAgIG1lbWNweSgmYiwg YmIgKyA4LCA4KTsKLSsgICAgICBib29sIGlzTWF4ID0gKHhvID4+IDEpID09IDE0NDsKLSsgICAg ICBkb3VibGUgcjsKLSsgICAgICBpZiAoc3RkOjppc25hbihhKSkgewotKyAgICAgICAgciA9IGE7 Ci0rICAgICAgfSBlbHNlIGlmIChzdGQ6OmlzbmFuKGIpKSB7Ci0rICAgICAgICByID0gYjsKLSsg ICAgICB9IGVsc2UgaWYgKGEgPT0gMC4wICYmIGIgPT0gMC4wKSB7Ci0rICAgICAgICAvLyBTaWdu ZWQtemVybyBvcmRlcmluZzogbWF4IHBpY2tzICswLCBtaW4gcGlja3MgLTAuCi0rICAgICAgICBp ZiAoaXNNYXgpIHsKLSsgICAgICAgICAgciA9IHN0ZDo6c2lnbmJpdChhKSA/IGIgOiBhOwotKyAg ICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgciA9IHN0ZDo6c2lnbmJpdChhKSA/IGEgOiBiOwot KyAgICAgICAgfQotKyAgICAgIH0gZWxzZSB7Ci0rICAgICAgICByID0gaXNNYXggPyBzdGQ6Om1h eChhLCBiKSA6IHN0ZDo6bWluKGEsIGIpOwotKyAgICAgIH0KLSsgICAgICBtZW1zZXQob3V0LCAw LCA4KTsKLSsgICAgICBtZW1jcHkob3V0ICsgOCwgJnIsIDgpOwotKyAgICAgIHNldFZTUjEyOCh4 dCwgb3V0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyAtLS0gVlNYIFhYMy1m b3JtOiB4eHBlcm1kaSAtLS0KLSsgICAgLy8KLSsgICAgLy8geHhwZXJtZGkgWFQsIFhBLCBYQiwg RE06Ci0rICAgIC8vICAgWFQuRFcwID0gWEEuRFcoRE1bMF0pCi0rICAgIC8vICAgWFQuRFcxID0g WEIuRFcoRE1bMV0pCi0rICAgIC8vIEluIEJFLCBEVzAgaXMgTVNCLXNpZGUsIERXMSBpcyBMU0It c2lkZS4gT24gUFBDNjRMRSByZWdpc3RlcgotKyAgICAvLyBzdG9yYWdlLCBEVzAgPSBMRSBieXRl cyA4LTE1IGFuZCBEVzEgPSBMRSBieXRlcyAwLTcuIFRoZSBzaW0ncwotKyAgICAvLyBwcmV2aW91 cyBpbXBsZW1lbnRhdGlvbiB1c2VkIHRoZSByZXZlcnNlZCAiRFcwID0gTEUgMC03IgotKyAgICAv LyBjb252ZW50aW9uIHdoaWNoIGNhbmNlbGxlZCBmb3Igc2VsZi1zd2FwIHJvdW5kLXRyaXBzIGJ1 dAotKyAgICAvLyBwcm9kdWNlZCB3cm9uZyBoYWx2ZXMgd2hlbiBjaGFpbmVkIHdpdGggSVNBLWNv cnJlY3Qgb3BzCi0rICAgIC8vIChtdHZzcmQsIHh4c3BsdHcsIG1mdnNyZCkuCi0rICAgIGNhc2Ug MjA6IGNhc2UgMjE6ICAgICAgIC8vIHh4cGVybWRpIERNPTAKLSsgICAgY2FzZSA4NDogY2FzZSA4 NTogICAgICAgLy8geHhwZXJtZGkgRE09MQotKyAgICBjYXNlIDE0ODogY2FzZSAxNDk6ICAgICAv LyB4eHBlcm1kaSBETT0yICg9IHh4c3dhcGQgd2hlbiBYQT09WEIpCi0rICAgIGNhc2UgMjEyOiBj YXNlIDIxMzogeyAgIC8vIHh4cGVybWRpIERNPTMKLSsgICAgICB1aW50OF90IGRtX2hpID0gKHhv ID4+IDcpICYgMTsgIC8vIERNWzBdCi0rICAgICAgdWludDhfdCBkbV9sbyA9ICh4byA+PiA2KSAm IDE7ICAvLyBETVsxXQotKyAgICAgIGludCB4YSA9IGludChpbnN0ci0+cmFWYWx1ZSgpIHwgKGlu c3RyLT5iaXQoMikgPDwgNSkpOwotKyAgICAgIGludCB4YiA9IGludChpbnN0ci0+cmJWYWx1ZSgp IHwgKGluc3RyLT5iaXQoMSkgPDwgNSkpOwotKyAgICAgIGludCB4dCA9IGludChpbnN0ci0+cnRW YWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAgIHVpbnQ4X3QgeGFfYnl0ZXNb MTZdLCB4Yl9ieXRlc1sxNl0sIHJlc3VsdFsxNl07Ci0rICAgICAgZ2V0VlNSMTI4KHhhLCB4YV9i eXRlcyk7Ci0rICAgICAgZ2V0VlNSMTI4KHhiLCB4Yl9ieXRlcyk7Ci0rICAgICAgLy8gRFcwIGlu IExFIHN0b3JhZ2UgaXMgYnl0ZXMgOC0xNTsgRFcxIGlzIGJ5dGVzIDAtNy4KLSsgICAgICAvLyAg IFhULkRXMCAocmVzdWx0WzguLjE1XSkgPSBYQS5EVyhkbV9oaSkKLSsgICAgICAvLyAgIFhULkRX MSAocmVzdWx0WzAuLjddKSAgPSBYQi5EVyhkbV9sbykKLSsgICAgICAvLyBEVygwKSBpcyBhdCBM RSA4LCBEVygxKSBpcyBhdCBMRSAwLgotKyAgICAgIG1lbWNweShyZXN1bHQgKyA4LCB4YV9ieXRl cyArIChkbV9oaSA/IDAgOiA4KSwgOCk7Ci0rICAgICAgbWVtY3B5KHJlc3VsdCwgICAgIHhiX2J5 dGVzICsgKGRtX2xvID8gMCA6IDgpLCA4KTsKLSsgICAgICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gLS0tIFZTWCBsb2dpY2FsIChYWDMt Zm9ybSwgcHJpbWFyeSBvcGNvZGUgNjApIC0tLQotKyAgICAvLwotKyAgICAvLyBFYWNoIHRha2Vz IHR3byA2LWJpdCBWU1Igc291cmNlcyBYQS9YQiBhbmQgd3JpdGVzIDYtYml0IFZTUgotKyAgICAv LyBkZXN0aW5hdGlvbiBYVC4gOC1iaXQgSVNBIFhPIGF0IGJpdHMgMjEtMjg7IG91cgotKyAgICAv LyA5LWJpdCBYTyBleHRyYWN0aW9uIChiaXRzIDEwOjIpIGluY2x1ZGVzIHRoZSBBWCBiaXQgYXQg cG9zaXRpb24gMCwKLSsgICAgLy8gc28gZWFjaCBvcCBhcHBlYXJzIGFzIHR3byBjb25zZWN1dGl2 ZSB2YWx1ZXMgKEFYPTAgYW5kIEFYPTEpLgotKyAgICAvLwotKyAgICAvLyAgIHh4bGFuZCBYVCxY QSxYQiAgICAgWE89MTMwICAoOS1iaXQ6IDI2MCwgMjYxKSAgWFQgPSBYQSAmIFhCCi0rICAgIC8v ICAgeHhsYW5kYyBYVCxYQSxYQiAgICBYTz0xMzggICgyNzYsIDI3NykgICAgICAgICBYVCA9IFhB ICYgflhCCi0rICAgIC8vICAgeHhsb3IgWFQsWEEsWEIgICAgICBYTz0xNDYgICgyOTIsIDI5Mykg ICAgICAgICBYVCA9IFhBIHwgWEIKLSsgICAgLy8gICB4eGx4b3IgWFQsWEEsWEIgICAgIFhPPTE1 NCAgKDMwOCwgMzA5KSAgICAgICAgIFhUID0gWEEgXiBYQgotKyAgICAvLyAgIHh4bG5vciBYVCxY QSxYQiAgICAgWE89MTYyICAoMzI0LCAzMjUpICAgICAgICAgWFQgPSB+KFhBIHwgWEIpCi0rICAg IC8vICAgeHhsb3JjIFhULFhBLFhCICAgICBYTz0xNzAgICgzNDAsIDM0MSkgICAgICAgICBYVCA9 IFhBIHwgflhCCi0rICAgIC8vICAgeHhsbmFuZCBYVCxYQSxYQiAgICBYTz0xNzggICgzNTYsIDM1 NykgICAgICAgICBYVCA9IH4oWEEgJiBYQikKLSsgICAgLy8gICB4eGxlcXYgWFQsWEEsWEIgICAg IFhPPTE4NiAgKDM3MiwgMzczKSAgICAgICAgIFhUID0gfihYQSBeIFhCKQotKyAgICAvLwotKyAg ICAvLyBUaGUgZW5jb2RpbmcgY29uc3RhbnRzIGluIEFzc2VtYmxlci1wcGM2NC5oIG1hdGNoOiBQ UENfeHhsb3I9MHhGMDAwMDQ5MAotKyAgICAvLyBoYXMgYml0cyA0LDcsMTAgc2V0IGluIGl0cyBi YXNlIChYTz0xNDYgaW4gdGhlIDgtYml0IGZpZWxkKSwgd2hpY2gKLSsgICAgLy8gdW5kZXIgdGhl IHNpbXVsYXRvcidzIDktYml0IGV4dHJhY3Rpb24gZ2l2ZXMgMioxNDY9MjkyIChBWD0wIGRlZmF1 bHQpLgotKyAgICBjYXNlIDI2MDogY2FzZSAyNjE6ICAvLyB4eGxhbmQKLSsgICAgY2FzZSAyNzY6 IGNhc2UgMjc3OiAgLy8geHhsYW5kYwotKyAgICBjYXNlIDI5MjogY2FzZSAyOTM6ICAvLyB4eGxv cgotKyAgICBjYXNlIDMwODogY2FzZSAzMDk6ICAvLyB4eGx4b3IKLSsgICAgY2FzZSAzMjQ6IGNh c2UgMzI1OiAgLy8geHhsbm9yCi0rICAgIGNhc2UgMzQwOiBjYXNlIDM0MTogIC8vIHh4bG9yYwot KyAgICBjYXNlIDM1NjogY2FzZSAzNTc6ICAvLyB4eGxuYW5kCi0rICAgIGNhc2UgMzcyOiBjYXNl IDM3MzogIC8vIHh4bGVxdgotKyAgICB7Ci0rICAgICAgaW50IHhhID0gaW50KGluc3RyLT5yYVZh bHVlKCkgfCAoaW5zdHItPmJpdCgyKSA8PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KGluc3Ry LT5yYlZhbHVlKCkgfCAoaW5zdHItPmJpdCgxKSA8PCA1KSk7Ci0rICAgICAgaW50IHh0ID0gaW50 KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgdWludDhf dCBhX2J5dGVzWzE2XSwgYl9ieXRlc1sxNl0sIHJlc3VsdFsxNl07Ci0rICAgICAgZ2V0VlNSMTI4 KHhhLCBhX2J5dGVzKTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIGJfYnl0ZXMpOwotKyAgICAgIC8v IERpc3BhdGNoIG9uIHRoZSA4LWJpdCBJU0EgWE8gKGlnbm9yaW5nIEFYIGJpdCBhdCBwb3NpdGlv biAwKS4KLSsgICAgICB1aW50MzJfdCB4bzggPSB4byA+PiAxOwotKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgMTY7IGkrKykgewotKyAgICAgICAgdWludDhfdCBhID0gYV9ieXRlc1tpXSwgYiA9 IGJfYnl0ZXNbaV07Ci0rICAgICAgICBzd2l0Y2ggKHhvOCkgewotKyAgICAgICAgICBjYXNlIDEz MDogcmVzdWx0W2ldID0gYSAmIGI7ICAgICAgICBicmVhazsgIC8vIHh4bGFuZAotKyAgICAgICAg ICBjYXNlIDEzODogcmVzdWx0W2ldID0gYSAmIH5iOyAgICAgICBicmVhazsgIC8vIHh4bGFuZGMK LSsgICAgICAgICAgY2FzZSAxNDY6IHJlc3VsdFtpXSA9IGEgfCBiOyAgICAgICAgYnJlYWs7ICAv LyB4eGxvcgotKyAgICAgICAgICBjYXNlIDE1NDogcmVzdWx0W2ldID0gYSBeIGI7ICAgICAgICBi cmVhazsgIC8vIHh4bHhvcgotKyAgICAgICAgICBjYXNlIDE2MjogcmVzdWx0W2ldID0gKHVpbnQ4 X3QpfihhIHwgYik7ICBicmVhazsgIC8vIHh4bG5vcgotKyAgICAgICAgICBjYXNlIDE3MDogcmVz dWx0W2ldID0gYSB8ICh1aW50OF90KX5iOyAgICBicmVhazsgIC8vIHh4bG9yYwotKyAgICAgICAg ICBjYXNlIDE3ODogcmVzdWx0W2ldID0gKHVpbnQ4X3QpfihhICYgYik7ICBicmVhazsgIC8vIHh4 bG5hbmQKLSsgICAgICAgICAgY2FzZSAxODY6IHJlc3VsdFtpXSA9ICh1aW50OF90KX4oYSBeIGIp OyAgYnJlYWs7ICAvLyB4eGxlcXYKLSsgICAgICAgIH0KLSsgICAgICB9Ci0rICAgICAgc2V0VlNS MTI4KHh0LCByZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vID09PSBY WDItZm9ybTogeHhzcGx0dyAoc3BsYXQgd29yZCBmcm9tIFZSQltVSU1dIHRvIGFsbCA0IGxhbmVz KSA9PT0KLSsgICAgLy8KLSsgICAgLy8geHhzcGx0dzogVUlNIHNlbGVjdHMgb25lIG9mIGZvdXIg d29yZHMgaW4gQkUgbnVtYmVyaW5nLiBVSU09MAotKyAgICAvLyDihpIgQkUgd29yZCAwIChNU0Ig c2lkZSBvZiB0aGUgMTI4IGJpdHMpLiBPbiBQUEM2NExFIHJlZ2lzdGVyCi0rICAgIC8vIHN0b3Jh Z2UgdGhhdCBtYXBzIHRvIExFIHdvcmQgKDMgLSBVSU0pLiBXaXRoIHRoZSBpbnB1dAotKyAgICAv LyB7MHgxMTExMTExMSwgMHgyMjIyMjIyMiwgMHgzMzMzMzMzMywgMHg0NDQ0NDQ0NH06IFVJTT0w Ci0rICAgIC8vIHNwbGF0cyAweDQ0NDQ0NDQ0ICg9IExFIHdvcmQgMyksIFVJTT0zIHNwbGF0cyAw eDExMTExMTExCi0rICAgIC8vICg9IExFIHdvcmQgMCkuIFRoZSBKSVQgZW1pdHMgeHhzcGx0dyBV SU09MSBhZnRlciBtdHZzcmQgb24gdGhlCi0rICAgIC8vIFBPV0VSOCBzcGxhdFg0IHBhdGgg4oCU IG10dnNyZCBwdXRzIHRoZSBHUFIncyBsb3cgMzIgYml0cyBpbiBCRQotKyAgICAvLyB3b3JkIDEg KD0gTEUgd29yZCAyIG9uIEhXKSwgc28geHhzcGx0dyBVSU09MSBwaWNrcyB1cCBleGFjdGx5Ci0r ICAgIC8vIHRoYXQgd29yZCBhbmQgc3BsYXRzIGl0IHRvIGV2ZXJ5IGxhbmUuCi0rICAgIGNhc2Ug MTY0OiB7ICAvLyB4eHNwbHR3Ci0rICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQo MCkgPDwgNSkpOwotKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9u Qml0cygpID4+IDEpICYgMSkgPDwgNSk7Ci0rICAgICAgdWludDMyX3QgdWltID0gKGluc3RyLT5p bnN0cnVjdGlvbkJpdHMoKSA+PiAxNikgJiAweDM7Ci0rICAgICAgdWludDMyX3QgbGVJZHggPSAz IC0gdWltOyAgLy8gQkUgd29yZCBVSU0g4oaSIExFIHdvcmQgKDMtVUlNKQotKyAgICAgIHVpbnQ4 X3QgYmJbMTZdLCByZXN1bHRbMTZdOwotKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOwotKyAgICAg IHVpbnQzMl90IHdvcmQgPSAodWludDMyX3QpYmJbbGVJZHggKiA0XSB8Ci0rICAgICAgICAgICAg ICAgICAgICAgICgodWludDMyX3QpYmJbbGVJZHggKiA0ICsgMV0gPDwgOCkgfAotKyAgICAgICAg ICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2xlSWR4ICogNCArIDJdIDw8IDE2KSB8Ci0rICAg ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbbGVJZHggKiA0ICsgM10gPDwgMjQpOwot KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0rICAgICAgICByZXN1bHRbaSAq IDRdICAgICA9ICh1aW50OF90KSh3b3JkICYgMHhGRik7Ci0rICAgICAgICByZXN1bHRbaSAqIDQg KyAxXSA9ICh1aW50OF90KSgod29yZCA+PiA4KSAmIDB4RkYpOwotKyAgICAgICAgcmVzdWx0W2kg KiA0ICsgMl0gPSAodWludDhfdCkoKHdvcmQgPj4gMTYpICYgMHhGRik7Ci0rICAgICAgICByZXN1 bHRbaSAqIDQgKyAzXSA9ICh1aW50OF90KSgod29yZCA+PiAyNCkgJiAweEZGKTsKLSsgICAgICB9 Ci0rICAgICAgc2V0VlNSMTI4KHh0LCByZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0r Ci0rICAgIC8vID09PSBYWDItZm9ybTogeHhleHRyYWN0dXcgKGV4dHJhY3Qgd29yZCBhdCBCRSBi eXRlIFVJTSwgcGxhY2UgYXQgQkUgd29yZCAxKSA9PT0KLSsgICAgLy8KLSsgICAgLy8geHhleHRy YWN0dXcgWFQsIFhCLCBVSU06Ci0rICAgIC8vICAgQnl0ZXMgWzQ6N10gb2YgWFQgcmVjZWl2ZSBi eXRlcyBbVUlNOlVJTSszXSBvZiBYQi4gQnl0ZXMgWzA6M10KLSsgICAgLy8gICBhbmQgWzg6MTVd IG9mIFhUIGFyZSBzZXQgdG8gemVyby4KLSsgICAgLy8gVUlNIOKIiCB7MCwgNCwgOCwgMTJ9IChj YWxsZXIgcmVzcG9uc2libGUgZm9yIGFsaWdubWVudCkuCi0rICAgIC8vIEJFIGJ5dGUgaSDihpQg TEUgYnl0ZSAoMTUtaSksIHNvIHRoZSB3b3JkIGF0IFhCIEJFIGJ5dGVzIFVJTS4uVUlNKzMKLSsg ICAgLy8gc2l0cyBhdCBYQiBMRSBieXRlcyAoMTItVUlNKS4uKDE1LVVJTSksIGFuZCBsYW5kcyBh dCBYVCBMRSBieXRlcwotKyAgICAvLyA4Li4xMSAoPSBYVCBCRSB3b3JkIDEpLgotKyAgICBjYXNl IDE2NTogeyAgLy8geHhleHRyYWN0dXcKLSsgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHIt PmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1 Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKLSsgICAgICB1aW50MzJfdCB1aW0gPSAoaW5z dHItPmluc3RydWN0aW9uQml0cygpID4+IDE2KSAmIDB4RjsKLSsgICAgICB1aW50OF90IGJiWzE2 XSwgcmVzdWx0WzE2XTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsgICAgICBtZW1zZXQo cmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7Ci0rICAgICAgLy8gcmVzdWx0LkxFWzguLjExXSA9 IFhCLkxFWygxMi1VSU0pLi4oMTUtVUlNKV0gKHByZXNlcnZlcyBieXRlIG9yZGVyKS4KLSsgICAg ICBtZW1jcHkocmVzdWx0ICsgOCwgYmIgKyAoMTIgLSB1aW0pLCA0KTsKLSsgICAgICBzZXRWU1Ix MjgoeHQsIHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgY2FzZSAxODA6 IHsKLSsgICAgICAvLyB4eHNwbHRpYiBYVCwgSU1NOCAoUE9XRVI5LCBJU0EgMy4wKTogc3BsYXQg OC1iaXQgaW1tZWRpYXRlIHRvCi0rICAgICAgLy8gYWxsIDE2IGJ5dGVzIG9mIFhULiBUaGUgZW5j b2RlciB3cml0ZXMgYGltbTggPDwgMTFgLCBzbyBJTU04Ci0rICAgICAgLy8gb2NjdXBpZXMgTEUg Yml0cyAxMS4uMTg7IFRYIGJpdCBhdCBMRSBiaXQgMCBzZWxlY3RzIHVwcGVyIFZTUi4KLSsgICAg ICB1aW50MzJfdCBpbW04ID0gaW5zdHItPmJpdHMoMTgsIDExKTsKLSsgICAgICBpbnQgeHQgPSBp bnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsgICAgICB1aW50 OF90IHh0X2J5dGVzWzE2XTsKLSsgICAgICBtZW1zZXQoeHRfYnl0ZXMsICh1aW50OF90KWltbTgs IDE2KTsKLSsgICAgICBzZXRWU1IxMjgoeHQsIHh0X2J5dGVzKTsKLSsgICAgICBicmVhazsKLSsg ICAgfQotKyAgICBjYXNlIDE4MTogewotKyAgICAgIC8vIHh4aW5zZXJ0dyBYVCwgWEIsIFVJTSAo UE9XRVI5LCBJU0EgMy4wKTogY29weSBYQlszMi4uNjNdICh0aGUKLSsgICAgICAvLyBsb3cgMzIg Yml0cyBvZiBYQidzIEJFIGRvdWJsZXdvcmQgMCwgd2hpY2ggbGl2ZXMgYXQgTEUgYnl0ZXMKLSsg ICAgICAvLyA4LTExIG9mIFhCKSBpbnRvIFhUIGF0IEJFIGJ5dGUgcG9zaXRpb24gVUlNLiBVSU0g 4oiIIHswLDQsOCwxMn07Ci0rICAgICAgLy8gZGVzdCBvY2N1cGllcyBYVCBMRSBieXRlcyAoMTIt VUlNKS4uKDE1LVVJTSkuIE90aGVyIGJ5dGVzIG9mCi0rICAgICAgLy8gWFQgYXJlIHByZXNlcnZl ZC4gVUlNIGF0IFBQQyBiaXRzIDExLTE1ID0gTEUgYml0cyAxNi0yMDsgVFgvQlgKLSsgICAgICAv LyBhdCBMRSBiaXRzIDAvMS4KLSsgICAgICB1aW50MzJfdCB1aW0gPSBpbnN0ci0+Yml0cygyMCwg MTYpOwotKyAgICAgIGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQo MCkgPDwgNSkpOwotKyAgICAgIGludCB4YiA9IGludChpbnN0ci0+cmJWYWx1ZSgpIHwgKGluc3Ry LT5iaXQoMSkgPDwgNSkpOwotKyAgICAgIHVpbnQ4X3QgeGJfYnl0ZXNbMTZdLCB4dF9ieXRlc1sx Nl07Ci0rICAgICAgZ2V0VlNSMTI4KHhiLCB4Yl9ieXRlcyk7Ci0rICAgICAgZ2V0VlNSMTI4KHh0 LCB4dF9ieXRlcyk7Ci0rICAgICAgbWVtY3B5KHh0X2J5dGVzICsgKDEyIC0gdWltKSwgeGJfYnl0 ZXMgKyA4LCA0KTsKLSsgICAgICBzZXRWU1IxMjgoeHQsIHh0X2J5dGVzKTsKLSsgICAgICBicmVh azsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gWFgyLWZvcm06IHh2YWJzc3AgLyB4dmFic2RwICh2 ZWN0b3IgYWJzb2x1dGUgdmFsdWUpID09PQotKyAgICBjYXNlIDQwODogY2FzZSA0MDk6IGNhc2Ug NDEwOiBjYXNlIDQxMTogeyAgLy8geHZhYnNzcCArIEFYL0JYIGJpdHMKLSsgICAgICBpbnQgeHQg PSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7Ci0rICAgICAgaW50IHhiID0gaW50KHJi IHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKLSsgICAgICB1 aW50OF90IGJiWzE2XSwgcmVzdWx0WzE2XTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgdWludDMyX3QgYml0 cyA9ICh1aW50MzJfdCliYltpICogNF0gfAotKyAgICAgICAgICAgICAgICAgICAgICAgICgodWlu dDMyX3QpYmJbaSAqIDQgKyAxXSA8PCA4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgKCh1 aW50MzJfdCliYltpICogNCArIDJdIDw8IDE2KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAg KCh1aW50MzJfdCliYltpICogNCArIDNdIDw8IDI0KTsKLSsgICAgICAgIGJpdHMgJj0gMHg3RkZG RkZGRnU7ICAvLyBjbGVhciBzaWduIGJpdAotKyAgICAgICAgcmVzdWx0W2kgKiA0XSAgICAgPSAo dWludDhfdCkoYml0cyAmIDB4RkYpOwotKyAgICAgICAgcmVzdWx0W2kgKiA0ICsgMV0gPSAodWlu dDhfdCkoKGJpdHMgPj4gOCkgJiAweEZGKTsKLSsgICAgICAgIHJlc3VsdFtpICogNCArIDJdID0g KHVpbnQ4X3QpKChiaXRzID4+IDE2KSAmIDB4RkYpOwotKyAgICAgICAgcmVzdWx0W2kgKiA0ICsg M10gPSAodWludDhfdCkoKGJpdHMgPj4gMjQpICYgMHhGRik7Ci0rICAgICAgfQotKyAgICAgIHNl dFZTUjEyOCh4dCwgcmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKyAgICBjYXNlIDQ3 MjogY2FzZSA0NzM6IGNhc2UgNDc0OiB7ICAgICAgICAgICAgLy8geHZhYnNkcCAoNDc1IHVzZWQg YnkgeHhicmQpCi0rICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkp OwotKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+ IDEpICYgMSkgPDwgNSk7Ci0rICAgICAgdWludDhfdCBiYlsxNl0sIHJlc3VsdFsxNl07Ci0rICAg ICAgZ2V0VlNSMTI4KHhiLCBiYik7Ci0rICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKysp IHsKLSsgICAgICAgIHVpbnQ2NF90IGJpdHMgPSAwOwotKyAgICAgICAgZm9yIChpbnQgayA9IDA7 IGsgPCA4OyBrKyspIGJpdHMgfD0gKCh1aW50NjRfdCliYltpICogOCArIGtdKSA8PCAoayAqIDgp OwotKyAgICAgICAgYml0cyAmPSAweDdGRkZGRkZGRkZGRkZGRkZVTEw7Ci0rICAgICAgICBmb3Ig KGludCBrID0gMDsgayA8IDg7IGsrKykgcmVzdWx0W2kgKiA4ICsga10gPSAodWludDhfdCkoKGJp dHMgPj4gKGsgKiA4KSkgJiAweEZGKTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlNSMTI4KHh0LCBy ZXN1bHQpOwotKyAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIC8vID09PSBYWDItZm9ybSB1 bmFyeSB2ZWN0b3IgZmxvYXQgb3BzIChzaW5nbGUgWEIgb3BlcmFuZCwgbm8gQVgpID09PQotKyAg ICAvLwotKyAgICAvLyBFbmNvZGluZzogb3Bjb2RlIDYwLCBiaXRzIDYtMTA9WFQsIDExLTE1IHJl c2VydmVkLCAxNi0yMD1YQiwKLSsgICAgLy8gMjEtMjkgPSA5LWJpdCBYTyAoZnVsbCBmaWVsZCks IDMwPUJYLCAzMT1UWC4gRXh0cmFjdGlvbiBnaXZlcyB1cwotKyAgICAvLyB4byA9IFhPOSBkaXJl Y3RseSAobm8gQVggYml0KS4gRXZlcnkgb3AgYmVsb3cgaGFzIGEgdW5pcXVlIFhPOS4KLSsgICAg Ly8KLSsgICAgLy8gICB4dnNxcnRzcCAgWE85PTEzOSAgUFBDX3h2c3FydHNwPTB4RjAwMDAyMkMK LSsgICAgLy8gICB4dnNxcnRkcCAgWE85PTIwMyAgUFBDX3h2c3FydGRwPTB4RjAwMDAzMkMKLSsg ICAgLy8gICB4dm5lZ3NwICAgWE85PTQ0MSAgUFBDX3h2bmVnc3A9MHhGMDAwMDZFNAotKyAgICAv LyAgIHh2bmVnZHAgICBYTzk9NTA1ICBQUENfeHZuZWdkcD0weEYwMDAwN0U0Ci0rICAgIC8vICAg eHZyc3BpcCAgIFhPOT0xNjkgIFBQQ194dnJzcGlwPTB4RjAwMDAyQTQgICAocm91bmQgK2luZiA9 IGNlaWwpCi0rICAgIC8vICAgeHZyc3BpeiAgIFhPOT0xNTMgIFBQQ194dnJzcGl6PTB4RjAwMDAy NjQgICAocm91bmQgdG93YXJkIDAgPSB0cnVuYykKLSsgICAgLy8gICB4dnJzcGltICAgWE85PTE4 NSAgUFBDX3h2cnNwaW09MHhGMDAwMDJFNCAgIChyb3VuZCAtaW5mID0gZmxvb3IpCi0rICAgIC8v ICAgeHZyc3BpYyAgIFhPOT0xNzEgIFBQQ194dnJzcGljPTB4RjAwMDAyQUMgICAocm91bmQgcGVy IEZQU0NSKQotKyAgICAvLyAgIHh2cmRwaXAgICBYTzk9MjMzICBQUENfeHZyZHBpcD0weEYwMDAw M0E0Ci0rICAgIC8vICAgeHZyZHBpeiAgIFhPOT0yMTcgIFBQQ194dnJkcGl6PTB4RjAwMDAzNjQK LSsgICAgLy8gICB4dnJkcGltICAgWE85PTI0OSAgUFBDX3h2cmRwaW09MHhGMDAwMDNFNAotKyAg ICAvLyAgIHh2cmRwaWMgICBYTzk9MjM1ICBQUENfeHZyZHBpYz0weEYwMDAwM0FDCi0rICAgIC8v ICAgeHZjdnNwc3h3cyBYTzk9MTUyIFBQQ194dmN2c3BzeHdzPTB4RjAwMDAyNjAgIChmMzIg4oaS IHMzMiwgc2F0KQotKyAgICAvLyAgIHh2Y3ZzcHV4d3MgWE85PTEzNiBQUENfeHZjdnNwdXh3cz0w eEYwMDAwMjIwICAoZjMyIOKGkiB1MzIsIHNhdCkKLSsgICAgLy8gICB4dmN2c3h3c3AgWE85PTE4 NCAgUFBDX3h2Y3ZzeHdzcD0weEYwMDAwMkUwICAgKHMzMiDihpIgZjMyKQotKyAgICAvLyAgIHh2 Y3Z1eHdzcCBYTzk9MTY4ICBQUENfeHZjdnV4d3NwPTB4RjAwMDAyQTAgICAodTMyIOKGkiBmMzIp Ci0rICAgIGNhc2UgMTM5OiBjYXNlIDIwMzogICAgIC8vIHh2c3FydHNwIC8geHZzcXJ0ZHAKLSsg ICAgY2FzZSA0NDE6IGNhc2UgNTA1OiAgICAgLy8geHZuZWdzcCAvIHh2bmVnZHAKLSsgICAgY2Fz ZSAxNjk6IGNhc2UgMjMzOiAgICAgLy8geHZyc3BpcCAvIHh2cmRwaXAgKGNlaWwpCi0rICAgIGNh c2UgMTUzOiBjYXNlIDIxNzogICAgIC8vIHh2cnNwaXogLyB4dnJkcGl6ICh0cnVuYykKLSsgICAg Y2FzZSAxODU6IGNhc2UgMjQ5OiAgICAgLy8geHZyc3BpbSAvIHh2cmRwaW0gKGZsb29yKQotKyAg ICBjYXNlIDE3MTogY2FzZSAyMzU6ICAgICAvLyB4dnJzcGljIC8geHZyZHBpYyAocm91bmQtdG8t bmVhcmVzdCkKLSsgICAgY2FzZSAxMzY6IGNhc2UgMTUyOiAgICAgLy8geHZjdnNwdXh3cyAvIHh2 Y3ZzcHN4d3MKLSsgICAgY2FzZSAxNjg6IGNhc2UgMTg0OiB7ICAgLy8geHZjdnV4d3NwIC8geHZj dnN4d3NwCi0rICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwot KyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEp ICYgMSkgPDwgNSk7Ci0rICAgICAgdWludDhfdCBiYlsxNl0sIHJlc3VsdFsxNl07Ci0rICAgICAg Z2V0VlNSMTI4KHhiLCBiYik7Ci0rICAgICAgYm9vbCBpc1NwID0gKHhvID09IDEzOSB8fCB4byA9 PSA0NDEgfHwgeG8gPT0gMTY5IHx8IHhvID09IDE1MyB8fAotKyAgICAgICAgICAgICAgICAgICB4 byA9PSAxODUgfHwgeG8gPT0gMTcxIHx8IHhvID09IDEzNiB8fCB4byA9PSAxNTIgfHwKLSsgICAg ICAgICAgICAgICAgICAgeG8gPT0gMTY4IHx8IHhvID09IDE4NCk7Ci0rICAgICAgYXV0byBnZXRG MzIgPSBbXSh1aW50OF90KiBidWYsIGludCBpKSAtPiBmbG9hdCB7Ci0rICAgICAgICB1aW50MzJf dCBiID0gKHVpbnQzMl90KWJ1ZltpICogNF0gfAotKyAgICAgICAgICAgICAgICAgICAgICgodWlu dDMyX3QpYnVmW2kgKiA0ICsgMV0gPDwgOCkgfAotKyAgICAgICAgICAgICAgICAgICAgICgodWlu dDMyX3QpYnVmW2kgKiA0ICsgMl0gPDwgMTYpIHwKLSsgICAgICAgICAgICAgICAgICAgICAoKHVp bnQzMl90KWJ1ZltpICogNCArIDNdIDw8IDI0KTsKLSsgICAgICAgIGZsb2F0IGY7IG1lbWNweSgm ZiwgJmIsIHNpemVvZihmKSk7IHJldHVybiBmOwotKyAgICAgIH07Ci0rICAgICAgYXV0byBzZXRG MzIgPSBbXSh1aW50OF90KiBidWYsIGludCBpLCBmbG9hdCBmKSB7Ci0rICAgICAgICB1aW50MzJf dCBiOyBtZW1jcHkoJmIsICZmLCBzaXplb2YoYikpOwotKyAgICAgICAgYnVmW2kqNF09KHVpbnQ4 X3QpYjsgYnVmW2kqNCsxXT0odWludDhfdCkoYj4+OCk7Ci0rICAgICAgICBidWZbaSo0KzJdPSh1 aW50OF90KShiPj4xNik7IGJ1ZltpKjQrM109KHVpbnQ4X3QpKGI+PjI0KTsKLSsgICAgICB9Owot KyAgICAgIGF1dG8gZ2V0RjY0ID0gW10odWludDhfdCogYnVmLCBpbnQgaSkgLT4gZG91YmxlIHsK LSsgICAgICAgIHVpbnQ2NF90IGIgPSAwOwotKyAgICAgICAgZm9yIChpbnQgaz0wO2s8ODtrKysp IGIgfD0gKCh1aW50NjRfdClidWZbaSo4K2tdKTw8KGsqOCk7Ci0rICAgICAgICBkb3VibGUgZDsg bWVtY3B5KCZkLCAmYiwgc2l6ZW9mKGQpKTsgcmV0dXJuIGQ7Ci0rICAgICAgfTsKLSsgICAgICBh dXRvIHNldEY2NCA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50IGksIGRvdWJsZSBkKSB7Ci0rICAgICAg ICB1aW50NjRfdCBiOyBtZW1jcHkoJmIsICZkLCBzaXplb2YoYikpOwotKyAgICAgICAgZm9yIChp bnQgaz0wO2s8ODtrKyspIGJ1ZltpKjgra109KHVpbnQ4X3QpKGI+PihrKjgpKTsKLSsgICAgICB9 OwotKyAgICAgIC8vIEludGVnZXIgbGFuZSByZWFkL3dyaXRlICh1c2VkIGJ5IGNvbnZlcnNpb24g b3BzKS4KLSsgICAgICBhdXRvIHNldFUzMiA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50IGksIHVpbnQz Ml90IHYpIHsKLSsgICAgICAgIGJ1ZltpKjRdPSh1aW50OF90KXY7IGJ1ZltpKjQrMV09KHVpbnQ4 X3QpKHY+PjgpOwotKyAgICAgICAgYnVmW2kqNCsyXT0odWludDhfdCkodj4+MTYpOyBidWZbaSo0 KzNdPSh1aW50OF90KSh2Pj4yNCk7Ci0rICAgICAgfTsKLSsgICAgICAvLyBTYXR1cmF0ZWQgZmxv YXTihpJpbnQgY29udmVyc2lvbiBwZXIgUG93ZXIgSVNBIHYzLjBCOiBpbnB1dCBOYU4gbWFwcwot KyAgICAgIC8vIHRvIDA7IG91dC1vZi1yYW5nZSBzYXR1cmF0ZXMgdG8gdGhlIGV4dHJlbWUgb2Yg dGhlIGRlc3RpbmF0aW9uIHR5cGUuCi0rICAgICAgYXV0byBmcDJzeHcgPSBbXShkb3VibGUgZikg LT4gdWludDMyX3QgewotKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZikpIHJldHVybiAwOwotKyAg ICAgICAgaWYgKGYgPj0gKGRvdWJsZSlJTlQzMl9NQVgpIHJldHVybiAodWludDMyX3QpSU5UMzJf TUFYOwotKyAgICAgICAgaWYgKGYgPD0gKGRvdWJsZSlJTlQzMl9NSU4pIHJldHVybiAodWludDMy X3QpSU5UMzJfTUlOOwotKyAgICAgICAgcmV0dXJuICh1aW50MzJfdCkoaW50MzJfdClzdGQ6OnRy dW5jKGYpOwotKyAgICAgIH07Ci0rICAgICAgYXV0byBmcDJ1eHcgPSBbXShkb3VibGUgZikgLT4g dWludDMyX3QgewotKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZikpIHJldHVybiAwOwotKyAgICAg ICAgaWYgKGYgPj0gKGRvdWJsZSlVSU5UMzJfTUFYKSByZXR1cm4gVUlOVDMyX01BWDsKLSsgICAg ICAgIGlmIChmIDw9IDAuMCkgcmV0dXJuIDA7Ci0rICAgICAgICByZXR1cm4gKHVpbnQzMl90KXN0 ZDo6dHJ1bmMoZik7Ci0rICAgICAgfTsKLSsKLSsgICAgICBpZiAoaXNTcCkgewotKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgICAgZmxvYXQgdiA9IGdldEYz MihiYiwgaSk7Ci0rICAgICAgICAgIGZsb2F0IG91dCA9IDAuMGY7Ci0rICAgICAgICAgIHVpbnQz Ml90IGlvdXQgPSAwOwotKyAgICAgICAgICBib29sIGlzSW50ID0gZmFsc2U7Ci0rICAgICAgICAg IHN3aXRjaCAoeG8pIHsKLSsgICAgICAgICAgICBjYXNlIDEzOTogb3V0ID0gc3RkOjpzcXJ0KHYp OyBicmVhazsgICAgICAgICAgICAgICAgLy8geHZzcXJ0c3AKLSsgICAgICAgICAgICBjYXNlIDQ0 MTogb3V0ID0gLXY7IGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8geHZuZWdzcAot KyAgICAgICAgICAgIGNhc2UgMTY5OiBvdXQgPSBzdGQ6OmNlaWwodik7IGJyZWFrOyAgICAgICAg ICAgICAgICAvLyB4dnJzcGlwCi0rICAgICAgICAgICAgY2FzZSAxNTM6IG91dCA9IHN0ZDo6dHJ1 bmModik7IGJyZWFrOyAgICAgICAgICAgICAgIC8vIHh2cnNwaXoKLSsgICAgICAgICAgICBjYXNl IDE4NTogb3V0ID0gc3RkOjpmbG9vcih2KTsgYnJlYWs7ICAgICAgICAgICAgICAgLy8geHZyc3Bp bQotKyAgICAgICAgICAgIGNhc2UgMTcxOiBvdXQgPSBzdGQ6Om5lYXJieWludCh2KTsgYnJlYWs7 ICAgICAgICAgICAvLyB4dnJzcGljCi0rICAgICAgICAgICAgY2FzZSAxNTI6IGlvdXQgPSBmcDJz eHcodik7IGlzSW50ID0gdHJ1ZTsgYnJlYWs7ICAgIC8vIHh2Y3ZzcHN4d3MKLSsgICAgICAgICAg ICBjYXNlIDEzNjogaW91dCA9IGZwMnV4dyh2KTsgaXNJbnQgPSB0cnVlOyBicmVhazsgICAgLy8g eHZjdnNwdXh3cwotKyAgICAgICAgICAgIGNhc2UgMTg0OiB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8geHZjdnN4d3NwCi0rICAgICAgICAgICAgICB1aW50MzJf dCBiaXRzID0gKHVpbnQzMl90KWJiW2kqNF0gfAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgodWludDMyX3QpYmJbaSo0KzFdPDw4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCh1aW50MzJfdCliYltpKjQrMl08PDE2KSB8Ci0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCh1aW50MzJfdCliYltpKjQrM108PDI0KTsKLSsgICAgICAgICAgICAgIG91dCA9 IChmbG9hdCkoaW50MzJfdCliaXRzOwotKyAgICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICAg ICAgfQotKyAgICAgICAgICAgIGNhc2UgMTY4OiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8geHZjdnV4d3NwCi0rICAgICAgICAgICAgICB1aW50MzJfdCBiaXRz ID0gKHVpbnQzMl90KWJiW2kqNF0gfAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo dWludDMyX3QpYmJbaSo0KzFdPDw4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KCh1aW50MzJfdCliYltpKjQrMl08PDE2KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCh1aW50MzJfdCliYltpKjQrM108PDI0KTsKLSsgICAgICAgICAgICAgIG91dCA9IChmbG9h dCkodWludDMyX3QpYml0czsKLSsgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgIH0K LSsgICAgICAgICAgfQotKyAgICAgICAgICBpZiAoaXNJbnQpIHNldFUzMihyZXN1bHQsIGksIGlv dXQpOwotKyAgICAgICAgICBlbHNlIHNldEYzMihyZXN1bHQsIGksIG91dCk7Ci0rICAgICAgICB9 Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7 Ci0rICAgICAgICAgIGRvdWJsZSB2ID0gZ2V0RjY0KGJiLCBpKTsKLSsgICAgICAgICAgZG91Ymxl IG91dCA9IDAuMDsKLSsgICAgICAgICAgc3dpdGNoICh4bykgewotKyAgICAgICAgICAgIGNhc2Ug MjAzOiBvdXQgPSBzdGQ6OnNxcnQodik7IGJyZWFrOyAgICAgICAgICAgICAgICAvLyB4dnNxcnRk cAotKyAgICAgICAgICAgIGNhc2UgNTA1OiBvdXQgPSAtdjsgYnJlYWs7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyB4dm5lZ2RwCi0rICAgICAgICAgICAgY2FzZSAyMzM6IG91dCA9IHN0ZDo6 Y2VpbCh2KTsgYnJlYWs7ICAgICAgICAgICAgICAgIC8vIHh2cmRwaXAKLSsgICAgICAgICAgICBj YXNlIDIxNzogb3V0ID0gc3RkOjp0cnVuYyh2KTsgYnJlYWs7ICAgICAgICAgICAgICAgLy8geHZy ZHBpegotKyAgICAgICAgICAgIGNhc2UgMjQ5OiBvdXQgPSBzdGQ6OmZsb29yKHYpOyBicmVhazsg ICAgICAgICAgICAgICAvLyB4dnJkcGltCi0rICAgICAgICAgICAgY2FzZSAyMzU6IG91dCA9IHN0 ZDo6bmVhcmJ5aW50KHYpOyBicmVhazsgICAgICAgICAgIC8vIHh2cmRwaWMKLSsgICAgICAgICAg fQotKyAgICAgICAgICBzZXRGNjQocmVzdWx0LCBpLCBvdXQpOwotKyAgICAgICAgfQotKyAgICAg IH0KLSsgICAgICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIH0K LSsKLSsgICAgLy8gPT09IFhYMy1mb3JtIHZlY3RvciBmbG9hdCBjb21wYXJlIChlcSwgZ3QsIGdl KSA9PT0KLSsgICAgLy8gVGhlIHdhc20gU0lNRCBjb21wYXJlcyBlbWl0IHRoZXNlIGFuZCB1c2Ug dGhlIHJlc3VsdCBhcyBhIGJpdG1hc2suCi0rICAgIC8vIFBlciBQb3dlciBJU0E6IHJlc3VsdCBp cyBhbGwtMXMgZm9yIHRydWUgbGFuZXMsIGFsbC0wcyBmb3IgZmFsc2UKLSsgICAgLy8gKGZvciB0 aGUgbm9uLXJlY29yZGluZyBmb3JtOyBiaXQgMCBvZiBYTyBzZWxlY3RzIHJlY29yZCBmb3JtIHdo aWNoCi0rICAgIC8vIHdlIGRvbid0IG1vZGVsIOKAlCB3YXNtIGRvZXNuJ3QgcmVhZCBDUjYgaGVy ZSkuCi0rICAgIC8vIEVuY29kaW5nczoKLSsgICAgLy8gICAweEYwMDAwMjE4IHh2Y21wZXFzcCAo WE84PTY3KSDihpIgWE85ID0gMTM0LzEzNSAoK0FYKS4KLSsgICAgLy8gICAweEYwMDAwMjU4IHh2 Y21wZ3RzcCAoWE84PTc1KSDihpIgWE85ID0gMTUwLzE1MS4KLSsgICAgLy8gICAweEYwMDAwMjk4 IHh2Y21wZ2VzcCAoWE84PTgzKSDihpIgWE85ID0gMTY2LzE2Ny4KLSsgICAgLy8gICAweEYwMDAw MzE4IHh2Y21wZXFkcCAoWE84PTk5KSDihpIgWE85ID0gMTk4LzE5OS4KLSsgICAgLy8gICAweEYw MDAwMzU4IHh2Y21wZ3RkcCAoWE84PTEwNykg4oaSIFhPOSA9IDIxNC8yMTUuCi0rICAgIC8vICAg MHhGMDAwMDM5OCB4dmNtcGdlZHAgKFhPOD0xMTUpIOKGkiBYTzkgPSAyMzAvMjMxLgotKyAgICAv LyBSYz0xIHJlY29yZCBmb3JtIGZsaXBzIElTQSBiaXQgMjEgKHNpbSBiaXQgMTApLCB5aWVsZGlu ZyBYTzkrMjU2Ci0rICAgIC8vIChub3QgYWRqYWNlbnQgdG8gdGhlIFJjPTAgc2xvdCkuIHdhc20g bmV2ZXIgZW1pdHMgdGhlIHJlY29yZCBmb3JtLgotKyAgICBjYXNlIDEzNDogY2FzZSAxMzU6ICAg IC8vIHh2Y21wZXFzcCAoWE84PTY3KQotKyAgICBjYXNlIDE5ODogY2FzZSAxOTk6ICAgIC8vIHh2 Y21wZXFkcCAoWE84PTk5KQotKyAgICBjYXNlIDE1MDogY2FzZSAxNTE6ICAgIC8vIHh2Y21wZ3Rz cCAoWE84PTc1KQotKyAgICBjYXNlIDIxNDogY2FzZSAyMTU6ICAgIC8vIHh2Y21wZ3RkcCAoWE84 PTEwNykKLSsgICAgY2FzZSAxNjY6IGNhc2UgMTY3OiAgICAvLyB4dmNtcGdlc3AgKFhPOD04MykK LSsgICAgY2FzZSAyMzA6IGNhc2UgMjMxOiB7ICAvLyB4dmNtcGdlZHAgKFhPOD0xMTUpCi0rICAg ICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwotKyAgICAgIHVpbnQz Ml90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKLSsgICAgICBpbnQgeGEgPSBpbnQocmEgfCAoKGlu c3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAyKSAmIDEpIDw8IDUpOwotKyAgICAgIGludCB4YiA9 IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7Ci0r ICAgICAgdWludDhfdCBhYlsxNl0sIGJiWzE2XSwgcmVzdWx0WzE2XTsKLSsgICAgICBnZXRWU1Ix MjgoeGEsIGFiKTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsgICAgICB1aW50MzJfdCBv cDggPSB4byA+PiAxOyAgLy8gY2Fub25pY2FsIDgtYml0IFhPCi0rICAgICAgYm9vbCBpc0YzMiA9 IChvcDggPT0gNjcgfHwgb3A4ID09IDc1IHx8IG9wOCA9PSA4Myk7Ci0rICAgICAgYm9vbCBpc0Vx ICA9IChvcDggPT0gNjcgfHwgb3A4ID09IDk5KTsKLSsgICAgICBib29sIGlzR3QgID0gKG9wOCA9 PSA3NSB8fCBvcDggPT0gMTA3KTsKLSsgICAgICBib29sIGlzR2UgID0gKG9wOCA9PSA4MyB8fCBv cDggPT0gMTE1KTsKLSsgICAgICAodm9pZClpc0dlOwotKyAgICAgIGF1dG8gY21wRjMyID0gWyZd KGludCBpKSAtPiBib29sIHsKLSsgICAgICAgIHVpbnQzMl90IGFCaXRzID0gKHVpbnQzMl90KWFi W2kgKiA0XSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYWJbaSAqIDQg KyAxXSA8PCA4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYWJbaSAq IDQgKyAyXSA8PCAxNikgfAotKyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWFi W2kgKiA0ICsgM10gPDwgMjQpOwotKyAgICAgICAgdWludDMyX3QgYkJpdHMgPSAodWludDMyX3Qp YmJbaSAqIDRdIHwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpICog NCArIDFdIDw8IDgpIHwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltp ICogNCArIDJdIDw8IDE2KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3Qp YmJbaSAqIDQgKyAzXSA8PCAyNCk7Ci0rICAgICAgICBmbG9hdCBmYSwgZmI7Ci0rICAgICAgICBt ZW1jcHkoJmZhLCAmYUJpdHMsIHNpemVvZihmYSkpOwotKyAgICAgICAgbWVtY3B5KCZmYiwgJmJC aXRzLCBzaXplb2YoZmIpKTsKLSsgICAgICAgIGlmIChpc0VxKSByZXR1cm4gZmEgPT0gZmI7Ci0r ICAgICAgICBpZiAoaXNHdCkgcmV0dXJuIGZhID4gZmI7Ci0rICAgICAgICByZXR1cm4gZmEgPj0g ZmI7Ci0rICAgICAgfTsKLSsgICAgICBhdXRvIGNtcEY2NCA9IFsmXShpbnQgaSkgLT4gYm9vbCB7 Ci0rICAgICAgICB1aW50NjRfdCBhQml0cyA9IDAsIGJCaXRzID0gMDsKLSsgICAgICAgIGZvciAo aW50IGsgPSAwOyBrIDwgODsgaysrKSBhQml0cyB8PSAoKHVpbnQ2NF90KWFiW2kgKiA4ICsga10p IDw8IChrICogOCk7Ci0rICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykgYkJpdHMg fD0gKCh1aW50NjRfdCliYltpICogOCArIGtdKSA8PCAoayAqIDgpOwotKyAgICAgICAgZG91Ymxl IGZhLCBmYjsKLSsgICAgICAgIG1lbWNweSgmZmEsICZhQml0cywgc2l6ZW9mKGZhKSk7Ci0rICAg ICAgICBtZW1jcHkoJmZiLCAmYkJpdHMsIHNpemVvZihmYikpOwotKyAgICAgICAgaWYgKGlzRXEp IHJldHVybiBmYSA9PSBmYjsKLSsgICAgICAgIGlmIChpc0d0KSByZXR1cm4gZmEgPiBmYjsKLSsg ICAgICAgIHJldHVybiBmYSA+PSBmYjsKLSsgICAgICB9OwotKyAgICAgIGlmIChpc0YzMikgewot KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSsgICAgICAgICAgdWludDMy X3QgbWFzayA9IGNtcEYzMihpKSA/IDB4RkZGRkZGRkZ1IDogMDsKLSsgICAgICAgICAgZm9yIChp bnQgayA9IDA7IGsgPCA0OyBrKyspIHsKLSsgICAgICAgICAgICByZXN1bHRbaSAqIDQgKyBrXSA9 ICh1aW50OF90KSgobWFzayA+PiAoayAqIDgpKSAmIDB4RkYpOwotKyAgICAgICAgICB9Ci0rICAg ICAgICB9Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsg aSsrKSB7Ci0rICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBjbXBGNjQoaSkgPyBVSU5UNjRfTUFY IDogMDsKLSsgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIHsKLSsgICAgICAg ICAgICByZXN1bHRbaSAqIDggKyBrXSA9ICh1aW50OF90KSgobWFzayA+PiAoayAqIDgpKSAmIDB4 RkYpOwotKyAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAgfQotKyAgICAgIHNldFZTUjEy OCh4dCwgcmVzdWx0KTsKLSsgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICAvLyA9PT0gWFgz LWZvcm0gdmVjdG9yIGZsb2F0IGFyaXRobWV0aWMgPT09Ci0rICAgIC8vIEVuY29kaW5nOiBiaXRz IDYtMTA9WFQsIDExLTE1PVhBLCAxNi0yMD1YQiwgMjEtMjg9WE8gKDggYml0cyksIDI5PUFYLAot KyAgICAvLyAzMD1CWCwgMzE9VFguIFdlIGRpc3BhdGNoZWQgYWJvdmUgdXNpbmcgYGJpdHMoMTAs IDIpYCB3aGljaCBpcyBiaXRzCi0rICAgIC8vIDIxLTI5ICg5IGJpdHMpIOKAlCB0aGF0IGluY2x1 ZGVzIHRoZSBBWCByZWdpc3Rlci1leHRlbnNpb24gYml0LCB3aGljaAotKyAgICAvLyBjaGFuZ2Vz IGZvciBldmVyeSBYQSBpbiB7MC4uMzF9IHZzIHszMi4uNjN9LiBUbyBtYXRjaCBhbGwgNAotKyAg ICAvLyAoQVgsQlgpIGNvbWJpbmF0aW9ucyBvZiBhbiBYWDMgb3Agd2UgdXNlIGBjYXNlIHhvMyB8 IDB8MXwyfDNgIHdoZXJlCi0rICAgIC8vIHhvMyA9ICg4LWJpdCBYTykgPDwgMSAoYmVjYXVzZSBY TyBvY2N1cGllcyBiaXRzIDEuLjggb2Ygb3VyIDktYml0Ci0rICAgIC8vIGV4dHJhY3Rpb24pLiBI ZWxwZXIgbWFjcm86IGVhY2ggY2FzZSBjb3ZlcnMgZm91ciBsYWJlbHMuCi0rICAgICNkZWZpbmUg WFgzX0NBU0VfQkFTRShuYW1lKSBcCi0rICAgICAgY2FzZSAoKG5hbWUpIHwgMCk6IGNhc2UgKChu YW1lKSB8IDEpOgotKyAgICBjYXNlIDEyODogIGNhc2UgMTI5OiAgLy8geHZhZGRzcDogNCDDlyBm MzIgYWRkIChYTz02NCDihpIgYml0cyAxLi44ID0gMTI4KQotKyAgICBjYXNlIDE5MjogIGNhc2Ug MTkzOiAgLy8geHZhZGRkcAotKyAgICBjYXNlIDE0NDogIGNhc2UgMTQ1OiAgLy8geHZzdWJzcAot KyAgICBjYXNlIDIwODogIGNhc2UgMjA5OiAgLy8geHZzdWJkcAotKyAgICBjYXNlIDE2MDogIGNh c2UgMTYxOiAgLy8geHZtdWxzcAotKyAgICBjYXNlIDIyNDogIGNhc2UgMjI1OiAgLy8geHZtdWxk cAotKyAgICBjYXNlIDE3NjogIGNhc2UgMTc3OiAgLy8geHZkaXZzcAotKyAgICBjYXNlIDI0MDog IGNhc2UgMjQxOiAgLy8geHZkaXZkcAotKyAgICBjYXNlIDM4NDogIGNhc2UgMzg1OiAgLy8geHZt YXhzcAotKyAgICBjYXNlIDQ0ODogIGNhc2UgNDQ5OiAgLy8geHZtYXhkcAotKyAgICBjYXNlIDQw MDogIGNhc2UgNDAxOiAgLy8geHZtaW5zcAotKyAgICBjYXNlIDQ2NDogIGNhc2UgNDY1OiAgLy8g eHZtaW5kcAotKyAgICB7Ci0rICAgICAgLy8gUmUtZXh0cmFjdCB0aGUgY2Fub25pY2FsIDgtYml0 IFhYMyBYTy4KLSsgICAgICB1aW50MzJfdCB4bzMgPSAoeG8gPj4gMSk7Ci0rICAgICAgKHZvaWQp eG8zOwotKyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKLSsg ICAgICB1aW50MzJfdCByYSA9IGluc3RyLT5yYVZhbHVlKCk7Ci0rICAgICAgaW50IHhhID0gaW50 KHJhIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMikgJiAxKSA8PCA1KTsKLSsgICAg ICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEp IDw8IDUpOwotKyAgICAgIHVpbnQ4X3QgYWJbMTZdLCBiYlsxNl0sIHJiX2J5dGVzWzE2XTsKLSsg ICAgICBnZXRWU1IxMjgoeGEsIGFiKTsKLSsgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKLSsKLSsg ICAgICBhdXRvIGdldEYzMiA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50IGkpIC0+IGZsb2F0IHsKLSsg ICAgICAgIHVpbnQzMl90IGJpdHMgPSAodWludDMyX3QpYnVmW2kgKiA0XSB8Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAxXSA8PCA4KSB8Ci0rICAgICAg ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAyXSA8PCAxNikgfAotKyAg ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYnVmW2kgKiA0ICsgM10gPDwgMjQpOwot KyAgICAgICAgZmxvYXQgZjsKLSsgICAgICAgIG1lbWNweSgmZiwgJmJpdHMsIHNpemVvZihmKSk7 Ci0rICAgICAgICByZXR1cm4gZjsKLSsgICAgICB9OwotKyAgICAgIGF1dG8gc2V0RjMyID0gW10o dWludDhfdCogYnVmLCBpbnQgaSwgZmxvYXQgZikgewotKyAgICAgICAgdWludDMyX3QgYml0czsK LSsgICAgICAgIG1lbWNweSgmYml0cywgJmYsIHNpemVvZihiaXRzKSk7Ci0rICAgICAgICBidWZb aSAqIDRdICAgICA9ICh1aW50OF90KShiaXRzICYgMHhGRik7Ci0rICAgICAgICBidWZbaSAqIDQg KyAxXSA9ICh1aW50OF90KSgoYml0cyA+PiA4KSAmIDB4RkYpOwotKyAgICAgICAgYnVmW2kgKiA0 ICsgMl0gPSAodWludDhfdCkoKGJpdHMgPj4gMTYpICYgMHhGRik7Ci0rICAgICAgICBidWZbaSAq IDQgKyAzXSA9ICh1aW50OF90KSgoYml0cyA+PiAyNCkgJiAweEZGKTsKLSsgICAgICB9OwotKyAg ICAgIGF1dG8gZ2V0RjY0ID0gW10odWludDhfdCogYnVmLCBpbnQgaSkgLT4gZG91YmxlIHsKLSsg ICAgICAgIHVpbnQ2NF90IGJpdHMgPSAwOwotKyAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA4 OyBrKyspIGJpdHMgfD0gKCh1aW50NjRfdClidWZbaSAqIDggKyBrXSkgPDwgKGsgKiA4KTsKLSsg ICAgICAgIGRvdWJsZSBkOwotKyAgICAgICAgbWVtY3B5KCZkLCAmYml0cywgc2l6ZW9mKGQpKTsK LSsgICAgICAgIHJldHVybiBkOwotKyAgICAgIH07Ci0rICAgICAgYXV0byBzZXRGNjQgPSBbXSh1 aW50OF90KiBidWYsIGludCBpLCBkb3VibGUgZCkgewotKyAgICAgICAgdWludDY0X3QgYml0czsK LSsgICAgICAgIG1lbWNweSgmYml0cywgJmQsIHNpemVvZihiaXRzKSk7Ci0rICAgICAgICBmb3Ig KGludCBrID0gMDsgayA8IDg7IGsrKykgYnVmW2kgKiA4ICsga10gPSAodWludDhfdCkoKGJpdHMg Pj4gKGsgKiA4KSkgJiAweEZGKTsKLSsgICAgICB9OwotKwotKyAgICAgIC8vIERpc3BhdGNoIG9u IHRoZSBjYW5vbmljYWwgOC1iaXQgWFgzIFhPIChiaXRzIDIxLi4yOCBQUEMgPSB4bz4+MSkuCi0r ICAgICAgc3dpdGNoICh4bzMpIHsKLSsgICAgICAgIGNhc2UgNjQ6ICBmb3IgKGludCBpID0gMDsg aSA8IDQ7IGkrKykgc2V0RjMyKHJiX2J5dGVzLCBpLCBnZXRGMzIoYWIsIGkpICsgZ2V0RjMyKGJi LCBpKSk7IGJyZWFrOyAgLy8geHZhZGRzcAotKyAgICAgICAgY2FzZSA5NjogIGZvciAoaW50IGkg PSAwOyBpIDwgMjsgaSsrKSBzZXRGNjQocmJfYnl0ZXMsIGksIGdldEY2NChhYiwgaSkgKyBnZXRG NjQoYmIsIGkpKTsgYnJlYWs7ICAvLyB4dmFkZGRwCi0rICAgICAgICBjYXNlIDcyOiAgZm9yIChp bnQgaSA9IDA7IGkgPCA0OyBpKyspIHNldEYzMihyYl9ieXRlcywgaSwgZ2V0RjMyKGFiLCBpKSAt IGdldEYzMihiYiwgaSkpOyBicmVhazsgIC8vIHh2c3Vic3AKLSsgICAgICAgIGNhc2UgMTA0OiBm b3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgc2V0RjY0KHJiX2J5dGVzLCBpLCBnZXRGNjQoYWIs IGkpIC0gZ2V0RjY0KGJiLCBpKSk7IGJyZWFrOyAgLy8geHZzdWJkcAotKyAgICAgICAgY2FzZSA4 MDogIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSBzZXRGMzIocmJfYnl0ZXMsIGksIGdldEYz MihhYiwgaSkgKiBnZXRGMzIoYmIsIGkpKTsgYnJlYWs7ICAvLyB4dm11bHNwCi0rICAgICAgICBj YXNlIDExMjogZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHNldEY2NChyYl9ieXRlcywgaSwg Z2V0RjY0KGFiLCBpKSAqIGdldEY2NChiYiwgaSkpOyBicmVhazsgIC8vIHh2bXVsZHAKLSsgICAg ICAgIGNhc2UgODg6ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgc2V0RjMyKHJiX2J5dGVz LCBpLCBnZXRGMzIoYWIsIGkpIC8gZ2V0RjMyKGJiLCBpKSk7IGJyZWFrOyAgLy8geHZkaXZzcAot KyAgICAgICAgY2FzZSAxMjA6IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSBzZXRGNjQocmJf Ynl0ZXMsIGksIGdldEY2NChhYiwgaSkgLyBnZXRGNjQoYmIsIGkpKTsgYnJlYWs7ICAvLyB4dmRp dmRwCi0rICAgICAgICAvLyB4dm1pbntzcCxkcH0gLyB4dm1heHtzcCxkcH06Ci0rICAgICAgICAv LyAgIElmIGJvdGggb3BlcmFuZHMgYXJlIE5hTiwgcmVzdWx0IGlzIHRoZSBOYU4gZnJvbSBYQS4K LSsgICAgICAgIC8vICAgSWYgZXhhY3RseSBvbmUgb3BlcmFuZCBpcyBOYU4sIHJlc3VsdCBpcyB0 aGUgTk9OLU5hTiBvcGVyYW5kLgotKyAgICAgICAgLy8gICBGb3IgMCAvIC0wLCB0cmVhdCAtMCA8 ICswIChzaWduZWQtemVybyBvcmRlcmluZyk6IHh2bWluc3AoKzAsLTApCi0rICAgICAgICAvLyAg ID0gLTAsIHh2bWF4c3AoKzAsLTApID0gKzAsIGluIGVpdGhlciBvcGVyYW5kIG9yZGVyLgotKyAg ICAgICAgLy8gICBPdGhlcndpc2UsIHJlc3VsdCBpcyBJRUVFIG1pbi9tYXgoYSwgYikuCi0rICAg ICAgICAvLyBUaGlzIGRpZmZlcnMgZnJvbSBJRUVFIDc1NCAod2hpY2ggcHJvcGFnYXRlcyBOYU4p IGFuZCBpcwotKyAgICAgICAgLy8gcmVsaWVkIHVwb24gYnkgd2FzbSByZWxheGVkX21pbi9tYXgg KGJ1ZzE5NDY2MTguanMpIGFuZCBieQotKyAgICAgICAgLy8gd2FzbSBmMzJ4NC5taW4oMCwtMCkg cmV0dXJuaW5nIC0wIChzaW1kX2YzMng0Lndhc3QuanMpLgotKyAgICAgICAgI2RlZmluZSBYVl9N QVgoVCwgYSwgYikgW10oVCBhXywgVCBiXykgLT4gVCB7ICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICAgIGJvb2wgYW4gPSBzdGQ6OmlzbmFuKGFfKSwgYm4gPSBzdGQ6OmlzbmFu KGJfKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKGFuICYmIGJuKSBy ZXR1cm4gYV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgaWYgKGFuKSByZXR1cm4gYl87ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKGJuKSByZXR1cm4gYV87 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgICAgaWYgKGFfID09IDAuMCAmJiBiXyA9PSAwLjApIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAvKiAtMCBpcyBzbWFsbGVyIHRo YW4gKzA7IG1heCBwaWNrcyArMC4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICAgICAgICByZXR1cm4gc3RkOjpzaWduYml0KGFfKSA/IGJfIDogYV87ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg ICAgcmV0dXJuIHN0ZDo6bWF4KGFfLCBiXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIH0oYSwgYikKLSsgICAgICAgICNkZWZpbmUgWFZf TUlOKFQsIGEsIGIpIFtdKFQgYV8sIFQgYl8pIC0+IFQgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgICBib29sIGFuID0gc3RkOjppc25hbihhXyksIGJuID0gc3RkOjppc25h bihiXyk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIGlmIChhbiAmJiBibikg cmV0dXJuIGFfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICAgIGlmIChhbikgcmV0dXJuIGJfOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIGlmIChibikgcmV0dXJuIGFf OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICAgIGlmIChhXyA9PSAwLjAgJiYgYl8gPT0gMC4wKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgLyogLTAgaXMgc21hbGxlciB0 aGFuICswOyBtaW4gcGlja3MgLTAuICovICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgcmV0dXJuIHN0ZDo6c2lnbmJpdChhXykgPyBhXyA6IGJfOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgIHJldHVybiBzdGQ6Om1pbihhXywgYl8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICB9KGEsIGIpCi0rICAgICAgICBjYXNlIDE5Mjog Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsgIC8vIHh2bWF4c3AKLSsgICAgICAgICAgZmxv YXQgYSA9IGdldEYzMihhYiwgaSksIGIgPSBnZXRGMzIoYmIsIGkpOwotKyAgICAgICAgICBzZXRG MzIocmJfYnl0ZXMsIGksIFhWX01BWChmbG9hdCwgYSwgYikpOwotKyAgICAgICAgfSBicmVhazsK LSsgICAgICAgIGNhc2UgMjI0OiBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeyAgLy8geHZt YXhkcAotKyAgICAgICAgICBkb3VibGUgYSA9IGdldEY2NChhYiwgaSksIGIgPSBnZXRGNjQoYmIs IGkpOwotKyAgICAgICAgICBzZXRGNjQocmJfYnl0ZXMsIGksIFhWX01BWChkb3VibGUsIGEsIGIp KTsKLSsgICAgICAgIH0gYnJlYWs7Ci0rICAgICAgICBjYXNlIDIwMDogZm9yIChpbnQgaSA9IDA7 IGkgPCA0OyBpKyspIHsgIC8vIHh2bWluc3AKLSsgICAgICAgICAgZmxvYXQgYSA9IGdldEYzMihh YiwgaSksIGIgPSBnZXRGMzIoYmIsIGkpOwotKyAgICAgICAgICBzZXRGMzIocmJfYnl0ZXMsIGks IFhWX01JTihmbG9hdCwgYSwgYikpOwotKyAgICAgICAgfSBicmVhazsKLSsgICAgICAgIGNhc2Ug MjMyOiBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeyAgLy8geHZtaW5kcAotKyAgICAgICAg ICBkb3VibGUgYSA9IGdldEY2NChhYiwgaSksIGIgPSBnZXRGNjQoYmIsIGkpOwotKyAgICAgICAg ICBzZXRGNjQocmJfYnl0ZXMsIGksIFhWX01JTihkb3VibGUsIGEsIGIpKTsKLSsgICAgICAgIH0g YnJlYWs7Ci0rICAgICAgICAjdW5kZWYgWFZfTUFYCi0rICAgICAgICAjdW5kZWYgWFZfTUlOCi0r ICAgICAgICBkZWZhdWx0OgotKyAgICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKLSsg ICAgICAgICAgICAgICJ4diBmbG9hdCBkaXNwYXRjaCBtaXNzaW5nIDgtYml0IFhPPSV1IChpbnN0 ciAweCUwOHgpIiwKLSsgICAgICAgICAgICAgIHhvMywgaW5zdHItPmluc3RydWN0aW9uQml0cygp KTsKLSsgICAgICB9Ci0rICAgICAgc2V0VlNSMTI4KHh0LCByYl9ieXRlcyk7Ci0rICAgICAgYnJl YWs7Ci0rICAgIH0KLSsKLSsgICAgLy8gPT09IFhYMy1mb3JtIGZ1c2VkIG11bHRpcGx5LWFkZCAo My1zb3VyY2U6IFhUIGlzIGFsc28gaW5wdXQpID09PQotKyAgICAvLwotKyAgICAvLyAgIHh2bWFk ZGFzcCBYVCxYQSxYQjogIFhUID0gKFhBICogWEIpICsgWFQgICAgICAgKGZ1c2VkIG1hZGQpCi0r ICAgIC8vICAgeHZtYWRkYWRwIFhULFhBLFhCOiAgc2FtZSBmb3IgZjY0Ci0rICAgIC8vICAgeHZu bXN1YmFzcCBYVCxYQSxYQjogWFQgPSAtKChYQSAqIFhCKSAtIFhUKSA9IFhUIC0gKFhBICogWEIp Ci0rICAgIC8vICAgeHZubXN1YmFkcCBYVCxYQSxYQjogc2FtZSBmb3IgZjY0Ci0rICAgIC8vCi0r ICAgIC8vIEVuY29kaW5ncyAoZWFjaCArQVgpOiBYTzgg4oaSIFhPOSBwYWlycwotKyAgICAvLyAg IHh2bWFkZGFzcCAgUFBDX3h2bWFkZGFzcD0weEYwMDAwMjA4ICAgWE84PTY1ICDihpIgWE85IDEz MC8xMzEKLSsgICAgLy8gICB4dm1hZGRhZHAgIFBQQ194dm1hZGRhZHA9MHhGMDAwMDMwOCAgIFhP OD05NyAg4oaSIFhPOSAxOTQvMTk1Ci0rICAgIC8vICAgeHZubXN1YmFzcCBQUENfeHZubXN1YmFz cD0weEYwMDAwNjg4ICBYTzg9MjA5IOKGkiBYTzkgNDE4LzQxOQotKyAgICAvLyAgIHh2bm1zdWJh ZHAgUFBDX3h2bm1zdWJhZHA9MHhGMDAwMDc4OCAgWE84PTI0MSDihpIgWE85IDQ4Mi80ODMKLSsg ICAgLy8gc3RkOjpmbWEgZ2l2ZXMgSUVFRS1jb3JyZWN0IHNpbmdsZS1yb3VuZGluZyBiZWhhdmlv dXIgbWF0Y2hpbmcgdGhlCi0rICAgIC8vIFBvd2VyIElTQSBkZWZpbml0aW9uIG9mIHRoZXNlIGZ1 c2VkIGZvcm1zLgotKyAgICBjYXNlIDEzMDogY2FzZSAxMzE6ICAgICAgLy8geHZtYWRkYXNwCi0r ICAgIGNhc2UgMTk0OiBjYXNlIDE5NTogICAgICAvLyB4dm1hZGRhZHAKLSsgICAgY2FzZSA0MTg6 IGNhc2UgNDE5OiAgICAgIC8vIHh2bm1zdWJhc3AKLSsgICAgY2FzZSA0ODI6IGNhc2UgNDgzOiB7 ICAgIC8vIHh2bm1zdWJhZHAKLSsgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgw KSA8PCA1KSk7Ci0rICAgICAgdWludDMyX3QgcmEgPSBpbnN0ci0+cmFWYWx1ZSgpOwotKyAgICAg IGludCB4YSA9IGludChyYSB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDIpICYgMSkg PDwgNSk7Ci0rICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRz KCkgPj4gMSkgJiAxKSA8PCA1KTsKLSsgICAgICB1aW50OF90IGFiWzE2XSwgYmJbMTZdLCB0Ylsx Nl07Ci0rICAgICAgZ2V0VlNSMTI4KHhhLCBhYik7Ci0rICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7 Ci0rICAgICAgZ2V0VlNSMTI4KHh0LCB0Yik7ICAvLyBYVCBpcyBhbHNvIGFuIGlucHV0IChhY2N1 bXVsYXRvcikuCi0rICAgICAgYm9vbCBpc1NwID0gKHhvID09IDEzMCB8fCB4byA9PSAxMzEgfHwg eG8gPT0gNDE4IHx8IHhvID09IDQxOSk7Ci0rICAgICAgYm9vbCBpc05tc3ViID0gKHhvID09IDQx OCB8fCB4byA9PSA0MTkgfHwgeG8gPT0gNDgyIHx8IHhvID09IDQ4Myk7Ci0rICAgICAgYXV0byBy ZEYzMiA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50IGkpIC0+IGZsb2F0IHsKLSsgICAgICAgIHVpbnQz Ml90IGIgPSAodWludDMyX3QpYnVmW2kgKiA0XSB8Ci0rICAgICAgICAgICAgICAgICAgICAgKCh1 aW50MzJfdClidWZbaSAqIDQgKyAxXSA8PCA4KSB8Ci0rICAgICAgICAgICAgICAgICAgICAgKCh1 aW50MzJfdClidWZbaSAqIDQgKyAyXSA8PCAxNikgfAotKyAgICAgICAgICAgICAgICAgICAgICgo dWludDMyX3QpYnVmW2kgKiA0ICsgM10gPDwgMjQpOwotKyAgICAgICAgZmxvYXQgZjsgbWVtY3B5 KCZmLCAmYiwgc2l6ZW9mKGYpKTsgcmV0dXJuIGY7Ci0rICAgICAgfTsKLSsgICAgICBhdXRvIHdy RjMyID0gW10odWludDhfdCogYnVmLCBpbnQgaSwgZmxvYXQgZikgewotKyAgICAgICAgdWludDMy X3QgYjsgbWVtY3B5KCZiLCAmZiwgc2l6ZW9mKGIpKTsKLSsgICAgICAgIGJ1ZltpKjRdPSh1aW50 OF90KWI7IGJ1ZltpKjQrMV09KHVpbnQ4X3QpKGI+PjgpOwotKyAgICAgICAgYnVmW2kqNCsyXT0o dWludDhfdCkoYj4+MTYpOyBidWZbaSo0KzNdPSh1aW50OF90KShiPj4yNCk7Ci0rICAgICAgfTsK LSsgICAgICBhdXRvIHJkRjY0ID0gW10odWludDhfdCogYnVmLCBpbnQgaSkgLT4gZG91YmxlIHsK LSsgICAgICAgIHVpbnQ2NF90IGIgPSAwOwotKyAgICAgICAgZm9yIChpbnQgaz0wO2s8ODtrKysp IGIgfD0gKCh1aW50NjRfdClidWZbaSo4K2tdKTw8KGsqOCk7Ci0rICAgICAgICBkb3VibGUgZDsg bWVtY3B5KCZkLCAmYiwgc2l6ZW9mKGQpKTsgcmV0dXJuIGQ7Ci0rICAgICAgfTsKLSsgICAgICBh dXRvIHdyRjY0ID0gW10odWludDhfdCogYnVmLCBpbnQgaSwgZG91YmxlIGQpIHsKLSsgICAgICAg IHVpbnQ2NF90IGI7IG1lbWNweSgmYiwgJmQsIHNpemVvZihiKSk7Ci0rICAgICAgICBmb3IgKGlu dCBrPTA7azw4O2srKykgYnVmW2kqOCtrXT0odWludDhfdCkoYj4+KGsqOCkpOwotKyAgICAgIH07 Ci0rICAgICAgdWludDhfdCByZXN1bHRbMTZdOwotKyAgICAgIGlmIChpc1NwKSB7Ci0rICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotKyAgICAgICAgICBmbG9hdCBhID0gcmRG MzIoYWIsIGkpLCBiID0gcmRGMzIoYmIsIGkpLCB0ID0gcmRGMzIodGIsIGkpOwotKyAgICAgICAg ICAvLyBtYWRkOiAgdCArIGEqYiA7ICBubXN1YjogLShhKmIgLSB0KSA9IHQgLSBhKmIgPSBzdGQ6 OmZtYShhLGIsLXQpIG5lZ2F0ZWQuCi0rICAgICAgICAgIGZsb2F0IG91dCA9IGlzTm1zdWIgPyAt c3RkOjpmbWEoYSwgYiwgLXQpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgc3Rk OjpmbWEoYSwgYiwgdCk7Ci0rICAgICAgICAgIHdyRjMyKHJlc3VsdCwgaSwgb3V0KTsKLSsgICAg ICAgIH0KLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBp KyspIHsKLSsgICAgICAgICAgZG91YmxlIGEgPSByZEY2NChhYiwgaSksIGIgPSByZEY2NChiYiwg aSksIHQgPSByZEY2NCh0YiwgaSk7Ci0rICAgICAgICAgIGRvdWJsZSBvdXQgPSBpc05tc3ViID8g LXN0ZDo6Zm1hKGEsIGIsIC10KQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICBz dGQ6OmZtYShhLCBiLCB0KTsKLSsgICAgICAgICAgd3JGNjQocmVzdWx0LCBpLCBvdXQpOwotKyAg ICAgICAgfQotKyAgICAgIH0KLSsgICAgICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBNT1pfQ1JBU0hfVU5TQUZF X1BSSU5URigKLSsgICAgICAgICAgImRlY29kZVZTWDogdW5pbXBsZW1lbnRlZCBYTz0ldSAoaW5z dHJ1Y3Rpb24gMHglMDh4KSIsIHhvLAotKyAgICAgICAgICBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRz KCkpOwotKyAgfQotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIFBvd2VyIElT QSB2My4xIHByZWZpeGVkIGluc3RydWN0aW9ucyAoUE9XRVIxMCkuCi0rLy8gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsvLwotKy8vIEEgcHJlZml4ZWQgaW5zdHJ1Y3Rpb24gaXMgOCBieXRlczogYSA0 LWJ5dGUgcHJlZml4IHdvcmQgKHByaW1hcnkgb3Bjb2RlIDEpCi0rLy8gZm9sbG93ZWQgYnkgYSA0 LWJ5dGUgc3VmZml4IHdvcmQuIFByZWZpeCBhbmQgc3VmZml4IG11c3QgbGllIGluIHRoZSBzYW1l Ci0rLy8gNjQtYnl0ZSBhbGlnbmVkIGJsb2NrIOKAlCB0aGUgSklUIG11c3QgZ3VhcmFudGVlIHRo aXMgd2hlbiBlbWl0dGluZzsgdGhlIHNpbQotKy8vIGFzc2VydHMuCi0rLy8KLSsvLyBQcmVmaXgg d29yZCBsYXlvdXQgKEJFIGJpdCBudW1iZXJpbmcpOgotKy8vICAgWzAuLjVdICAgcHJpbWFyeSBv cGNvZGUgPSAxCi0rLy8gICBbNi4uN10gICBUeXBlICgwMCA9IDhMUywgMTAgPSBNTFMg4oCUIG9u bHkgZm9ybXMgd2UgaW1wbGVtZW50KQotKy8vICAgWzguLjEwXSAgcmVzZXJ2ZWQgKG11c3QgYmUg MCkKLSsvLyAgIFsxMV0gICAgIFIgKDEgPSBQQy1yZWxhdGl2ZTsgUkEgbXVzdCBiZSAwKQotKy8v ICAgWzEyLi4xM10gcmVzZXJ2ZWQgKG11c3QgYmUgMCkKLSsvLyAgIFsxNC4uMzFdIGQwIChoaWdo IDE4IGJpdHMgb2YgdGhlIDM0LWJpdCBzaWduZWQgaW1tZWRpYXRlKQotKy8vCi0rLy8gU3VmZml4 IHdvcmQgKE1MUy84TFMgZm9ybSwgR1BSLXRhcmdldCBpbnN0cnVjdGlvbnMgbGlrZSBwYWRkaS9w bGQpOgotKy8vICAgWzAuLjVdICAgc3VmZml4IHByaW1hcnkgb3Bjb2RlIChzZWxlY3RzIHRoZSBh Y3R1YWwgaW5zdHJ1Y3Rpb24pCi0rLy8gICBbNi4uMTBdICBSVCAob3IgUlMgZm9yIHN0b3JlcykK LSsvLyAgIFsxMS4uMTVdIFJBCi0rLy8gICBbMTYuLjMxXSBkMSAobG93IDE2IGJpdHMgb2YgaW1t ZWRpYXRlKQotKy8vCi0rLy8gU3VmZml4IHdvcmQgKDhMUyBwbHh2IHF1aXJrKTogdGhlIHN1ZmZp eCBvcGNvZGUgZmllbGQgaXMgb25seSA1IGJpdHMKLSsvLyB3aWRlIGFuZCBiaXQgWzVdIGhvbGRz IFRYLCB0aGUgaGlnaCBiaXQgb2YgdGhlIDYtYml0IFhUIFZTUiBudW1iZXI6Ci0rLy8gICBbMC4u NF0gICBwbHh2IHN1ZmZpeCBvcGNvZGUgPSAxMTAwMSAoPSAyNSkKLSsvLyAgIFs1XSAgICAgIFRY Ci0rLy8gICBbNi4uMTBdICBUCi0rLy8gICBbMTEuLjE1XSBSQQotKy8vICAgWzE2Li4zMV0gZDEK LSsvLyBDb21iaW5lZDogWFQgPSAoVFggPDwgNSkgfCBULiAoRXF1aXZhbGVudDogZnVsbCA2LWJp dCBmaWVsZCBhdCBbMC4uNV0KLSsvLyBpcyAwYjExMDAxKFRYKSDigJQgdmFsdWVzIDUwIG9yIDUx IGluIG91ciBMRSBiaXRzIDMxLi4yNi4pCi0rLy8KLSsvLyBDb21iaW5lZCBpbW1lZGlhdGU6IFNJ ID0gc2lnbl9leHRlbmQoKGQwIDw8IDE2KSB8IGQxLCAzNCkuCi0rLy8gRUEgd2hlbiBSPTE6IGFk ZHJlc3Mtb2YtcHJlZml4ICsgU0kuIChSQSBtdXN0IGJlIDAuKQotKy8vIEVBIHdoZW4gUj0wOiAo UkEgPT0gMCA/IDAgOiBHUFJbUkFdKSArIFNJLgotKy8vCi0rLy8gU3VmZml4IG9wY29kZXMgaW1w bGVtZW50ZWQgaGVyZToKLSsvLyAgIE1MUyAoVHlwZSAyKSAvIHN1ZmZpeD0xNCAgcGFkZGkKLSsv LyAgIE1MUyAoVHlwZSAyKSAvIHN1ZmZpeD00OCAgcGxmcyAgIChsb2FkIEZQIHNpbmdsZSwgd2lk ZW5zIHRvIGRvdWJsZSkKLSsvLyAgIE1MUyAoVHlwZSAyKSAvIHN1ZmZpeD01MCAgcGxmZCAgIChs b2FkIEZQIGRvdWJsZSkKLSsvLyAgIDhMUyAoVHlwZSAwKSAvIHN1ZmZpeD01NyAgcGxkCi0rLy8g ICA4TFMgKFR5cGUgMCkgLyA1LWJpdCBzdWZmaXg9MjUsIGJpdCAyNiA9IFRYICBwbHh2Ci0rLy8K LSsvLyBWZXJpZmljYXRpb24gcmVjaXBlIHdoZW4gYWRkaW5nIG1vcmU6IGFzc2VtYmxlIHdpdGgg YGdjYyAtbWNwdT1wb3dlcjEwCi0rLy8gLWNgIChvciBjbGFuZykgYW5kIGNvbXBhcmUgdGhlIGVt aXR0ZWQgYnl0ZXMgYWdhaW5zdCB0aGUgZW5jb2RlcjsgZW5jb2RlCi0rLy8gaW4gYSBzbWFsbCBp bmxpbmUtYXNtIHByb2dyYW0gYW5kIHN0ZXAgdGhyb3VnaCB1bmRlciB0aGlzIHNpbS4KLSsKLSt2 b2lkIFNpbXVsYXRvcjo6ZGVjb2RlUHJlZml4ZWQoU2ltSW5zdHJ1Y3Rpb24qIHByZWZpeCkgewot KyAgLy8gUHJlZml4IGFuZCBzdWZmaXggbXVzdCByZXNpZGUgaW4gdGhlIHNhbWUgNjQtYnl0ZSBi bG9jay4KLSsgIHVpbnQ2NF90IHByZWZpeEFkZHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ2NF90 PihwcmVmaXgpOwotKyAgTU9aX0FTU0VSVCgocHJlZml4QWRkciAmIDYzKSA8PSA1NiwKLSsgICAg ICAgICAgICAgIlBPV0VSMTAgcHJlZml4ZWQgaW5zdHJ1Y3Rpb24gY3Jvc3NlcyA2NC1ieXRlIGJv dW5kYXJ5Iik7Ci0rCi0rICBTaW1JbnN0cnVjdGlvbiogc3VmZml4ID0gcmVpbnRlcnByZXRfY2Fz dDxTaW1JbnN0cnVjdGlvbio+KAotKyAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHBy ZWZpeCkgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0rCi0rICB1aW50MzJfdCB0eXBl ID0gcHJlZml4LT5iaXRzKDI1LCAyNCk7Ci0rICB1aW50MzJfdCBSID0gcHJlZml4LT5iaXQoMjAp OwotKyAgdWludDMyX3QgZDAgPSBwcmVmaXgtPmJpdHMoMTcsIDApOyAgLy8gMTggYml0cwotKyAg dWludDMyX3Qgc3VmZml4T3A2ID0gc3VmZml4LT5iaXRzKDMxLCAyNik7ICAvLyA2LWJpdCBmb3Jt IChwYWRkaSwgcGxkKQotKyAgdWludDMyX3Qgc3VmZml4T3A1ID0gc3VmZml4LT5iaXRzKDMxLCAy Nyk7ICAvLyA1LWJpdCBmb3JtIChwbHh2KQotKyAgdWludDMyX3QgcGx4dlRYID0gc3VmZml4LT5i aXQoMjYpOwotKyAgdWludDMyX3QgcnQgPSBzdWZmaXgtPnJ0VmFsdWUoKTsKLSsgIHVpbnQzMl90 IHJhID0gc3VmZml4LT5yYVZhbHVlKCk7Ci0rICB1aW50MzJfdCBkMSA9IHN1ZmZpeC0+dWltbTE2 VmFsdWUoKTsKLSsKLSsgIC8vIFJlYXNzZW1ibGUgMzQtYml0IHNpZ25lZCBkaXNwbGFjZW1lbnQu Ci0rICBpbnQ2NF90IGltbTM0ID0gKHN0YXRpY19jYXN0PGludDY0X3Q+KGQwKSA8PCAxNikgfCBk MTsKLSsgIGltbTM0ID0gKGltbTM0IDw8IDMwKSA+PiAzMDsgIC8vIHNpZ24tZXh0ZW5kIGZyb20g Yml0IDMzCi0rCi0rICAvLyBSPTEgZm9ybXMgcmVxdWlyZSBSQT0wIHBlciB0aGUgSVNBLgotKyAg TU9aX0FTU0VSVCghUiB8fCByYSA9PSAwLAotKyAgICAgICAgICAgICAiUE9XRVIxMCBwcmVmaXhl ZCBSPTEgZm9ybSByZXF1aXJlcyBSQT0wIik7Ci0rCi0rICAvLyBUeXBlIDIgPSBNTFMsIFR5cGUg MCA9IDhMUy4gT3RoZXIgdHlwZXMgYXJlIHJlc2VydmVkIGhlcmUuCi0rICBpZiAodHlwZSA9PSAy ICYmIHN1ZmZpeE9wNiA9PSAxNCkgewotKyAgICAvLyBwYWRkaSBSVCwgUkEsIFNJLCBSIChNTFMp Ci0rICAgIGludDY0X3QgYmFzZSA9IFIgPyBzdGF0aWNfY2FzdDxpbnQ2NF90PihwcmVmaXhBZGRy KQotKyAgICAgICAgICAgICAgICAgICAgIDogKHJhID09IDAgPyAwIDogZ2V0UmVnaXN0ZXIocmEp KTsKLSsgICAgc2V0UmVnaXN0ZXIocnQsIGJhc2UgKyBpbW0zNCk7Ci0rICB9IGVsc2UgaWYgKHR5 cGUgPT0gMCAmJiBzdWZmaXhPcDYgPT0gNTcpIHsKLSsgICAgLy8gcGxkIFJULCBEKFJBKSwgUiAo OExTKQotKyAgICB1aW50NjRfdCBlYSA9IFIgPyBwcmVmaXhBZGRyICsgc3RhdGljX2Nhc3Q8dWlu dDY0X3Q+KGltbTM0KQotKyAgICAgICAgICAgICAgICAgICAgOiAocmEgPT0gMCA/IDAgOiBnZXRS ZWdpc3RlcihyYSkpICsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVp bnQ2NF90PihpbW0zNCk7Ci0rICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCA4KSkgewot KyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZWFkRFcoZWEsIHByZWZpeCkpOwotKyAgICB9Ci0rICB9 IGVsc2UgaWYgKHR5cGUgPT0gMiAmJiBzdWZmaXhPcDYgPT0gNTApIHsKLSsgICAgLy8gcGxmZCBG UlQsIEQoUkEpLCBSIChNTFMpIOKAlCBsb2FkIDgtYnl0ZSBkb3VibGUgaW50byBGUFIuCi0rICAg IHVpbnQ2NF90IGVhID0gUiA/IHByZWZpeEFkZHIgKyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1t MzQpCi0rICAgICAgICAgICAgICAgICAgICA6IChyYSA9PSAwID8gMCA6IGdldFJlZ2lzdGVyKHJh KSkgKwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGlt bTM0KTsKLSsgICAgaWYgKCFoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDgpKSB7Ci0rICAgICAgc2V0 RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlYWREKGVhLCBwcmVmaXgpKTsKLSsgICAgfQotKyAgfSBl bHNlIGlmICh0eXBlID09IDIgJiYgc3VmZml4T3A2ID09IDQ4KSB7Ci0rICAgIC8vIHBsZnMgRlJU LCBEKFJBKSwgUiAoTUxTKSDigJQgbG9hZCA0LWJ5dGUgc2luZ2xlLCB3aWRlbiBOYU4tcHJlc2Vy dmluZy4KLSsgICAgdWludDY0X3QgZWEgPSBSID8gcHJlZml4QWRkciArIHN0YXRpY19jYXN0PHVp bnQ2NF90PihpbW0zNCkKLSsgICAgICAgICAgICAgICAgICAgIDogKHJhID09IDAgPyAwIDogZ2V0 UmVnaXN0ZXIocmEpKSArCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1 aW50NjRfdD4oaW1tMzQpOwotKyAgICBpZiAoIWhhbmRsZVdhc21TZWdGYXVsdChlYSwgNCkpIHsK LSsgICAgICBmbG9hdCB2YWwgPSAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KGVhKTsKLSsgICAg ICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcHJvbW90ZUZsb2F0UHJlc2VydmluZ05hTih2YWwp KTsKLSsgICAgfQotKyAgfSBlbHNlIGlmICh0eXBlID09IDAgJiYgc3VmZml4T3A1ID09IDI1KSB7 Ci0rICAgIC8vIHBseHYgWFQsIEQoUkEpLCBSICg4TFMpIOKAlCBYVCA9IChUWCA8PCA1KSB8IFQs IFRYIGF0IHN1ZmZpeCBiaXQgMjYuCi0rICAgIGludCB4dCA9IHN0YXRpY19jYXN0PGludD4ocnQg fCAocGx4dlRYIDw8IDUpKTsKLSsgICAgdWludDY0X3QgZWEgPSBSID8gcHJlZml4QWRkciArIHN0 YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCkKLSsgICAgICAgICAgICAgICAgICAgIDogKHJhID09 IDAgPyAwIDogZ2V0UmVnaXN0ZXIocmEpKSArCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBz dGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpOwotKyAgICBpZiAoIWhhbmRsZVdhc21TZWdGYXVs dChlYSwgMTYpKSB7Ci0rICAgICAgdWludDhfdCBidWZbMTZdOwotKyAgICAgIG1lbWNweShidWYs IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KGVhKSwgMTYpOwotKyAgICAgIHNldFZTUjEy OCh4dCwgYnVmKTsKLSsgICAgfQotKyAgfSBlbHNlIGlmICh0eXBlID09IDAgJiYgc3VmZml4T3A2 ID09IDYxKSB7Ci0rICAgIC8vIHBzdGQgUlMsIEQoUkEpLCBSICg4TFMpIOKAlCBzdG9yZSBkb3Vi bGV3b3JkLgotKyAgICB1aW50NjRfdCBlYSA9IFIgPyBwcmVmaXhBZGRyICsgc3RhdGljX2Nhc3Q8 dWludDY0X3Q+KGltbTM0KQotKyAgICAgICAgICAgICAgICAgICAgOiAocmEgPT0gMCA/IDAgOiBn ZXRSZWdpc3RlcihyYSkpICsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0 PHVpbnQ2NF90PihpbW0zNCk7Ci0rICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCA4KSkg ewotKyAgICAgIHdyaXRlRFcoZWEsIGdldFJlZ2lzdGVyKHJ0KSwgcHJlZml4KTsKLSsgICAgfQot KyAgfSBlbHNlIGlmICh0eXBlID09IDIgJiYgc3VmZml4T3A2ID09IDU0KSB7Ci0rICAgIC8vIHBz dGZkIEZSUywgRChSQSksIFIgKE1MUykg4oCUIHN0b3JlIGRvdWJsZS4KLSsgICAgdWludDY0X3Qg ZWEgPSBSID8gcHJlZml4QWRkciArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCkKLSsgICAg ICAgICAgICAgICAgICAgIDogKHJhID09IDAgPyAwIDogZ2V0UmVnaXN0ZXIocmEpKSArCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpOwotKyAg ICBpZiAoIWhhbmRsZVdhc21TZWdGYXVsdChlYSwgOCkpIHsKLSsgICAgICB3cml0ZUQoZWEsIGdl dEZwdVJlZ2lzdGVyRG91YmxlKHJ0KSwgcHJlZml4KTsKLSsgICAgfQotKyAgfSBlbHNlIGlmICh0 eXBlID09IDIgJiYgc3VmZml4T3A2ID09IDUyKSB7Ci0rICAgIC8vIHBzdGZzIEZSUywgRChSQSks IFIgKE1MUykg4oCUIHN0b3JlIHNpbmdsZSAobmFycm93IGZyb20gZG91YmxlIGluIEZQUikuCi0r ICAgIHVpbnQ2NF90IGVhID0gUiA/IHByZWZpeEFkZHIgKyBzdGF0aWNfY2FzdDx1aW50NjRfdD4o aW1tMzQpCi0rICAgICAgICAgICAgICAgICAgICA6IChyYSA9PSAwID8gMCA6IGdldFJlZ2lzdGVy KHJhKSkgKwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+ KGltbTM0KTsKLSsgICAgaWYgKCFoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDQpKSB7Ci0rICAgICAg ZG91YmxlIGR2YWwgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShydCk7Ci0rICAgICAgKnJlaW50ZXJw cmV0X2Nhc3Q8ZmxvYXQqPihlYSkgPSBkZW1vdGVEb3VibGVQcmVzZXJ2aW5nTmFOKGR2YWwpOwot KyAgICB9Ci0rICB9IGVsc2UgaWYgKHR5cGUgPT0gMCAmJiBzdWZmaXhPcDUgPT0gMjcpIHsKLSsg ICAgLy8gcHN0eHYgWFMsIEQoUkEpLCBSICg4TFMpIOKAlCBYUyA9IChTWCA8PCA1KSB8IFMsIFNY IGF0IHN1ZmZpeCBiaXQgMjYuCi0rICAgIGludCB4cyA9IHN0YXRpY19jYXN0PGludD4ocnQgfCAo cGx4dlRYIDw8IDUpKTsKLSsgICAgdWludDY0X3QgZWEgPSBSID8gcHJlZml4QWRkciArIHN0YXRp Y19jYXN0PHVpbnQ2NF90PihpbW0zNCkKLSsgICAgICAgICAgICAgICAgICAgIDogKHJhID09IDAg PyAwIDogZ2V0UmVnaXN0ZXIocmEpKSArCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0 aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpOwotKyAgICBpZiAoIWhhbmRsZVdhc21TZWdGYXVsdChl YSwgMTYpKSB7Ci0rICAgICAgdWludDhfdCBidWZbMTZdOwotKyAgICAgIGdldFZTUjEyOCh4cywg YnVmKTsKLSsgICAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZWEpLCBidWYsIDE2 KTsKLSsgICAgfQotKyAgfSBlbHNlIHsKLSsgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoCi0r ICAgICAgICAiZGVjb2RlUHJlZml4ZWQ6IHVuaW1wbGVtZW50ZWQgdHlwZT0ldSAiCi0rICAgICAg ICAiKHByZWZpeCAweCUwOHgsIHN1ZmZpeCAweCUwOHgpIiwKLSsgICAgICAgIHR5cGUsIHByZWZp eC0+aW5zdHJ1Y3Rpb25CaXRzKCksIHN1ZmZpeC0+aW5zdHJ1Y3Rpb25CaXRzKCkpOwotKyAgfQot KwotKyAgLy8gQWR2YW5jZSBwYXN0IHRoZSBmdWxsIDgtYnl0ZSBwcmVmaXhlZCBpbnN0cnVjdGlv biB1bmxlc3MgYSBoYW5kbGVyCi0rICAvLyBhbHJlYWR5IHJlZGlyZWN0ZWQgdGhlIFBDLiBUaGUg Y2FsbGVyIChpbnN0cnVjdGlvbkRlY29kZSkgcmV0dXJucwotKyAgLy8gaW1tZWRpYXRlbHkgYWZ0 ZXIgdXMsIHNvIGl0cyA0LWJ5dGUgdHJhaWxpbmcgYWR2YW5jZSBpcyBza2lwcGVkLgotKyAgaWYg KCFwY19tb2RpZmllZF8pIHsKLSsgICAgc2V0X3BjKHN0YXRpY19jYXN0PGludDY0X3Q+KHByZWZp eEFkZHIpICsgMiAqIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKLSsgIH0KLSt9Ci0rCi0r Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsvLyBUb3AtbGV2ZWwgaW5zdHJ1Y3Rpb24gZGVjb2Rl ci4KLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKwotK3ZvaWQgU2ltdWxhdG9yOjppbnN0cnVj dGlvbkRlY29kZShTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKLSsgIGlmICghU2ltdWxhdG9yUHJv Y2Vzczo6SUNhY2hlQ2hlY2tpbmdEaXNhYmxlQ291bnQpIHsKLSsgICAgQXV0b0xvY2tTaW11bGF0 b3JDYWNoZSBhbHM7Ci0rICAgIFNpbXVsYXRvclByb2Nlc3M6OmNoZWNrSUNhY2hlTG9ja2VkKGlu c3RyKTsKLSsgIH0KLSsgIHBjX21vZGlmaWVkXyA9IGZhbHNlOwotKwotKyAgdWludDMyX3QgaW5z dHJCaXRzID0gaW5zdHItPmluc3RydWN0aW9uQml0cygpOwotKwotKyAgLy8gQ2hlY2sgZm9yIGtD YWxsUmVkaXJJbnN0ciBmaXJzdCAoUFBDX3N0b3AgPSAweDRDMDAwMkU0KS4KLSsgIGlmIChpbnN0 ckJpdHMgPT0ga0NhbGxSZWRpckluc3RyKSB7Ci0rICAgIHNvZnR3YXJlSW50ZXJydXB0KGluc3Ry KTsKLSsgICAgaWYgKCFwY19tb2RpZmllZF8pIHsKLSsgICAgICBzZXRfcGMocmVpbnRlcnByZXRf Y2FzdDxpbnQ2NF90PihpbnN0cikgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0rICAg IH0KLSsgICAgcmV0dXJuOwotKyAgfQotKwotKyAgLy8gQ2hlY2sgZm9yIFBQQ190cmFwICgweDdG RTAwMDA4KS4KLSsgIGlmIChpbnN0ckJpdHMgPT0gMHg3RkUwMDAwOCkgewotKyAgICBzb2Z0d2Fy ZUludGVycnVwdChpbnN0cik7Ci0rICAgIGlmICghcGNfbW9kaWZpZWRfKSB7Ci0rICAgICAgc2V0 X3BjKHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oaW5zdHIpICsgU2ltSW5zdHJ1Y3Rpb246OmtJ bnN0clNpemUpOwotKyAgICB9Ci0rICAgIHJldHVybjsKLSsgIH0KLSsKLSsgIHVpbnQzMl90IG9w Y29kZSA9IGluc3RyLT5vcGNvZGUoKTsKLSsKLSsgIC8vIFBvd2VyIElTQSB2My4xIHByZWZpeGVk IGluc3RydWN0aW9uczogcHJpbWFyeSBvcGNvZGUgMSBtYXJrcyBhCi0rICAvLyA0LWJ5dGUgcHJl Zml4IHdvcmQgZm9sbG93ZWQgYnkgYSA0LWJ5dGUgc3VmZml4IHdvcmQuIGRlY29kZVByZWZpeGVk Ci0rICAvLyBhZHZhbmNlcyB0aGUgUEMgYnkgdGhlIGZ1bGwgOCBieXRlcyAob3IgbGVhdmVzIGl0 IG1vZGlmaWVkIGZvcgotKyAgLy8gUEMtcmVsYXRpdmUgc2lkZS1lZmZlY3RzKS4KLSsgIGlmIChv cGNvZGUgPT0gMSkgewotKyAgICBkZWNvZGVQcmVmaXhlZChpbnN0cik7Ci0rICAgIHJldHVybjsK LSsgIH0KLSsKLSsgIHN3aXRjaCAob3Bjb2RlKSB7Ci0rICAgIC8vIEQtZm9ybSBBTFUKLSsgICAg Y2FzZSAzOiAgIC8vIHR3aQotKyAgICBjYXNlIDc6ICAgLy8gbXVsbGkKLSsgICAgY2FzZSA4OiAg IC8vIHN1YmZpYwotKyAgICBjYXNlIDEwOiAgLy8gY21wbGkKLSsgICAgY2FzZSAxMTogIC8vIGNt cGkKLSsgICAgY2FzZSAxMjogIC8vIGFkZGljCi0rICAgIGNhc2UgMTM6ICAvLyBhZGRpYy4KLSsg ICAgY2FzZSAxNDogIC8vIGFkZGkKLSsgICAgY2FzZSAxNTogIC8vIGFkZGlzCi0rICAgIGNhc2Ug MjQ6ICAvLyBvcmkKLSsgICAgY2FzZSAyNTogIC8vIG9yaXMKLSsgICAgY2FzZSAyNjogIC8vIHhv cmkKLSsgICAgY2FzZSAyNzogIC8vIHhvcmlzCi0rICAgIGNhc2UgMjg6ICAvLyBhbmRpLgotKyAg ICBjYXNlIDI5OiAgLy8gYW5kaXMuCi0rICAgICAgZGVjb2RlREZvcm1BTFUoaW5zdHIpOwotKyAg ICAgIGJyZWFrOwotKwotKyAgICAvLyBELWZvcm0gbG9hZHMKLSsgICAgY2FzZSAzMjogIC8vIGx3 egotKyAgICBjYXNlIDMzOiAgLy8gbHd6dQotKyAgICBjYXNlIDM0OiAgLy8gbGJ6Ci0rICAgIGNh c2UgMzU6ICAvLyBsYnp1Ci0rICAgIGNhc2UgNDA6ICAvLyBsaHoKLSsgICAgY2FzZSA0MTogIC8v IGxoenUKLSsgICAgY2FzZSA0MjogIC8vIGxoYQotKyAgICBjYXNlIDQzOiAgLy8gbGhhdQotKyAg ICBjYXNlIDQ4OiAgLy8gbGZzCi0rICAgIGNhc2UgNDk6ICAvLyBsZnN1Ci0rICAgIGNhc2UgNTA6 ICAvLyBsZmQKLSsgICAgY2FzZSA1MTogIC8vIGxmZHUKLSsgICAgICBkZWNvZGVERm9ybUxvYWQo aW5zdHIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICAvLyBELWZvcm0gc3RvcmVzCi0rICAgIGNh c2UgMzY6ICAvLyBzdHcKLSsgICAgY2FzZSAzODogIC8vIHN0YgotKyAgICBjYXNlIDM5OiAgLy8g c3RidQotKyAgICBjYXNlIDQ0OiAgLy8gc3RoCi0rICAgIGNhc2UgNDU6ICAvLyBzdGh1Ci0rICAg IGNhc2UgNTI6ICAvLyBzdGZzCi0rICAgIGNhc2UgNTM6ICAvLyBzdGZzdQotKyAgICBjYXNlIDU0 OiAgLy8gc3RmZAotKyAgICBjYXNlIDU1OiAgLy8gc3RmZHUKLSsgICAgICBkZWNvZGVERm9ybVN0 b3JlKGluc3RyKTsKLSsgICAgICBicmVhazsKLSsKLSsgICAgLy8gRFMtZm9ybQotKyAgICBjYXNl IDU4OiAgLy8gbGQsIGxkdSwgbHdhCi0rICAgIGNhc2UgNjI6ICAvLyBzdGQsIHN0ZHUKLSsgICAg ICBkZWNvZGVEU0Zvcm0oaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICAvLyBCLWZvcm0g Y29uZGl0aW9uYWwgYnJhbmNoCi0rICAgIGNhc2UgMTY6Ci0rICAgICAgZGVjb2RlQnJhbmNoKGlu c3RyKTsKLSsgICAgICBicmVhazsKLSsKLSsgICAgLy8gU0MgKHN5c3RlbSBjYWxsKSAtIHVudXNl ZCBpbiBKSVQKLSsgICAgY2FzZSAxNzoKLSsgICAgICBNT1pfQ1JBU0goIlNpbXVsYXRvcjogc2Mg aW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICAvLyBJ LWZvcm0gdW5jb25kaXRpb25hbCBicmFuY2gKLSsgICAgY2FzZSAxODoKLSsgICAgICBkZWNvZGVC cmFuY2goaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICAvLyBYTC1mb3JtIChicmFuY2gg dG8gTFIvQ1RSLCBDUiBvcGVyYXRpb25zKQotKyAgICBjYXNlIDE5OgotKyAgICAgIGRlY29kZUJy YW5jaChpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIC8vIE0tZm9ybSAvIE1ELWZvcm0g cm90YXRlL21hc2sKLSsgICAgY2FzZSAyMDogIC8vIHJsd2ltaQotKyAgICBjYXNlIDIxOiAgLy8g cmx3aW5tCi0rICAgIGNhc2UgMjM6ICAvLyBybHdubQotKyAgICBjYXNlIDMwOiAgLy8gcmxkaWNs LCBybGRpY3IsIHJsZGljLCBybGRpbWksIHJsZGNsLCBybGRjcgotKyAgICAgIGRlY29kZVJvdGF0 ZU1hc2soaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICAvLyBWTVggKEFsdGlWZWMpIOKA lCBwcmltYXJ5IG9wY29kZSA0LiBWZWN0b3IgYXJpdGhtZXRpYyAvIGNvbXBhcmUgLyBzaGlmdCAv Ci0rICAgIC8vIHNwbGF0IC8gbWVyZ2UgLyBwYWNrIC8gdW5wYWNrIG9uIFZSMC1WUjMxLiBUaGUg d2FzbSBTSU1EIGxvd2VyaW5nCi0rICAgIC8vIGVtaXRzIHRoZXNlIGRpcmVjdGx5IChTaW1kMTI4 IGxpdmVzIGluIHRoZSBWUiBuYW1lc3BhY2UpLgotKyAgICBjYXNlIDQ6Ci0rICAgICAgZGVjb2Rl Vk1YKGluc3RyKTsKLSsgICAgICBicmVhazsKLSsKLSsgICAgLy8gWC1mb3JtIC8gWE8tZm9ybQot KyAgICBjYXNlIDMxOgotKyAgICAgIGRlY29kZVhGb3JtKGluc3RyKTsKLSsgICAgICBicmVhazsK LSsKLSsgICAgLy8gRlAgc2luZ2xlIChBLWZvcm0pCi0rICAgIGNhc2UgNTk6Ci0rICAgICAgZGVj b2RlRlAoaW5zdHIpOwotKyAgICAgIGJyZWFrOwotKwotKyAgICAvLyBWU1ggKFhYMS1mb3JtKQot KyAgICBjYXNlIDYwOgotKyAgICAgIGRlY29kZVZTWChpbnN0cik7Ci0rICAgICAgYnJlYWs7Ci0r Ci0rICAgIC8vIEZQIGRvdWJsZSAoWC1mb3JtIC8gQS1mb3JtKQotKyAgICBjYXNlIDYzOgotKyAg ICAgIGRlY29kZUZQKGluc3RyKTsKLSsgICAgICBicmVhazsKLSsKLSsgICAgZGVmYXVsdDoKLSsg ICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKLSsgICAgICAgICAgImluc3RydWN0aW9uRGVj b2RlOiB1bnN1cHBvcnRlZCBvcGNvZGUgJXUgKGluc3RydWN0aW9uIDB4JTA4eCkiLAotKyAgICAg ICAgICBvcGNvZGUsIGluc3RyQml0cyk7Ci0rICB9Ci0rCi0rICBpZiAoIXBjX21vZGlmaWVkXykg ewotKyAgICBzZXRfcGMocmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihpbnN0cikgKyBTaW1JbnN0 cnVjdGlvbjo6a0luc3RyU2l6ZSk7Ci0rICB9Ci0rfQotKwotKy8vID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rLy8gU2luZ2xlLXN0ZXBwaW5nIC8gZXhlY3V0ZSBsb29wLgotKy8vID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rCi0rdm9pZCBTaW11bGF0b3I6OmVuYWJsZV9zaW5nbGVfc3RlcHBpbmcoU2lu Z2xlU3RlcENhbGxiYWNrIGNiLCB2b2lkKiBhcmcpIHsKLSsgIHNpbmdsZV9zdGVwcGluZ18gPSB0 cnVlOwotKyAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfID0gY2I7Ci0rICBzaW5nbGVfc3RlcF9jYWxs YmFja19hcmdfID0gYXJnOwotKyAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfKHNpbmdsZV9zdGVwX2Nh bGxiYWNrX2FyZ18sIHRoaXMsICh2b2lkKilnZXRfcGMoKSk7Ci0rfQotKwotK3ZvaWQgU2ltdWxh dG9yOjpkaXNhYmxlX3NpbmdsZV9zdGVwcGluZygpIHsKLSsgIGlmICghc2luZ2xlX3N0ZXBwaW5n XykgewotKyAgICByZXR1cm47Ci0rICB9Ci0rICBzaW5nbGVfc3RlcF9jYWxsYmFja18oc2luZ2xl X3N0ZXBfY2FsbGJhY2tfYXJnXywgdGhpcywgKHZvaWQqKWdldF9wYygpKTsKLSsgIHNpbmdsZV9z dGVwcGluZ18gPSBmYWxzZTsKLSsgIHNpbmdsZV9zdGVwX2NhbGxiYWNrXyA9IG51bGxwdHI7Ci0r ICBzaW5nbGVfc3RlcF9jYWxsYmFja19hcmdfID0gbnVsbHB0cjsKLSt9Ci0rCi0rdGVtcGxhdGUg PGJvb2wgZW5hYmxlU3RvcFNpbUF0PgotK3ZvaWQgU2ltdWxhdG9yOjpleGVjdXRlKCkgewotKyAg aWYgKHNpbmdsZV9zdGVwcGluZ18gJiYgZ2V0ZW52KCJQUEM2NF9UUkFDRV9TSU0iKSkgewotKyAg ICBmcHJpbnRmKHN0ZGVyciwgIltzaW1dIGVudGVyIGV4ZWN1dGUgcGM9MHglbHggbHI9MHglbHgg ZnA9MHglbHggc3A9MHglbHhcbiIsCi0rICAgICAgICAgICAgKGxvbmcpZ2V0X3BjKCksIChsb25n KWdldExSKCksIChsb25nKWdldFJlZ2lzdGVyKGZwKSwKLSsgICAgICAgICAgICAobG9uZylnZXRS ZWdpc3RlcihzcCkpOwotKyAgfQotKyAgaWYgKHNpbmdsZV9zdGVwcGluZ18pIHsKLSsgICAgc2lu Z2xlX3N0ZXBfY2FsbGJhY2tfKHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18sIHRoaXMsIG51bGxw dHIpOwotKyAgfQotKwotKyAgaW50NjRfdCBwcm9ncmFtX2NvdW50ZXIgPSBnZXRfcGMoKTsKLSsK LSsgIHdoaWxlIChwcm9ncmFtX2NvdW50ZXIgIT0gZW5kX3NpbV9wYykgewotKyAgICBpZiAoZW5h YmxlU3RvcFNpbUF0ICYmIChpY291bnRfID09IFNpbXVsYXRvcjo6U3RvcFNpbUF0KSkgewotKyAg ICAgIHBwYzY0RGVidWdnZXIgZGJnKHRoaXMpOwotKyAgICAgIGRiZy5kZWJ1ZygpOwotKyAgICB9 IGVsc2UgewotKyAgICAgIGlmIChzaW5nbGVfc3RlcHBpbmdfKSB7Ci0rICAgICAgICBpZiAoZ2V0 ZW52KCJQUEM2NF9UUkFDRV9TSU0iKSkgewotKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSsg ICAgICAgICAgICAgICAgICAiW3NpbV0gc3RlcCBpY291bnQ9JWxsdSBwYz0weCVseCBpbnN0cj0w eCUwOHggbHI9MHglbHggZnA9MHglbHggc3A9MHglbHhcbiIsCi0rICAgICAgICAgICAgICAgICAg KHVuc2lnbmVkIGxvbmcgbG9uZylpY291bnRfLCAobG9uZylwcm9ncmFtX2NvdW50ZXIsCi0rICAg ICAgICAgICAgICAgICAgKih1aW50MzJfdCopcHJvZ3JhbV9jb3VudGVyLCAobG9uZylnZXRMUigp LAotKyAgICAgICAgICAgICAgICAgIChsb25nKWdldFJlZ2lzdGVyKGZwKSwgKGxvbmcpZ2V0UmVn aXN0ZXIoc3ApKTsKLSsgICAgICAgIH0KLSsgICAgICAgIHNpbmdsZV9zdGVwX2NhbGxiYWNrXyhz aW5nbGVfc3RlcF9jYWxsYmFja19hcmdfLCB0aGlzLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh2b2lkKilwcm9ncmFtX2NvdW50ZXIpOwotKyAgICAgIH0KLSsgICAgICBTaW1JbnN0 cnVjdGlvbiogaW5zdHIgPQotKyAgICAgICAgICByZWludGVycHJldF9jYXN0PFNpbUluc3RydWN0 aW9uKj4ocHJvZ3JhbV9jb3VudGVyKTsKLSsgICAgICBpbnN0cnVjdGlvbkRlY29kZShpbnN0cik7 Ci0rICAgICAgaWNvdW50XysrOwotKyAgICB9Ci0rICAgIHByb2dyYW1fY291bnRlciA9IGdldF9w YygpOwotKyAgfQotKwotKyAgaWYgKHNpbmdsZV9zdGVwcGluZ18pIHsKLSsgICAgc2luZ2xlX3N0 ZXBfY2FsbGJhY2tfKHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18sIHRoaXMsIG51bGxwdHIpOwot KyAgfQotK30KLSsKLSsvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKy8vIGNhbGxJbnRlcm5hbCAv IGNhbGwuCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsKLSt2b2lkIFNpbXVsYXRvcjo6Y2Fs bEludGVybmFsKHVpbnQ4X3QqIGVudHJ5KSB7Ci0rICAvLyBQcmVwYXJlIHRvIGV4ZWN1dGUgdGhl IGNvZGUgYXQgZW50cnkuCi0rICBzZXRSZWdpc3RlcihwYywgcmVpbnRlcnByZXRfY2FzdDxpbnQ2 NF90PihlbnRyeSkpOwotKyAgLy8gVGhlIHNpbXVsYXRpb24gc3RvcHMgd2hlbiByZXR1cm5pbmcg dG8gdGhpcyBjYWxsIHBvaW50IChMUiA9PSBlbmRfc2ltX3BjKS4KLSsgIHNldExSKGVuZF9zaW1f cGMpOwotKwotKyAgLy8gUmVtZW1iZXIgdGhlIHZhbHVlcyBvZiBjYWxsZWUtc2F2ZWQgcmVnaXN0 ZXJzIChyMTQtcjMxIGluIEVMRnYyKS4KLSsgIGludDY0X3QgcjE0X3ZhbCA9IGdldFJlZ2lzdGVy KHIxNCk7Ci0rICBpbnQ2NF90IHIxNV92YWwgPSBnZXRSZWdpc3RlcihyMTUpOwotKyAgaW50NjRf dCByMTZfdmFsID0gZ2V0UmVnaXN0ZXIocjE2KTsKLSsgIGludDY0X3QgcjE3X3ZhbCA9IGdldFJl Z2lzdGVyKHIxNyk7Ci0rICBpbnQ2NF90IHIxOF92YWwgPSBnZXRSZWdpc3RlcihyMTgpOwotKyAg aW50NjRfdCByMTlfdmFsID0gZ2V0UmVnaXN0ZXIocjE5KTsKLSsgIGludDY0X3QgcjIwX3ZhbCA9 IGdldFJlZ2lzdGVyKHIyMCk7Ci0rICBpbnQ2NF90IHIyMV92YWwgPSBnZXRSZWdpc3RlcihyMjEp OwotKyAgaW50NjRfdCByMjJfdmFsID0gZ2V0UmVnaXN0ZXIocjIyKTsKLSsgIGludDY0X3QgcjIz X3ZhbCA9IGdldFJlZ2lzdGVyKHIyMyk7Ci0rICBpbnQ2NF90IHIyNF92YWwgPSBnZXRSZWdpc3Rl cihyMjQpOwotKyAgaW50NjRfdCByMjVfdmFsID0gZ2V0UmVnaXN0ZXIocjI1KTsKLSsgIGludDY0 X3QgcjI2X3ZhbCA9IGdldFJlZ2lzdGVyKHIyNik7Ci0rICBpbnQ2NF90IHIyN192YWwgPSBnZXRS ZWdpc3RlcihyMjcpOwotKyAgaW50NjRfdCByMjhfdmFsID0gZ2V0UmVnaXN0ZXIocjI4KTsKLSsg IGludDY0X3QgcjI5X3ZhbCA9IGdldFJlZ2lzdGVyKHIyOSk7Ci0rICBpbnQ2NF90IHIzMF92YWwg PSBnZXRSZWdpc3RlcihyMzApOwotKyAgaW50NjRfdCByMzFfdmFsID0gZ2V0UmVnaXN0ZXIocjMx KTsKLSsgIGludDY0X3Qgc3BfdmFsID0gZ2V0UmVnaXN0ZXIoc3ApOwotKwotKyNpZmRlZiBERUJV RwotKyAgLy8gU2V0IHVwIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgd2l0aCBhIGtub3duIHZhbHVl IHRvIGRldGVjdCBjbG9iYmVycy4KLSsgIC8vIERFQlVHLW9ubHk6IGluIHJlbGVhc2UgdGhpcyB3 b3VsZCBzaWxlbnRseSBjb3JydXB0IGV2ZXJ5IEpTLWppdC1lbnRyeQotKyAgLy8gc3R1YiBmcmFt ZSwgc2luY2UgdGhlIHN0dWIgc2F2ZXMgcjE0LXIzMSB0byBpdHMgc3RhY2sgZWFybHkgb24uIEFu eQotKyAgLy8gc2luZ2xlLXN0ZXAtcHJvZmlsaW5nIHNhbXBsZSB0YWtlbiBsYXRlciAob3IgYW55 IHVud2luZCB0aHJvdWdoIHRoZQotKyAgLy8gc3R1YidzIHNhdmVkIENTUiBhcmVhKSB0aGVuIGRl cmVmZXJlbmNlcyBgaWNvdW50X2AgYXMgYSBmcmFtZQotKyAgLy8gcG9pbnRlciBhbmQgY3Jhc2hl cyDigJQgc2VlIGUuZy4gd2FzbS9wcm9maWxpbmcuanMsIGlvbi1lcnJvci0qLmpzLAotKyAgLy8g aW9uLWxhenktdGFibGVzLmpzLCBpb24tY2FsbGVyZnAtdGFnLmpzLCByZXR1cm4tY2FsbC1wcm9m aWxpbmcuanMsCi0rICAvLyBleHRlcm5yZWYtZ2xvYmFsLXBvc3RiYXJyaWVyLmpzLCBidWlsdGlu LW1vZHVsZXMvaTh2ZWNtdWwuanMsCi0rICAvLyBhc20uanMvdGVzdEJ1ZzEzNTcwNTMuanMgKGFs bCBzaW5nbGUtc3RlcC1wcm9maWxpbmcgdGVzdHMpLiBJbgotKyAgLy8gZGVidWcgYnVpbGRzIHRo ZSB2YWx1ZSBjb2xsaWRlcyB3aXRoIHRoZSBzYW1lIGNhbGxzaXRlcyBidXQgdGhlCi0rICAvLyBN T1pfQVNTRVJUcyBiZWxvdyBjYXRjaCBhbnkgYWN0dWFsIEFCSSB2aW9sYXRpb24sIHdoaWNoIGlz IHRoZQotKyAgLy8gZW50aXJlIHBvaW50LgotKyAgaW50NjRfdCBjYWxsZWVfc2F2ZWRfdmFsdWUg PSBpY291bnRfOwotKyAgc2V0UmVnaXN0ZXIocjE0LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAg c2V0UmVnaXN0ZXIocjE1LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIocjE2 LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIocjE3LCBjYWxsZWVfc2F2ZWRf dmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIocjE4LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0 UmVnaXN0ZXIocjE5LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIocjIwLCBj YWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIocjIxLCBjYWxsZWVfc2F2ZWRfdmFs dWUpOwotKyAgc2V0UmVnaXN0ZXIocjIyLCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVn aXN0ZXIocjIzLCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIocjI0LCBjYWxs ZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIocjI1LCBjYWxsZWVfc2F2ZWRfdmFsdWUp OwotKyAgc2V0UmVnaXN0ZXIocjI2LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0 ZXIocjI3LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIocjI4LCBjYWxsZWVf c2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIocjI5LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwot KyAgc2V0UmVnaXN0ZXIocjMwLCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyAgc2V0UmVnaXN0ZXIo cjMxLCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwotKyNlbmRpZgotKwotKyAgLy8gU3RhcnQgdGhlIHNp bXVsYXRpb24uCi0rICBpZiAoU2ltdWxhdG9yOjpTdG9wU2ltQXQgIT0gLTEpIHsKLSsgICAgZXhl Y3V0ZTx0cnVlPigpOwotKyAgfSBlbHNlIHsKLSsgICAgZXhlY3V0ZTxmYWxzZT4oKTsKLSsgIH0K LSsKLSsjaWZkZWYgREVCVUcKLSsgIC8vIENoZWNrIHRoYXQgdGhlIGNhbGxlZS1zYXZlZCByZWdp c3RlcnMgaGF2ZSBiZWVuIHByZXNlcnZlZC4KLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3Zh bHVlID09IGdldFJlZ2lzdGVyKHIxNCkpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFs dWUgPT0gZ2V0UmVnaXN0ZXIocjE1KSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1 ZSA9PSBnZXRSZWdpc3RlcihyMTYpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVl ID09IGdldFJlZ2lzdGVyKHIxNykpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUg PT0gZ2V0UmVnaXN0ZXIocjE4KSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9 PSBnZXRSZWdpc3RlcihyMTkpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09 IGdldFJlZ2lzdGVyKHIyMCkpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0g Z2V0UmVnaXN0ZXIocjIxKSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBn ZXRSZWdpc3RlcihyMjIpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdl dFJlZ2lzdGVyKHIyMykpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0 UmVnaXN0ZXIocjI0KSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRS ZWdpc3RlcihyMjUpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJl Z2lzdGVyKHIyNikpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVn aXN0ZXIocjI3KSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdp c3RlcihyMjgpKTsKLSsgIE1PWl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lz dGVyKHIyOSkpOwotKyAgTU9aX0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0 ZXIocjMwKSk7Ci0rICBNT1pfQVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3Rl cihyMzEpKTsKLSsjZW5kaWYKLSsKLSsgIC8vIFJlc3RvcmUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVy cy4KLSsgIHNldFJlZ2lzdGVyKHIxNCwgcjE0X3ZhbCk7Ci0rICBzZXRSZWdpc3RlcihyMTUsIHIx NV92YWwpOwotKyAgc2V0UmVnaXN0ZXIocjE2LCByMTZfdmFsKTsKLSsgIHNldFJlZ2lzdGVyKHIx NywgcjE3X3ZhbCk7Ci0rICBzZXRSZWdpc3RlcihyMTgsIHIxOF92YWwpOwotKyAgc2V0UmVnaXN0 ZXIocjE5LCByMTlfdmFsKTsKLSsgIHNldFJlZ2lzdGVyKHIyMCwgcjIwX3ZhbCk7Ci0rICBzZXRS ZWdpc3RlcihyMjEsIHIyMV92YWwpOwotKyAgc2V0UmVnaXN0ZXIocjIyLCByMjJfdmFsKTsKLSsg IHNldFJlZ2lzdGVyKHIyMywgcjIzX3ZhbCk7Ci0rICBzZXRSZWdpc3RlcihyMjQsIHIyNF92YWwp OwotKyAgc2V0UmVnaXN0ZXIocjI1LCByMjVfdmFsKTsKLSsgIHNldFJlZ2lzdGVyKHIyNiwgcjI2 X3ZhbCk7Ci0rICBzZXRSZWdpc3RlcihyMjcsIHIyN192YWwpOwotKyAgc2V0UmVnaXN0ZXIocjI4 LCByMjhfdmFsKTsKLSsgIHNldFJlZ2lzdGVyKHIyOSwgcjI5X3ZhbCk7Ci0rICBzZXRSZWdpc3Rl cihyMzAsIHIzMF92YWwpOwotKyAgc2V0UmVnaXN0ZXIocjMxLCByMzFfdmFsKTsKLSsgIHNldFJl Z2lzdGVyKHNwLCBzcF92YWwpOwotK30KLSsKLStpbnQ2NF90IFNpbXVsYXRvcjo6Y2FsbCh1aW50 OF90KiBlbnRyeSwgaW50IGFyZ3VtZW50X2NvdW50LCAuLi4pIHsKLSsgIHZhX2xpc3QgcGFyYW1l dGVyczsKLSsgIHZhX3N0YXJ0KHBhcmFtZXRlcnMsIGFyZ3VtZW50X2NvdW50KTsKLSsKLSsgIGlu dDY0X3Qgb3JpZ2luYWxfc3RhY2sgPSBnZXRSZWdpc3RlcihzcCk7Ci0rICAvLyBDb21wdXRlIHBv c2l0aW9uIG9mIHN0YWNrIG9uIGVudHJ5IHRvIGdlbmVyYXRlZCBjb2RlLgotKyAgaW50NjRfdCBl bnRyeV9zdGFjayA9IG9yaWdpbmFsX3N0YWNrOwotKyAgaWYgKGFyZ3VtZW50X2NvdW50ID4ga0NB cmdTbG90Q291bnQpIHsKLSsgICAgZW50cnlfc3RhY2sgPSBlbnRyeV9zdGFjayAtIGFyZ3VtZW50 X2NvdW50ICogc2l6ZW9mKGludDY0X3QpOwotKyAgfSBlbHNlIHsKLSsgICAgZW50cnlfc3RhY2sg PSBlbnRyeV9zdGFjayAtIGtDQXJnc1Nsb3RzU2l6ZTsKLSsgIH0KLSsKLSsgIGVudHJ5X3N0YWNr ICY9IH5VNjQoQUJJU3RhY2tBbGlnbm1lbnQgLSAxKTsKLSsKLSsgIGludHB0cl90KiBzdGFja19h cmd1bWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3QqPihlbnRyeV9zdGFjayk7Ci0rCi0r ICAvLyBQUEM2NCBFTEZ2MjogZmlyc3QgOCBpbnRlZ2VyIGFyZ3MgZ28gaW4gcjMtcjEwLgotKyAg Zm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudF9jb3VudDsgaSsrKSB7Ci0rICAgIGpzOjpqaXQ6 OlJlZ2lzdGVyIGFyZ1JlZzsKLSsgICAgaWYgKEdldEludEFyZ1JlZyhpLCAmYXJnUmVnKSkgewot KyAgICAgIHNldFJlZ2lzdGVyKGFyZ1JlZy5jb2RlKCksIHZhX2FyZyhwYXJhbWV0ZXJzLCBpbnQ2 NF90KSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgc3RhY2tfYXJndW1lbnRbaV0gPSB2YV9hcmco cGFyYW1ldGVycywgaW50NjRfdCk7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHZhX2VuZChwYXJhbWV0 ZXJzKTsKLSsgIHNldFJlZ2lzdGVyKHNwLCBlbnRyeV9zdGFjayk7Ci0rCi0rICBjYWxsSW50ZXJu YWwoZW50cnkpOwotKwotKyAgTU9aX0FTU0VSVChlbnRyeV9zdGFjayA9PSBnZXRSZWdpc3Rlcihz cCkpOwotKyAgc2V0UmVnaXN0ZXIoc3AsIG9yaWdpbmFsX3N0YWNrKTsKLSsKLSsgIGludDY0X3Qg cmVzdWx0ID0gZ2V0UmVnaXN0ZXIocjMpOwotKyAgcmV0dXJuIHJlc3VsdDsKLSt9Ci0rCi0rdWlu dHB0cl90IFNpbXVsYXRvcjo6cHVzaEFkZHJlc3ModWludHB0cl90IGFkZHJlc3MpIHsKLSsgIGlu dDY0X3QgbmV3X3NwID0gZ2V0UmVnaXN0ZXIoc3ApIC0gc2l6ZW9mKHVpbnRwdHJfdCk7Ci0rICB1 aW50cHRyX3QqIHN0YWNrX3Nsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KG5ld19z cCk7Ci0rICAqc3RhY2tfc2xvdCA9IGFkZHJlc3M7Ci0rICBzZXRSZWdpc3RlcihzcCwgbmV3X3Nw KTsKLSsgIHJldHVybiBuZXdfc3A7Ci0rfQotKwotK3VpbnRwdHJfdCBTaW11bGF0b3I6OnBvcEFk ZHJlc3MoKSB7Ci0rICBpbnQ2NF90IGN1cnJlbnRfc3AgPSBnZXRSZWdpc3RlcihzcCk7Ci0rICB1 aW50cHRyX3QqIHN0YWNrX3Nsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KGN1cnJl bnRfc3ApOwotKyAgdWludHB0cl90IGFkZHJlc3MgPSAqc3RhY2tfc2xvdDsKLSsgIHNldFJlZ2lz dGVyKHNwLCBjdXJyZW50X3NwICsgc2l6ZW9mKHVpbnRwdHJfdCkpOwotKyAgcmV0dXJuIGFkZHJl c3M7Ci0rfQotKwotK30gIC8vIG5hbWVzcGFjZSBqaXQKLSt9ICAvLyBuYW1lc3BhY2UganMKLSsK LStqczo6aml0OjpTaW11bGF0b3IqIEpTQ29udGV4dDo6c2ltdWxhdG9yKCkgY29uc3QgeyByZXR1 cm4gc2ltdWxhdG9yXzsgfQotZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9y LXBwYzY0LmggYi9qcy9zcmMvaml0L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5oCi1uZXcgZmlsZSBt b2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwLi5jN2EzZjM3NjdkNjEKLS0tLSAvZGV2L251 bGwKLSsrKyBiL2pzL3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0LmgKLUBAIC0wLDAgKzEs NTU2IEBACi0rLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2Rl OiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQg c3c9MiB0dz04MDoKLSsgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUg dGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCi0rICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNv cHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwotKyAqIGZpbGUsIFlv dSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCi0rCi0r I2lmbmRlZiBqaXRfcHBjNjRfU2ltdWxhdG9yX3BwYzY0X2gKLSsjZGVmaW5lIGppdF9wcGM2NF9T aW11bGF0b3JfcHBjNjRfaAotKwotKyNpZmRlZiBKU19TSU1VTEFUT1JfUFBDNjQKLSsKLSsjICBp bmNsdWRlICJtb3ppbGxhL0F0b21pY3MuaCIKLSsKLSsjICBpbmNsdWRlICJqaXQvSW9uVHlwZXMu aCIKLSsjICBpbmNsdWRlICJqcy9Qcm9maWxpbmdGcmFtZUl0ZXJhdG9yLmgiCi0rIyAgaW5jbHVk ZSAidGhyZWFkaW5nL1RocmVhZC5oIgotKyMgIGluY2x1ZGUgInZtL011dGV4SURzLmgiCi0rIyAg aW5jbHVkZSAid2FzbS9XYXNtU2lnbmFsSGFuZGxlcnMuaCIKLSsKLStuYW1lc3BhY2UganMgewot K25hbWVzcGFjZSBqaXQgewotKwotK2NsYXNzIEppdEFjdGl2YXRpb247Ci0rY2xhc3MgU2ltdWxh dG9yOwotK2NsYXNzIFJlZGlyZWN0aW9uOwotK2NsYXNzIENhY2hlUGFnZTsKLStjbGFzcyBBdXRv TG9ja1NpbXVsYXRvcjsKLSsKLSt0eXBlZGVmIHZvaWQgKCpTaW5nbGVTdGVwQ2FsbGJhY2spKHZv aWQqIGFyZywgU2ltdWxhdG9yKiBzaW0sIHZvaWQqIHBjKTsKLSsKLStjb25zdCBpbnRwdHJfdCBr UG9pbnRlckFsaWdubWVudCA9IDg7Ci0rY29uc3QgaW50cHRyX3Qga1BvaW50ZXJBbGlnbm1lbnRN YXNrID0ga1BvaW50ZXJBbGlnbm1lbnQgLSAxOwotK2NvbnN0IGludHB0cl90IGtEb3VibGVBbGln bm1lbnQgPSA4OwotK2NvbnN0IGludHB0cl90IGtEb3VibGVBbGlnbm1lbnRNYXNrID0ga0RvdWJs ZUFsaWdubWVudCAtIDE7Ci0rCi0rY29uc3QgaW50IGtOdW1HUFJlZ2lzdGVycyA9IDMyOwotK2Nv bnN0IGludCBrUENSZWdpc3RlciA9IDMyOwotK2NvbnN0IGludCBrTnVtRlBVUmVnaXN0ZXJzID0g MzI7Ci0rY29uc3QgaW50IGtOdW1WUlJlZ2lzdGVycyA9IDMyOyAgLy8gVlIwLVZSMzEgKEFsdGl2 ZWMvVk1YOyA9IFZTUjMyLTYzIGluIFZTWCkKLSsKLSsvLyBQUEM2NCBDb25kaXRpb24gUmVnaXN0 ZXI6IDggZmllbGRzIG9mIDQgYml0cyBlYWNoLgotKy8vIEVhY2ggZmllbGQ6IGJpdDM9TFQsIGJp dDI9R1QsIGJpdDE9RVEsIGJpdDA9U08gKGluIFBQQyBiaWctZW5kaWFuIG51bWJlcmluZwotKy8v IHdpdGhpbiBhIGZpZWxkLCBidXQgc3RvcmVkIGluIGxpdHRsZS1lbmRpYW4gbmliYmxlIG9yZGVy IGluIG91ciB1aW50MzJfdCkuCi0rY29uc3QgaW50IGtOdW1DUkZpZWxkcyA9IDg7Ci0rCi0rLy8g Q1IgZmllbGQgYml0IHBvc2l0aW9ucyAod2l0aGluIGEgNC1iaXQgZmllbGQpLgotK2NvbnN0IHVp bnQ4X3Qga0NSRmllbGRMVCA9IDB4ODsKLStjb25zdCB1aW50OF90IGtDUkZpZWxkR1QgPSAweDQ7 Ci0rY29uc3QgdWludDhfdCBrQ1JGaWVsZEVRID0gMHgyOwotK2NvbnN0IHVpbnQ4X3Qga0NSRmll bGRTTyA9IDB4MTsKLSsKLSsvLyBYRVIgcmVnaXN0ZXIgYml0IHBvc2l0aW9ucy4KLStjb25zdCBp bnQga1hFUlNPQml0ID0gMzE7Ci0rY29uc3QgaW50IGtYRVJPVkJpdCA9IDMwOwotK2NvbnN0IGlu dCBrWEVSQ0FCaXQgPSAyOTsKLStjb25zdCBpbnQga1hFUk9WMzJCaXQgPSAxOTsKLStjb25zdCBp bnQga1hFUkNBMzJCaXQgPSAxODsKLSsKLSsvLyBGUFNDUiByb3VuZGluZyBtb2RlIGJpdHMgKGJp dHMgNjI6NjMsIHN0b3JlZCBpbiBsb3cgYml0cyBvZiBvdXIgdWludDY0X3QpLgotK2NvbnN0IHVp bnQ2NF90IGtGUFNDUlJOTWFzayA9IDB4MzsKLSsKLSsvLyBGUFUgcm91bmRpbmcgbW9kZXMgbWF0 Y2hpbmcgUFBDNjQgRlBTQ1IgUk4gZmllbGQuCi0rZW51bSBGUFVSb3VuZGluZ01vZGUgewotKyAg Uk4gPSAwLCAgLy8gUm91bmQgdG8gTmVhcmVzdCAodGllcyB0byBldmVuKQotKyAgUlogPSAxLCAg Ly8gUm91bmQgdG93YXJkIFplcm8KLSsgIFJQID0gMiwgIC8vIFJvdW5kIHRvd2FyZCArSW5maW5p dHkKLSsgIFJNID0gMywgIC8vIFJvdW5kIHRvd2FyZCAtSW5maW5pdHkKLSt9OwotKwotKy8vIEZQ VSBpbnZhbGlkIHJlc3VsdCBjb25zdGFudHMuCi0rY29uc3QgdWludDMyX3Qga0ZQVUludmFsaWRS ZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSA8PCAzMSkgLSAxOwotK2NvbnN0IGludDMy X3Qga0ZQVUludmFsaWRSZXN1bHROZWdhdGl2ZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KDF1IDw8 IDMxKTsKLStjb25zdCB1aW50NjRfdCBrRlBVNjRJbnZhbGlkUmVzdWx0ID0KLSsgICAgc3RhdGlj X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCA2MykgLSAxOwotK2Nv bnN0IGludDY0X3Qga0ZQVTY0SW52YWxpZFJlc3VsdE5lZ2F0aXZlID0KLSsgICAgc3RhdGljX2Nh c3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IDYzKTsKLSsKLSsvLyBCcmVh a3BvaW50L3N0b3AgY29kZSByYW5nZXMuCi0rY29uc3QgdWludDMyX3Qga01heFdhdGNocG9pbnRD b2RlID0gMzE7Ci0rY29uc3QgdWludDMyX3Qga01heFN0b3BDb2RlID0gMTI3OwotK2NvbnN0IHVp bnQzMl90IGtXYXNtVHJhcENvZGUgPSA2OwotKwotKy8vIFJlZGlyZWN0aW9uIGluc3RydWN0aW9u OiBQUENfc3RvcCAoMHg0QzAwMDJFNCkuCi0rLy8gRGlzdGluY3QgZnJvbSBQUENfdHJhcCAoMHg3 RkUwMDAwOCkgdXNlZCBmb3Igd2FzbSB0cmFwcy4KLStjb25zdCB1aW50MzJfdCBrQ2FsbFJlZGly SW5zdHIgPSAweDRDMDAwMkU0OwotKwotK3R5cGVkZWYgdWludDMyX3QgSW5zdHI7Ci0rY2xhc3Mg U2ltSW5zdHJ1Y3Rpb247Ci0rCi0rY2xhc3MgU2ltdWxhdG9yIHsKLSsgIGZyaWVuZCBjbGFzcyBw cGM2NERlYnVnZ2VyOwotKwotKyBwdWJsaWM6Ci0rICBlbnVtIFJlZ2lzdGVyIHsKLSsgICAgbm9f cmVnID0gLTEsCi0rICAgIHIwID0gMCwKLSsgICAgcjEsCi0rICAgIHIyLAotKyAgICByMywKLSsg ICAgcjQsCi0rICAgIHI1LAotKyAgICByNiwKLSsgICAgcjcsCi0rICAgIHI4LAotKyAgICByOSwK LSsgICAgcjEwLAotKyAgICByMTEsCi0rICAgIHIxMiwKLSsgICAgcjEzLAotKyAgICByMTQsCi0r ICAgIHIxNSwKLSsgICAgcjE2LAotKyAgICByMTcsCi0rICAgIHIxOCwKLSsgICAgcjE5LAotKyAg ICByMjAsCi0rICAgIHIyMSwKLSsgICAgcjIyLAotKyAgICByMjMsCi0rICAgIHIyNCwKLSsgICAg cjI1LAotKyAgICByMjYsCi0rICAgIHIyNywKLSsgICAgcjI4LAotKyAgICByMjksCi0rICAgIHIz MCwKLSsgICAgcjMxLAotKyAgICBwYywKLSsgICAga051bVNpbXVSZWdpc3RlcnMsCi0rICAgIC8v IEFsaWFzZXMKLSsgICAgc3AgPSByMSwKLSsgICAgZnAgPSByMzEsCi0rICB9OwotKwotKyAgZW51 bSBGUFVSZWdpc3RlciB7Ci0rICAgIGYwID0gMCwKLSsgICAgZjEsCi0rICAgIGYyLAotKyAgICBm MywKLSsgICAgZjQsCi0rICAgIGY1LAotKyAgICBmNiwKLSsgICAgZjcsCi0rICAgIGY4LAotKyAg ICBmOSwKLSsgICAgZjEwLAotKyAgICBmMTEsCi0rICAgIGYxMiwKLSsgICAgZjEzLAotKyAgICBm MTQsCi0rICAgIGYxNSwKLSsgICAgZjE2LAotKyAgICBmMTcsCi0rICAgIGYxOCwKLSsgICAgZjE5 LAotKyAgICBmMjAsCi0rICAgIGYyMSwKLSsgICAgZjIyLAotKyAgICBmMjMsCi0rICAgIGYyNCwK LSsgICAgZjI1LAotKyAgICBmMjYsCi0rICAgIGYyNywKLSsgICAgZjI4LAotKyAgICBmMjksCi0r ICAgIGYzMCwKLSsgICAgZjMxLAotKyAgICBrTnVtRlBVUmVnaXN0ZXJzCi0rICB9OwotKwotKyAg c3RhdGljIFNpbXVsYXRvciogQ3JlYXRlKCk7Ci0rICBzdGF0aWMgdm9pZCBEZXN0cm95KFNpbXVs YXRvciogc2ltdWxhdG9yKTsKLSsKLSsgIFNpbXVsYXRvcigpOwotKyAgflNpbXVsYXRvcigpOwot KwotKyAgc3RhdGljIFNpbXVsYXRvciogQ3VycmVudCgpOwotKwotKyAgc3RhdGljIGlubGluZSB1 aW50cHRyX3QgU3RhY2tMaW1pdCgpIHsKLSsgICAgcmV0dXJuIFNpbXVsYXRvcjo6Q3VycmVudCgp LT5zdGFja0xpbWl0KCk7Ci0rICB9Ci0rCi0rICB1aW50cHRyX3QqIGFkZHJlc3NPZlN0YWNrTGlt aXQoKTsKLSsKLSsgIC8vIEdQUiBhY2Nlc3NvcnMuCi0rICB2b2lkIHNldFJlZ2lzdGVyKGludCBy ZWcsIGludDY0X3QgdmFsdWUpOwotKyAgaW50NjRfdCBnZXRSZWdpc3RlcihpbnQgcmVnKSBjb25z dDsKLSsKLSsgIC8vIEZQUiBhY2Nlc3NvcnMuCi0rICB2b2lkIHNldEZwdVJlZ2lzdGVyKGludCBm cHVyZWcsIGludDY0X3QgdmFsdWUpOwotKyAgdm9pZCBzZXRGcHVSZWdpc3RlcldvcmQoaW50IGZw dXJlZywgaW50MzJfdCB2YWx1ZSk7Ci0rICB2b2lkIHNldEZwdVJlZ2lzdGVyRmxvYXQoaW50IGZw dXJlZywgZmxvYXQgdmFsdWUpOwotKyAgdm9pZCBzZXRGcHVSZWdpc3RlckRvdWJsZShpbnQgZnB1 cmVnLCBkb3VibGUgdmFsdWUpOwotKyAgaW50NjRfdCBnZXRGcHVSZWdpc3RlcihpbnQgZnB1cmVn KSBjb25zdDsKLSsgIGludDMyX3QgZ2V0RnB1UmVnaXN0ZXJXb3JkKGludCBmcHVyZWcpIGNvbnN0 OwotKyAgaW50MzJfdCBnZXRGcHVSZWdpc3RlclNpZ25lZFdvcmQoaW50IGZwdXJlZykgY29uc3Q7 Ci0rICBmbG9hdCBnZXRGcHVSZWdpc3RlckZsb2F0KGludCBmcHVyZWcpIGNvbnN0OwotKyAgZG91 YmxlIGdldEZwdVJlZ2lzdGVyRG91YmxlKGludCBmcHVyZWcpIGNvbnN0OwotKwotKyAgLy8gVlIg YWNjZXNzb3JzIChBbHRpdmVjL1ZNWCByZWdpc3RlcnMgVlIwLVZSMzEpLiBUaGUgYnl0ZXMgYXJy YXkgaXMgdGhlCi0rICAvLyBncm91bmQgdHJ1dGg6IGJ5dGVzWzBdIGlzIHRoZSBtb3N0LXNpZ25p ZmljYW50LWJ5dGUgb24gUFBDNjQgYmlnLWVuZGlhbgotKyAgLy8gbnVtYmVyaW5nLCBpLmUuLCBW U1JbTVNCLi5MU0JdIG1hcHBlZCBhcyBieXRlc1swLi4xNV0uIENhbGxlcnMgdGhhdCB3YW50Ci0r ICAvLyB0eXBlZCB2aWV3cyAobGFuZSAwIGV0Yy4pIHNob3VsZCBleHRyYWN0IGZyb20gdGhlIGJ5 dGVzIGFycmF5IGFjY29yZGluZwotKyAgLy8gdG8gdGhlIElTQSdzIGxhbmUgbnVtYmVyaW5nIGZv ciB0aGF0IGluc3RydWN0aW9uLgotKyAgdm9pZCBzZXRWUkJ5dGVzKGludCB2cmVnLCBjb25zdCB1 aW50OF90IGJ5dGVzWzE2XSk7Ci0rICB2b2lkIGdldFZSQnl0ZXMoaW50IHZyZWcsIHVpbnQ4X3Qg Ynl0ZXNbMTZdKSBjb25zdDsKLSsKLSsgIC8vIFZTUiAoVmVjdG9yLVNjYWxhciBSZWdpc3Rlcikg YWNjZXNzb3JzOiB1bmlmaWVkIDY0LXJlZ2lzdGVyIG5hbWVzcGFjZQotKyAgLy8gd2hlcmUgVlNS IDAtMzEgYWxpYXNlcyBGUFIgMC0zMSAoRFcwIGlzIHRoZSBGUFIgdmFsdWUsIERXMSBpcwotKyAg Ly8gYXJjaGl0ZWN0dXJhbGx5IHVuZGVmaW5lZCDigJQgd2UgbW9kZWwgaXQgYXMgemVybyBvbiBy ZWFkLCBpZ25vcmVkIG9uCi0rICAvLyB3cml0ZSkgYW5kIFZTUiAzMi02MyBhbGlhc2VzIFZSIDAt MzEuIFVzZWQgYnkgVlNYIGluc3RydWN0aW9ucwotKyAgLy8gKHh4cGVybWRpLCB4eGxvciwgeHhs eG9yLCBtdHZzcmQsIG1mdnNyZCwgLi4uKS4KLSsgIHZvaWQgZ2V0VlNSMTI4KGludCB2c3IsIHVp bnQ4X3QgYnl0ZXNbMTZdKSBjb25zdDsKLSsgIHZvaWQgc2V0VlNSMTI4KGludCB2c3IsIGNvbnN0 IHVpbnQ4X3QgYnl0ZXNbMTZdKTsKLSsKLSsgIC8vIFNQUiBhY2Nlc3NvcnMuCi0rICBpbnQ2NF90 IGdldExSKCkgY29uc3QgeyByZXR1cm4gTFJfOyB9Ci0rICB2b2lkIHNldExSKGludDY0X3QgdmFs dWUpIHsgTFJfID0gdmFsdWU7IH0KLSsgIGludDY0X3QgZ2V0Q1RSKCkgY29uc3QgeyByZXR1cm4g Q1RSXzsgfQotKyAgdm9pZCBzZXRDVFIoaW50NjRfdCB2YWx1ZSkgeyBDVFJfID0gdmFsdWU7IH0K LSsgIHVpbnQzMl90IGdldENSKCkgY29uc3QgeyByZXR1cm4gQ1JfOyB9Ci0rICB2b2lkIHNldENS KHVpbnQzMl90IHZhbHVlKSB7IENSXyA9IHZhbHVlOyB9Ci0rICB1aW50NjRfdCBnZXRYRVIoKSBj b25zdCB7IHJldHVybiBYRVJfOyB9Ci0rICB2b2lkIHNldFhFUih1aW50NjRfdCB2YWx1ZSkgeyBY RVJfID0gdmFsdWU7IH0KLSsgIHVpbnQ2NF90IGdldEZQU0NSKCkgY29uc3QgeyByZXR1cm4gRlBT Q1JfOyB9Ci0rICB2b2lkIHNldEZQU0NSKHVpbnQ2NF90IHZhbHVlKSB7IEZQU0NSXyA9IHZhbHVl OyB9Ci0rCi0rICAvLyBDUiBmaWVsZCBhY2Nlc3NvcnM6IGZpZWxkIDAgaXMgdGhlIG1vc3Qgc2ln bmlmaWNhbnQgbmliYmxlIChiaXRzIDMxOjI4KS4KLSsgIHVpbnQ4X3QgZ2V0Q1JGaWVsZChpbnQg ZmllbGQpIGNvbnN0IHsKLSsgICAgcmV0dXJuIChDUl8gPj4gKDQgKiAoNyAtIGZpZWxkKSkpICYg MHhGOwotKyAgfQotKyAgdm9pZCBzZXRDUkZpZWxkKGludCBmaWVsZCwgdWludDhfdCB2YWwpIHsK LSsgICAgdWludDMyX3Qgc2hpZnQgPSA0ICogKDcgLSBmaWVsZCk7Ci0rICAgIENSXyA9IChDUl8g JiB+KDB4RnUgPDwgc2hpZnQpKSB8ICgodmFsICYgMHhGdSkgPDwgc2hpZnQpOwotKyAgfQotKwot KyAgLy8gWEVSIGJpdCBhY2Nlc3NvcnMuCi0rICBib29sIGdldFhFUlNPKCkgY29uc3QgeyByZXR1 cm4gKFhFUl8gPj4ga1hFUlNPQml0KSAmIDE7IH0KLSsgIHZvaWQgc2V0WEVSU08oYm9vbCB2KSB7 Ci0rICAgIFhFUl8gPSAoWEVSXyAmIH4oMXVsbCA8PCBrWEVSU09CaXQpKSB8ICgodWludDY0X3Qp diA8PCBrWEVSU09CaXQpOwotKyAgfQotKyAgYm9vbCBnZXRYRVJPVigpIGNvbnN0IHsgcmV0dXJu IChYRVJfID4+IGtYRVJPVkJpdCkgJiAxOyB9Ci0rICB2b2lkIHNldFhFUk9WKGJvb2wgdikgewot KyAgICBYRVJfID0gKFhFUl8gJiB+KDF1bGwgPDwga1hFUk9WQml0KSkgfCAoKHVpbnQ2NF90KXYg PDwga1hFUk9WQml0KTsKLSsgICAgLy8gTWlycm9yIHRvIE9WMzIuIFJlYWwgUE9XRVI5IHNpbGlj b24gc2V0cyBPVjMyID09IE9WIGZvciBib3RoIDMyLWJpdAotKyAgICAvLyBhbmQgNjQtYml0IG92 ZXJmbG93IG9wczogbXVsbGRvKDIsIDJeNjIpIHByb2R1Y2VzIE9WPU9WMzI9MTsKLSsgICAgLy8g bXVsbGRvKDJeMzAsIDQpIHByb2R1Y2VzIE9WPU9WMzI9MC4gVGhlIEpJVCdzCi0rICAgIC8vIFBP V0VSOSBPdmVyZmxvdyBwYXRoIGlzIGBtdWxsZG8gKyBtY3J4cnggKyBiYyBPdmVyZmxvd2AsIHdo ZXJlCi0rICAgIC8vIG1jcnhyeCBwbGFjZXMgT1YzMiBpbiB0aGUgR1Qgc2xvdCBhbmQgdGhlIE92 ZXJmbG93IGNvbmRpdGlvbiB0ZXN0cwotKyAgICAvLyBHVCDigJQgc28gT1YzMiBtdXN0IGJlIGxp dmUgb3Igbm8tb3ZlcmZsb3cgaXMgcmVwb3J0ZWQgZXZlbiB3aGVuCi0rICAgIC8vIE9WPTEuIFdp dGhvdXQgdGhpcyBtaXJyb3IsIEJpZ0ludCBmYXN0LXBhdGggbXVsIHNpbGVudGx5IHdyYXBzLgot KyAgICBYRVJfID0gKFhFUl8gJiB+KDF1bGwgPDwga1hFUk9WMzJCaXQpKSB8ICgodWludDY0X3Qp diA8PCBrWEVST1YzMkJpdCk7Ci0rICAgIGlmICh2KSBzZXRYRVJTTyh0cnVlKTsKLSsgIH0KLSsg IGJvb2wgZ2V0WEVSQ0EoKSBjb25zdCB7IHJldHVybiAoWEVSXyA+PiBrWEVSQ0FCaXQpICYgMTsg fQotKyAgdm9pZCBzZXRYRVJDQShib29sIHYpIHsKLSsgICAgWEVSXyA9IChYRVJfICYgfigxdWxs IDw8IGtYRVJDQUJpdCkpIHwgKCh1aW50NjRfdCl2IDw8IGtYRVJDQUJpdCk7Ci0rICB9Ci0rCi0r ICAvLyBQQyBhY2Nlc3NvcnMuCi0rICB2b2lkIHNldF9wYyhpbnQ2NF90IHZhbHVlKTsKLSsgIGlu dDY0X3QgZ2V0X3BjKCkgY29uc3Q7Ci0rCi0rICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSsgIFQg Z2V0X3BjX2FzKCkgY29uc3QgewotKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPihnZXRf cGMoKSk7Ci0rICB9Ci0rCi0rICB2b2lkIGVuYWJsZV9zaW5nbGVfc3RlcHBpbmcoU2luZ2xlU3Rl cENhbGxiYWNrIGNiLCB2b2lkKiBhcmcpOwotKyAgdm9pZCBkaXNhYmxlX3NpbmdsZV9zdGVwcGlu ZygpOwotKwotKyAgdWludHB0cl90IHN0YWNrTGltaXQoKSBjb25zdDsKLSsgIGJvb2wgb3ZlclJl Y3Vyc2VkKHVpbnRwdHJfdCBuZXdzcCA9IDApIGNvbnN0OwotKyAgYm9vbCBvdmVyUmVjdXJzZWRX aXRoRXh0cmEodWludDMyX3QgZXh0cmEpIGNvbnN0OwotKwotKyAgdGVtcGxhdGUgPGJvb2wgZW5h YmxlU3RvcFNpbUF0PgotKyAgdm9pZCBleGVjdXRlKCk7Ci0rCi0rICBpbnQ2NF90IGNhbGwodWlu dDhfdCogZW50cnksIGludCBhcmd1bWVudF9jb3VudCwgLi4uKTsKLSsKLSsgIHVpbnRwdHJfdCBw dXNoQWRkcmVzcyh1aW50cHRyX3QgYWRkcmVzcyk7Ci0rICB1aW50cHRyX3QgcG9wQWRkcmVzcygp OwotKwotKyAgdm9pZCBzZXRMYXN0RGVidWdnZXJJbnB1dChjaGFyKiBpbnB1dCk7Ci0rICBjaGFy KiBsYXN0RGVidWdnZXJJbnB1dCgpIHsgcmV0dXJuIGxhc3REZWJ1Z2dlcklucHV0XzsgfQotKwot KyAgYm9vbCBoYXNfYmFkX3BjKCkgY29uc3Q7Ci0rCi0rICAvLyBVcGRhdGUgQ1IgZmllbGQgMCBm cm9tIGEgNjQtYml0IHJlc3VsdC4KLSsgIHZvaWQgdXBkYXRlQ1IwKGludDY0X3QgcmVzdWx0KSB7 Ci0rICAgIHVpbnQ4X3QgZmllbGQgPSBrQ1JGaWVsZFNPICogZ2V0WEVSU08oKTsKLSsgICAgaWYg KHJlc3VsdCA8IDApCi0rICAgICAgZmllbGQgfD0ga0NSRmllbGRMVDsKLSsgICAgZWxzZSBpZiAo cmVzdWx0ID4gMCkKLSsgICAgICBmaWVsZCB8PSBrQ1JGaWVsZEdUOwotKyAgICBlbHNlCi0rICAg ICAgZmllbGQgfD0ga0NSRmllbGRFUTsKLSsgICAgc2V0Q1JGaWVsZCgwLCBmaWVsZCk7Ci0rICB9 Ci0rCi0rICAvLyBVcGRhdGUgQ1IgZmllbGQgMCBmcm9tIGEgMzItYml0IHJlc3VsdCAoc2lnbi1l eHRlbmRlZCBjb21wYXJpc29uKS4KLSsgIHZvaWQgdXBkYXRlQ1IwXzMyKGludDMyX3QgcmVzdWx0 KSB7Ci0rICAgIHVpbnQ4X3QgZmllbGQgPSBrQ1JGaWVsZFNPICogZ2V0WEVSU08oKTsKLSsgICAg aWYgKHJlc3VsdCA8IDApCi0rICAgICAgZmllbGQgfD0ga0NSRmllbGRMVDsKLSsgICAgZWxzZSBp ZiAocmVzdWx0ID4gMCkKLSsgICAgICBmaWVsZCB8PSBrQ1JGaWVsZEdUOwotKyAgICBlbHNlCi0r ICAgICAgZmllbGQgfD0ga0NSRmllbGRFUTsKLSsgICAgc2V0Q1JGaWVsZCgwLCBmaWVsZCk7Ci0r ICB9Ci0rCi0rICAvLyBDb21wYXJlIGFuZCBzZXQgYW4gYXJiaXRyYXJ5IENSIGZpZWxkLgotKyAg dm9pZCBzZXRDUkZpZWxkQ21wKGludCBmaWVsZCwgaW50NjRfdCBsaHMsIGludDY0X3QgcmhzKSB7 Ci0rICAgIHVpbnQ4X3QgdmFsID0ga0NSRmllbGRTTyAqIGdldFhFUlNPKCk7Ci0rICAgIGlmIChs aHMgPCByaHMpCi0rICAgICAgdmFsIHw9IGtDUkZpZWxkTFQ7Ci0rICAgIGVsc2UgaWYgKGxocyA+ IHJocykKLSsgICAgICB2YWwgfD0ga0NSRmllbGRHVDsKLSsgICAgZWxzZQotKyAgICAgIHZhbCB8 PSBrQ1JGaWVsZEVROwotKyAgICBzZXRDUkZpZWxkKGZpZWxkLCB2YWwpOwotKyAgfQotKwotKyAg dm9pZCBzZXRDUkZpZWxkQ21wVShpbnQgZmllbGQsIHVpbnQ2NF90IGxocywgdWludDY0X3Qgcmhz KSB7Ci0rICAgIHVpbnQ4X3QgdmFsID0ga0NSRmllbGRTTyAqIGdldFhFUlNPKCk7Ci0rICAgIGlm IChsaHMgPCByaHMpCi0rICAgICAgdmFsIHw9IGtDUkZpZWxkTFQ7Ci0rICAgIGVsc2UgaWYgKGxo cyA+IHJocykKLSsgICAgICB2YWwgfD0ga0NSRmllbGRHVDsKLSsgICAgZWxzZQotKyAgICAgIHZh bCB8PSBrQ1JGaWVsZEVROwotKyAgICBzZXRDUkZpZWxkKGZpZWxkLCB2YWwpOwotKyAgfQotKwot KyBwcml2YXRlOgotKyAgZW51bSBTcGVjaWFsVmFsdWVzIHsKLSsgICAgLy8gUFBDNjQgbWFza3Mg dGhlIGxvdyAyIGJpdHMgb2YgYnJhbmNoIHRhcmdldHMsIHNvIHRoZXNlIG11c3QgYmUKLSsgICAg Ly8gNC1ieXRlIGFsaWduZWQgdG8gc3Vydml2ZSB0aGUgJiB+MyBtYXNrIGluIGJsci9iY2N0ci4K LSsgICAgYmFkX3JhID0gLTQsCi0rICAgIGVuZF9zaW1fcGMgPSAtOCwKLSsgICAgVW5wcmVkaWN0 YWJsZSA9IDB4YmFkYmVhZgotKyAgfTsKLSsKLSsgIGJvb2wgaW5pdCgpOwotKwotKyAgdm9pZCBm b3JtYXQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyLCBjb25zdCBjaGFyKiBmb3JtYXQpOwotKwotKyAg Ly8gTWVtb3J5IGFjY2Vzcy4KLSsgIGlubGluZSB1aW50OF90IHJlYWRCVSh1aW50NjRfdCBhZGRy KTsKLSsgIGlubGluZSBpbnQ4X3QgcmVhZEIodWludDY0X3QgYWRkcik7Ci0rICBpbmxpbmUgdm9p ZCB3cml0ZUIodWludDY0X3QgYWRkciwgdWludDhfdCB2YWx1ZSk7Ci0rICBpbmxpbmUgdm9pZCB3 cml0ZUIodWludDY0X3QgYWRkciwgaW50OF90IHZhbHVlKTsKLSsKLSsgIGlubGluZSB1aW50MTZf dCByZWFkSFUodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsgIGlubGlu ZSBpbnQxNl90IHJlYWRIKHVpbnQ2NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0r ICBpbmxpbmUgdm9pZCB3cml0ZUgodWludDY0X3QgYWRkciwgdWludDE2X3QgdmFsdWUsIFNpbUlu c3RydWN0aW9uKiBpbnN0cik7Ci0rICBpbmxpbmUgdm9pZCB3cml0ZUgodWludDY0X3QgYWRkciwg aW50MTZfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsKLSsgIGlubGluZSB1aW50 MzJfdCByZWFkV1UodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsgIGlu bGluZSBpbnQzMl90IHJlYWRXKHVpbnQ2NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7 Ci0rICBpbmxpbmUgdm9pZCB3cml0ZVcodWludDY0X3QgYWRkciwgdWludDMyX3QgdmFsdWUsIFNp bUluc3RydWN0aW9uKiBpbnN0cik7Ci0rICBpbmxpbmUgdm9pZCB3cml0ZVcodWludDY0X3QgYWRk ciwgaW50MzJfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsKLSsgIGlubGluZSBp bnQ2NF90IHJlYWREVyh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAg aW5saW5lIHZvaWQgd3JpdGVEVyh1aW50NjRfdCBhZGRyLCBpbnQ2NF90IHZhbHVlLCBTaW1JbnN0 cnVjdGlvbiogaW5zdHIpOwotKwotKyAgaW5saW5lIGRvdWJsZSByZWFkRCh1aW50NjRfdCBhZGRy LCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgaW5saW5lIHZvaWQgd3JpdGVEKHVpbnQ2NF90 IGFkZHIsIGRvdWJsZSB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsKLSsgIGlubGlu ZSB1aW50OF90IGxvYWRMaW5rZWRCKHVpbnQ2NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0 cik7Ci0rICBpbmxpbmUgaW50IHN0b3JlQ29uZGl0aW9uYWxCKHVpbnQ2NF90IGFkZHIsIHVpbnQ4 X3QgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbUluc3RydWN0aW9u KiBpbnN0cik7Ci0rICBpbmxpbmUgdWludDE2X3QgbG9hZExpbmtlZEgodWludDY0X3QgYWRkciwg U2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsgIGlubGluZSBpbnQgc3RvcmVDb25kaXRpb25hbEgo dWludDY0X3QgYWRkciwgdWludDE2X3QgdmFsdWUsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0rICBpbmxpbmUgaW50MzJfdCBsb2FkTGlu a2VkVyh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgaW5saW5lIGlu dCBzdG9yZUNvbmRpdGlvbmFsVyh1aW50NjRfdCBhZGRyLCBpbnQzMl90IHZhbHVlLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgaW5s aW5lIGludDY0X3QgbG9hZExpbmtlZEQodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGlu c3RyKTsKLSsgIGlubGluZSBpbnQgc3RvcmVDb25kaXRpb25hbEQodWludDY0X3QgYWRkciwgaW50 NjRfdCB2YWx1ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rp b24qIGluc3RyKTsKLSsKLSsgIC8vIEluc3RydWN0aW9uIGRlY29kZXJzLgotKyAgdm9pZCBkZWNv ZGVERm9ybUFMVShTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgdm9pZCBkZWNvZGVERm9ybUxv YWQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsgIHZvaWQgZGVjb2RlREZvcm1TdG9yZShTaW1J bnN0cnVjdGlvbiogaW5zdHIpOwotKyAgdm9pZCBkZWNvZGVEU0Zvcm0oU2ltSW5zdHJ1Y3Rpb24q IGluc3RyKTsKLSsgIHZvaWQgZGVjb2RlWEZvcm0oU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsg IHZvaWQgZGVjb2RlUm90YXRlTWFzayhTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgdm9pZCBk ZWNvZGVCcmFuY2goU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsgIHZvaWQgZGVjb2RlRlAoU2lt SW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsgIHZvaWQgZGVjb2RlVlNYKFNpbUluc3RydWN0aW9uKiBp bnN0cik7Ci0rICB2b2lkIGRlY29kZVZNWChTaW1JbnN0cnVjdGlvbiogaW5zdHIpOwotKyAgLy8g UG93ZXIgSVNBIHYzLjEgcHJlZml4ZWQgaW5zdHJ1Y3Rpb25zLiBgcHJlZml4YCBwb2ludHMgYXQg dGhlCi0rICAvLyA0LWJ5dGUgcHJlZml4IHdvcmQ7IHRoZSBzdWZmaXggaXMgcmVhZCBmcm9tIGBw cmVmaXggKyA0YC4KLSsgIHZvaWQgZGVjb2RlUHJlZml4ZWQoU2ltSW5zdHJ1Y3Rpb24qIHByZWZp eCk7Ci0rCi0rICB2b2lkIHNvZnR3YXJlSW50ZXJydXB0KFNpbUluc3RydWN0aW9uKiBpbnN0cik7 Ci0rCi0rICAvLyBTdG9wL2JyZWFrcG9pbnQgaGVscGVycy4KLSsgIGJvb2wgaXNXYXRjaHBvaW50 KHVpbnQzMl90IGNvZGUpOwotKyAgdm9pZCBwcmludFdhdGNocG9pbnQodWludDMyX3QgY29kZSk7 Ci0rICB2b2lkIGhhbmRsZVN0b3AodWludDMyX3QgY29kZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3Ry KTsKLSsgIGJvb2wgaXNTdG9wSW5zdHJ1Y3Rpb24oU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKLSsg IGJvb2wgaXNFbmFibGVkU3RvcCh1aW50MzJfdCBjb2RlKTsKLSsgIHZvaWQgZW5hYmxlU3RvcCh1 aW50MzJfdCBjb2RlKTsKLSsgIHZvaWQgZGlzYWJsZVN0b3AodWludDMyX3QgY29kZSk7Ci0rICB2 b2lkIGluY3JlYXNlU3RvcENvdW50ZXIodWludDMyX3QgY29kZSk7Ci0rICB2b2lkIHByaW50U3Rv cEluZm8odWludDMyX3QgY29kZSk7Ci0rCi0rICBKUzo6UHJvZmlsaW5nRnJhbWVJdGVyYXRvcjo6 UmVnaXN0ZXJTdGF0ZSByZWdpc3RlclN0YXRlKCk7Ci0rCi0rICBib29sIE1PWl9BTFdBWVNfSU5M SU5FIGhhbmRsZVdhc21TZWdGYXVsdCh1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBudW1CeXRlcykg ewotKyAgICBpZiAoTU9aX0xJS0VMWSghanM6Ondhc206OkNvZGVFeGlzdHMpKSB7Ci0rICAgICAg cmV0dXJuIGZhbHNlOwotKyAgICB9Ci0rICAgIHVpbnQ4X3QqIG5ld1BDOwotKyAgICBpZiAoIWpz Ojp3YXNtOjpNZW1vcnlBY2Nlc3NUcmFwcyhyZWdpc3RlclN0YXRlKCksICh1aW50OF90KilhZGRy LCBudW1CeXRlcywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld1BD KSkgewotKyAgICAgIHJldHVybiBmYWxzZTsKLSsgICAgfQotKyAgICBMTEJpdF8gPSBmYWxzZTsK LSsgICAgc2V0X3BjKGludDY0X3QobmV3UEMpKTsKLSsgICAgcmV0dXJuIHRydWU7Ci0rICB9Ci0r Ci0rICB2b2lkIGluc3RydWN0aW9uRGVjb2RlKFNpbUluc3RydWN0aW9uKiBpbnN0cik7Ci0rCi0r IHB1YmxpYzoKLSsgIHN0YXRpYyBpbnQ2NF90IFN0b3BTaW1BdDsKLSsKLSsgIHN0YXRpYyB2b2lk KiBSZWRpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZvaWQqIG5hdGl2ZUZ1bmN0aW9uLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJJRnVuY3Rpb25UeXBlIHR5cGUpOwotKwot KyBwcml2YXRlOgotKyAgdm9pZCBzZXRDYWxsUmVzdWx0RG91YmxlKGRvdWJsZSByZXN1bHQpOwot KyAgdm9pZCBzZXRDYWxsUmVzdWx0RmxvYXQoZmxvYXQgcmVzdWx0KTsKLSsgIHZvaWQgc2V0Q2Fs bFJlc3VsdChpbnQ2NF90IHJlcyk7Ci0rIyAgaWZkZWYgWFBfREFSV0lOCi0rICB2b2lkIHNldENh bGxSZXN1bHQoaW50cHRyX3QgcmVzKTsKLSsjICBlbmRpZgotKyAgdm9pZCBzZXRDYWxsUmVzdWx0 KF9faW50MTI4IHJlcyk7Ci0rCi0rICB2b2lkIGNhbGxJbnRlcm5hbCh1aW50OF90KiBlbnRyeSk7 Ci0rCi0rICAvLyBBcmNoaXRlY3R1cmUgc3RhdGUuCi0rICBpbnQ2NF90IHJlZ2lzdGVyc19ba051 bVNpbXVSZWdpc3RlcnNdOwotKyAgaW50NjRfdCBGUFVyZWdpc3RlcnNfW2tOdW1GUFVSZWdpc3Rl cnNdOwotKyAgLy8gVlIgbmFtZXNwYWNlIChBbHRpdmVjL1ZNWCByZWdpc3RlcnMgVlIwLVZSMzEg PT0gVlNSMzItNjMpLiBTdG9yZWQgYXMKLSsgIC8vIDE2IHJhdyBieXRlcyBwZXIgcmVnaXN0ZXIg dG8gcHJlc2VydmUgZXhhY3QgYXJjaGl0ZWN0dXJhbCBieXRlIG9yZGVyCi0rICAvLyBpbmRlcGVu ZGVudCBvZiBob3N0IGVuZGlhbm5lc3MuIEFjY2Vzc29ycyBkZWZpbmVkIGJlbG93OyB0aGUgYnl0 ZXMKLSsgIC8vIGFycmF5IGlzIHRoZSBncm91bmQgdHJ1dGguCi0rICB1aW50OF90IFZScmVnaXN0 ZXJzX1trTnVtVlJSZWdpc3RlcnNdWzE2XTsKLSsKLSsgIC8vIFBQQzY0IFNwZWNpYWwgUHVycG9z ZSBSZWdpc3RlcnMuCi0rICBpbnQ2NF90IExSXzsKLSsgIGludDY0X3QgQ1RSXzsKLSsgIHVpbnQz Ml90IENSXzsKLSsgIHVpbnQ2NF90IFhFUl87Ci0rICB1aW50NjRfdCBGUFNDUl87Ci0rCi0rICAv LyBBdG9taWNzLgotKyAgYm9vbCBMTEJpdF87Ci0rICB1aW50cHRyX3QgTExBZGRyXzsKLSsgIGlu dDY0X3QgbGFzdExMVmFsdWVfOwotKwotKyAgLy8gU2ltdWxhdG9yIHN1cHBvcnQuCi0rICBjaGFy KiBzdGFja187Ci0rICB1aW50cHRyX3Qgc3RhY2tMaW1pdF87Ci0rICBib29sIHBjX21vZGlmaWVk XzsKLSsgIGludDY0X3QgaWNvdW50XzsKLSsgIGludDY0X3QgYnJlYWtfY291bnRfOwotKwotKyAg Y2hhciogbGFzdERlYnVnZ2VySW5wdXRfOwotKwotKyAgU2ltSW5zdHJ1Y3Rpb24qIGJyZWFrX3Bj XzsKLSsgIEluc3RyIGJyZWFrX2luc3RyXzsKLSsKLSsgIGJvb2wgc2luZ2xlX3N0ZXBwaW5nXzsK LSsgIFNpbmdsZVN0ZXBDYWxsYmFjayBzaW5nbGVfc3RlcF9jYWxsYmFja187Ci0rICB2b2lkKiBz aW5nbGVfc3RlcF9jYWxsYmFja19hcmdfOwotKwotKyAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtO dW1PZldhdGNoZWRTdG9wcyA9IDI1NjsKLSsgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrU3RvcERp c2FibGVkQml0ID0gMVUgPDwgMzE7Ci0rCi0rICBzdHJ1Y3QgU3RvcENvdW50QW5kRGVzYyB7Ci0r ICAgIHVpbnQzMl90IGNvdW50XzsKLSsgICAgY2hhciogZGVzY187Ci0rICB9OwotKyAgU3RvcENv dW50QW5kRGVzYyB3YXRjaGVkU3RvcHNfW2tOdW1PZldhdGNoZWRTdG9wc107Ci0rfTsKLSsKLSsv LyBQcm9jZXNzLXdpZGUgc2ltdWxhdG9yIHN0YXRlLgotK2NsYXNzIFNpbXVsYXRvclByb2Nlc3Mg ewotKyAgZnJpZW5kIGNsYXNzIFJlZGlyZWN0aW9uOwotKyAgZnJpZW5kIGNsYXNzIEF1dG9Mb2Nr U2ltdWxhdG9yQ2FjaGU7Ci0rCi0rIHByaXZhdGU6Ci0rICBzdHJ1Y3QgSUNhY2hlSGFzaGVyIHsK LSsgICAgdHlwZWRlZiB2b2lkKiBLZXk7Ci0rICAgIHR5cGVkZWYgdm9pZCogTG9va3VwOwotKyAg ICBzdGF0aWMgSGFzaE51bWJlciBoYXNoKGNvbnN0IExvb2t1cCYgbCk7Ci0rICAgIHN0YXRpYyBi b29sIG1hdGNoKGNvbnN0IEtleSYgaywgY29uc3QgTG9va3VwJiBsKTsKLSsgIH07Ci0rCi0rIHB1 YmxpYzoKLSsgIHR5cGVkZWYgSGFzaE1hcDx2b2lkKiwgQ2FjaGVQYWdlKiwgSUNhY2hlSGFzaGVy LCBTeXN0ZW1BbGxvY1BvbGljeT4gSUNhY2hlTWFwOwotKwotKyAgc3RhdGljIG1vemlsbGE6OkF0 b21pYzxzaXplX3QsIG1vemlsbGE6OlJlbGVhc2VBY3F1aXJlPgotKyAgICAgIElDYWNoZUNoZWNr aW5nRGlzYWJsZUNvdW50OwotKyAgc3RhdGljIHZvaWQgRmx1c2hJQ2FjaGUodm9pZCogc3RhcnQs IHNpemVfdCBzaXplKTsKLSsgIHN0YXRpYyB2b2lkIGNoZWNrSUNhY2hlTG9ja2VkKFNpbUluc3Ry dWN0aW9uKiBpbnN0cik7Ci0rCi0rICBzdGF0aWMgYm9vbCBpbml0aWFsaXplKCkgewotKyAgICBz aW5nbGV0b25fID0ganNfbmV3PFNpbXVsYXRvclByb2Nlc3M+KCk7Ci0rICAgIHJldHVybiBzaW5n bGV0b25fOwotKyAgfQotKyAgc3RhdGljIHZvaWQgZGVzdHJveSgpIHsKLSsgICAganNfZGVsZXRl KHNpbmdsZXRvbl8pOwotKyAgICBzaW5nbGV0b25fID0gbnVsbHB0cjsKLSsgIH0KLSsKLSsgIFNp bXVsYXRvclByb2Nlc3MoKTsKLSsgIH5TaW11bGF0b3JQcm9jZXNzKCk7Ci0rCi0rIHByaXZhdGU6 Ci0rICBzdGF0aWMgU2ltdWxhdG9yUHJvY2Vzcyogc2luZ2xldG9uXzsKLSsKLSsgIE11dGV4IGNh Y2hlTG9ja187Ci0rICBSZWRpcmVjdGlvbiogcmVkaXJlY3Rpb25fOwotKyAgSUNhY2hlTWFwIGlj YWNoZV87Ci0rCi0rIHB1YmxpYzoKLSsgIHN0YXRpYyBJQ2FjaGVNYXAmIGljYWNoZSgpIHsKLSsg ICAgc2luZ2xldG9uXy0+Y2FjaGVMb2NrXy5hc3NlcnRPd25lZEJ5Q3VycmVudFRocmVhZCgpOwot KyAgICByZXR1cm4gc2luZ2xldG9uXy0+aWNhY2hlXzsKLSsgIH0KLSsKLSsgIHN0YXRpYyBSZWRp cmVjdGlvbiogcmVkaXJlY3Rpb24oKSB7Ci0rICAgIHNpbmdsZXRvbl8tPmNhY2hlTG9ja18uYXNz ZXJ0T3duZWRCeUN1cnJlbnRUaHJlYWQoKTsKLSsgICAgcmV0dXJuIHNpbmdsZXRvbl8tPnJlZGly ZWN0aW9uXzsKLSsgIH0KLSsKLSsgIHN0YXRpYyB2b2lkIHNldFJlZGlyZWN0aW9uKGpzOjpqaXQ6 OlJlZGlyZWN0aW9uKiByZWRpcmVjdGlvbikgewotKyAgICBzaW5nbGV0b25fLT5jYWNoZUxvY2tf LmFzc2VydE93bmVkQnlDdXJyZW50VGhyZWFkKCk7Ci0rICAgIHNpbmdsZXRvbl8tPnJlZGlyZWN0 aW9uXyA9IHJlZGlyZWN0aW9uOwotKyAgfQotK307Ci0rCi0rfSAgLy8gbmFtZXNwYWNlIGppdAot K30gIC8vIG5hbWVzcGFjZSBqcwotKwotKyNlbmRpZiAvKiBKU19TSU1VTEFUT1JfUFBDNjQgKi8K LSsKLSsjZW5kaWYgLyogaml0X3BwYzY0X1NpbXVsYXRvcl9wcGM2NF9oICovCi1kaWZmIC0tZ2l0 IGEvanMvc3JjL2ppdC9wcGM2NC9UcmFtcG9saW5lLXBwYzY0LmNwcCBiL2pzL3NyYy9qaXQvcHBj NjQvVHJhbXBvbGluZS1wcGM2NC5jcHAKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAw MDAwMDAwMDAuLjUxNWE5MzFjODZiMAotLS0tIC9kZXYvbnVsbAotKysrIGIvanMvc3JjL2ppdC9w cGM2NC9UcmFtcG9saW5lLXBwYzY0LmNwcAotQEAgLTAsMCArMSw2NDggQEAKLSsvKiAtKi0gTW9k ZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZz ZXQ6IDIgLSotCi0rICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgotKyAqIFRo aXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxs YSBQdWJsaWMKLSsgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBu b3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCi0rICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0 IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KLSsKLSsjaW5jbHVkZSAiaml0L0JhaWxv dXRzLmgiCi0rI2luY2x1ZGUgImppdC9CYXNlbGluZUZyYW1lLmgiCi0rI2luY2x1ZGUgImppdC9D YWxsZWVUb2tlbi5oIgotKyNpbmNsdWRlICJqaXQvSml0RnJhbWVzLmgiCi0rI2luY2x1ZGUgImpp dC9KaXRSdW50aW1lLmgiCi0rI2luY2x1ZGUgImppdC9QZXJmU3Bld2VyLmgiCi0rI2luY2x1ZGUg ImppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQuaCIKLSsjaW5jbHVkZSAiaml0L1ZNRnVu Y3Rpb25zLmgiCi0rI2luY2x1ZGUgInZtL0ppdEFjdGl2YXRpb24uaCIKLSsjaW5jbHVkZSAidm0v SlNDb250ZXh0LmgiCi0rCi0rI2luY2x1ZGUgImppdC9NYWNyb0Fzc2VtYmxlci1pbmwuaCIKLSsK LSt1c2luZyBuYW1lc3BhY2UganM7Ci0rdXNpbmcgbmFtZXNwYWNlIGpzOjpqaXQ7Ci0rCi0rLy8g RmxvYXQgKFNpbmdsZStEb3VibGUpIGFuZCBhbGwgR1BScy4gU2ltZDEyOCBleGNsdWRlZCDigJQg SW9uIGNvbXBpbGVzIEpTCi0rLy8gKG5vIHYxMjggdHlwZSksIHNvIFNJTUQgcmVncyBhcmUgbmV2 ZXIgbGl2ZSBhdCBiYWlsb3V0IC8gaW52YWxpZGF0b3IgLwotKy8vIHByZUJhcnJpZXIgZW50cnku IEluY2x1ZGluZyB0aGVtIHdvdWxkIGZvcmNlIHRoZSBiYWlsb3V0IGZyYW1lJ3MKLSsvLyBGUFVB cnJheSB0byBob2xkIHYxMjggc2xvdHMgdGhhdCBJb24gbmV2ZXIgd3JpdGVzLgotK3N0YXRpYyBj b25zdCBMaXZlUmVnaXN0ZXJTZXQgQWxsUmVncyA9IExpdmVSZWdpc3RlclNldCgKLSsgICAgR2Vu ZXJhbFJlZ2lzdGVyU2V0KFJlZ2lzdGVyczo6QWxsTWFzayksCi0rICAgIEZsb2F0UmVnaXN0ZXJT ZXQoRmxvYXRSZWdpc3RlcnM6OkFsbFNpbmdsZU1hc2sgfAotKyAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXJzOjpBbGxEb3VibGVNYXNrKSk7Ci0rCi0rc3RhdGljX2Fzc2VydChzaXpl b2YodWludHB0cl90KSA9PSBzaXplb2YodWludDY0X3QpLCAiTm90IDY0LWJpdCBjbGVhbi4iKTsK LSsKLSsvLyBQUEM2NCBFTEZ2MiBjYWxsZWUtc2F2ZWQ6IEdQUnMgcjE0LXIzMSwgRlBScyBmMTQt ZjMxLCBWUnMgVlIyMC1WUjMxLCBMUi4KLSsvLyBXZSBhbHNvIHNhdmUgcmVnX3ZwIChyMTAgLyBJ bnRBcmdSZWc3KSBzbyB3ZSBjYW4gdXNlIGl0IGFmdGVyIHRoZSBKSVQgY2FsbC4KLSsvLwotKy8v IExheW91dCBpcyBhbGlnbmFzKDE2KSBzbyB0aGF0IGFmdGVyIGByZXNlcnZlU3RhY2soc2l6ZW9m KEVudGVySklUUmVncykpYAotKy8vIHRoZSBTUC1yZWxhdGl2ZSBvZmZzZXQgb2YgZXZlcnkgVlIg c2xvdCBpcyAxNi1ieXRlIGFsaWduZWQsIHNhdGlzZnlpbmcKLSsvLyB0aGUgMTYtYnl0ZSBhbGln bm1lbnQgcmVxdWlyZW1lbnQgb2Ygc3R4dmQyeCAvIHN0dnggKHN0dnggaXMgdGVjaG5pY2FsbHkK LSsvLyBhbGlnbm1lbnQtdG9sZXJhbnQsIGJ1dCB3ZSdkIHJhdGhlciBhbGlnbiBieSBjb25zdHJ1 Y3Rpb24pLiBQYWRkaW5nIGF0Ci0rLy8gdGhlIGVuZCBrZWVwcyBzaXplb2YgYSBtdWx0aXBsZSBv ZiAxNiBzbyBTUCBzdGF5cyBxdWFkd29yZC1hbGlnbmVkIHBlcgotKy8vIHRoZSBFTEZ2MiBzdGFj ay1wb2ludGVyIHJ1bGUuCi0rc3RydWN0IGFsaWduYXMoMTYpIEVudGVySklUUmVncyB7Ci0rICAv LyBWUjIwLVZSMzEgZmlyc3Qgc28gdGhlaXIgU1AtcmVsYXRpdmUgb2Zmc2V0cyBhcmUgMCwgMTYs IDMyLCAuLi4g4oCUIGFsbAotKyAgLy8gMTYtYnl0ZSBhbGlnbmVkIHJlZ2FyZGxlc3Mgb2Ygd2hh dCBmb2xsb3dzLgotKyAgdWludDhfdCB2cjIwWzE2XTsKLSsgIHVpbnQ4X3QgdnIyMVsxNl07Ci0r ICB1aW50OF90IHZyMjJbMTZdOwotKyAgdWludDhfdCB2cjIzWzE2XTsKLSsgIHVpbnQ4X3QgdnIy NFsxNl07Ci0rICB1aW50OF90IHZyMjVbMTZdOwotKyAgdWludDhfdCB2cjI2WzE2XTsKLSsgIHVp bnQ4X3QgdnIyN1sxNl07Ci0rICB1aW50OF90IHZyMjhbMTZdOwotKyAgdWludDhfdCB2cjI5WzE2 XTsKLSsgIHVpbnQ4X3QgdnIzMFsxNl07Ci0rICB1aW50OF90IHZyMzFbMTZdOwotKwotKyAgZG91 YmxlIGYzMTsKLSsgIGRvdWJsZSBmMzA7Ci0rICBkb3VibGUgZjI5OwotKyAgZG91YmxlIGYyODsK LSsgIGRvdWJsZSBmMjc7Ci0rICBkb3VibGUgZjI2OwotKyAgZG91YmxlIGYyNTsKLSsgIGRvdWJs ZSBmMjQ7Ci0rICBkb3VibGUgZjIzOwotKyAgZG91YmxlIGYyMjsKLSsgIGRvdWJsZSBmMjE7Ci0r ICBkb3VibGUgZjIwOwotKyAgZG91YmxlIGYxOTsKLSsgIGRvdWJsZSBmMTg7Ci0rICBkb3VibGUg ZjE3OwotKyAgZG91YmxlIGYxNjsKLSsgIGRvdWJsZSBmMTU7Ci0rICBkb3VibGUgZjE0OwotKwot KyAgdWludDY0X3QgcjMxOyAgLy8gRnJhbWVQb2ludGVyCi0rICB1aW50NjRfdCByMzA7Ci0rICB1 aW50NjRfdCByMjk7Ci0rICB1aW50NjRfdCByMjg7Ci0rICB1aW50NjRfdCByMjc7Ci0rICB1aW50 NjRfdCByMjY7Ci0rICB1aW50NjRfdCByMjU7Ci0rICB1aW50NjRfdCByMjQ7Ci0rICB1aW50NjRf dCByMjM7Ci0rICB1aW50NjRfdCByMjI7Ci0rICB1aW50NjRfdCByMjE7Ci0rICB1aW50NjRfdCBy MjA7Ci0rICB1aW50NjRfdCByMTk7Ci0rICB1aW50NjRfdCByMTg7Ci0rICB1aW50NjRfdCByMTc7 Ci0rICB1aW50NjRfdCByMTY7Ci0rICB1aW50NjRfdCByMTU7Ci0rICB1aW50NjRfdCByMTQ7Ci0r ICB1aW50NjRfdCByMjsgIC8vIFRPQyBwb2ludGVyCi0rICB1aW50NjRfdCBscjsKLSsgIC8vIFNh dmUgcmVnX3ZwIChyMTApIG9uIHN0YWNrIHNvIHdlIGNhbiB1c2UgaXQgYWZ0ZXIgdGhlIEpJVCBj YWxsIHJldHVybnMuCi0rICB1aW50NjRfdCByMTA7Ci0rfTsKLSsvLyBhbGlnbmFzKDE2KSBvbiB0 aGUgc3RydWN0IGVuc3VyZXMgc2l6ZW9mIGlzIGEgbXVsdGlwbGUgb2YgMTYsIHdoaWNoIGtlZXBz Ci0rLy8gU1AgcXVhZHdvcmQtYWxpZ25lZCBhZnRlciBgcmVzZXJ2ZVN0YWNrKHNpemVvZihFbnRl ckpJVFJlZ3MpKWAuIFRoZQotKy8vIGV4aXN0aW5nIGZpZWxkcyB0b3RhbCAzMTIgYnl0ZXM7IHdp dGggdGhlIDE5MiBieXRlcyBvZiBWUiBzbG90cyB3ZSBhcmUKLSsvLyBhdCA1MDQsIHdoaWNoIGFs aWduYXMoMTYpIGJ1bXBzIHRvIDUxMi4KLStzdGF0aWNfYXNzZXJ0KChzaXplb2YoRW50ZXJKSVRS ZWdzKSAlIDE2KSA9PSAwLAotKyAgICAgICAgICAgICAgIkVudGVySklUUmVncyBtdXN0IGJlIDE2 LWJ5dGUgYWxpZ25lZCB0byBrZWVwIFNQIGFsaWduZWQiKTsKLSsKLStzdGF0aWMgdm9pZCBHZW5l cmF0ZVJldHVybihNYWNyb0Fzc2VtYmxlciYgbWFzbSkgewotKyAgTU9aX0FTU0VSVChtYXNtLmZy YW1lUHVzaGVkKCkgPT0gc2l6ZW9mKEVudGVySklUUmVncykpOwotKwotKyAgLy8gUmVzdG9yZSBu b24tdm9sYXRpbGUgR1BScy4KLSsgIG1hc20uYXNfbGQocjE0LCBTdGFja1BvaW50ZXIsIG9mZnNl dG9mKEVudGVySklUUmVncywgcjE0KSk7Ci0rICBtYXNtLmFzX2xkKHIxNSwgU3RhY2tQb2ludGVy LCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxNSkpOwotKyAgbWFzbS5hc19sZChyMTYsIFN0YWNr UG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTYpKTsKLSsgIG1hc20uYXNfbGQocjE3 LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjE3KSk7Ci0rICBtYXNtLmFz X2xkKHIxOCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxOCkpOwotKyAg bWFzbS5hc19sZChyMTksIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTkp KTsKLSsgIG1hc20uYXNfbGQocjIwLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVn cywgcjIwKSk7Ci0rICBtYXNtLmFzX2xkKHIyMSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRl ckpJVFJlZ3MsIHIyMSkpOwotKyAgbWFzbS5hc19sZChyMjIsIFN0YWNrUG9pbnRlciwgb2Zmc2V0 b2YoRW50ZXJKSVRSZWdzLCByMjIpKTsKLSsgIG1hc20uYXNfbGQocjIzLCBTdGFja1BvaW50ZXIs IG9mZnNldG9mKEVudGVySklUUmVncywgcjIzKSk7Ci0rICBtYXNtLmFzX2xkKHIyNCwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyNCkpOwotKyAgbWFzbS5hc19sZChyMjUs IFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjUpKTsKLSsgIG1hc20uYXNf bGQocjI2LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI2KSk7Ci0rICBt YXNtLmFzX2xkKHIyNywgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyNykp OwotKyAgbWFzbS5hc19sZChyMjgsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdz LCByMjgpKTsKLSsgIG1hc20uYXNfbGQocjI5LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVy SklUUmVncywgcjI5KSk7Ci0rICBtYXNtLmFzX2xkKHIzMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRv ZihFbnRlckpJVFJlZ3MsIHIzMCkpOwotKyAgbWFzbS5hc19sZChyMzEsIFN0YWNrUG9pbnRlciwg b2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMzEpKTsKLSsgIG1hc20uYXNfbGQocjIsIFN0YWNrUG9p bnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMikpOwotKwotKyAgLy8gUmVzdG9yZSBMUi4K LSsgIG1hc20uYXNfbGQocjAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBs cikpOwotKyAgbWFzbS54c19tdGxyKHIwKTsKLSsKLSsgIC8vIFJlc3RvcmUgbm9uLXZvbGF0aWxl IEZQUnMuCi0rICBtYXNtLmFzX2xmZChmMTQsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJK SVRSZWdzLCBmMTQpKTsKLSsgIG1hc20uYXNfbGZkKGYxNSwgU3RhY2tQb2ludGVyLCBvZmZzZXRv ZihFbnRlckpJVFJlZ3MsIGYxNSkpOwotKyAgbWFzbS5hc19sZmQoZjE2LCBTdGFja1BvaW50ZXIs IG9mZnNldG9mKEVudGVySklUUmVncywgZjE2KSk7Ci0rICBtYXNtLmFzX2xmZChmMTcsIFN0YWNr UG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTcpKTsKLSsgIG1hc20uYXNfbGZkKGYx OCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxOCkpOwotKyAgbWFzbS5h c19sZmQoZjE5LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjE5KSk7Ci0r ICBtYXNtLmFzX2xmZChmMjAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBm MjApKTsKLSsgIG1hc20uYXNfbGZkKGYyMSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJ VFJlZ3MsIGYyMSkpOwotKyAgbWFzbS5hc19sZmQoZjIyLCBTdGFja1BvaW50ZXIsIG9mZnNldG9m KEVudGVySklUUmVncywgZjIyKSk7Ci0rICBtYXNtLmFzX2xmZChmMjMsIFN0YWNrUG9pbnRlciwg b2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjMpKTsKLSsgIG1hc20uYXNfbGZkKGYyNCwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyNCkpOwotKyAgbWFzbS5hc19sZmQoZjI1 LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjI1KSk7Ci0rICBtYXNtLmFz X2xmZChmMjYsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjYpKTsKLSsg IG1hc20uYXNfbGZkKGYyNywgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYy NykpOwotKyAgbWFzbS5hc19sZmQoZjI4LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklU UmVncywgZjI4KSk7Ci0rICBtYXNtLmFzX2xmZChmMjksIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2Yo RW50ZXJKSVRSZWdzLCBmMjkpKTsKLSsgIG1hc20uYXNfbGZkKGYzMCwgU3RhY2tQb2ludGVyLCBv ZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYzMCkpOwotKyAgbWFzbS5hc19sZmQoZjMxLCBTdGFja1Bv aW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjMxKSk7Ci0rCi0rICAvLyBSZXN0b3JlIGNh bGxlZS1zYXZlZCBWUjIwLVZSMzEgKEVMRnYyKS4gbHZ4IHVzZXMgaW5kZXhlZCBhZGRyZXNzaW5n Ci0rICAvLyAoUkEgKyBSQiksIGFuZCByMCdzIHZhbHVlIGlzIHVzZWQgaGVyZSBhcyBSQiAoUkEg PSBTdGFja1BvaW50ZXIgaXMKLSsgIC8vIG5vbi16ZXJvLCBzbyBpdHMgdmFsdWUgaXMgYWRkZWQp LiByMCBpcyBub24tYWxsb2NhdGFibGUuCi0rI2RlZmluZSBSRVNUT1JFX1ZSKE4pICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIG1hc20ueHNfbGko cjAsIG9mZnNldG9mKEVudGVySklUUmVncywgdnIjI04pKTsgICAgICAgICAgICAgICAgICAgICAg XAotKyAgbWFzbS5hc19sdngoTiwgU3RhY2tQb2ludGVyLCByMCkKLSsgIFJFU1RPUkVfVlIoMjAp OyBSRVNUT1JFX1ZSKDIxKTsgUkVTVE9SRV9WUigyMik7IFJFU1RPUkVfVlIoMjMpOwotKyAgUkVT VE9SRV9WUigyNCk7IFJFU1RPUkVfVlIoMjUpOyBSRVNUT1JFX1ZSKDI2KTsgUkVTVE9SRV9WUigy Nyk7Ci0rICBSRVNUT1JFX1ZSKDI4KTsgUkVTVE9SRV9WUigyOSk7IFJFU1RPUkVfVlIoMzApOyBS RVNUT1JFX1ZSKDMxKTsKLSsjdW5kZWYgUkVTVE9SRV9WUgotKwotKyAgbWFzbS5mcmVlU3RhY2so c2l6ZW9mKEVudGVySklUUmVncykpOwotKwotKyAgbWFzbS5hc19ibHIoKTsKLSt9Ci0rCi0rc3Rh dGljIHZvaWQgR2VuZXJhdGVQcm9sb2d1ZShNYWNyb0Fzc2VtYmxlciYgbWFzbSkgewotKyAgLy8g U2F2ZSBMUiBmaXJzdCAoUFBDNjQgTFIgaXMgU1BSLCBub3QgR1BSKS4KLSsgIG1hc20ueHNfbWZs cihyMCk7Ci0rCi0rICAvLyBFTEZ2MiBwcm9sb2d1ZSBjb252ZW50aW9uOiBzYXZlIExSIGF0IGNh bGxlcidzIGZyYW1lIFtTUCsxNl0gQkVGT1JFCi0rICAvLyBkZWNyZW1lbnRpbmcgU1AuIEV4dGVy bmFsIHVud2luZGVycyAoZ2RiLCBwZXJmLCBsaWJ1bndpbmQpIHdhbGsgdGhlCi0rICAvLyBzdGFj ayBieSByZWFkaW5nIExSLXNhdmUgc2xvdHMgYXQgW1NQKzE2XSBvZiBldmVyeSBmcmFtZTsgd2l0 aG91dAotKyAgLy8gdGhpcyB3cml0ZSB0aGV5J2QgZmluZCBqdW5rIGF0IG91ciBjYWxsZXIncyBz bG90LiBDb3N0cyAxIGV4dHJhCi0rICAvLyBpbnN0cnVjdGlvbjsgd2Ugc3RpbGwga2VlcCB0aGUg aW4tZnJhbWUgc2F2ZSBiZWxvdyBmb3IgY2xlYW4KLSsgIC8vIHJlc3RvcmUgc3ltbWV0cnkuCi0r ICBtYXNtLmFzX3N0ZChyMCwgU3RhY2tQb2ludGVyLCAxNik7Ci0rCi0rICBtYXNtLnJlc2VydmVT dGFjayhzaXplb2YoRW50ZXJKSVRSZWdzKSk7Ci0rCi0rICAvLyBTYXZlIExSIChhbHNvIGtlcHQg aW4gb3VyIG93biBmcmFtZSBmb3IgdGhlIGNsZWFuIHJlc3RvcmUgaW4KLSsgIC8vIEdlbmVyYXRl UmV0dXJuIOKAlCBzZWUgY29tbWVudCB0aGVyZSkuCi0rICBtYXNtLmFzX3N0ZChyMCwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGxyKSk7Ci0rCi0rICAvLyBTYXZlIG5vbi12 b2xhdGlsZSBHUFJzLgotKyAgbWFzbS5hc19zdGQocjIsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2Yo RW50ZXJKSVRSZWdzLCByMikpOwotKyAgbWFzbS5hc19zdGQocjE0LCBTdGFja1BvaW50ZXIsIG9m ZnNldG9mKEVudGVySklUUmVncywgcjE0KSk7Ci0rICBtYXNtLmFzX3N0ZChyMTUsIFN0YWNrUG9p bnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTUpKTsKLSsgIG1hc20uYXNfc3RkKHIxNiwg U3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxNikpOwotKyAgbWFzbS5hc19z dGQocjE3LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjE3KSk7Ci0rICBt YXNtLmFzX3N0ZChyMTgsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTgp KTsKLSsgIG1hc20uYXNfc3RkKHIxOSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJl Z3MsIHIxOSkpOwotKyAgbWFzbS5hc19zdGQocjIwLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVu dGVySklUUmVncywgcjIwKSk7Ci0rICBtYXNtLmFzX3N0ZChyMjEsIFN0YWNrUG9pbnRlciwgb2Zm c2V0b2YoRW50ZXJKSVRSZWdzLCByMjEpKTsKLSsgIG1hc20uYXNfc3RkKHIyMiwgU3RhY2tQb2lu dGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyMikpOwotKyAgbWFzbS5hc19zdGQocjIzLCBT dGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjIzKSk7Ci0rICBtYXNtLmFzX3N0 ZChyMjQsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjQpKTsKLSsgIG1h c20uYXNfc3RkKHIyNSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyNSkp OwotKyAgbWFzbS5hc19zdGQocjI2LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVn cywgcjI2KSk7Ci0rICBtYXNtLmFzX3N0ZChyMjcsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50 ZXJKSVRSZWdzLCByMjcpKTsKLSsgIG1hc20uYXNfc3RkKHIyOCwgU3RhY2tQb2ludGVyLCBvZmZz ZXRvZihFbnRlckpJVFJlZ3MsIHIyOCkpOwotKyAgbWFzbS5hc19zdGQocjI5LCBTdGFja1BvaW50 ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI5KSk7Ci0rICBtYXNtLmFzX3N0ZChyMzAsIFN0 YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMzApKTsKLSsgIG1hc20uYXNfc3Rk KHIzMSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIzMSkpOwotKwotKyAg Ly8gU2F2ZSByZWdfdnAgKHIxMCkgc28gd2UgY2FuIHJldHJpZXZlIGl0IGFmdGVyIHRoZSBKSVQg Y2FsbC4KLSsgIG1hc20uYXNfc3RkKHIxMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJ VFJlZ3MsIHIxMCkpOwotKwotKyAgLy8gU2F2ZSBub24tdm9sYXRpbGUgRlBScy4KLSsgIG1hc20u YXNfc3RmZChmMTQsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTQpKTsK LSsgIG1hc20uYXNfc3RmZChmMTUsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdz LCBmMTUpKTsKLSsgIG1hc20uYXNfc3RmZChmMTYsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50 ZXJKSVRSZWdzLCBmMTYpKTsKLSsgIG1hc20uYXNfc3RmZChmMTcsIFN0YWNrUG9pbnRlciwgb2Zm c2V0b2YoRW50ZXJKSVRSZWdzLCBmMTcpKTsKLSsgIG1hc20uYXNfc3RmZChmMTgsIFN0YWNrUG9p bnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTgpKTsKLSsgIG1hc20uYXNfc3RmZChmMTks IFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTkpKTsKLSsgIG1hc20uYXNf c3RmZChmMjAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjApKTsKLSsg IG1hc20uYXNfc3RmZChmMjEsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBm MjEpKTsKLSsgIG1hc20uYXNfc3RmZChmMjIsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJK SVRSZWdzLCBmMjIpKTsKLSsgIG1hc20uYXNfc3RmZChmMjMsIFN0YWNrUG9pbnRlciwgb2Zmc2V0 b2YoRW50ZXJKSVRSZWdzLCBmMjMpKTsKLSsgIG1hc20uYXNfc3RmZChmMjQsIFN0YWNrUG9pbnRl ciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjQpKTsKLSsgIG1hc20uYXNfc3RmZChmMjUsIFN0 YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjUpKTsKLSsgIG1hc20uYXNfc3Rm ZChmMjYsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjYpKTsKLSsgIG1h c20uYXNfc3RmZChmMjcsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjcp KTsKLSsgIG1hc20uYXNfc3RmZChmMjgsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRS ZWdzLCBmMjgpKTsKLSsgIG1hc20uYXNfc3RmZChmMjksIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2Yo RW50ZXJKSVRSZWdzLCBmMjkpKTsKLSsgIG1hc20uYXNfc3RmZChmMzAsIFN0YWNrUG9pbnRlciwg b2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMzApKTsKLSsgIG1hc20uYXNfc3RmZChmMzEsIFN0YWNr UG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMzEpKTsKLSsKLSsgIC8vIFNhdmUgY2Fs bGVlLXNhdmVkIFZSMjAtVlIzMSAoRUxGdjIpLiBUaGUgSklUIGZyZWVseSB1c2VzIFZNWCByZWdp c3RlcnMKLSsgIC8vIHZpYSBFbWl0Vm14QmluYXJ5IGV0Yy47IHdpdGhvdXQgdGhpcyBzYXZlIHRo ZSBDIGNhbGxlcidzIFZSMjAtVlIzMQotKyAgLy8gY29udGVudHMgd291bGQgYmUgdHJhc2hlZCBv biByZXR1cm4uIHN0dnggdXNlcyBpbmRleGVkIGFkZHJlc3Npbmcg4oCUCi0rICAvLyByMCBob2xk cyB0aGUgb2Zmc2V0IChub24tYWxsb2NhdGFibGUgaW4gSklUIHJlZ2FsbG9jOyBzYWZlIHRvIHVz ZSBhcwotKyAgLy8gYSBmcmVlIHRlbXAgaGVyZSkuCi0rI2RlZmluZSBTQVZFX1ZSKE4pICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIG1hc20u eHNfbGkocjAsIG9mZnNldG9mKEVudGVySklUUmVncywgdnIjI04pKTsgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgbWFzbS5hc19zdHZ4KE4sIFN0YWNrUG9pbnRlciwgcjApCi0rICBTQVZFX1ZS KDIwKTsgU0FWRV9WUigyMSk7IFNBVkVfVlIoMjIpOyBTQVZFX1ZSKDIzKTsKLSsgIFNBVkVfVlIo MjQpOyBTQVZFX1ZSKDI1KTsgU0FWRV9WUigyNik7IFNBVkVfVlIoMjcpOwotKyAgU0FWRV9WUigy OCk7IFNBVkVfVlIoMjkpOyBTQVZFX1ZSKDMwKTsgU0FWRV9WUigzMSk7Ci0rI3VuZGVmIFNBVkVf VlIKLSt9Ci0rCi0rdm9pZCBKaXRSdW50aW1lOjpnZW5lcmF0ZUVudGVySklUKEpTQ29udGV4dCog Y3gsIE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7Ci0rICBBdXRvQ3JlYXRlZEJ5IGFjYihtYXNtLCAi Sml0UnVudGltZTo6Z2VuZXJhdGVFbnRlckpJVCIpOwotKwotKyAgZW50ZXJKSVRPZmZzZXRfID0g c3RhcnRUcmFtcG9saW5lQ29kZShtYXNtKTsKLSsKLSsgIC8vIEVudGVySml0Q29kZSBzaWduYXR1 cmU6ICh2b2lkKiBjb2RlLCB1bnNpZ25lZCBhcmdjLCBWYWx1ZSogYXJndiwKLSsgIC8vICAgICAg ICAgICAgICAgICAgICAgICAgICBJbnRlcnByZXRlckZyYW1lKiBmcCwgQ2FsbGVlVG9rZW4gY2Fs bGVlVG9rZW4sCi0rICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGVudkNo YWluLCBzaXplX3QgbnVtU3RhY2tWYWx1ZXMsCi0rICAvLyAgICAgICAgICAgICAgICAgICAgICAg ICAgVmFsdWUqIHZwKQotKyAgY29uc3QgUmVnaXN0ZXIgcmVnX2NvZGUgPSBJbnRBcmdSZWcwOyAg ICAgICAgICAgICAgICAgICAgICAgLy8gcjMKLSsgIGNvbnN0IFJlZ2lzdGVyIHJlZ19hcmdjID0g SW50QXJnUmVnMTsgICAgICAgICAgICAgICAgICAgICAgIC8vIHI0Ci0rICBjb25zdCBSZWdpc3Rl ciByZWdfYXJndiA9IEludEFyZ1JlZzI7ICAgICAgICAgICAgICAgICAgICAgICAvLyByNQotKyAg Y29uc3QgbW96aWxsYTo6RGVidWdPbmx5PFJlZ2lzdGVyPiByZWdfZnJhbWUgPSBJbnRBcmdSZWcz OyAgLy8gcjYKLSsgIGNvbnN0IFJlZ2lzdGVyIHJlZ190b2tlbiA9IEludEFyZ1JlZzQ7ICAgICAg ICAgICAgICAgICAgICAgIC8vIHI3Ci0rICBjb25zdCBSZWdpc3RlciByZWdfY2hhaW4gPSBJbnRB cmdSZWc1OyAgICAgICAgICAgICAgICAgICAgICAvLyByOAotKyAgY29uc3QgUmVnaXN0ZXIgcmVn X3ZhbHVlcyA9IEludEFyZ1JlZzY7ICAgICAgICAgICAgICAgICAgICAgLy8gcjkKLSsgIGNvbnN0 IFJlZ2lzdGVyIHJlZ192cCA9IEludEFyZ1JlZzc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8v IHIxMAotKwotKyAgTU9aX0FTU0VSVChPc3JGcmFtZVJlZyA9PSByZWdfZnJhbWUpOwotKwotKyAg R2VuZXJhdGVQcm9sb2d1ZShtYXNtKTsKLSsKLSsgIC8vIFNhdmUgc3RhY2sgcG9pbnRlciBhcyBi YXNlbGluZSBmcmFtZS4KLSsgIG1hc20ubW92ZVB0cihTdGFja1BvaW50ZXIsIEZyYW1lUG9pbnRl cik7Ci0rCi0rICAvLyBVc2Ugbm9uLXZvbGF0aWxlIHNjcmF0Y2ggcmVnaXN0ZXJzIGZvciBnZW5l cmF0ZUVudGVySml0U2hhcmVkLgotKyAgLy8gcjE0LCByMTUsIHIxNyBhcmUgbm9uLXZvbGF0aWxl IGFuZCBub3Qgc3BlY2lhbC1wdXJwb3NlIGluIEpJVC4KLSsgIGdlbmVyYXRlRW50ZXJKaXRTaGFy ZWQobWFzbSwgcmVnX2FyZ2MsIHJlZ19hcmd2LCByZWdfdG9rZW4sIHIxNCwgcjE1LCByMTcpOwot KwotKyAgLy8gUHVzaCB0aGUgZGVzY3JpcHRvci4KLSsgIG1hc20udW5ib3hJbnQzMihBZGRyZXNz KHJlZ192cCwgMCksIHIxNCk7Ci0rICBtYXNtLnB1c2hGcmFtZURlc2NyaXB0b3JGb3JKaXRDYWxs KEZyYW1lVHlwZTo6Q3BwVG9KU0ppdCwgcjE0LCByMTQpOwotKwotKyAgQ29kZUxhYmVsIHJldHVy bkxhYmVsOwotKyAgTGFiZWwgb29tUmV0dXJuTGFiZWw7Ci0rICB7Ci0rICAgIC8vIEhhbmRsZSBJ bnRlcnByZXRlciAtPiBCYXNlbGluZSBPU1IuCi0rICAgIEFsbG9jYXRhYmxlR2VuZXJhbFJlZ2lz dGVyU2V0IHJlZ3MoR2VuZXJhbFJlZ2lzdGVyU2V0OjpBbGwoKSk7Ci0rICAgIE1PWl9BU1NFUlQo IXJlZ3MuaGFzKEZyYW1lUG9pbnRlcikpOwotKyAgICByZWdzLnRha2UoT3NyRnJhbWVSZWcpOwot KyAgICByZWdzLnRha2UocmVnX2NvZGUpOwotKyAgICBNT1pfQVNTRVJUKCFyZWdzLmhhcyhSZXR1 cm5SZWcpLCAiUmV0dXJuUmVnIG1hdGNoZXMgcmVnX2NvZGUiKTsKLSsKLSsgICAgTGFiZWwgbm90 T3NyOwotKyAgICBtYXNtLmJyYW5jaFRlc3RQdHIoQXNzZW1ibGVyOjpaZXJvLCBPc3JGcmFtZVJl ZywgT3NyRnJhbWVSZWcsICZub3RPc3IpOwotKwotKyAgICBSZWdpc3RlciBudW1TdGFja1ZhbHVl cyA9IHJlZ192YWx1ZXM7Ci0rICAgIHJlZ3MudGFrZShudW1TdGFja1ZhbHVlcyk7Ci0rICAgIFJl Z2lzdGVyIHNjcmF0Y2ggPSByZWdzLnRha2VBbnkoKTsKLSsKLSsgICAgLy8gUHVzaCByZXR1cm4g YWRkcmVzcy4KLSsgICAgbWFzbS5zdWJQdHIoSW1tMzIoc2l6ZW9mKHVpbnRwdHJfdCkpLCBTdGFj a1BvaW50ZXIpOwotKyAgICBtYXNtLm1vdigmcmV0dXJuTGFiZWwsIHNjcmF0Y2gpOwotKyAgICBt YXNtLnN0b3JlUHRyKHNjcmF0Y2gsIEFkZHJlc3MoU3RhY2tQb2ludGVyLCAwKSk7Ci0rCi0rICAg IC8vIFB1c2ggcHJldmlvdXMgZnJhbWUgcG9pbnRlci4KLSsgICAgbWFzbS5zdWJQdHIoSW1tMzIo c2l6ZW9mKHVpbnRwdHJfdCkpLCBTdGFja1BvaW50ZXIpOwotKyAgICBtYXNtLnN0b3JlUHRyKEZy YW1lUG9pbnRlciwgQWRkcmVzcyhTdGFja1BvaW50ZXIsIDApKTsKLSsKLSsgICAgLy8gUmVzZXJ2 ZSBmcmFtZS4KLSsgICAgUmVnaXN0ZXIgZnJhbWVQdHIgPSBGcmFtZVBvaW50ZXI7Ci0rICAgIG1h c20ubW92ZVB0cihTdGFja1BvaW50ZXIsIGZyYW1lUHRyKTsKLSsgICAgbWFzbS5zdWJQdHIoSW1t MzIoQmFzZWxpbmVGcmFtZTo6U2l6ZSgpKSwgU3RhY2tQb2ludGVyKTsKLSsKLSsgICAgUmVnaXN0 ZXIgZnJhbWVQdHJTY3JhdGNoID0gcmVncy50YWtlQW55KCk7Ci0rICAgIG1hc20ubW92ZVB0cihT dGFja1BvaW50ZXIsIGZyYW1lUHRyU2NyYXRjaCk7Ci0rCi0rICAgIC8vIFJlc2VydmUgc3BhY2Ug Zm9yIGxvY2FscyBhbmQgc3RhY2sgdmFsdWVzLgotKyAgICBtYXNtLnhfc2xkaShzY3JhdGNoLCBu dW1TdGFja1ZhbHVlcywgMyk7Ci0rICAgIG1hc20uc3ViUHRyKHNjcmF0Y2gsIFN0YWNrUG9pbnRl cik7Ci0rCi0rICAgIC8vIEVudGVyIGV4aXQgZnJhbWUuCi0rICAgIG1hc20ucmVzZXJ2ZVN0YWNr KDMgKiBzaXplb2YodWludHB0cl90KSk7Ci0rICAgIG1hc20uc3RvcmVQdHIoSW1tV29yZChNYWtl RnJhbWVEZXNjcmlwdG9yKEZyYW1lVHlwZTo6QmFzZWxpbmVKUykpLAotKyAgICAgICAgICAgICAg ICAgIEFkZHJlc3MoU3RhY2tQb2ludGVyLCAyICogc2l6ZW9mKHVpbnRwdHJfdCkpKTsKLSsgICAg bWFzbS5zdG9yZVB0cihJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBzaXpl b2YodWludHB0cl90KSkpOwotKyAgICBtYXNtLnN0b3JlUHRyKEZyYW1lUG9pbnRlciwgQWRkcmVz cyhTdGFja1BvaW50ZXIsIDApKTsKLSsKLSsgICAgLy8gTm8gR0MgdGhpbmdzIHRvIG1hcmssIHB1 c2ggYSBiYXJlIHRva2VuLgotKyAgICBtYXNtLmxvYWRKU0NvbnRleHQoc2NyYXRjaCk7Ci0rICAg IG1hc20uZW50ZXJGYWtlRXhpdEZyYW1lKHNjcmF0Y2gsIHNjcmF0Y2gsIEV4aXRGcmFtZVR5cGU6 OkJhcmUpOwotKwotKyAgICBtYXNtLnJlc2VydmVTdGFjaygyICogc2l6ZW9mKHVpbnRwdHJfdCkp OwotKyAgICBtYXNtLnN0b3JlUHRyKGZyYW1lUHRyLCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgc2l6 ZW9mKHVpbnRwdHJfdCkpKTsKLSsgICAgbWFzbS5zdG9yZVB0cihyZWdfY29kZSwgQWRkcmVzcyhT dGFja1BvaW50ZXIsIDApKTsKLSsKLSsgICAgdXNpbmcgRm4gPSB2b2lkICgqKShCYXNlbGluZUZy YW1lKiBmcmFtZSwgSW50ZXJwcmV0ZXJGcmFtZSogaW50ZXJwRnJhbWUsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgdWludDMyX3QgbnVtU3RhY2tWYWx1ZXMpOwotKyAgICBtYXNtLnNldHVwVW5h bGlnbmVkQUJJQ2FsbChzY3JhdGNoKTsKLSsgICAgbWFzbS5wYXNzQUJJQXJnKGZyYW1lUHRyU2Ny YXRjaCk7Ci0rICAgIG1hc20ucGFzc0FCSUFyZyhPc3JGcmFtZVJlZyk7Ci0rICAgIG1hc20ucGFz c0FCSUFyZyhudW1TdGFja1ZhbHVlcyk7Ci0rICAgIG1hc20uY2FsbFdpdGhBQkk8Rm4sIGppdDo6 SW5pdEJhc2VsaW5lRnJhbWVGb3JPc3I+KAotKyAgICAgICAgQUJJVHlwZTo6R2VuZXJhbCwgQ2hl Y2tVbnNhZmVDYWxsV2l0aEFCSTo6RG9udENoZWNrSGFzRXhpdEZyYW1lKTsKLSsKLSsgICAgcmVn cy5hZGQoT3NyRnJhbWVSZWcpOwotKyAgICBSZWdpc3RlciBqaXRjb2RlID0gcmVncy50YWtlQW55 KCk7Ci0rICAgIG1hc20ubG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgMCksIGppdGNvZGUp OwotKyAgICBtYXNtLmxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIHNpemVvZih1aW50cHRy X3QpKSwgZnJhbWVQdHIpOwotKyAgICBtYXNtLmZyZWVTdGFjaygyICogc2l6ZW9mKHVpbnRwdHJf dCkpOwotKwotKyAgICBtYXNtLmZyZWVTdGFjayhFeGl0RnJhbWVMYXlvdXQ6OlNpemVXaXRoRm9v dGVyKCkpOwotKwotKyAgICAvLyBJZiBPU1ItaW5nLCB0aGVuIGVtaXQgaW5zdHJ1bWVudGF0aW9u IGZvciBzZXR0aW5nIGxhc3RQcm9maWxlckZyYW1lCi0rICAgIC8vIGlmIHByb2ZpbGVyIGluc3Ry dW1lbnRhdGlvbiBpcyBlbmFibGVkLgotKyAgICB7Ci0rICAgICAgTGFiZWwgc2tpcFByb2ZpbGlu Z0luc3RydW1lbnRhdGlvbjsKLSsgICAgICBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzc09mRW5hYmxl ZCgKLSsgICAgICAgICAgY3gtPnJ1bnRpbWUoKS0+Z2Vja29Qcm9maWxlcigpLmFkZHJlc3NPZkVu YWJsZWQoKSk7Ci0rICAgICAgbWFzbS5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCBhZGRyZXNz T2ZFbmFibGVkLCBJbW0zMigwKSwKLSsgICAgICAgICAgICAgICAgICAgICZza2lwUHJvZmlsaW5n SW5zdHJ1bWVudGF0aW9uKTsKLSsgICAgICBtYXNtLnByb2ZpbGVyRW50ZXJGcmFtZShmcmFtZVB0 ciwgc2NyYXRjaCk7Ci0rICAgICAgbWFzbS5iaW5kKCZza2lwUHJvZmlsaW5nSW5zdHJ1bWVudGF0 aW9uKTsKLSsgICAgfQotKwotKyAgICBtYXNtLmp1bXAoaml0Y29kZSk7Ci0rCi0rICAgIG1hc20u YmluZCgmbm90T3NyKTsKLSsgICAgLy8gTG9hZCB0aGUgc2NvcGUgY2hhaW4gaW4gUjEuCi0rICAg IE1PWl9BU1NFUlQoUjEuc2NyYXRjaFJlZygpICE9IHJlZ19jb2RlKTsKLSsgICAgbWFzbS5tb3Zl UHRyKHJlZ19jaGFpbiwgUjEuc2NyYXRjaFJlZygpKTsKLSsgIH0KLSsKLSsgIC8vIFRoZSBjYWxs IHdpbGwgcHVzaCB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIGZyYW1lIHBvaW50ZXIgb24gdGhlIHN0 YWNrLCB0aHVzCi0rICAvLyB3ZSBjaGVjayB0aGF0IHRoZSBzdGFjayB3b3VsZCBiZSBhbGlnbmVk IG9uY2UgdGhlIGNhbGwgaXMgY29tcGxldGUuCi0rICBtYXNtLmFzc2VydFN0YWNrQWxpZ25tZW50 KEppdFN0YWNrQWxpZ25tZW50LCAyICogc2l6ZW9mKHVpbnRwdHJfdCkpOwotKwotKyAgLy8gQ2Fs bCB0aGUgZnVuY3Rpb24gd2l0aCBwdXNoaW5nIHJldHVybiBhZGRyZXNzIHRvIHN0YWNrLgotKyAg bWFzbS5jYWxsSml0Tm9Qcm9maWxlcihyZWdfY29kZSk7Ci0rCi0rICB7Ci0rICAgIC8vIEludGVy cHJldGVyIC0+IEJhc2VsaW5lIE9TUiB3aWxsIHJldHVybiBoZXJlLgotKyAgICBtYXNtLmJpbmQo JnJldHVybkxhYmVsKTsKLSsgICAgbWFzbS5hZGRDb2RlTGFiZWwocmV0dXJuTGFiZWwpOwotKyAg ICBtYXNtLmJpbmQoJm9vbVJldHVybkxhYmVsKTsKLSsgIH0KLSsKLSsgIC8vIERpc2NhcmQgYXJn dW1lbnRzIGFuZCBwYWRkaW5nLiBTZXQgc3AgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIEVudGVySklU UmVncwotKyAgLy8gb24gdGhlIHN0YWNrLgotKyAgbWFzbS5tb3ZlUHRyKEZyYW1lUG9pbnRlciwg U3RhY2tQb2ludGVyKTsKLSsKLSsgIC8vIFN0b3JlIHRoZSByZXR1cm5lZCB2YWx1ZSBpbnRvIHRo ZSB2cC4KLSsgIG1hc20uYXNfbGQocmVnX3ZwLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVy SklUUmVncywgcjEwKSk7Ci0rICBtYXNtLnN0b3JlVmFsdWUoSlNSZXR1cm5PcGVyYW5kLCBBZGRy ZXNzKHJlZ192cCwgMCkpOwotKwotKyAgLy8gUmVzdG9yZSBub24tdm9sYXRpbGUgcmVnaXN0ZXJz IGFuZCByZXR1cm4uCi0rICBHZW5lcmF0ZVJldHVybihtYXNtKTsKLSt9Ci0rCi0rLy8gc3RhdGlj Ci0rbW96aWxsYTo6TWF5YmU8OjpKUzo6UHJvZmlsaW5nRnJhbWVJdGVyYXRvcjo6UmVnaXN0ZXJT dGF0ZT4KLStKaXRSdW50aW1lOjpnZXRDcHBFbnRyeVJlZ2lzdGVycyhKaXRGcmFtZUxheW91dCog ZnJhbWVTdGFja0FkZHJlc3MpIHsKLSsgIHJldHVybiBtb3ppbGxhOjpOb3RoaW5ne307Ci0rfQot KwotK3ZvaWQgSml0UnVudGltZTo6Z2VuZXJhdGVJbnZhbGlkYXRvcihNYWNyb0Fzc2VtYmxlciYg bWFzbSwgTGFiZWwqIGJhaWxvdXRUYWlsKSB7Ci0rICBBdXRvQ3JlYXRlZEJ5IGFjYihtYXNtLCAi Sml0UnVudGltZTo6Z2VuZXJhdGVJbnZhbGlkYXRvciIpOwotKwotKyAgaW52YWxpZGF0b3JPZmZz ZXRfID0gc3RhcnRUcmFtcG9saW5lQ29kZShtYXNtKTsKLSsKLSsgIG1hc20uY2hlY2tTdGFja0Fs aWdubWVudCgpOwotKwotKyAgLy8gUHVzaCBhbGwgcmVnaXN0ZXJzIHNvIHdlIGNhbiBhY2Nlc3Mg dGhlbSBmcm9tIFtiYXNlICsgY29kZV0uCi0rICBtYXNtLlB1c2hSZWdzSW5NYXNrKEFsbFJlZ3Mp OwotKwotKyAgLy8gUGFzcyBwb2ludGVyIHRvIEludmFsaWRhdGlvbkJhaWxvdXRTdGFjayBzdHJ1 Y3R1cmUuCi0rICBtYXNtLm1vdmVQdHIoU3RhY2tQb2ludGVyLCBJbnRBcmdSZWcwKTsKLSsKLSsg IC8vIFJlc2VydmUgcGxhY2UgZm9yIEJhaWxvdXRJbmZvIHBvaW50ZXIuIFR3byB3b3JkcyB0byBl bnN1cmUgYWxpZ25tZW50IGZvcgotKyAgLy8gc2V0dXBBbGlnbmVkQUJJQ2FsbC4KLSsgIG1hc20u c3ViUHRyKEltbTMyKDIgKiBzaXplb2YodWludHB0cl90KSksIFN0YWNrUG9pbnRlcik7Ci0rICBt YXNtLm1vdmVQdHIoU3RhY2tQb2ludGVyLCBJbnRBcmdSZWcxKTsKLSsKLSsgIHVzaW5nIEZuID0g Ym9vbCAoKikoSW52YWxpZGF0aW9uQmFpbG91dFN0YWNrKiBzcCwgQmFzZWxpbmVCYWlsb3V0SW5m byoqIGluZm8pOwotKyAgbWFzbS5zZXR1cEFsaWduZWRBQklDYWxsKCk7Ci0rICBtYXNtLnBhc3NB QklBcmcoSW50QXJnUmVnMCk7Ci0rICBtYXNtLnBhc3NBQklBcmcoSW50QXJnUmVnMSk7Ci0rICBt YXNtLmNhbGxXaXRoQUJJPEZuLCBJbnZhbGlkYXRpb25CYWlsb3V0PigKLSsgICAgICBBQklUeXBl OjpHZW5lcmFsLCBDaGVja1Vuc2FmZUNhbGxXaXRoQUJJOjpEb250Q2hlY2tPdGhlcik7Ci0rCi0r ICBtYXNtLnBvcChJbnRBcmdSZWcyKTsKLSsKLSsgIC8vIFBvcCB0aGUgbWFjaGluZSBzdGF0ZSBh bmQgdGhlIGRlYWQgZnJhbWUuCi0rICBtYXNtLm1vdmVUb1N0YWNrUHRyKEZyYW1lUG9pbnRlcik7 Ci0rCi0rICAvLyBKdW1wIHRvIHNoYXJlZCBiYWlsb3V0IHRhaWwuIFRoZSBCYWlsb3V0SW5mbyBw b2ludGVyIGhhcyB0byBiZSBpbgotKyAgLy8gSW50QXJnUmVnMiAocjUpLgotKyAgbWFzbS5qdW1w KGJhaWxvdXRUYWlsKTsKLSt9Ci0rCi0rLy8gV2hlbiBiYWlsb3V0IGlzIGRvbmUgdmlhIG91dCBv ZiBsaW5lIGNvZGUgKGxhenkgYmFpbG91dCkuCi0rLy8gRnJhbWUgc2l6ZSBpcyBzdG9yZWQgaW4g TFIgKGxvb2sgYXQKLSsvLyBDb2RlR2VuZXJhdG9yUFBDNjQ6OmdlbmVyYXRlT3V0T2ZMaW5lQ29k ZSgpKSBhbmQgdGh1bmsgY29kZSBzaG91bGQgc2F2ZSBpdAotKy8vIG9uIHN0YWNrLgotK3N0YXRp YyB2b2lkIFB1c2hCYWlsb3V0RnJhbWUoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ2lzdGVyIHNw QXJnKSB7Ci0rICAvLyBQdXNoIHRoZSBmcmFtZVNpemVfIHN0b3JlZCBpbiBMUi4KLSsgIC8vIFNl ZTogQ29kZUdlbmVyYXRvclBQQzY0OjpnZW5lcmF0ZU91dE9mTGluZUNvZGUoKQotKyAgbWFzbS5w dXNoUmV0dXJuQWRkcmVzcygpOwotKwotKyAgLy8gUHVzaCByZWdpc3RlcnMgc3VjaCB0aGF0IHdl IGNhbiBhY2Nlc3MgdGhlbSBmcm9tIFtiYXNlICsgY29kZV0uCi0rICBtYXNtLlB1c2hSZWdzSW5N YXNrKEFsbFJlZ3MpOwotKwotKyAgLy8gUHV0IHBvaW50ZXIgdG8gQmFpbG91dFN0YWNrIGFzIGZp cnN0IGFyZ3VtZW50IHRvIHRoZSBCYWlsb3V0KCkuCi0rICBtYXNtLm1vdmVQdHIoU3RhY2tQb2lu dGVyLCBzcEFyZyk7Ci0rfQotKwotK3N0YXRpYyB2b2lkIEdlbmVyYXRlQmFpbG91dFRodW5rKE1h Y3JvQXNzZW1ibGVyJiBtYXNtLCBMYWJlbCogYmFpbG91dFRhaWwpIHsKLSsgIFB1c2hCYWlsb3V0 RnJhbWUobWFzbSwgSW50QXJnUmVnMCk7Ci0rCi0rICAvLyBNYWtlIHNwYWNlIGZvciBCYWlsb3V0 J3MgYmFpbG91dEluZm8gb3V0cGFyYW0uCi0rICBtYXNtLnJlc2VydmVTdGFjayhzaXplb2Yodm9p ZCopKTsKLSsgIG1hc20ubW92ZVB0cihTdGFja1BvaW50ZXIsIEludEFyZ1JlZzEpOwotKwotKyAg Ly8gQ2FsbCB0aGUgYmFpbG91dCBmdW5jdGlvbi4KLSsgIHVzaW5nIEZuID0gYm9vbCAoKikoQmFp bG91dFN0YWNrKiBzcCwgQmFzZWxpbmVCYWlsb3V0SW5mbyoqIGluZm8pOwotKyAgbWFzbS5zZXR1 cFVuYWxpZ25lZEFCSUNhbGwoSW50QXJnUmVnMik7Ci0rICBtYXNtLnBhc3NBQklBcmcoSW50QXJn UmVnMCk7Ci0rICBtYXNtLnBhc3NBQklBcmcoSW50QXJnUmVnMSk7Ci0rICBtYXNtLmNhbGxXaXRo QUJJPEZuLCBCYWlsb3V0PihBQklUeXBlOjpHZW5lcmFsLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQ2hlY2tVbnNhZmVDYWxsV2l0aEFCSTo6RG9udENoZWNrT3RoZXIpOwotKwot KyAgLy8gR2V0IHRoZSBiYWlsb3V0SW5mbyBvdXRwYXJhbS4KLSsgIG1hc20ucG9wKEludEFyZ1Jl ZzIpOwotKwotKyAgLy8gUmVtb3ZlIGJvdGggdGhlIGJhaWxvdXQgZnJhbWUgYW5kIHRoZSB0b3Bt b3N0IElvbiBmcmFtZSdzIHN0YWNrLgotKyAgbWFzbS5tb3ZlVG9TdGFja1B0cihGcmFtZVBvaW50 ZXIpOwotKwotKyAgLy8gSnVtcCB0byBzaGFyZWQgYmFpbG91dCB0YWlsLiBUaGUgQmFpbG91dElu Zm8gcG9pbnRlciBoYXMgdG8gYmUgaW4KLSsgIC8vIEludEFyZ1JlZzIgKHI1KS4KLSsgIG1hc20u anVtcChiYWlsb3V0VGFpbCk7Ci0rfQotKwotK3ZvaWQgSml0UnVudGltZTo6Z2VuZXJhdGVCYWls b3V0SGFuZGxlcihNYWNyb0Fzc2VtYmxlciYgbWFzbSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIGJhaWxvdXRUYWlsKSB7Ci0rICBBdXRvQ3JlYXRlZEJ5 IGFjYihtYXNtLCAiSml0UnVudGltZTo6Z2VuZXJhdGVCYWlsb3V0SGFuZGxlciIpOwotKwotKyAg YmFpbG91dEhhbmRsZXJPZmZzZXRfID0gc3RhcnRUcmFtcG9saW5lQ29kZShtYXNtKTsKLSsKLSsg IEdlbmVyYXRlQmFpbG91dFRodW5rKG1hc20sIGJhaWxvdXRUYWlsKTsKLSt9Ci0rCi0rYm9vbCBK aXRSdW50aW1lOjpnZW5lcmF0ZVZNV3JhcHBlcihKU0NvbnRleHQqIGN4LCBNYWNyb0Fzc2VtYmxl ciYgbWFzbSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNRnVuY3Rpb25J ZCBpZCwgY29uc3QgVk1GdW5jdGlvbkRhdGEmIGYsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEeW5GbiBuYXRpdmVGdW4sIHVpbnQzMl90KiB3cmFwcGVyT2Zmc2V0KSB7Ci0r ICBBdXRvQ3JlYXRlZEJ5IGFjYihtYXNtLCAiSml0UnVudGltZTo6Z2VuZXJhdGVWTVdyYXBwZXIi KTsKLSsKLSsgICp3cmFwcGVyT2Zmc2V0ID0gc3RhcnRUcmFtcG9saW5lQ29kZShtYXNtKTsKLSsK LSsgIC8vIEF2b2lkIGNvbmZsaWN0cyB3aXRoIGFyZ3VtZW50IHJlZ2lzdGVycyB3aGlsZSBkaXNj YXJkaW5nIHRoZSByZXN1bHQgYWZ0ZXIKLSsgIC8vIHRoZSBmdW5jdGlvbiBjYWxsLgotKyAgQWxs b2NhdGFibGVHZW5lcmFsUmVnaXN0ZXJTZXQgcmVncyhSZWdpc3Rlcjo6Q29kZXM6OldyYXBwZXJN YXNrKTsKLSsKLSsgIHN0YXRpY19hc3NlcnQoCi0rICAgICAgKFJlZ2lzdGVyOjpDb2Rlczo6Vm9s YXRpbGVNYXNrICYgflJlZ2lzdGVyOjpDb2Rlczo6V3JhcHBlck1hc2spID09IDAsCi0rICAgICAg IldyYXBwZXIgcmVnaXN0ZXIgc2V0IHNob3VsZCBiZSBhIHN1cGVyc2V0IG9mIFZvbGF0aWxlIHJl Z2lzdGVyIHNldC4iKTsKLSsKLSsgIC8vIFRoZSBjb250ZXh0IGlzIHRoZSBmaXJzdCBhcmd1bWVu dDsgcjMgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IHJlZ2lzdGVyLgotKyAgUmVnaXN0ZXIgY3hyZWcg PSBJbnRBcmdSZWcwOwotKyAgcmVncy50YWtlKGN4cmVnKTsKLSsKLSsgIC8vIE9uIGxpbmstcmVn aXN0ZXIgcGxhdGZvcm1zLCBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIFZNICpjYWxs ZWUqIHRvCi0rICAvLyBwdXNoIHRoZSByZXR1cm4gYWRkcmVzcywgd2hpbGUgdGhlIGNhbGxlciBt dXN0IGVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzCi0rICAvLyBpcyBzdG9yZWQgaW4gTFIgb24gZW50 cnkuIFRoaXMgYWxsb3dzIHRoZSBWTSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBib3RoCi0rICAvLyBk aXJlY3QgY2FsbHMgYW5kIHRhaWwgY2FsbHMuCi0rICBtYXNtLnB1c2hSZXR1cm5BZGRyZXNzKCk7 Ci0rCi0rICAvLyBQdXNoIHRoZSBmcmFtZSBwb2ludGVyIHRvIGZpbmlzaCB0aGUgZXhpdCBmcmFt ZSwgdGhlbiBsaW5rIGl0IHVwLgotKyAgbWFzbS5QdXNoKEZyYW1lUG9pbnRlcik7Ci0rICBtYXNt Lm1vdmVTdGFja1B0clRvKEZyYW1lUG9pbnRlcik7Ci0rICBtYXNtLmxvYWRKU0NvbnRleHQoY3hy ZWcpOwotKyAgbWFzbS5lbnRlckV4aXRGcmFtZShjeHJlZywgcmVncy5nZXRBbnkoKSwgaWQpOwot KwotKyAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIG91dHBhcmFtZXRlci4KLSsgIG1hc20ucmVz ZXJ2ZVZNRnVuY3Rpb25PdXRQYXJhbVNwYWNlKGYpOwotKwotKyAgbWFzbS5zZXR1cFVuYWxpZ25l ZEFCSUNhbGxEb250U2F2ZVJlc3RvcmVTUCgpOwotKyAgbWFzbS5wYXNzQUJJQXJnKGN4cmVnKTsK LSsKLSsgIHNpemVfdCBhcmdEaXNwID0gRXhpdEZyYW1lTGF5b3V0OjpTaXplKCk7Ci0rCi0rICAv LyBDb3B5IGFueSBhcmd1bWVudHMuCi0rICBmb3IgKHVpbnQzMl90IGV4cGxpY2l0QXJnID0gMDsg ZXhwbGljaXRBcmcgPCBmLmV4cGxpY2l0QXJnczsgZXhwbGljaXRBcmcrKykgewotKyAgICBzd2l0 Y2ggKGYuYXJnUHJvcGVydGllcyhleHBsaWNpdEFyZykpIHsKLSsgICAgICBjYXNlIFZNRnVuY3Rp b25EYXRhOjpXb3JkQnlWYWx1ZToKLSsgICAgICAgIGlmIChmLmFyZ1Bhc3NlZEluRmxvYXRSZWco ZXhwbGljaXRBcmcpKSB7Ci0rICAgICAgICAgIG1hc20ucGFzc0FCSUFyZyhNb3ZlT3BlcmFuZChG cmFtZVBvaW50ZXIsIGFyZ0Rpc3ApLCBBQklUeXBlOjpGbG9hdDY0KTsKLSsgICAgICAgIH0gZWxz ZSB7Ci0rICAgICAgICAgIG1hc20ucGFzc0FCSUFyZyhNb3ZlT3BlcmFuZChGcmFtZVBvaW50ZXIs IGFyZ0Rpc3ApLCBBQklUeXBlOjpHZW5lcmFsKTsKLSsgICAgICAgIH0KLSsgICAgICAgIGFyZ0Rp c3AgKz0gc2l6ZW9mKHZvaWQqKTsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgVk1GdW5j dGlvbkRhdGE6OldvcmRCeVJlZjoKLSsgICAgICAgIG1hc20ucGFzc0FCSUFyZyhNb3ZlT3BlcmFu ZChGcmFtZVBvaW50ZXIsIGFyZ0Rpc3AsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTW92ZU9wZXJhbmQ6OktpbmQ6OkVmZmVjdGl2ZUFkZHJlc3MpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgIEFCSVR5cGU6OkdlbmVyYWwpOwotKyAgICAgICAgYXJnRGlzcCArPSBzaXpl b2Yodm9pZCopOwotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgY2FzZSBWTUZ1bmN0aW9uRGF0YTo6 RG91YmxlQnlWYWx1ZToKLSsgICAgICBjYXNlIFZNRnVuY3Rpb25EYXRhOjpEb3VibGVCeVJlZjoK LSsgICAgICAgIE1PWl9DUkFTSCgiTllJOiBQUEM2NCBjYWxsVk0gc2hvdWxkIG5vdCBiZSB1c2Vk IHdpdGggMTI4Yml0cyB2YWx1ZXMuIik7Ci0rICAgICAgICBicmVhazsKLSsgICAgfQotKyAgfQot KwotKyAgLy8gQ29weSB0aGUgaW1wbGljaXQgb3V0cGFyYW0sIGlmIGFueS4KLSsgIGNvbnN0IGlu dDMyX3Qgb3V0UGFyYW1PZmZzZXQgPQotKyAgICAgIC1pbnQzMl90KEV4aXRGb290ZXJGcmFtZTo6 U2l6ZSgpKSAtIGYuc2l6ZU9mT3V0UGFyYW1TdGFja1Nsb3QoKTsKLSsgIGlmIChmLm91dFBhcmFt ICE9IFR5cGVfVm9pZCkgewotKyAgICBtYXNtLnBhc3NBQklBcmcoTW92ZU9wZXJhbmQoRnJhbWVQ b2ludGVyLCBvdXRQYXJhbU9mZnNldCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1vdmVPcGVyYW5kOjpLaW5kOjpFZmZlY3RpdmVBZGRyZXNzKSwKLSsgICAgICAgICAgICAgICAg ICAgIEFCSVR5cGU6OkdlbmVyYWwpOwotKyAgfQotKwotKyAgbWFzbS5jYWxsV2l0aEFCSShuYXRp dmVGdW4sIEFCSVR5cGU6OkdlbmVyYWwsCi0rICAgICAgICAgICAgICAgICAgIENoZWNrVW5zYWZl Q2FsbFdpdGhBQkk6OkRvbnRDaGVja0hhc0V4aXRGcmFtZSk7Ci0rCi0rICAvLyBUZXN0IGZvciBm YWlsdXJlLgotKyAgc3dpdGNoIChmLmZhaWxUeXBlKCkpIHsKLSsgICAgY2FzZSBUeXBlX0NlbGw6 Ci0rICAgICAgbWFzbS5icmFuY2hUZXN0UHRyKEFzc2VtYmxlcjo6WmVybywgSW50QXJnUmVnMCwg SW50QXJnUmVnMCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgbWFzbS5mYWlsdXJlTGFiZWwo KSk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgVHlwZV9Cb29sOgotKyAgICAgIG1hc20uYnJh bmNoSWZGYWxzZUJvb2woSW50QXJnUmVnMCwgbWFzbS5mYWlsdXJlTGFiZWwoKSk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgVHlwZV9Wb2lkOgotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0 OgotKyAgICAgIE1PWl9DUkFTSCgidW5rbm93biBmYWlsdXJlIGtpbmQiKTsKLSsgIH0KLSsKLSsg IC8vIExvYWQgdGhlIG91dHBhcmFtLgotKyAgbWFzbS5sb2FkVk1GdW5jdGlvbk91dFBhcmFtKGYs IEFkZHJlc3MoRnJhbWVQb2ludGVyLCBvdXRQYXJhbU9mZnNldCkpOwotKwotKyAgLy8gUG9wIGZy YW1lIGFuZCByZXN0b3JlIGZyYW1lIHBvaW50ZXIuCi0rICBtYXNtLm1vdmVUb1N0YWNrUHRyKEZy YW1lUG9pbnRlcik7Ci0rICBtYXNtLnBvcChGcmFtZVBvaW50ZXIpOwotKwotKyAgLy8gUmV0dXJu LiBTdWJ0cmFjdCBzaXplb2Yodm9pZCopIGZvciB0aGUgZnJhbWUgcG9pbnRlci4KLSsgIG1hc20u cmV0bihJbW0zMihzaXplb2YoRXhpdEZyYW1lTGF5b3V0KSAtIHNpemVvZih2b2lkKikgKwotKyAg ICAgICAgICAgICAgICAgIGYuZXhwbGljaXRTdGFja1Nsb3RzKCkgKiBzaXplb2Yodm9pZCopICsK LSsgICAgICAgICAgICAgICAgICBmLmV4dHJhVmFsdWVzVG9Qb3AgKiBzaXplb2YoVmFsdWUpKSk7 Ci0rCi0rICByZXR1cm4gdHJ1ZTsKLSt9Ci0rCi0rdWludDMyX3QgSml0UnVudGltZTo6Z2VuZXJh dGVQcmVCYXJyaWVyKEpTQ29udGV4dCogY3gsIE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVJUeXBlIHR5cGUpIHsKLSsgIEF1 dG9DcmVhdGVkQnkgYWNiKG1hc20sICJKaXRSdW50aW1lOjpnZW5lcmF0ZVByZUJhcnJpZXIiKTsK LSsKLSsgIHVpbnQzMl90IG9mZnNldCA9IHN0YXJ0VHJhbXBvbGluZUNvZGUobWFzbSk7Ci0rCi0r ICBNT1pfQVNTRVJUKFByZUJhcnJpZXJSZWcgPT0gSW50QXJnUmVnMSk7ICAvLyByNAotKyAgUmVn aXN0ZXIgdGVtcDEgPSBJbnRBcmdSZWcwOyAgICAgICAgICAgICAgLy8gcjMKLSsgIFJlZ2lzdGVy IHRlbXAyID0gSW50QXJnUmVnMjsgICAgICAgICAgICAgIC8vIHI1Ci0rICBSZWdpc3RlciB0ZW1w MyA9IEludEFyZ1JlZzM7ICAgICAgICAgICAgICAvLyByNgotKyAgbWFzbS5wdXNoKHRlbXAxKTsK LSsgIG1hc20ucHVzaCh0ZW1wMik7Ci0rICBtYXNtLnB1c2godGVtcDMpOwotKwotKyAgTGFiZWwg bm9CYXJyaWVyOwotKyAgbWFzbS5lbWl0UHJlQmFycmllckZhc3RQYXRoKHR5cGUsIHRlbXAxLCB0 ZW1wMiwgdGVtcDMsICZub0JhcnJpZXIpOwotKwotKyAgLy8gQ2FsbCBpbnRvIEMrKyB0byBtYXJr IHRoaXMgR0MgdGhpbmcuCi0rICBtYXNtLnBvcCh0ZW1wMyk7Ci0rICBtYXNtLnBvcCh0ZW1wMik7 Ci0rICBtYXNtLnBvcCh0ZW1wMSk7Ci0rCi0rICBMaXZlUmVnaXN0ZXJTZXQgc2F2ZTsKLSsgIHNh dmUuc2V0KCkgPSBSZWdpc3RlclNldChHZW5lcmFsUmVnaXN0ZXJTZXQoUmVnaXN0ZXJzOjpWb2xh dGlsZU1hc2spLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJTZXQo RmxvYXRSZWdpc3RlcnM6OlZvbGF0aWxlTWFzaykpOwotKyAgLy8gT24gUFBDNjQsIHNhdmUgTFIg c2luY2Ugd2UnbGwgYmUgbWFraW5nIGEgY2FsbC4KLSsgIG1hc20ucHVzaFJldHVybkFkZHJlc3Mo KTsKLSsgIG1hc20uUHVzaFJlZ3NJbk1hc2soc2F2ZSk7Ci0rCi0rICBtYXNtLm1vdmVQdHIoSW1t UHRyKGN4LT5ydW50aW1lKCkpLCBJbnRBcmdSZWcwKTsKLSsKLSsgIG1hc20uc2V0dXBVbmFsaWdu ZWRBQklDYWxsKEludEFyZ1JlZzIpOwotKyAgbWFzbS5wYXNzQUJJQXJnKEludEFyZ1JlZzApOwot KyAgbWFzbS5wYXNzQUJJQXJnKEludEFyZ1JlZzEpOwotKyAgbWFzbS5jYWxsV2l0aEFCSShKaXRQ cmVXcml0ZUJhcnJpZXIodHlwZSkpOwotKwotKyAgbWFzbS5Qb3BSZWdzSW5NYXNrKHNhdmUpOwot KyAgbWFzbS5yZXQoKTsKLSsKLSsgIG1hc20uYmluZCgmbm9CYXJyaWVyKTsKLSsgIG1hc20ucG9w KHRlbXAzKTsKLSsgIG1hc20ucG9wKHRlbXAyKTsKLSsgIG1hc20ucG9wKHRlbXAxKTsKLSsgIG1h c20uYWJpcmV0KCk7Ci0rCi0rICByZXR1cm4gb2Zmc2V0OwotK30KLSsKLSt2b2lkIEppdFJ1bnRp bWU6OmdlbmVyYXRlQmFpbG91dFRhaWxTdHViKE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGJhaWxvdXRUYWlsKSB7 Ci0rICBBdXRvQ3JlYXRlZEJ5IGFjYihtYXNtLCAiSml0UnVudGltZTo6Z2VuZXJhdGVCYWlsb3V0 VGFpbFN0dWIiKTsKLSsKLSsgIG1hc20uYmluZChiYWlsb3V0VGFpbCk7Ci0rICBtYXNtLmdlbmVy YXRlQmFpbG91dFRhaWwoSW50QXJnUmVnMSwgSW50QXJnUmVnMik7Ci0rfQotZGlmZiAtLWdpdCBh L2pzL3NyYy9qaXQvc2hhcmVkL0Fzc2VtYmxlci1zaGFyZWQuaCBiL2pzL3NyYy9qaXQvc2hhcmVk L0Fzc2VtYmxlci1zaGFyZWQuaAotaW5kZXggZDVmZWQyZmFiZTMxLi40OTBhOWY1MzkxZTAgMTAw NjQ0Ci0tLS0gYS9qcy9zcmMvaml0L3NoYXJlZC9Bc3NlbWJsZXItc2hhcmVkLmgKLSsrKyBiL2pz L3NyYy9qaXQvc2hhcmVkL0Fzc2VtYmxlci1zaGFyZWQuaAotQEAgLTMwLDE0ICszMCwxNSBAQAot IAotICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJN NjQpIHx8ICAgICAgXAotICAgICBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMy KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgZGVmaW5lZChKU19DT0RFR0VO X1dBU00zMikgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IFwKLSsgICAgZGVmaW5l ZChKU19DT0RFR0VOX1BQQzY0KQotIC8vIFB1c2ggcmV0dXJuIGFkZHJlc3NlcyBjYWxsZWUtc2lk ZS4KLSAjICBkZWZpbmUgSlNfVVNFX0xJTktfUkVHSVNURVIKLSAjZW5kaWYKLSAKLSAjaWYgZGVm aW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCAg ICBcCi0gICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fUklTQ1Y2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKQotKyAgICBkZWZp bmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gLy8gSlNf Q09ERUxBQkVMX0xJTktNT0RFIGdpdmVzIGxhYmVscyBhZGRpdGlvbmFsIG1ldGFkYXRhCi0gLy8g ZGVzY3JpYmluZyBob3cgQmluZCgpIHNob3VsZCBwYXRjaCB0aGVtLgotICMgIGRlZmluZSBKU19D T0RFTEFCRUxfTElOS01PREUKLWRpZmYgLS1naXQgYS9qcy9zcmMvaml0L3NoYXJlZC9BdG9taWNP cGVyYXRpb25zLWZlZWxpbmctbHVja3ktZ2NjLmggYi9qcy9zcmMvaml0L3NoYXJlZC9BdG9taWNP cGVyYXRpb25zLWZlZWxpbmctbHVja3ktZ2NjLmgKLWluZGV4IGE2OTA5ZTU2MGJlZi4uZDg4NmNi YTJjN2U2IDEwMDY0NAotLS0tIGEvanMvc3JjL2ppdC9zaGFyZWQvQXRvbWljT3BlcmF0aW9ucy1m ZWVsaW5nLWx1Y2t5LWdjYy5oCi0rKysgYi9qcy9zcmMvaml0L3NoYXJlZC9BdG9taWNPcGVyYXRp b25zLWZlZWxpbmctbHVja3ktZ2NjLmgKLUBAIC00Niw3ICs0Niw4IEBACi0gLy8gY29kZSBpbiB0 aGlzIGZpbGUuCi0gCi0gI2lmIGRlZmluZWQoSlNfU0lNVUxBVE9SX0FSTTY0KSB8fCBkZWZpbmVk KEpTX1NJTVVMQVRPUl9BUk0pIHx8IFwKLS0gICAgZGVmaW5lZChKU19TSU1VTEFUT1JfTUlQUzY0 KSB8fCBkZWZpbmVkKEpTX1NJTVVMQVRPUl9MT09ORzY0KQotKyAgICBkZWZpbmVkKEpTX1NJTVVM QVRPUl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfU0lNVUxBVE9SX0xPT05HNjQpIHx8IFwKLSsgICAg ZGVmaW5lZChKU19TSU1VTEFUT1JfUFBDNjQpCi0gLy8gT24gc29tZSB4ODYgKDMyLWJpdCkgc3lz dGVtcyB0aGlzIHdpbGwgbm90IHdvcmsgYmVjYXVzZSB0aGUgY29tcGlsZXIgZG9lcyBub3QKLSAv LyBvcGVuLWNvZGUgNjQtYml0IGF0b21pY3MuICBJZiBzbywgdHJ5IGxpbmtpbmcgd2l0aCAtbGF0 b21pYy4gIElmIHRoYXQgZG9lc24ndAotIC8vIHdvcmssIHlvdSdyZSBtb3N0bHkgb24geW91ciBv d24uCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9zaGFyZWQvQ29kZUdlbmVyYXRvci1zaGFyZWQu Y3BwIGIvanMvc3JjL2ppdC9zaGFyZWQvQ29kZUdlbmVyYXRvci1zaGFyZWQuY3BwCi1pbmRleCBh ZGE4N2YxZjExYTIuLjE0NDY4MzU2Y2YzMSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qaXQvc2hhcmVk L0NvZGVHZW5lcmF0b3Itc2hhcmVkLmNwcAotKysrIGIvanMvc3JjL2ppdC9zaGFyZWQvQ29kZUdl bmVyYXRvci1zaGFyZWQuY3BwCi1AQCAtODYsOCArODYsOCBAQCBDb2RlR2VuZXJhdG9yU2hhcmVk OjpDb2RlR2VuZXJhdG9yU2hhcmVkKE1JUkdlbmVyYXRvciogZ2VuLCBMSVJHcmFwaCogZ3JhcGgs Ci0gCi0gI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKLSAjICBpZiBkZWZpbmVkKEpTX0NPREVHRU5f WDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCBcCi0tICAgICAgZGVmaW5lZChKU19D T0RFR0VOX0FSTTY0KQotLSAgICAvLyBPbiBYNjQveDg2IGFuZCBBUk02NCwgd2UgZG9uJ3QgbmVl ZCBhbGlnbm1lbnQgZm9yIFdhc20gU0lNRCBhdCB0aGlzIHRpbWUuCi0rICAgICAgZGVmaW5lZChK U19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICAgIC8vIE9u IFg2NC94ODYsIEFSTTY0LCBhbmQgUFBDNjQsIHdlIGRvbid0IG5lZWQgYWxpZ25tZW50IGZvciBX YXNtIFNJTUQgYXQgdGhpcyB0aW1lLgotICMgIGVsc2UKLSAjICAgIGVycm9yIFwKLSAgICAgICAg ICJ3ZSBtYXkgbmVlZCBwYWRkaW5nIHNvIHRoYXQgbG9jYWwgc2xvdHMgYXJlIFNJTUQtYWxpZ25l ZCBhbmQgdGhlIHN0YWNrIG11c3QgYmUga2VwdCBTSU1ELWFsaWduZWQgdG9vLiIKLUBAIC0xMDc1 LDcgKzEwNzUsNyBAQCBMYWJlbCogQ29kZUdlbmVyYXRvclNoYXJlZDo6Z2V0SnVtcExhYmVsRm9y QnJhbmNoKE1CYXNpY0Jsb2NrKiBibG9jaykgewotIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHVz ZWQgZm9yIE1JUFM2NC9MT09ORzY0L1JJU0NWNjQuIFRoZXkgaGF2ZQotIC8vIGJyYW5jaFRvQmxv Y2suCi0gI2lmICFkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSAmJiAhZGVmaW5lZChKU19DT0RF R0VOX0xPT05HNjQpICYmIFwKLS0gICAgIWRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAg ICAhZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpICYmICFkZWZpbmVkKEpTX0NPREVHRU5fUFBD NjQpCi0gdm9pZCBDb2RlR2VuZXJhdG9yU2hhcmVkOjpqdW1wVG9CbG9jayhNQmFzaWNCbG9jayog bWlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZW1ibGVyOjpD b25kaXRpb24gY29uZCkgewotICAgLy8gU2tpcCBwYXN0IHRyaXZpYWwgYmxvY2tzLgotZGlmZiAt LWdpdCBhL2pzL3NyYy9qaXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC1pbmwuaCBiL2pzL3NyYy9q aXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC1pbmwuaAotaW5kZXggYmRjYzFkYTdkNDFhLi5iNjJm OGY2ODFkZjEgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvaml0L3NoYXJlZC9Mb3dlcmluZy1zaGFyZWQt aW5sLmgKLSsrKyBiL2pzL3NyYy9qaXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC1pbmwuaAotQEAg LTUyNyw3ICs1MjcsNyBAQCBMQWxsb2NhdGlvbiBMSVJHZW5lcmF0b3JTaGFyZWQ6OnVzZVJlZ2lz dGVyT3JOb25Eb3VibGVDb25zdGFudCgKLSAKLSAjaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkg fHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCAgICAgIFwKLSAgICAgZGVmaW5lZChKU19D T0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKLS0gICAg ZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVND VjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gTEFsbG9jYXRpb24gTElSR2VuZXJh dG9yU2hhcmVkOjp1c2VBbnlPckNvbnN0YW50KE1EZWZpbml0aW9uKiBtaXIpIHsKLSAgIHJldHVy biB1c2VSZWdpc3Rlck9yQ29uc3RhbnQobWlyKTsKLSB9Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL2pz LWNvbmZpZy5tb3pidWlsZCBiL2pzL3NyYy9qcy1jb25maWcubW96YnVpbGQKLWluZGV4IDIyYmVj YWY0ZWNmYi4uZmY1Mjk0ODI1ZTlkIDEwMDY0NAotLS0tIGEvanMvc3JjL2pzLWNvbmZpZy5tb3pi dWlsZAotKysrIGIvanMvc3JjL2pzLWNvbmZpZy5tb3pidWlsZAotQEAgLTgsNiArOCw3IEBAIGlm ICgKLSAgICAgQ09ORklHWyJKU19DT0RFR0VOX1g2NCJdCi0gICAgIG9yIENPTkZJR1siSlNfQ09E RUdFTl9BUk02NCJdCi0gICAgIG9yIENPTkZJR1siSlNfQ09ERUdFTl9SSVNDVjY0Il0KLSsgICAg b3IgQ09ORklHWyJKU19DT0RFR0VOX1BQQzY0Il0KLSApOgotICAgICBERUZJTkVTWyJXQVNNX1NV UFBPUlRTX0hVR0VfTUVNT1JZIl0gPSBUcnVlCi0gCi1kaWZmIC0tZ2l0IGEvanMvc3JjL2pzYXBp LXRlc3RzL3Rlc3RKaXRBQkljYWxscy5jcHAgYi9qcy9zcmMvanNhcGktdGVzdHMvdGVzdEppdEFC SWNhbGxzLmNwcAotaW5kZXggYjVjMDNhNDdkZDgzLi44ODdhZDllM2Q5NTkgMTAwNjQ0Ci0tLS0g YS9qcy9zcmMvanNhcGktdGVzdHMvdGVzdEppdEFCSWNhbGxzLmNwcAotKysrIGIvanMvc3JjL2pz YXBpLXRlc3RzL3Rlc3RKaXRBQkljYWxscy5jcHAKLUBAIC03MTgsNiArNzE4LDkgQEAgY2xhc3Mg Sml0QUJJQ2FsbCBmaW5hbCA6IHB1YmxpYyBqc2FwaXRlc3Q6OlJ1bnRpbWVUZXN0LAotICNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICAgICBSZWdpc3RlciBiYXNlID0gdDA7Ci0g ICAgIHJlZ3MudGFrZShiYXNlKTsKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0r ICAgIFJlZ2lzdGVyIGJhc2UgPSByMTE7Ci0rICAgIHJlZ3MudGFrZShiYXNlKTsKLSAjZWxzZQot ICMgIGVycm9yICJVbmtub3duIGFyY2hpdGVjdHVyZSEiCi0gI2VuZGlmCi1kaWZmIC0tZ2l0IGEv anMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RXYXNtUmV0dXJuQ2FsbHMuY3BwIGIvanMvc3JjL2pzYXBp LXRlc3RzL3Rlc3RXYXNtUmV0dXJuQ2FsbHMuY3BwCi1pbmRleCA0NzI4ZjI0MDRhZTguLmEwN2Rk YjJmMjE0ZSAxMDA2NDQKLS0tLSBhL2pzL3NyYy9qc2FwaS10ZXN0cy90ZXN0V2FzbVJldHVybkNh bGxzLmNwcAotKysrIGIvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RXYXNtUmV0dXJuQ2FsbHMuY3Bw Ci1AQCAtMzIsNyArMzIsMTAgQEAgQkVHSU5fVEVTVCh0ZXN0V2FzbUNoZWNrU2xvd0NhbGxNYXJr ZXJIaXQpIHsKLSAKLSAgIG1hc20uYmluZCgmY2hlY2spOwotICMgIGlmZGVmIEpTX1VTRV9MSU5L X1JFR0lTVEVSCi0tIyAgICBpZiAhZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpICYmICFkZWZp bmVkKEpTX0NPREVHRU5fTUlQUzY0KSAmJiBcCi0rIyAgICBpZiBkZWZpbmVkKEpTX0NPREVHRU5f UFBDNjQpCi0rICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHJhID0gQUJJTm9uQXJnUmVnMzsK LSsgIG1hc20ueHNfbWZscihyYSk7Ci0rIyAgICBlbGlmICFkZWZpbmVkKEpTX0NPREVHRU5fTE9P Tkc2NCkgJiYgIWRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpICYmIFwKLSAgICAgICAgICFkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcmEg PSBscjsKLSAjICAgIGVuZGlmCi1AQCAtNzAsNyArNzMsMTAgQEAgQkVHSU5fVEVTVCh0ZXN0V2Fz bUNoZWNrU2xvd0NhbGxNYXJrZXJNaXNzKSB7Ci0gCi0gICBtYXNtLmJpbmQoJmNoZWNrKTsKLSAj ICBpZmRlZiBKU19VU0VfTElOS19SRUdJU1RFUgotLSMgICAgaWYgIWRlZmluZWQoSlNfQ09ERUdF Tl9MT09ORzY0KSAmJiAhZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgJiYgXAotKyMgICAgaWYg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBy YSA9IEFCSU5vbkFyZ1JlZzM7Ci0rICBtYXNtLnhzX21mbHIocmEpOwotKyMgICAgZWxpZiAhZGVm aW5lZChKU19DT0RFR0VOX0xPT05HNjQpICYmICFkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSAm JiBcCi0gICAgICAgICAhZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0gICBzdGF0aWMgY29u c3RleHByIFJlZ2lzdGVyIHJhID0gbHI7Ci0gIyAgICBlbmRpZgotZGlmZiAtLWdpdCBhL2pzL3Ny Yy9qc2FwaS10ZXN0cy90ZXN0c0ppdC5jcHAgYi9qcy9zcmMvanNhcGktdGVzdHMvdGVzdHNKaXQu Y3BwCi1pbmRleCBhMmRmZTVkMDE5NmMuLjdmM2RjY2E4OTVkMiAxMDA2NDQKLS0tLSBhL2pzL3Ny Yy9qc2FwaS10ZXN0cy90ZXN0c0ppdC5jcHAKLSsrKyBiL2pzL3NyYy9qc2FwaS10ZXN0cy90ZXN0 c0ppdC5jcHAKLUBAIC0yNSw2ICsyNSwxNCBAQCB2b2lkIFByZXBhcmVKaXQoanM6OmppdDo6TWFj cm9Bc3NlbWJsZXImIG1hc20pIHsKLSAjaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKLSAgICAgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpCi0gICBzYXZlLmFkZChqczo6aml0OjpyYSk7Ci0rI2VsaWYgZGVmaW5lZChKU19D T0RFR0VOX1BQQzY0KQotKyAgLy8gTFIgb24gUFBDNjQgaXNuJ3QgYSBHUFI7IHNhdmUgaXQgdG8g dGhlIHN0YWNrIG1hbnVhbGx5LgotKyAgewotKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhtYXNtKTsKLSsgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKLSsg ICAgbWFzbS54c19tZmxyKHNjcmF0Y2gpOwotKyAgICBtYXNtLmFzX3N0ZHUoc2NyYXRjaCwgU3Rh Y2tQb2ludGVyLCAtOCk7Ci0rICB9Ci0gI2VsaWYgZGVmaW5lZChKU19VU0VfTElOS19SRUdJU1RF UikKLSAgIHNhdmUuYWRkKGpzOjpqaXQ6OmxyKTsKLSAjZW5kaWYKLUBAIC00NCw2ICs1Miw4IEBA IGJvb2wgRXhlY3V0ZUppdChKU0NvbnRleHQqIGN4LCBqczo6aml0OjpNYWNyb0Fzc2VtYmxlciYg bWFzbSkgewotICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fTE9PTkc2NCkgfHwgXAotICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSAg IHJlc3RvcmUuYWRkKGpzOjpqaXQ6OnJhKTsKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBD NjQpCi0rICAvLyBMUiB3aWxsIGJlIHJlc3RvcmVkIG1hbnVhbGx5IGFmdGVyIFBvcFJlZ3NJbk1h c2suCi0gI2VsaWYgZGVmaW5lZChKU19VU0VfTElOS19SRUdJU1RFUikKLSAgIHJlc3RvcmUuYWRk KGpzOjpqaXQ6OmxyKTsKLSAjZW5kaWYKLUBAIC01NSw2ICs2NSwxNiBAQCBib29sIEV4ZWN1dGVK aXQoSlNDb250ZXh0KiBjeCwganM6OmppdDo6TWFjcm9Bc3NlbWJsZXImIG1hc20pIHsKLSAKLSAg IC8vIFJlc2V0IHN0YWNrIHBvaW50ZXIuCi0gICBtYXNtLlNldFN0YWNrUG9pbnRlcjY0KFBzZXVk b1N0YWNrUG9pbnRlcjY0KTsKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICAv LyBSZXN0b3JlIExSIGZyb20gdGhlIHN0YWNrIGFuZCByZXR1cm4uCi0rICB7Ci0rICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwotKyAgICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOwotKyAgICBtYXNtLmFzX2xkKHNjcmF0Y2gsIFN0YWNrUG9pbnRlciwg MCk7Ci0rICAgIG1hc20ueHNfbXRscihzY3JhdGNoKTsKLSsgICAgbWFzbS5hc19hZGRpKFN0YWNr UG9pbnRlciwgU3RhY2tQb2ludGVyLCA4KTsKLSsgIH0KLSsgIG1hc20uYXNfYmxyKCk7Ci0gI2Vs c2UKLSAgIC8vIEV4aXQgdGhlIEpJVC1lZCBjb2RlIHVzaW5nIHRoZSBBQkkgcmV0dXJuIHN0eWxl LgotICAgbWFzbS5hYmlyZXQoKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvc2hlbGwvanMuY3BwIGIv anMvc3JjL3NoZWxsL2pzLmNwcAotaW5kZXggNDViYzA3OTZiOTY0Li4yMGViMTIzMWJiN2YgMTAw NjQ0Ci0tLS0gYS9qcy9zcmMvc2hlbGwvanMuY3BwCi0rKysgYi9qcy9zcmMvc2hlbGwvanMuY3Bw Ci1AQCAtNzg5NSw2ICs3ODk1LDEzIEBAIHN0YXRpYyB2b2lkIFNpbmdsZVN0ZXBDYWxsYmFjayh2 b2lkKiBhcmcsIGppdDo6U2ltdWxhdG9yKiBzaW0sIHZvaWQqIHBjKSB7Ci0gICBzdGF0ZS5mcCA9 ICh2b2lkKilzaW0tPmdldFJlZ2lzdGVyKGppdDo6U2ltdWxhdG9yOjpmcCk7Ci0gICAvLyBzZWUg V2FzbVRhaWxDYWxsRlBTY3JhdGNoUmVnIGFuZCBDb2xsYXBzZVdhc21GcmFtZUZhc3QKLSAgIHN0 YXRlLnRlbXBGUCA9ICh2b2lkKilzaW0tPmdldFJlZ2lzdGVyKGppdDo6U2ltdWxhdG9yOjp0Myk7 Ci0rIyAgZWxpZiBkZWZpbmVkKEpTX1NJTVVMQVRPUl9QUEM2NCkKLSsgIHN0YXRlLnNwID0gKHZv aWQqKXNpbS0+Z2V0UmVnaXN0ZXIoaml0OjpTaW11bGF0b3I6OnNwKTsKLSsgIHN0YXRlLmxyID0g KHZvaWQqKXNpbS0+Z2V0TFIoKTsKLSsgIHN0YXRlLmZwID0gKHZvaWQqKXNpbS0+Z2V0UmVnaXN0 ZXIoaml0OjpTaW11bGF0b3I6OmZwKTsKLSsgIC8vIFdhc21UYWlsQ2FsbEZQU2NyYXRjaFJlZyA9 IEFCSU5vbkFyZ1JlZzMgPSByMjIgaG9sZHMgdGhlIHVud2luZCBGUAotKyAgLy8gZHVyaW5nIHRo ZSB3YXNtIHRhaWwtY2FsbCBjb2xsYXBzZSB3aW5kb3cgKFJlc3RvcmVGcFJhIHVud2luZCBpbmZv KS4KLSsgIHN0YXRlLnRlbXBGUCA9ICh2b2lkKilzaW0tPmdldFJlZ2lzdGVyKGppdDo6U2ltdWxh dG9yOjpyMjIpOwotICMgIGVsc2UKLSAjICAgIGVycm9yICJOWUk6IFNpbmdsZS1zdGVwIHByb2Zp bGluZyBzdXBwb3J0IgotICMgIGVuZGlmCi1AQCAtMTMxNDQsNiArMTMxNTEsMTUgQEAgYm9vbCBJ bml0T3B0aW9uUGFyc2VyKE9wdGlvblBhcnNlciYgb3ApIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICJTdG9wIHRoZSBSSVNDLVYgc2ltdWxhdG9yIGFmdGVyIHRoZSBnaXZlbiAiCi0gICAgICAg ICAgICAgICAgICAgICAgICAiTlVNQkVSIG9mIGluc3RydWN0aW9ucy4iLAotICAgICAgICAgICAg ICAgICAgICAgICAgLTEpIHx8Ci0rI2VuZGlmCi0rI2lmZGVmIEpTX1NJTVVMQVRPUl9QUEM2NAot KyAgICAgICFvcC5hZGRCb29sT3B0aW9uKCdcMCcsICJwcGM2NC1zaW0taWNhY2hlLWNoZWNrcyIs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgIkVuYWJsZSBpY2FjaGUgZmx1c2ggY2hlY2tzIGlu IHRoZSBQUEM2NCAiCi0rICAgICAgICAgICAgICAgICAgICAgICAgInNpbXVsYXRvci4iKSB8fAot KyAgICAgICFvcC5hZGRJbnRPcHRpb24oJ1wwJywgInBwYzY0LXNpbS1zdG9wLWF0IiwgIk5VTUJF UiIsCi0rICAgICAgICAgICAgICAgICAgICAgICAiU3RvcCB0aGUgUFBDNjQgc2ltdWxhdG9yIGFm dGVyIHRoZSBnaXZlbiAiCi0rICAgICAgICAgICAgICAgICAgICAgICAiTlVNQkVSIG9mIGluc3Ry dWN0aW9ucy4iLAotKyAgICAgICAgICAgICAgICAgICAgICAgLTEpIHx8Ci0gI2VuZGlmCi0gICAg ICAgIW9wLmFkZEludE9wdGlvbignXDAnLCAibnVyc2VyeS1zaXplIiwgIlNJWkUtTUIiLAotICAg ICAgICAgICAgICAgICAgICAgICAgIlNldCB0aGUgbWF4aW11bSBudXJzZXJ5IHNpemUgaW4gTUIi LAotQEAgLTE0MjM1LDYgKzE0MjUxLDE1IEBAIGJvb2wgU2V0Q29udGV4dEpJVE9wdGlvbnMoSlND b250ZXh0KiBjeCwgY29uc3QgT3B0aW9uUGFyc2VyJiBvcCkgewotICAgaWYgKHN0b3BBdCA+PSAw KSB7Ci0gICAgIGppdDo6U2ltdWxhdG9yOjpTdG9wU2ltQXQgPSBzdG9wQXQ7Ci0gICB9Ci0rI2Vs aWYgZGVmaW5lZChKU19TSU1VTEFUT1JfUFBDNjQpCi0rICBpZiAob3AuZ2V0Qm9vbE9wdGlvbigi cHBjNjQtc2ltLWljYWNoZS1jaGVja3MiKSkgewotKyAgICBqaXQ6OlNpbXVsYXRvclByb2Nlc3M6 OklDYWNoZUNoZWNraW5nRGlzYWJsZUNvdW50ID0gMDsKLSsgIH0KLSsKLSsgIGludDMyX3Qgc3Rv cEF0ID0gb3AuZ2V0SW50T3B0aW9uKCJwcGM2NC1zaW0tc3RvcC1hdCIpOwotKyAgaWYgKHN0b3BB dCA+PSAwKSB7Ci0rICAgIGppdDo6U2ltdWxhdG9yOjpTdG9wU2ltQXQgPSBzdG9wQXQ7Ci0rICB9 Ci0gI2VuZGlmCi0gCi0gI2lmZGVmIERFQlVHCi1kaWZmIC0tZ2l0IGEvanMvc3JjL3NoZWxsL2pz c2hlbGwuaCBiL2pzL3NyYy9zaGVsbC9qc3NoZWxsLmgKLWluZGV4IGU4ZDQ3YmE2ODg4Yy4uNTdl MmIxNWYzY2RkIDEwMDY0NAotLS0tIGEvanMvc3JjL3NoZWxsL2pzc2hlbGwuaAotKysrIGIvanMv c3JjL3NoZWxsL2pzc2hlbGwuaAotQEAgLTIyLDcgKzIyLDggQEAKLSAKLSAvLyBTb21lIHBsYXRm b3JtIGhvb2tzIG11c3QgYmUgaW1wbGVtZW50ZWQgZm9yIHNpbmdsZS1zdGVwIHByb2ZpbGluZy4K LSAjaWYgZGVmaW5lZChKU19TSU1VTEFUT1JfQVJNKSB8fCBkZWZpbmVkKEpTX1NJTVVMQVRPUl9N SVBTNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19TSU1VTEFUT1JfQVJNNjQpIHx8IGRlZmluZWQo SlNfU0lNVUxBVE9SX0xPT05HNjQpCi0rICAgIGRlZmluZWQoSlNfU0lNVUxBVE9SX0FSTTY0KSB8 fCBkZWZpbmVkKEpTX1NJTVVMQVRPUl9MT09ORzY0KSB8fCBcCi0rICAgIGRlZmluZWQoSlNfU0lN VUxBVE9SX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfU0lNVUxBVE9SX1BQQzY0KQotICMgIGRlZmlu ZSBTSU5HTEVTVEVQX1BST0ZJTElORwotICNlbmRpZgotIAotZGlmZiAtLWdpdCBhL2pzL3NyYy90 ZXN0cy9zaGVsbC9vcy5qcyBiL2pzL3NyYy90ZXN0cy9zaGVsbC9vcy5qcwotaW5kZXggOTI5OTgy NzU2NTQ4Li5mM2QyMzk2YjE3ZWIgMTAwNjQ0Ci0tLS0gYS9qcy9zcmMvdGVzdHMvc2hlbGwvb3Mu anMKLSsrKyBiL2pzL3NyYy90ZXN0cy9zaGVsbC9vcy5qcwotQEAgLTIwLDcgKzIwLDEzIEBAIHZh ciBpbmZvID0gb3Mud2FpdHBpZChraWRwaWQsIHRydWUpOwotIGFzc2VydEVxKGluZm8uaGFzT3du UHJvcGVydHkoInBpZCIpLCBmYWxzZSk7Ci0gYXNzZXJ0RXEoaW5mby5oYXNPd25Qcm9wZXJ0eSgi ZXhpdFN0YXR1cyIpLCBmYWxzZSk7Ci0gCi0tb3Mua2lsbChraWRwaWQpOwotKy8vIFVzZSBTSUdL SUxMICg5KSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFNJR0lOVDogdW5kZXIgaGVhdnkgcGFyYWxs ZWwgdGVzdAotKy8vIGxvYWQsIFNJR0lOVCBkZWxpdmVyeSBjYW4gcmFjZSB3aXRoIHRoZSBjaGls ZCdzIHNpZ25hbC1oYW5kbGVyIHNldHVwIGFuZAotKy8vIHRoZSBrZXJuZWwncyByZWFwaW5nIHBh dGgsIGxlYWRpbmcgdG8gd2FpdHBpZCBiZWxvdyBibG9ja2luZyB1bnRpbCB0aGUKLSsvLyBgc2xl ZXAgNjBgIGV4aXRzIG5vcm1hbGx5LiBTSUdLSUxMIGlzIHVuY2F0Y2hhYmxlIGFuZCBmb3JjZXMg aW1tZWRpYXRlCi0rLy8gdGVybWluYXRpb24sIHNvIHRoZSBhc3NlcnRpb24gYmVsb3cgKCJraWxs ZWQgcHJvY2VzcyBzaG91bGQgbm90IGhhdmUKLSsvLyBleGl0U3RhdHVzIikgaXMgcmVsaWFibGUu Ci0rb3Mua2lsbChraWRwaWQsIDkpOwotIAotIGluZm8gPSBvcy53YWl0cGlkKGtpZHBpZCk7Ci0g YXNzZXJ0RXEoaW5mby5oYXNPd25Qcm9wZXJ0eSgicGlkIiksIHRydWUsICJ3YWl0aW5nIG9uIGRl YWQgcHJvY2VzcyBzaG91bGQgcmV0dXJuIHBpZCIpOwotZGlmZiAtLWdpdCBhL2pzL3NyYy91dGls L1BvaXNvbi5oIGIvanMvc3JjL3V0aWwvUG9pc29uLmgKLWluZGV4IDcyMWVjZmY2MTQ5ZC4uZGU3 OTgxYWE2ZjYwIDEwMDY0NAotLS0tIGEvanMvc3JjL3V0aWwvUG9pc29uLmgKLSsrKyBiL2pzL3Ny Yy91dGlsL1BvaXNvbi5oCi1AQCAtOTIsNiArOTIsOCBAQCBjb25zdCB1aW50OF90IEpTX1NDT1BF X0RBVEFfVFJBSUxJTkdfTkFNRVNfUEFUVEVSTiA9IDB4Q0M7Ci0gI2VsaWYgZGVmaW5lZChKU19D T0RFR0VOX1JJU0NWNjQpCi0gIyAgZGVmaW5lIEpTX1NXRVBUX0NPREVfUEFUVEVSTiBcCi0gICAg IDB4MjkgIC8vIGlsbGVnYWwgc2IgaW5zdHJ1Y3Rpb24sIGNyYXNoZXMgaW4gdXNlciBtb2RlLgot KyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsjICBkZWZpbmUgSlNfU1dFUFRfQ09E RV9QQVRURVJOIDB4MDAgIC8vIGlsbGVnYWwgaW5zdHJ1Y3Rpb24gKGFsbCB6ZXJvcykKLSAjZWxz ZQotICMgIGVycm9yICJKU19TV0VQVF9DT0RFX1BBVFRFUk4gbm90IGRlZmluZWQgZm9yIHRoaXMg cGxhdGZvcm0iCi0gI2VuZGlmCi1kaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbUFueVJlZi5o IGIvanMvc3JjL3dhc20vV2FzbUFueVJlZi5oCi1pbmRleCBmODFkNGM2MTcxYjYuLjcyMDBlOWFi MGUyMyAxMDA2NDQKLS0tLSBhL2pzL3NyYy93YXNtL1dhc21BbnlSZWYuaAotKysrIGIvanMvc3Jj L3dhc20vV2FzbUFueVJlZi5oCi1AQCAtMjA5LDcgKzIwOSw3IEBAIGNsYXNzIEFueVJlZiB7Ci0g ICAgIC8vIFRydW5jYXRlIHRoZSB2YWx1ZSB0byB0aGUgMzEtYml0IHZhbHVlIHNpemUuCi0gICAg IHVpbnRwdHJfdCB3aWRlVmFsdWUgPSB1aW50cHRyX3QodmFsdWUgJiAweDdGRkZGRkZGKTsKLSAj ZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01J UFM2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgZGVmaW5l ZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgICAg Ly8gU2lnbiBleHRlbmQgdGhlIHZhbHVlIHRvIHRoZSBuYXRpdmUgcG9pbnRlciBzaXplLgotICAg ICB1aW50cHRyX3Qgd2lkZVZhbHVlID0gdWludHB0cl90KGludDY0X3QoKHVpbnQ2NF90KHZhbHVl KSA8PCAzMykpID4+IDMzKTsKLSAjZWxpZiAhZGVmaW5lZChKU182NEJJVCkKLUBAIC0yMzQsNiAr MjM0LDExIEBAIGNsYXNzIEFueVJlZiB7Ci0gIyAgaWZkZWYgREVCVUcKLSAjICAgIGlmIGRlZmlu ZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKLSAgICAgTU9a X0FTU0VSVCh2YWx1ZSA8PSBVSU5UMzJfTUFYKTsKLSsjICAgIGVsaWYgZGVmaW5lZChKU19DT0RF R0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKLSsgICAgICAg IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQp Ci0rICAgIC8vIE9uIHNpZ24tZXh0ZW5kaW5nIHBsYXRmb3JtcywgYSBjYW5vbmljYWwgaTMyIG11 c3QgYmUgdGhlIHNpZ24KLSsgICAgLy8gZXh0ZW5zaW9uIG9mIGl0cyBsb3cgMzIgYml0cy4KLSsg ICAgTU9aX0FTU0VSVCh2YWx1ZSA9PSB1aW50cHRyX3QoaW50NjRfdChpbnQzMl90KHZhbHVlKSkp KTsKLSAjICAgIGVuZGlmCi0gIyAgZW5kaWYKLSAgIH0KLWRpZmYgLS1naXQgYS9qcy9zcmMvd2Fz bS9XYXNtQkNEZWZzLmggYi9qcy9zcmMvd2FzbS9XYXNtQkNEZWZzLmgKLWluZGV4IGI0NGU5MWUy ODY5My4uNjZhOGM5YWZlOGM2IDEwMDY0NAotLS0tIGEvanMvc3JjL3dhc20vV2FzbUJDRGVmcy5o Ci0rKysgYi9qcy9zcmMvd2FzbS9XYXNtQkNEZWZzLmgKLUBAIC00NCw2ICs0NCw5IEBACi0gI2lm IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L0Fz c2VtYmxlci1yaXNjdjY0LmgiCi0gI2VuZGlmCi0rI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKLSsjICBpbmNsdWRlICJqaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgiCi0rI2VuZGlmCi0g I2luY2x1ZGUgImpzL1NjYWxhclR5cGUuaCIKLSAjaW5jbHVkZSAidXRpbC9NZW1vcnkuaCIKLSAj aW5jbHVkZSAid2FzbS9XYXNtQ29kZWdlblR5cGVzLmgiCi1AQCAtMTUxLDYgKzE1NCwxMCBAQCBl bnVtIGNsYXNzIFJoc0Rlc3RPcCB7IFRydWUgPSB0cnVlIH07Ci0gIyAgZGVmaW5lIFJBQkFMRFJf UElOX0lOU1RBTkNFCi0gI2VuZGlmCi0gCi0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsjICBk ZWZpbmUgUkFCQUxEUl9QSU5fSU5TVEFOQ0UKLSsjZW5kaWYKLSsKLSAvLyBNYXggbnVtYmVyIG9m IHB1c2hlcyBvbnRvIHRoZSB2YWx1ZSBzdGFjayBmb3IgYW55IG9wY29kZSBvciBlbWl0dGVyIHRo YXQKLSAvLyBkb2VzIG5vdCBwdXNoIGEgdmFyaWFibGUsIHVuYm91bmRlZCBhbW91bnQgKGFueXRo aW5nIHdpdGggbXVsdGlwbGUKLSAvLyByZXN1bHRzKS4gIFRoaXMgaW5jbHVkZXMgYWxzbyBpbnRl cm1lZGlhdGUgcHVzaGVzIHN1Y2ggYXMgdmFsdWVzIHB1c2hlZCBhcwotZGlmZiAtLWdpdCBhL2pz L3NyYy93YXNtL1dhc21CQ01lbW9yeS5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtQkNNZW1vcnkuY3Bw Ci1pbmRleCA4MzU1MTJiMDliOGMuLjkxMzdiMDlmNDY4NCAxMDA2NDQKLS0tLSBhL2pzL3NyYy93 YXNtL1dhc21CQ01lbW9yeS5jcHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21CQ01lbW9yeS5jcHAK LUBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OmJvdW5kc0NoZWNrQmVsb3c0 R0JBY2Nlc3ModWludDMyX3QgbWVtb3J5SW5kZXgsCi0gLy8gTWFrZSBzdXJlIHRoZSBwdHIgY291 bGQgYmUgdXNlZCBhcyBhbiBpbmRleCByZWdpc3Rlci4KLSBzdGF0aWMgaW5saW5lIHZvaWQgVG9W YWxpZEluZGV4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcHRyKSB7Ci0gI2lmIGRlZmlu ZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBc Ci0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAgICBkZWZpbmVkKEpTX0NPREVH RU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAgLy8gV2hlbiBwdHIg aXMgdXNlZCBhcyBhbiBpbmRleCwgaXQgd2lsbCBiZSBhZGRlZCB0byBhIDY0LWJpdCByZWdpc3Rl ci4KLSAgIC8vIFNvIHdlIHNob3VsZCBleHBsaWNpdGx5IHByb21vdGUgcHRyIHRvIDY0LWJpdC4g U2luY2Ugbm93IHB0ciBob2xkcyBhCi0gICAvLyB1bnNpZ25lZCAzMi1iaXQgdmFsdWUsIHdlIHpl cm8tZXh0ZW5kIGl0IHRvIDY0LWJpdCBoZXJlLgotQEAgLTY0NSw2ICs2NDUsMTMgQEAgdm9pZCBC YXNlQ29tcGlsZXI6OmV4ZWN1dGVMb2FkKE1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywgQWNjZXNz Q2hlY2sqIGNoZWNrLAotICAgfSBlbHNlIHsKLSAgICAgbWFzbS53YXNtTG9hZCgqYWNjZXNzLCBt ZW1vcnlCYXNlLCBwdHIsIHB0ciwgZGVzdC5hbnkoKSk7Ci0gICB9Ci0rI2VsaWYgZGVmaW5lZChK U19DT0RFR0VOX1BQQzY0KQotKyAgTU9aX0FTU0VSVCh0ZW1wLmlzSW52YWxpZCgpKTsKLSsgIGlm IChkZXN0LnRhZyA9PSBBbnlSZWc6Okk2NCkgewotKyAgICBtYXNtLndhc21Mb2FkSTY0KCphY2Nl c3MsIG1lbW9yeUJhc2UsIHB0ciwgcHRyLCBkZXN0Lmk2NCgpKTsKLSsgIH0gZWxzZSB7Ci0rICAg IG1hc20ud2FzbUxvYWQoKmFjY2VzcywgbWVtb3J5QmFzZSwgcHRyLCBwdHIsIGRlc3QuYW55KCkp OwotKyAgfQotICNlbHNlCi0gICBNT1pfQ1JBU0goIkJhc2VDb21waWxlciBwbGF0Zm9ybSBob29r OiBsb2FkIik7Ci0gI2VuZGlmCi1AQCAtNjc1LDEwICs2ODIsMTEgQEAgdm9pZCBCYXNlQ29tcGls ZXI6OmxvYWQoTWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLCBBY2Nlc3NDaGVjayogY2hlY2ssCi0g ICAvLyBnZW5lcmF0ZWQgaXMgdGhlIHNhbWUgZm9yIHRoZSA2NC1iaXQgYW5kIHRoZSAzMi1iaXQg Y2FzZS4KLSAgIHJldHVybiBleGVjdXRlTG9hZChhY2Nlc3MsIGNoZWNrLCBpbnN0YW5jZSwgbWVt b3J5QmFzZSwgUmVnSTMyKHB0ci5yZWcpLCBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgIG1h eWJlRnJvbUk2NCh0ZW1wKSk7Ci0tI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpCi0tICAvLyBPbiBtaXBzNjQgYW5kIGxvb25nYXJj aDY0LCB0aGUgJ3ByZXBhcmVNZW1vcnlBY2Nlc3MnIGZ1bmN0aW9uIHdpbGwgbWFrZQotLSAgLy8g c3VyZSB0aGF0IHB0ciBob2xkcyBhIHZhbGlkIDY0LWJpdCBpbmRleCB2YWx1ZS4gVGh1cyB0aGUg Y29kZSBnZW5lcmF0ZWQgaW4KLS0gIC8vICdleGVjdXRlTG9hZCcgaXMgdGhlIHNhbWUgZm9yIHRo ZSA2NC1iaXQgYW5kIHRoZSAzMi1iaXQgY2FzZS4KLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f TUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAotKyAgICBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCi0rICAvLyBPbiBtaXBzNjQsIGxvb25nYXJjaDY0LCBhbmQgcHBj NjQsIHRoZSAncHJlcGFyZU1lbW9yeUFjY2VzcycgZnVuY3Rpb24gd2lsbAotKyAgLy8gbWFrZSBz dXJlIHRoYXQgcHRyIGhvbGRzIGEgdmFsaWQgNjQtYml0IGluZGV4IHZhbHVlLiBUaHVzIHRoZSBj b2RlCi0rICAvLyBnZW5lcmF0ZWQgaW4gJ2V4ZWN1dGVMb2FkJyBpcyB0aGUgc2FtZSBmb3IgdGhl IDY0LWJpdCBhbmQgdGhlIDMyLWJpdCBjYXNlLgotICAgcmV0dXJuIGV4ZWN1dGVMb2FkKGFjY2Vz cywgY2hlY2ssIGluc3RhbmNlLCBtZW1vcnlCYXNlLCBSZWdJMzIocHRyLnJlZyksIGRlc3QsCi0g ICAgICAgICAgICAgICAgICAgICAgbWF5YmVGcm9tSTY0KHRlbXApKTsKLSAjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fUklTQ1Y2NCkKLUBAIC03ODgsNiArNzk2LDEzIEBAIHZvaWQgQmFzZUNvbXBp bGVyOjpleGVjdXRlU3RvcmUoTWVtb3J5QWNjZXNzRGVzYyogYWNjZXNzLCBBY2Nlc3NDaGVjayog Y2hlY2ssCi0gICB9IGVsc2UgewotICAgICBtYXNtLndhc21TdG9yZSgqYWNjZXNzLCBzcmMuYW55 KCksIG1lbW9yeUJhc2UsIHB0ciwgcHRyKTsKLSAgIH0KLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVH RU5fUFBDNjQpCi0rICBNT1pfQVNTRVJUKHRlbXAuaXNJbnZhbGlkKCkpOwotKyAgaWYgKGFjY2Vz cy0+dHlwZSgpID09IFNjYWxhcjo6SW50NjQpIHsKLSsgICAgbWFzbS53YXNtU3RvcmVJNjQoKmFj Y2Vzcywgc3JjLmk2NCgpLCBtZW1vcnlCYXNlLCBwdHIsIHB0cik7Ci0rICB9IGVsc2UgewotKyAg ICBtYXNtLndhc21TdG9yZSgqYWNjZXNzLCBzcmMuYW55KCksIG1lbW9yeUJhc2UsIHB0ciwgcHRy KTsKLSsgIH0KLSAjZWxzZQotICAgTU9aX0NSQVNIKCJCYXNlQ29tcGlsZXIgcGxhdGZvcm0gaG9v azogc3RvcmUiKTsKLSAjZW5kaWYKLUBAIC04MTIsNyArODI3LDcgQEAgdm9pZCBCYXNlQ29tcGls ZXI6OnN0b3JlKE1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywgQWNjZXNzQ2hlY2sqIGNoZWNrLAot ICAgICAgICAgICAgICAgICAgICAgICBtYXliZUZyb21JNjQodGVtcCkpOwotICNlbGlmIGRlZmlu ZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgICAgXAot ICAgICBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9P Tkc2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgZGVmaW5l ZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIHJl dHVybiBleGVjdXRlU3RvcmUoYWNjZXNzLCBjaGVjaywgaW5zdGFuY2UsIG1lbW9yeUJhc2UsIFJl Z0kzMihwdHIucmVnKSwgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICBtYXliZUZyb21JNjQo dGVtcCkpOwotICNlbHNlCi1AQCAtMTI5NSw3ICsxMzEwLDggQEAgc3RhdGljIHZvaWQgRGVhbGxv Y2F0ZShCYXNlQ29tcGlsZXIqIGJjLCBSZWdJMzIgcnYsIGNvbnN0IFRlbXBzJiB0ZW1wcykgewot ICAgYmMtPmZyZWVJMzIodGVtcHMudDApOwotIH0KLSAKLS0jZWxpZiBkZWZpbmVkKEpTX0NPREVH RU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkKLSsjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAot KyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gCi0gc3RydWN0IFRlbXBzIHsKLSAgIFJl Z0kzMiB0MCwgdDEsIHQyOwotQEAgLTE1MDQsNyArMTUyMCw3IEBAIHN0YXRpYyB2b2lkIERlYWxs b2NhdGUoQmFzZUNvbXBpbGVyKiBiYywgQXRvbWljT3Agb3AsIFJlZ0k2NCBydiwgUmVnSTY0IHRl bXApIHsKLSB9Ci0gCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fTUlQUzY0KSB8fCBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0 KQotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQotIAotIHN0YXRpYyB2b2lkIFBvcEFuZEFsbG9jYXRlKEJhc2VDb21waWxlciogYmMs IEF0b21pY09wIG9wLCBSZWdJNjQqIHJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z0k2NCogcnYsIFJlZ0k2NCogdGVtcCkgewotQEAgLTE2NzgsNyArMTY5NCw4IEBAIHN0YXRpYyB2 b2lkIERlYWxsb2NhdGUoQmFzZUNvbXBpbGVyKiBiYywgUmVnSTMyIHJ2LCBjb25zdCBUZW1wcyYp IHsKLSAgIGJjLT5mcmVlSTMyKHJ2KTsKLSB9Ci0gCi0tI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpCi0rI2VsaWYgZGVmaW5lZChK U19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKLSsg ICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotIAotIHN0cnVjdCBUZW1wcyB7Ci0gICBSZWdJ MzIgdDAsIHQxLCB0MjsKLUBAIC0xODQ0LDcgKzE4NjEsNyBAQCBzdGF0aWMgdm9pZCBEZWFsbG9j YXRlKEJhc2VDb21waWxlciogYmMsIFJlZ0k2NCByZCwgUmVnSTY0IHJ2KSB7Ci0gfQotIAotICNl bGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2 NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkKLSsgICAgZGVmaW5lZChK U19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAKLSBzdGF0 aWMgdm9pZCBQb3BBbmRBbGxvY2F0ZShCYXNlQ29tcGlsZXIqIGJjLCBSZWdJNjQqIHJkLCBSZWdJ NjQqIHJ2KSB7Ci0gICAqcnYgPSBiYy0+cG9wSTY0KCk7Ci1AQCAtMjAxNyw3ICsyMDM0LDggQEAg c3RhdGljIHZvaWQgRGVhbGxvY2F0ZShCYXNlQ29tcGlsZXIqIGJjLCBSZWdJMzIgcmV4cGVjdCwg UmVnSTMyIHJuZXcsCi0gICBiYy0+ZnJlZUkzMihyZXhwZWN0KTsKLSB9Ci0gCi0tI2VsaWYgZGVm aW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpCi0r I2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xP T05HNjQpIHx8IFwKLSsgICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotIAotIHN0cnVjdCBU ZW1wcyB7Ci0gICBSZWdJMzIgdDAsIHQxLCB0MjsKLUBAIC0yMjg3LDcgKzIzMDUsNyBAQCBzdGF0 aWMgdm9pZCBEZWFsbG9jYXRlKEJhc2VDb21waWxlciogYmMsIFJlZ0k2NCByZXhwZWN0LCBSZWdJ NjQgcm5ldykgewotIH0KLSAKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX0xP T05HNjQpCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCi0gCi0gdGVtcGxhdGUgPHR5cGVuYW1lIFJlZ0FkZHJlc3NUeXBlPgotIHN0 YXRpYyB2b2lkIFBvcEFuZEFsbG9jYXRlKEJhc2VDb21waWxlciogYmMsIFJlZ0k2NCogcmV4cGVj dCwgUmVnSTY0KiBybmV3LAotQEAgLTI4ODUsNiArMjkwMywxMSBAQCB2b2lkIEJhc2VDb21waWxl cjo6bG9hZEV4dGVuZChNZW1vcnlBY2Nlc3NEZXNjKiBhY2Nlc3MsIFNjYWxhcjo6VHlwZSB2aWV3 VHlwZSkgewotICAgUmVnSTY0IHJzID0gcG9wSTY0KCk7Ci0gICBSZWdWMTI4IHJkID0gbmVlZFYx MjgoKTsKLSAgIG1hc20ubW92ZUdQUjY0VG9Eb3VibGUocnMsIHJkKTsKLSsjaWZkZWYgSlNfQ09E RUdFTl9QUEM2NAotKyAgLy8gbXR2c3JkIHBsYWNlcyB2YWx1ZSBpbiBCRSBkdzAgKD0gTEUgZHcx KS4gd2lkZW5Mb3cqIG9wZXJhdGVzIG9uIExFIGR3MC4KLSsgIC8vIFN3YXAgZHdvcmRzIHRvIG1v dmUgbG9hZGVkIGRhdGEgdG8gdGhlIGNvcnJlY3QgaGFsZi4KLSsgIG1hc20uYXNfeHhwZXJtZGko cmQsIHJkLCByZCwgMik7Ci0rI2VuZGlmCi0gICBzd2l0Y2ggKHZpZXdUeXBlKSB7Ci0gICAgIGNh c2UgU2NhbGFyOjpJbnQ4OgotICAgICAgIG1hc20ud2lkZW5Mb3dJbnQ4eDE2KHJkLCByZCk7Ci1k aWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbUJDUmVnRGVmcy5oIGIvanMvc3JjL3dhc20vV2Fz bUJDUmVnRGVmcy5oCi1pbmRleCBiYjg0ZjA4NjNkZTIuLmZkMzdiZDQ2NGYzOSAxMDA2NDQKLS0t LSBhL2pzL3NyYy93YXNtL1dhc21CQ1JlZ0RlZnMuaAotKysrIGIvanMvc3JjL3dhc20vV2FzbUJD UmVnRGVmcy5oCi1AQCAtMTE4LDYgKzExOCwxMyBAQCBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IFJhYmFsZHJTY3JhdGNoSTMyID0gQ2FsbFRlbXBSZWcyOwotIHN0YXRpYyBjb25zdGV4cHIgUmVn aXN0ZXIgUmFiYWxkclNjcmF0Y2hJMzIgPSBDYWxsVGVtcFJlZzI7Ci0gI2VuZGlmCi0gCi0rI2lm ZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsjICBkZWZpbmUgUkFCQUxEUl9TQ1JBVENIX0kzMgotKy8v IFVzZSByMjUgKGNhbGxlZS1zYXZlZCwgbm9uLWFyZywgbm90IHVzZWQgYnkgYW55IHdhc20gaW5m cmFzdHJ1Y3R1cmUpCi0rLy8gaW5zdGVhZCBvZiBDYWxsVGVtcFJlZzIgKHIxMCkgd2hpY2ggaXMg SW50QXJnUmVnNy4KLStzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFJhYmFsZHJTY3JhdGNoSTMy ID0gcjI1OwotKyNlbmRpZgotKwotICNpZmRlZiBSQUJBTERSX1NDUkFUQ0hfRjMyX0FMSUFTRVNf RjY0Ci0gIyAgaWYgIWRlZmluZWQoUkFCQUxEUl9TQ1JBVENIX0YzMikgfHwgIWRlZmluZWQoUkFC QUxEUl9TQ1JBVENIX0Y2NCkKLSAjICAgIGVycm9yICJCYWQgY29uZmlndXJhdGlvbiIKLUBAIC0z ODYsOCArMzkzLDkgQEAgc3RydWN0IFNwZWNpZmljUmVncyB7Ci0gCi0gICBTcGVjaWZpY1JlZ3Mo KSA6IGFiaVJldHVyblJlZ0k2NChSZXR1cm5SZWc2NCkge30KLSB9OwotLSNlbGlmIGRlZmluZWQo SlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAotLSAg ICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NW NjQpCi0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fTUlQUzY0KSB8fCAgXAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVm aW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IFwKLSsgICAgZGVmaW5lZChKU19DT0RFR0VOX1BQ QzY0KQotIHN0cnVjdCBTcGVjaWZpY1JlZ3MgewotICAgLy8gUmVxdWlyZWQgYnkgZ2NjLgotICAg U3BlY2lmaWNSZWdzKCkge30KLWRpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtQmFzZWxpbmVD b21waWxlLmNwcCBiL2pzL3NyYy93YXNtL1dhc21CYXNlbGluZUNvbXBpbGUuY3BwCi1pbmRleCAy YWY3YWQ3ZjU4M2IuLmM1NzE4MGRkMzYyYiAxMDA2NDQKLS0tLSBhL2pzL3NyYy93YXNtL1dhc21C YXNlbGluZUNvbXBpbGUuY3BwCi0rKysgYi9qcy9zcmMvd2FzbS9XYXNtQmFzZWxpbmVDb21waWxl LmNwcAotQEAgLTM3NiwxMSArMzc2LDE1IEBAIHZvaWQgQmFzZUNvbXBpbGVyOjp0YWJsZVN3aXRj aChMYWJlbCogdGhlVGFibGUsIFJlZ0kzMiBzd2l0Y2hWYWx1ZSwKLSAgIG1hc20ubWFfbGRyKERU UkFkZHIoc2NyYXRjaCwgRHRyUmVnSW1tU2hpZnQoc3dpdGNoVmFsdWUsIExTTCwgMikpLCBwYywg T2Zmc2V0LAotICAgICAgICAgICAgICAgQXNzZW1ibGVyOjpBbHdheXMpOwotICNlbGlmIGRlZmlu ZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBc Ci0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyAgICBkZWZpbmVkKEpTX0NPREVH RU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotICAgU2NyYXRjaEkzMiBz Y3JhdGNoKCp0aGlzKTsKLSAgIENvZGVMYWJlbCB0YWJsZUNsOwotIAotKyMgIGlmIGRlZmluZWQo SlNfQ09ERUdFTl9QUEM2NCkKLSsgIG1hc20ubW92KCZ0YWJsZUNsLCBzY3JhdGNoKTsKLSsjICBl bHNlCi0gICBtYXNtLm1hX2xpKHNjcmF0Y2gsICZ0YWJsZUNsKTsKLSsjICBlbmRpZgotIAotICAg dGFibGVDbC50YXJnZXQoKS0+YmluZCh0aGVUYWJsZS0+b2Zmc2V0KCkpOwotICAgbWFzbS5hZGRD b2RlTGFiZWwodGFibGVDbCk7Ci1AQCAtODk4LDcgKzkwMiw3IEBAIHZvaWQgQmFzZUNvbXBpbGVy OjppbnNlcnRCcmVha2FibGVQb2ludChDYWxsU2l0ZUtpbmQga2luZCkgewotICAgbWFzbS5hcHBl bmQoQ2FsbFNpdGVEZXNjKGl0ZXJfLmxhc3RPcGNvZGVPZmZzZXQoKSwga2luZCksCi0gICAgICAg ICAgICAgICBDb2RlT2Zmc2V0KG1hc20uY3VycmVudE9mZnNldCgpKSk7Ci0gI2VsaWYgZGVmaW5l ZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwK LS0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rICAgIGRlZmluZWQoSlNfQ09ERUdF Tl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICBTY3JhdGNoUHRyIHNj cmF0Y2goKnRoaXMpOwotICAgTGFiZWwgTDsKLSAgIG1hc20ubG9hZFB0cihBZGRyZXNzKEluc3Rh bmNlUmVnLCBJbnN0YW5jZTo6b2Zmc2V0T2ZEZWJ1Z1N0dWIoKSksIHNjcmF0Y2gpOwotQEAgLTk3 Miw3ICs5NzYsNyBAQCB2b2lkIEJhc2VDb21waWxlcjo6aW5zZXJ0UGVyRnVuY3Rpb25EZWJ1Z1N0 dWIoKSB7Ci0gICAgIG1hc20ubWFfYngobHIsIEFzc2VtYmxlcjo6WmVybyk7Ci0gICB9Ci0gI2Vs aWYgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBT NjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rICAgIGRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICB7Ci0g ICAgIFNjcmF0Y2hQdHIgc2NyYXRjaCgqdGhpcyk7Ci0gCi1AQCAtMTQwMyw3ICsxNDA3LDcgQEAg dm9pZCBCYXNlQ29tcGlsZXI6OnBvcFN0YWNrUmVzdWx0cyhBQklSZXN1bHRJdGVyJiBpdGVyLCBT dGFja0hlaWdodCBzdGFja0Jhc2UpIHsKLSAgICAgc3dpdGNoICh2LmtpbmQoKSkgewotICAgICAg IGNhc2UgU3RrOjpDb25zdEkzMjoKLSAjaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCi0gICAgICAgICBmci5zdG9yZUltbWVkaWF0ZVB0clRvU3RhY2sodi5p MzJ2YWxfLCByZXN1bHRIZWlnaHQsIHRlbXApOwotICNlbHNlCi0gICAgICAgICBmci5zdG9yZUlt bWVkaWF0ZVB0clRvU3RhY2sodWludDMyX3Qodi5pMzJ2YWxfKSwgcmVzdWx0SGVpZ2h0LCB0ZW1w KTsKLUBAIC0xNzIzLDYgKzE3MjcsMTMgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OnBhc3NBcmcoVmFs VHlwZSB0eXBlLCBjb25zdCBTdGsmIGFyZywgRnVuY3Rpb25DYWxsKiBjYWxsKSB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdMb2Mub2Zmc2V0RnJvbUFyZ0Jhc2Uo KSkpOwotICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICBsb2FkSTMyKGFyZywgUmVnSTMyKGFyZ0xv Yy5ncHIoKSkpOwotKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAgICAgICAvLyBhZGRpIGNh biBzaWduLWV4dGVuZCwgd2hpY2ggeWllbGRzIHdyb25nIHZhbHVlcyB3aGVuIHRoZSBDKysKLSsg ICAgICAgIC8vIGNhbGxlZSBleHBlY3RzIGEgdWludDMyX3QuIENsZWFyIHRoZSB1cHBlciAzMiBi aXRzLgotKyAgICAgICAgaWYgKGNhbGwtPmFiaUtpbmQgPT0gQUJJS2luZDo6U3lzdGVtKSB7Ci0r ICAgICAgICAgIG1hc20uYXNfcmxkaWNsKGFyZ0xvYy5ncHIoKSwgYXJnTG9jLmdwcigpLCAwLCAz Mik7Ci0rICAgICAgICB9Ci0rI2VuZGlmCi0gICAgICAgfQotICAgICAgIGJyZWFrOwotICAgICB9 Ci1AQCAtMjM3Miw5ICsyMzgzLDEwIEBAIHZvaWQgQmFzZUNvbXBpbGVyOjpmaW5pc2hUcnlOb3Rl KHNpemVfdCB0cnlOb3RlSW5kZXgpIHsKLSBSZWdJMzIgQmFzZUNvbXBpbGVyOjpuZWVkUm90YXRl NjRUZW1wKCkgewotICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KQotICAgcmV0dXJuIG5lZWRJ MzIoKTsKLS0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fQVJNKSB8fCAgICBcCi0tICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rI2VsaWYgZGVmaW5lZChKU19DT0RF R0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgICAgICAgXAotKyAgICBkZWZp bmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8ICAg IFwKLSsgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdF Tl9SSVNDVjY0KSB8fCBcCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIHJldHVy biBSZWdJMzI6OkludmFsaWQoKTsKLSAjZWxzZQotICAgTU9aX0NSQVNIKCJCYXNlQ29tcGlsZXIg cGxhdGZvcm0gaG9vazogbmVlZFJvdGF0ZTY0VGVtcCIpOwotQEAgLTI0MzMsNiArMjQ0NSw4IEBA IHZvaWQgQmFzZUNvbXBpbGVyOjpwb3BBbmRBbGxvY2F0ZUZvck11bEk2NChSZWdJNjQqIHIwLCBS ZWdJNjQqIHIxLAotICAgcG9wMnhJNjQocjAsIHIxKTsKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVH RU5fUklTQ1Y2NCkKLSAgIHBvcDJ4STY0KHIwLCByMSk7Ci0rI2VsaWYgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KQotKyAgcG9wMnhJNjQocjAsIHIxKTsKLSAjZWxzZQotICAgTU9aX0NSQVNIKCJC YXNlQ29tcGlsZXIgcG9ydGluZyBpbnRlcmZhY2U6IHBvcEFuZEFsbG9jYXRlRm9yTXVsSTY0Iik7 Ci0gI2VuZGlmCi1AQCAtMjg2Niw2ICsyODgwLDkgQEAgc3RhdGljIFJlZ0kzMiBQb3BjbnRUZW1w KEJhc2VDb21waWxlciYgYmMpIHsKLSAgICAgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKLSAgICAgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpCi0gICByZXR1cm4gYmMubmVlZEkzMigpOwotKyNlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9QUEM2NCkKLSsgIC8vIFBQQzY0IGhhcyBuYXRpdmUgcG9wY250ZC9wb3BjbnR3OyBubyB0 ZW1wIHJlZ2lzdGVyIG5lZWRlZC4KLSsgIHJldHVybiBSZWdJMzI6OkludmFsaWQoKTsKLSAjZWxz ZQotICAgTU9aX0NSQVNIKCJCYXNlQ29tcGlsZXIgcGxhdGZvcm0gaG9vazogUG9wY250VGVtcCIp OwotICNlbmRpZgotQEAgLTkzNjIsNiArOTM3OSwxMSBAQCBzdGF0aWMgdm9pZCBNdWxJNjR4MihN YWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QsCi0gICAgICAgICAg ICAgICAgICAgICAgUmVnVjEyOCB0ZW1wMSwgUmVnVjEyOCB0ZW1wMikgewotICAgbWFzbS5tdWxJ bnQ2NHgyKHJzZCwgcnMsIHJzZCwgdGVtcDEsIHRlbXAyKTsKLSB9Ci0rIyAgZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCi0rc3RhdGljIHZvaWQgTXVsSTY0eDIoTWFjcm9Bc3NlbWJsZXIm IG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkLAotKyAgICAgICAgICAgICAgICAgICAgIFJl Z1YxMjggdGVtcDEsIFJlZ1YxMjggdGVtcDIpIHsKLSsgIG1hc20ubXVsSW50NjR4Mihyc2QsIHJz LCByc2QsIHRlbXAxLCB0ZW1wMik7Ci0rfQotICMgIGVuZGlmCi0gCi0gc3RhdGljIHZvaWQgTXVs RjY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkKSB7Ci1A QCAtOTM3Niw3ICs5Mzk4LDggQEAgc3RhdGljIHZvaWQgRGl2RjY0eDIoTWFjcm9Bc3NlbWJsZXIm IG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkKSB7Ci0gICBtYXNtLmRpdkZsb2F0NjR4Mihy c2QsIHJzLCByc2QpOwotIH0KLSAKLS0jICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCBk ZWZpbmVkKEpTX0NPREVHRU5fWDY0KQotKyMgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9YODYpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IFwKLSsgICAgICBkZWZpbmVkKEpTX0NPREVHRU5f UFBDNjQpCi0gc3RhdGljIHZvaWQgTWluRjMyeDQoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1Yx MjggcnMsIFJlZ1YxMjggcnNkLAotICAgICAgICAgICAgICAgICAgICAgIFJlZ1YxMjggdGVtcDEs IFJlZ1YxMjggdGVtcDIpIHsKLSAgIG1hc20ubWluRmxvYXQzMng0KHJzZCwgcnMsIHJzZCwgdGVt cDEsIHRlbXAyKTsKLUBAIC05Mzk3LDYgKzk0MjAsMjIgQEAgc3RhdGljIHZvaWQgTWF4RjY0eDIo TWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkLAotICAgbWFzbS5t YXhGbG9hdDY0eDIocnNkLCBycywgcnNkLCB0ZW1wMSwgdGVtcDIpOwotIH0KLSAKLSsjICBpZiBk ZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rLy8gUFBDNjQ6IHVzZSBub24tUmhzRGVzdE9wIGNv bnZlbnRpb24gKGZpcnN0PXJocywgc2Vjb25kPWxoc0Rlc3QpLAotKy8vIG1hdGNoaW5nIHRoZSBw c2V1ZG9NaW4vTWF4IGZ1bmN0aW9uIHNpZ25hdHVyZS4KLStzdGF0aWMgdm9pZCBQTWluRjMyeDQo TWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkKSB7Ci0rICBtYXNt LnBzZXVkb01pbkZsb2F0MzJ4NChycywgcnNkKTsKLSt9Ci0rc3RhdGljIHZvaWQgUE1pbkY2NHgy KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdWMTI4IHJzZCkgewotKyAgbWFz bS5wc2V1ZG9NaW5GbG9hdDY0eDIocnMsIHJzZCk7Ci0rfQotK3N0YXRpYyB2b2lkIFBNYXhGMzJ4 NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QpIHsKLSsgIG1h c20ucHNldWRvTWF4RmxvYXQzMng0KHJzLCByc2QpOwotK30KLStzdGF0aWMgdm9pZCBQTWF4RjY0 eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkKSB7Ci0rICBt YXNtLnBzZXVkb01heEZsb2F0NjR4MihycywgcnNkKTsKLSt9Ci0rIyAgZWxzZQotIHN0YXRpYyB2 b2lkIFBNaW5GMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCByc2QsIFJlZ1YxMjgg cnMsCi0gICAgICAgICAgICAgICAgICAgICAgIFJoc0Rlc3RPcCkgewotICAgbWFzbS5wc2V1ZG9N aW5GbG9hdDMyeDQocnNkLCBycyk7Ci1AQCAtOTQxNiw2ICs5NDU1LDcgQEAgc3RhdGljIHZvaWQg UE1heEY2NHgyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzZCwgUmVnVjEyOCBycywK LSAgICAgICAgICAgICAgICAgICAgICAgUmhzRGVzdE9wKSB7Ci0gICBtYXNtLnBzZXVkb01heEZs b2F0NjR4Mihyc2QsIHJzKTsKLSB9Ci0rIyAgZW5kaWYKLSAjICBlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9BUk02NCkKLSBzdGF0aWMgdm9pZCBNaW5GMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwg UmVnVjEyOCBycywgUmVnVjEyOCByc2QpIHsKLSAgIG1hc20ubWluRmxvYXQzMng0KHJzLCByc2Qp OwotQEAgLTk4MDYsNiArOTg0Niw2OCBAQCBzdGF0aWMgdm9pZCBTaGlmdFJpZ2h0STY0eDIoTWFj cm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBycywgUmVnVjEyOCByc2QsCi0gICBtYXNtLnJpZ2h0 U2hpZnRJbnQ2NHgyKHJzZCwgdGVtcCwgcnNkKTsKLSB9Ci0gCi0rc3RhdGljIHZvaWQgU2hpZnRS aWdodFVJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7Ci0rICBTaGlmdE9w TWFzayhtYXNtLCBTaW1kT3A6Okk2NHgyU2hyVSwgcnMsIHRlbXApOwotKyAgbWFzbS51bnNpZ25l ZFJpZ2h0U2hpZnRJbnQ2NHgyKHJzZCwgdGVtcCwgcnNkKTsKLSt9Ci0rIyAgZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCi0rLy8gUFBDNjQ6IHNhbWUgYXMgQVJNNjQgcGF0dGVybiAoc2hp ZnQgYW1vdW50IGluIEdQUiwgcmVzdWx0IGluIHZlY3RvciByZWcpCi0rc3RhdGljIHZvaWQgU2hp ZnRMZWZ0STh4MTYoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBycywgUmVnVjEyOCByc2Qs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKLSsgIFNoaWZ0T3BN YXNrKG1hc20sIFNpbWRPcDo6STh4MTZTaGwsIHJzLCB0ZW1wKTsKLSsgIG1hc20ubGVmdFNoaWZ0 SW50OHgxNihyc2QsIHRlbXAsIHJzZCk7Ci0rfQotK3N0YXRpYyB2b2lkIFNoaWZ0TGVmdEkxNng4 KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7Ci0rICBTaGlmdE9wTWFzayhtYXNtLCBT aW1kT3A6OkkxNng4U2hsLCBycywgdGVtcCk7Ci0rICBtYXNtLmxlZnRTaGlmdEludDE2eDgocnNk LCB0ZW1wLCByc2QpOwotK30KLStzdGF0aWMgdm9pZCBTaGlmdExlZnRJMzJ4NChNYWNyb0Fzc2Vt YmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdJMzIgdGVtcCkgewotKyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJMzJ4 NFNobCwgcnMsIHRlbXApOwotKyAgbWFzbS5sZWZ0U2hpZnRJbnQzMng0KHJzZCwgdGVtcCwgcnNk KTsKLSt9Ci0rc3RhdGljIHZvaWQgU2hpZnRMZWZ0STY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20s IFJlZ0kzMiBycywgUmVnVjEyOCByc2QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn STMyIHRlbXApIHsKLSsgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STY0eDJTaGwsIHJzLCB0 ZW1wKTsKLSsgIG1hc20ubGVmdFNoaWZ0SW50NjR4Mihyc2QsIHRlbXAsIHJzZCk7Ci0rfQotK3N0 YXRpYyB2b2lkIFNoaWZ0UmlnaHRJOHgxNihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJz LCBSZWdWMTI4IHJzZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRlbXAp IHsKLSsgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STh4MTZTaHJTLCBycywgdGVtcCk7Ci0r ICBtYXNtLnJpZ2h0U2hpZnRJbnQ4eDE2KHJzZCwgdGVtcCwgcnNkKTsKLSt9Ci0rc3RhdGljIHZv aWQgU2hpZnRSaWdodFVJOHgxNihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdW MTI4IHJzZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7Ci0r ICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6Okk4eDE2U2hyVSwgcnMsIHRlbXApOwotKyAgbWFz bS51bnNpZ25lZFJpZ2h0U2hpZnRJbnQ4eDE2KHJzZCwgdGVtcCwgcnNkKTsKLSt9Ci0rc3RhdGlj IHZvaWQgU2hpZnRSaWdodEkxNng4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJl Z1YxMjggcnNkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdJMzIgdGVtcCkgewot KyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJMTZ4OFNoclMsIHJzLCB0ZW1wKTsKLSsgIG1h c20ucmlnaHRTaGlmdEludDE2eDgocnNkLCB0ZW1wLCByc2QpOwotK30KLStzdGF0aWMgdm9pZCBT aGlmdFJpZ2h0VUkxNng4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjgg cnNkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKLSsgIFNo aWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STE2eDhTaHJVLCBycywgdGVtcCk7Ci0rICBtYXNtLnVu c2lnbmVkUmlnaHRTaGlmdEludDE2eDgocnNkLCB0ZW1wLCByc2QpOwotK30KLStzdGF0aWMgdm9p ZCBTaGlmdFJpZ2h0STMyeDQoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBycywgUmVnVjEy OCByc2QsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7Ci0rICBT aGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6OkkzMng0U2hyUywgcnMsIHRlbXApOwotKyAgbWFzbS5y aWdodFNoaWZ0SW50MzJ4NChyc2QsIHRlbXAsIHJzZCk7Ci0rfQotK3N0YXRpYyB2b2lkIFNoaWZ0 UmlnaHRVSTMyeDQoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBycywgUmVnVjEyOCByc2Qs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdJMzIgdGVtcCkgewotKyAgU2hpZnRP cE1hc2sobWFzbSwgU2ltZE9wOjpJMzJ4NFNoclUsIHJzLCB0ZW1wKTsKLSsgIG1hc20udW5zaWdu ZWRSaWdodFNoaWZ0SW50MzJ4NChyc2QsIHRlbXAsIHJzZCk7Ci0rfQotK3N0YXRpYyB2b2lkIFNo aWZ0UmlnaHRJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJz ZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKLSsgIFNoaWZ0 T3BNYXNrKG1hc20sIFNpbWRPcDo6STY0eDJTaHJTLCBycywgdGVtcCk7Ci0rICBtYXNtLnJpZ2h0 U2hpZnRJbnQ2NHgyKHJzZCwgdGVtcCwgcnNkKTsKLSt9Ci0gc3RhdGljIHZvaWQgU2hpZnRSaWdo dFVJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7Ci0gICBTaGlmdE9wTWFz ayhtYXNtLCBTaW1kT3A6Okk2NHgyU2hyVSwgcnMsIHRlbXApOwotQEAgLTEwMTA3LDYgKzEwMjA5 LDIzIEBAIHN0YXRpYyB2b2lkIEJpdG1hc2tJMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVn VjEyOCBycywgUmVnSTMyIHJkLAotICAgbWFzbS5iaXRtYXNrSW50MzJ4NChycywgcmQsIHRlbXAp OwotIH0KLSAKLStzdGF0aWMgdm9pZCBCaXRtYXNrSTY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20s IFJlZ1YxMjggcnMsIFJlZ0kzMiByZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgUmVnVjEy OCB0ZW1wKSB7Ci0rICBtYXNtLmJpdG1hc2tJbnQ2NHgyKHJzLCByZCwgdGVtcCk7Ci0rfQotKyMg IGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotK3N0YXRpYyB2b2lkIEJpdG1hc2tJOHgx NihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnSTMyIHJkLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdWMTI4IHRlbXApIHsKLSsgIG1hc20uYml0bWFza0ludDh4MTYo cnMsIHJkLCB0ZW1wKTsKLSt9Ci0rc3RhdGljIHZvaWQgQml0bWFza0kxNng4KE1hY3JvQXNzZW1i bGVyJiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdJMzIgcmQsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ1YxMjggdGVtcCkgewotKyAgbWFzbS5iaXRtYXNrSW50MTZ4OChycywgcmQsIHRlbXAp OwotK30KLStzdGF0aWMgdm9pZCBCaXRtYXNrSTMyeDQoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJl Z1YxMjggcnMsIFJlZ0kzMiByZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgUmVnVjEyOCB0 ZW1wKSB7Ci0rICBtYXNtLmJpdG1hc2tJbnQzMng0KHJzLCByZCwgdGVtcCk7Ci0rfQotIHN0YXRp YyB2b2lkIEJpdG1hc2tJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVn STMyIHJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdWMTI4IHRlbXApIHsKLSAgIG1h c20uYml0bWFza0ludDY0eDIocnMsIHJkLCB0ZW1wKTsKLUBAIC0xMDE4Miw2ICsxMDMwMSwxMyBA QCBzdGF0aWMgdm9pZCBCaXRzZWxlY3RWMTI4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4 IHJocywgUmVnVjEyOCBjb250cm9sLAotICAgbWFzbS5iaXR3aXNlU2VsZWN0U2ltZDEyOChsaHNE ZXN0LCByaHMsIHRlbXApOwotICAgbWFzbS5tb3ZlU2ltZDEyOCh0ZW1wLCBsaHNEZXN0KTsKLSB9 Ci0rIyAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rc3RhdGljIHZvaWQgQml0c2Vs ZWN0VjEyOChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCByaHMsIFJlZ1YxMjggY29udHJv bCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ1YxMjggbGhzRGVzdCwgUmVnVjEyOCB0 ZW1wKSB7Ci0rICBtYXNtLm1vdmVTaW1kMTI4KGNvbnRyb2wsIHRlbXApOwotKyAgbWFzbS5iaXR3 aXNlU2VsZWN0U2ltZDEyOChsaHNEZXN0LCByaHMsIHRlbXApOwotKyAgbWFzbS5tb3ZlU2ltZDEy OCh0ZW1wLCBsaHNEZXN0KTsKLSt9Ci0gIyAgZW5kaWYKLSAKLSAjICBpZmRlZiBFTkFCTEVfV0FT TV9SRUxBWEVEX1NJTUQKLUBAIC0xMDI1Nyw3ICsxMDM4Myw3IEBAIHZvaWQgQmFzZUNvbXBpbGVy OjplbWl0RG90STh4MTZJN3gxNkFkZFMoKSB7Ci0gICBSZWdWMTI4IHJzZCA9IHBvcFYxMjgoKTsK LSAgIFJlZ1YxMjggcnMwLCByczE7Ci0gICBwb3AyeFYxMjgoJnJzMCwgJnJzMSk7Ci0tIyAgICBp ZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCi0rIyAgICBpZiBkZWZpbmVkKEpTX0NPREVHRU5f QVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIFJlZ1YxMjggdGVtcCA9IG5l ZWRWMTI4KCk7Ci0gICBtYXNtLmRvdEludDh4MTZJbnQ3eDE2VGhlbkFkZChyczAsIHJzMSwgcnNk LCB0ZW1wKTsKLSAgIGZyZWVWMTI4KHRlbXApOwotQEAgLTEwNDYzLDcgKzEwNTg5LDcgQEAgYm9v bCBCYXNlQ29tcGlsZXI6OmVtaXRWZWN0b3JMYW5lU2VsZWN0KCkgewotICAgZnJlZVYxMjgobGhz KTsKLSAgIGZyZWVWMTI4KG1hc2spOwotICAgcHVzaFYxMjgocmhzRGVzdCk7Ci0tIyAgICBlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKLSsjICAgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VO X0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICBSZWdWMTI4IG1hc2tEZXN0 ID0gcG9wVjEyOCgpOwotICAgUmVnVjEyOCByaHMgPSBwb3BWMTI4KCk7Ci0gICBSZWdWMTI4IGxo cyA9IHBvcFYxMjgoKTsKLUBAIC0xMjYyOCw3ICsxMjc1NCw3IEBAIGJvb2wganM6Ondhc206OkJh c2VsaW5lUGxhdGZvcm1TdXBwb3J0KCkgewotICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCAgICAgICAgXAotICAgICBkZWZpbmVkKEpTX0NP REVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8ICAgICAgXAotICAgICBk ZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg fHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgZGVmaW5lZChKU19D T0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgIHJldHVybiB0 cnVlOwotICNlbHNlCi0gICByZXR1cm4gZmFsc2U7Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20v V2FzbUNvZGVnZW5Db25zdGFudHMuaCBiL2pzL3NyYy93YXNtL1dhc21Db2RlZ2VuQ29uc3RhbnRz LmgKLWluZGV4IDljMTBkMzA3YWU2Zi4uZTI1MzMyYjU0NjRlIDEwMDY0NAotLS0tIGEvanMvc3Jj L3dhc20vV2FzbUNvZGVnZW5Db25zdGFudHMuaAotKysrIGIvanMvc3JjL3dhc20vV2FzbUNvZGVn ZW5Db25zdGFudHMuaAotQEAgLTQzLDcgKzQzLDggQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIElu dGVycEZhaWxJbnN0YW5jZVJlZyA9IDB4YmFkOwotIC8vIFRoZSBmb2xsb3dpbmcgdGhyZXNob2xk cyB3ZXJlIGRlcml2ZWQgZnJvbSBhIG1pY3JvYmVuY2htYXJrLiBJZiB3ZSBiZWdpbiB0bwotIC8v IHNoaXAgdGhpcyBvcHRpbWl6YXRpb24gZm9yIG1vcmUgcGxhdGZvcm1zLCB3ZSB3aWxsIG5lZWQg dG8gZXh0ZW5kIHRoaXMgbGlzdC4KLSAKLS0jaWYgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQotKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IFwKLSsgICAgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQotIHN0YXRpYyBjb25zdCB1aW50MzJfdCBNYXhJbmxpbmVNZW1vcnlDb3B5TGVuZ3Ro ID0gNjQ7Ci0gc3RhdGljIGNvbnN0IHVpbnQzMl90IE1heElubGluZU1lbW9yeUZpbGxMZW5ndGgg PSA2NDsKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KQotZGlmZiAtLWdpdCBhL2pzL3Ny Yy93YXNtL1dhc21Db2RlZ2VuVHlwZXMuY3BwIGIvanMvc3JjL3dhc20vV2FzbUNvZGVnZW5UeXBl cy5jcHAKLWluZGV4IDhiOWYzMjYzOWVhMy4uZTkwNmM0YWZlY2MzIDEwMDY0NAotLS0tIGEvanMv c3JjL3dhc20vV2FzbUNvZGVnZW5UeXBlcy5jcHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21Db2Rl Z2VuVHlwZXMuY3BwCi1AQCAtMTQ0LDE0ICsxNDQsMTUgQEAgdm9pZCBUcmFwU2l0ZXNGb3JLaW5k OjpjaGVja0ludmFyaWFudHMoY29uc3QgdWludDhfdCogY29kZUJhc2UpIGNvbnN0IHsKLSAgICAg bGFzdCA9IHBjT2Zmc2V0OwotICAgfQotIAotLSMgIGlmIChkZWZpbmVkKEpTX0NPREVHRU5fWDY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCAgIFwKLS0gICAgICAgZGVmaW5lZChKU19D T0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBcCi0tICAgICAgIGRl ZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSkK LSsjICBpZiAoZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1g4 NikgfHwgICAgICAgIFwKLSsgICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fQVJNKSB8fCAgICAgIFwKLSsgICAgICAgZGVmaW5lZChKU19DT0RFR0VO X0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKLSsgICAgICAgZGVm aW5lZChKU19DT0RFR0VOX1BQQzY0KSkKLSAgIC8vIENoZWNrIHRoYXQgZWFjaCB0cmFwc2l0ZSBp cyBhc3NvY2lhdGVkIHdpdGggYSBwbGF1c2libGUgaW5zdHJ1Y3Rpb24uICBUaGUKLSAgIC8vIHJl cXVpcmVkIGluc3RydWN0aW9uIGtpbmQgZGVwZW5kcyBvbiB0aGUgdHJhcHNpdGUga2luZC4KLSAg IC8vCi0tICAvLyBOT1RFOiBjdXJyZW50bHkgZW5hYmxlZCBvbiB4ODZfezMyLDY0fSwgYXJtezMy LDY0fSwgbG9vbmdzb242NCBhbmQgbWlwczY0LgotLSAgLy8gSWRlYWxseSBpdCBzaG91bGQgYmUg ZXh0ZW5kZWQgdG8gcmlzY3Y2NCB0b28uCi0rICAvLyBOT1RFOiBjdXJyZW50bHkgZW5hYmxlZCBv biB4ODZfezMyLDY0fSwgYXJtezMyLDY0fSwgbG9vbmdzb242NCwgbWlwczY0LAotKyAgLy8gYW5k IHBwYzY0LiBJZGVhbGx5IGl0IHNob3VsZCBiZSBleHRlbmRlZCB0byByaXNjdjY0IHRvby4KLSAg IC8vCi0gICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoKCk7IGkrKykgewotICAgICB1 aW50MzJfdCBwY09mZnNldCA9IHBjT2Zmc2V0c19baV07Ci1kaWZmIC0tZ2l0IGEvanMvc3JjL3dh c20vV2FzbUNvbXBpbGUuY3BwIGIvanMvc3JjL3dhc20vV2FzbUNvbXBpbGUuY3BwCi1pbmRleCAw NTFjNjBlYmFhNTUuLjg5NDQ3YWE2NjhmZiAxMDA2NDQKLS0tLSBhL2pzL3NyYy93YXNtL1dhc21D b21waWxlLmNwcAotKysrIGIvanMvc3JjL3dhc20vV2FzbUNvbXBpbGUuY3BwCi1AQCAtNzEsOCAr NzEsOSBAQCB1aW50MzJfdCB3YXNtOjpPYnNlcnZlZENQVUZlYXR1cmVzKCkgewotICAgICBBUk02 NCA9IDB4NiwKLSAgICAgTE9PTkc2NCA9IDB4NywKLSAgICAgUklTQ1Y2NCA9IDB4OCwKLSsgICAg UFBDNjQgPSAweDksCi0gCi0tICAgIExBU1QgPSBSSVNDVjY0LAotKyAgICBMQVNUID0gUFBDNjQs Ci0gICAgIEFSQ0hfQklUUyA9IDQKLSAgIH07Ci0gCi1AQCAtMTAxLDYgKzEwMiw5IEBAIHVpbnQz Ml90IHdhc206Ok9ic2VydmVkQ1BVRmVhdHVyZXMoKSB7Ci0gI2VsaWYgZGVmaW5lZChKU19DT0RF R0VOX1JJU0NWNjQpCi0gICBNT1pfQVNTRVJUKGppdDo6R2V0UklTQ1Y2NEZsYWdzKCkgPD0gKFVJ TlQzMl9NQVggPj4gQVJDSF9CSVRTKSk7Ci0gICByZXR1cm4gUklTQ1Y2NCB8IChqaXQ6OkdldFJJ U0NWNjRGbGFncygpIDw8IEFSQ0hfQklUUyk7Ci0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQ QzY0KQotKyAgTU9aX0FTU0VSVChqaXQ6OkdldFBQQzY0RmxhZ3MoKSA8PSAoVUlOVDMyX01BWCA+ PiBBUkNIX0JJVFMpKTsKLSsgIHJldHVybiBQUEM2NCB8IChqaXQ6OkdldFBQQzY0RmxhZ3MoKSA8 PCBBUkNIX0JJVFMpOwotICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fV0FTTTMyKQotICAgcmV0dXJuIDA7Ci0gI2Vsc2UKLWRpZmYgLS1naXQgYS9q cy9zcmMvd2FzbS9XYXNtRnJhbWVJdGVyLmNwcCBiL2pzL3NyYy93YXNtL1dhc21GcmFtZUl0ZXIu Y3BwCi1pbmRleCBiM2IyNjRiYzYyNWEuLmI1NDBhY2Y5YTA1ZCAxMDA2NDQKLS0tLSBhL2pzL3Ny Yy93YXNtL1dhc21GcmFtZUl0ZXIuY3BwCi0rKysgYi9qcy9zcmMvd2FzbS9XYXNtRnJhbWVJdGVy LmNwcAotQEAgLTYyMiw2ICs2MjIsMTkgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFB1c2hlZEZQ ID0gMTY7Ci0gc3RhdGljIGNvbnN0IHVuc2lnbmVkIFNldEZQID0gMjA7Ci0gc3RhdGljIGNvbnN0 IHVuc2lnbmVkIFBvcHBlZEZQID0gNDsKLSBzdGF0aWMgY29uc3QgdW5zaWduZWQgUG9wcGVkRlBK aXRFbnRyeSA9IDg7Ci0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKy8vIHB1c2hS ZXR1cm5BZGRyZXNzID0gbWZscig0KSArIHN0ZHUoNCkgPSA4IGJ5dGVzLgotKy8vIHB1c2goRlAp ID0gc3RkdSg0KSA9IDQgYnl0ZXMgKFBQQzY0IHN0ZHUgaXMgYSBzaW5nbGUgRFMtZm9ybSBpbnN0 cnVjdGlvbikuCi0rLy8gbW92ZVN0YWNrUHRyVG8gPSBtcig0KSA9IDQgYnl0ZXMuCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIFB1c2hlZFJldEFkZHIgPSA4OwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBQdXNoZWRGUCA9IDEyOwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBTZXRGUCA9IDE2OwotKy8v IENhbGxhYmxlICsgaml0LWVudHJ5IGVwaWxvZ3VlcyBiZXR3ZWVuIHBvcHBlZEZQIGFuZCAqcmV0 IGFyZToKLSsvLyAgIG10bHIgcjA7IGFkZGkgc3AsIHNwLCAxNiAgKHR3byA0LWJ5dGUgaW5zdHJ1 Y3Rpb25zIOKAlCA4IGJ5dGVzKS4KLSsvLyBtdGxyIG11c3QgY29tZSBiZWZvcmUgYWRkaSBzbyBM UiBob2xkcyB0aGUgY2FsbGVyJ3MgUkEgdGhyb3VnaG91dCB0aGUKLSsvLyBwb3N0LXBvcHBlZEZQ IHdpbmRvdyAoc2luZ2xlLXN0ZXAgcHJvZmlsaW5nIGZpcmVzIGV2ZXJ5IGluc3RydWN0aW9uKS4K LStzdGF0aWMgY29uc3QgdW5zaWduZWQgUG9wcGVkRlAgPSA4OwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBQb3BwZWRGUEppdEVudHJ5ID0gODsKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTk9O RSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKLSAvLyBTeW50aGV0aWMgdmFsdWVzIHRv IHNhdGlzZnkgYXNzZXJ0cyBhbmQgYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCi0gc3RhdGljIGNv bnN0IHVuc2lnbmVkIFB1c2hlZFJldEFkZHIgPSAwOwotQEAgLTcxMCw2ICs3MjMsMTcgQEAgc3Rh dGljIHZvaWQgR2VuZXJhdGVDYWxsYWJsZVByb2xvZ3VlKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCB1 aW50MzJfdCogZW50cnkpIHsKLSAgICAgbWFzbS5tb3ZlU3RhY2tQdHJUbyhGcmFtZVBvaW50ZXIp OwotICAgICBNT1pfQVNTRVJUX0lGKCFtYXNtLm9vbSgpLCBTZXRGUCA9PSBtYXNtLmN1cnJlbnRP ZmZzZXQoKSAtICplbnRyeSk7Ci0gICB9Ci0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0 KQotKyAgewotKyAgICAqZW50cnkgPSBtYXNtLmN1cnJlbnRPZmZzZXQoKTsKLSsKLSsgICAgbWFz bS5wdXNoUmV0dXJuQWRkcmVzcygpOwotKyAgICBNT1pfQVNTRVJUX0lGKCFtYXNtLm9vbSgpLCBQ dXNoZWRSZXRBZGRyID09IG1hc20uY3VycmVudE9mZnNldCgpIC0gKmVudHJ5KTsKLSsgICAgbWFz bS5wdXNoKEZyYW1lUG9pbnRlcik7Ci0rICAgIE1PWl9BU1NFUlRfSUYoIW1hc20ub29tKCksIFB1 c2hlZEZQID09IG1hc20uY3VycmVudE9mZnNldCgpIC0gKmVudHJ5KTsKLSsgICAgbWFzbS5tb3Zl U3RhY2tQdHJUbyhGcmFtZVBvaW50ZXIpOwotKyAgICBNT1pfQVNTRVJUX0lGKCFtYXNtLm9vbSgp LCBTZXRGUCA9PSBtYXNtLmN1cnJlbnRPZmZzZXQoKSAtICplbnRyeSk7Ci0rICB9Ci0gI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQotICAgewotICAgICAvLyBXZSBkbyBub3QgdXNlIHRo ZSBQc2V1ZG9TdGFja1BvaW50ZXIuICBIb3dldmVyLCB3ZSBtYXkgYmUgY2FsbGVkIGluIGEKLUBA IC04MDMsNiArODI3LDM4IEBAIHN0YXRpYyB2b2lkIEdlbmVyYXRlQ2FsbGFibGVFcGlsb2d1ZShN YWNyb0Fzc2VtYmxlciYgbWFzbSwgdW5zaWduZWQgZnJhbWVQdXNoZWQsCi0gICAgIG1hc20uamFs cih6ZXJvLCByYSwgMCk7Ci0gICAgIG1hc20ubm9wKCk7Ci0gICB9Ci0rI2VsaWYgZGVmaW5lZChK U19DT0RFR0VOX1BQQzY0KQotKyAgLy8gTG9hZCBSQSBhbmQgRlAgZnJvbSB0aGUgRnJhbWUgd2hp bGUgaXQncyBzdGlsbCBvbiB0aGUgc3RhY2suCi0rICAvLyBVc2luZyByMCAoanM6OmppdDo6cjAp IGZvciBSQSBpcyBzYWZlOiBpdCdzIHZvbGF0aWxlLCB1c2VkIGFzCi0rICAvLyBSVCAobm90IGJh c2UpLCBhbmQgd2UncmUgaW4gYW4gZXBpbG9ndWUgd2hlcmUgaXQncyBub3QgbGl2ZS4KLSsgIG1h c20ubG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgRnJhbWU6OnJldHVybkFkZHJlc3NPZmZz ZXQoKSksCi0rICAgICAgICAgICAgICAganM6OmppdDo6cjApOwotKyAgbWFzbS5sb2FkUHRyKEFk ZHJlc3MoU3RhY2tQb2ludGVyLCBGcmFtZTo6Y2FsbGVyRlBPZmZzZXQoKSksIEZyYW1lUG9pbnRl cik7Ci0rCi0rICAvLyBGZW5jZSB0aGUgcG9vbCBCRUZPUkUgY2FwdHVyaW5nIHBvcHBlZEZQLiBQ b3BwZWRGUCBpcyBhIHN0YXRpYyA4Ci0rICAvLyAobXRsciArIGFkZGkpOyBlbnRlck5vUG9vbCBp dHNlbGYgY2FuIGVtaXQgaW5zZXJ0Tm9wRmlsbCgpIGFuZCBhCi0rICAvLyBwcmVlbXB0aXZlIGZp bmlzaFBvb2woKSBhdCBpdHMgdG9wIGVkZ2UsIHNvIGFueSBsZWFkaW5nIGluc2VydGlvbnMKLSsg IC8vIG11c3QgbGFuZCBiZWZvcmUgcG9wcGVkRlAg4oCUIG5vdCBiZXR3ZWVuIHBvcHBlZEZQIGFu ZCAqcmV0LiBBIHBvb2wKLSsgIC8vIGZsdXNoIGluc2lkZSB0aGUgMi1pbnNuIHdpbmRvdyB3b3Vs ZCBvdGhlcndpc2UgZXh0ZW5kICpyZXQgLSBwb3BwZWRGUAotKyAgLy8gYW5kIHRyaXAgdGhlIHBv c3QtY29uZGl0aW9uIGFzc2VydGlvbiBiZWxvdy4gUDkgcm91dGVzIEZQIGNvbnN0YW50cwotKyAg Ly8gdGhyb3VnaCB0aGUgcG9vbCBzbyBmbHVzaGVzIGFyZSBtb3JlIGZyZXF1ZW50IHRoYW4gb24g UDggKHRoZQotKyAgLy8gYXNzZXJ0aW9uIHdhcyBoaXN0b3JpY2FsbHkgc2lsZW50IG9uIFA4IGJ1 dCByZXByb2R1Y2libGUgb24gUDkgZGJnb3B0KS4KLSsgIG1hc20uZW50ZXJOb1Bvb2woMik7Ci0r ICBwb3BwZWRGUCA9IG1hc20uY3VycmVudE9mZnNldCgpOwotKwotKyAgLy8gTW92ZSBSQSBpbnRv IExSIEJFRk9SRSBwb3BwaW5nIHRoZSBGcmFtZS4gSWYgdGhlIG9yZGVyIHdlcmUgYWRkaS9tdGxy LAotKyAgLy8gc2luZ2xlLXN0ZXAgcHJvZmlsaW5nIGZpcmluZyBhdCB0aGUgbXRsciBpbnN0cnVj dGlvbiB3b3VsZCBzZWU6IHNwCi0rICAvLyBhbHJlYWR5IG1vdmVkIChzbyBzYXZlZCBSQSBhdCBz cFs4XSBpcyBnb25lKSwgYWRkaSBhbHJlYWR5IGV4ZWN1dGVkLAotKyAgLy8gYW5kIExSIHN0aWxs IGhvbGRpbmcgdGhlIGFkZHJlc3MgcmlnaHQgYWZ0ZXIgdGhlIGZ1bmN0aW9uJ3MgbGFzdCBgYmxg Ci0rICAvLyAoaS5lLiBpbnNpZGUgdGhpcyBmdW5jdGlvbiwgbm90IHRoZSBjYWxsZXIncyBSQSku IFdpdGggbXRsciBmaXJzdCwKLSsgIC8vIHRoZSBlbnRpcmUgcG9zdC1wb3BwZWRGUCB3aW5kb3cg aGFzIExSID09IGNhbGxlcidzIFJBIGF2YWlsYWJsZQotKyAgLy8gZWl0aGVyIHZpYSBzcFs4XSAo cHJlLWFkZGkpIG9yIHJlZ2lzdGVycy5sciAocG9zdC1tdGxyKS4KLSsgIG1hc20ueHNfbXRscihq czo6aml0OjpyMCk7Ci0rICBtYXNtLmFkZFRvU3RhY2tQdHIoSW1tMzIoc2l6ZW9mKEZyYW1lKSkp OwotKyAgKnJldCA9IG1hc20uY3VycmVudE9mZnNldCgpOwotKyAgbWFzbS5sZWF2ZU5vUG9vbCgp OwotKyAgbWFzbS5hc19ibHIoKTsKLSsKLSAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQp Ci0gCi0gICAvLyBTZWUgY29tbWVudCBhdCBlcXVpdmFsZW50IHBsYWNlIGluIHxHZW5lcmF0ZUNh bGxhYmxlUHJvbG9ndWV8IGFib3ZlLgotQEAgLTE0ODMsNiArMTUzOSw5IEBAIHZvaWQgd2FzbTo6 R2VuZXJhdGVKaXRFbnRyeVByb2xvZ3VlKE1hY3JvQXNzZW1ibGVyJiBtYXNtLAotICAgICBCbG9j a1RyYW1wb2xpbmVQb29sU2NvcGUgYmxvY2tfdHJhbXBvbGluZV9wb29sKCZtYXNtLCAxMCk7Ci0g ICAgIG9mZnNldHMtPmJlZ2luID0gbWFzbS5jdXJyZW50T2Zmc2V0KCk7Ci0gICAgIG1hc20ucHVz aChyYSk7Ci0rI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQotKyAgICBvZmZzZXRzLT5i ZWdpbiA9IG1hc20uY3VycmVudE9mZnNldCgpOwotKyAgICBtYXNtLnB1c2hSZXR1cm5BZGRyZXNz KCk7Ci0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQotICAgICB7Ci0gICAgICAgQXV0 b0ZvcmJpZFBvb2xzQW5kTm9wcyBhZnAoJm1hc20sCi1AQCAtMTUzNiw2ICsxNTk1LDIwIEBAIHZv aWQgd2FzbTo6R2VuZXJhdGVKaXRFbnRyeUVwaWxvZ3VlKE1hY3JvQXNzZW1ibGVyJiBtYXNtLAot ICAgICBtYXNtLlJldChBUk1SZWdpc3RlcihsciwgNjQpKTsKLSAgICAgbWFzbS5zZXRGcmFtZVB1 c2hlZCgwKTsKLSAgIH0KLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rICAvLyBM b2FkIFJBIGFuZCBGUCBmcm9tIHRoZSBmcmFtZSB3aGlsZSBpdCdzIHN0aWxsIG9uIHRoZSBzdGFj aywgdGhlbgotKyAgLy8gcmVzdG9yZSBMUiwgcG9wIHRoZSBmcmFtZSwgYW5kIHJldHVybi4gbXRs ciBtdXN0IHByZWNlZGUgYWRkaSBzbyBMUgotKyAgLy8gaG9sZHMgdGhlIGNhbGxlcidzIFJBIGFj cm9zcyB0aGUgd2hvbGUgcG9zdC1wb3BwZWRGUCB3aW5kb3cgKHNlZQotKyAgLy8gR2VuZXJhdGVD YWxsYWJsZUVwaWxvZ3VlIGZvciB0aGUgbWF0Y2hpbmcgcmF0aW9uYWxlKS4KLSsgIG1hc20ubG9h ZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgRnJhbWU6OnJldHVybkFkZHJlc3NPZmZzZXQoKSks Ci0rICAgICAgICAgICAgICAganM6OmppdDo6cjApOwotKyAgbWFzbS5sb2FkUHRyKEFkZHJlc3Mo U3RhY2tQb2ludGVyLCBGcmFtZTo6Y2FsbGVyRlBPZmZzZXQoKSksIEZyYW1lUG9pbnRlcik7Ci0r ICBwb3BwZWRGUCA9IG1hc20uY3VycmVudE9mZnNldCgpOwotKwotKyAgbWFzbS54c19tdGxyKGpz OjpqaXQ6OnIwKTsKLSsgIG1hc20uYWRkVG9TdGFja1B0cihJbW0zMihzaXplb2YoRnJhbWUpKSk7 Ci0rICBvZmZzZXRzLT5yZXQgPSBtYXNtLmN1cnJlbnRPZmZzZXQoKTsKLSsgIG1hc20uYXNfYmxy KCk7Ci0gI2Vsc2UKLSAgIC8vIEZvcmJpZCBwb29scyBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGRl c2NyaWJlZCBpbiBHZW5lcmF0ZUNhbGxhYmxlUHJvbG9ndWUuCi0gIyAgaWYgZGVmaW5lZChKU19D T0RFR0VOX0FSTSkKLUBAIC0xOTA1LDYgKzE5NzgsMjIgQEAgYm9vbCBqczo6d2FzbTo6U3RhcnRV bndpbmRpbmcoY29uc3QgUmVnaXN0ZXJTdGF0ZSYgcmVnaXN0ZXJzLAotICAgICAgICAgZml4ZWRG UCA9IGZwOwotICAgICAgICAgQXNzZXJ0TWF0Y2hlc0NhbGxTaXRlKGZpeGVkUEMsIGZpeGVkRlAp OwotICAgICAgIH0gZWxzZQotKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsgICAg ICBpZiAoY29kZVJhbmdlLT5pc1RodW5rKCkpIHsKLSsgICAgICAgIC8vIFRoZSBGYXJKdW1wSXNs YW5kIHNlcXVlbmNlIHRlbXBvcmFyeSBzY3JhbWJsZXMgdGhlIGxpbmsgcmVnaXN0ZXIuCi0rICAg ICAgICBmaXhlZFBDID0gcGM7Ci0rICAgICAgICBmaXhlZEZQID0gZnA7Ci0rICAgICAgICAqdW53 b3VuZENhbGxlciA9IGZhbHNlOwotKyAgICAgICAgQXNzZXJ0TWF0Y2hlc0NhbGxTaXRlKAotKyAg ICAgICAgICAgIEZyYW1lOjpmcm9tVW50YWdnZWRXYXNtRXhpdEZQKGZwKS0+cmV0dXJuQWRkcmVz cygpLAotKyAgICAgICAgICAgIEZyYW1lOjpmcm9tVW50YWdnZWRXYXNtRXhpdEZQKGZwKS0+cmF3 Q2FsbGVyKCkpOwotKyAgICAgIH0gZWxzZSBpZiAob2Zmc2V0RnJvbUVudHJ5IDwgUHVzaGVkRlAp IHsKLSsgICAgICAgIC8vIE9uIFBQQzY0IHRoZSByZXR1cm4gYWRkcmVzcyBpcyBpbiBMUiAocmVn aXN0ZXJzLmxyKSB1bnRpbAotKyAgICAgICAgLy8gcHVzaFJldHVybkFkZHJlc3MoKSBzYXZlcyBp dCB0byB0aGUgc3RhY2suCi0rICAgICAgICBmaXhlZFBDID0gKHVpbnQ4X3QqKXJlZ2lzdGVycy5s cjsKLSsgICAgICAgIGZpeGVkRlAgPSBmcDsKLSsgICAgICAgIEFzc2VydE1hdGNoZXNDYWxsU2l0 ZShmaXhlZFBDLCBmaXhlZEZQKTsKLSsgICAgICB9IGVsc2UKLSAjZWxpZiBkZWZpbmVkKEpTX0NP REVHRU5fQVJNNjQpCi0gICAgICAgaWYgKG9mZnNldEZyb21FbnRyeSA8IFNldEZQIHx8IGNvZGVS YW5nZS0+aXNUaHVuaygpKSB7Ci0gICAgICAgICAvLyBPbiBBUk02NCB3ZSByZWx5IG9uIHJlZ2lz dGVyIHN0YXRlIGluc3RlYWQgb2Ygc3RhdGUgc2F2ZWQgb24KLUBAIC0xOTU2LDYgKzIwNDUsMzUg QEAgYm9vbCBqczo6d2FzbTo6U3RhcnRVbndpbmRpbmcoY29uc3QgUmVnaXN0ZXJTdGF0ZSYgcmVn aXN0ZXJzLAotICAgICAgICAgZml4ZWRQQyA9IEZyYW1lOjpmcm9tVW50YWdnZWRXYXNtRXhpdEZQ KHNwKS0+cmV0dXJuQWRkcmVzcygpOwotICAgICAgICAgZml4ZWRGUCA9IGZwOwotICAgICAgICAg QXNzZXJ0TWF0Y2hlc0NhbGxTaXRlKGZpeGVkUEMsIGZpeGVkRlApOwotKyNlbGlmIGRlZmluZWQo SlNfQ09ERUdFTl9QUEM2NCkKLSsgICAgICB9IGVsc2UgaWYgKG9mZnNldEluQ29kZSA+PSBjb2Rl UmFuZ2UtPnJldCgpIC0gUG9wcGVkRlAgJiYKLSsgICAgICAgICAgICAgICAgIG9mZnNldEluQ29k ZSA8IGNvZGVSYW5nZS0+cmV0KCkpIHsKLSsgICAgICAgIC8vIFBQQzY0IGVwaWxvZ3VlIChSQSBs b2FkZWQgaW50byByMCwgRlAgcmVzdG9yZWQsIFJBIG5vdCB5ZXQKLSsgICAgICAgIC8vIG1vdmVk IHRvIExSLCBTUCBub3QgeWV0IGFkanVzdGVkKToKLSsgICAgICAgIC8vICAgbGQgcjAsIDgoc3Ap ICAgICAgOyByZXN0b3JlIGNhbGxlcidzIFJBIGludG8gcjAKLSsgICAgICAgIC8vICAgbGQgRlAs IDAoc3ApICAgICAgOyByZXN0b3JlIGNhbGxlcidzIEZQCi0rICAgICAgICAvLyAgIDwtLSBwb3Bw ZWRGUCAtLT4KLSsgICAgICAgIC8vICAgbXRsciByMCAgICAgICAgICAgOyBMUiA6PSBjYWxsZXIn cyBSQQotKyAgICAgICAgLy8gICBhZGRpIHNwLCBzcCwgMTYgICA7IHBvcCB0aGUgRnJhbWUKLSsg ICAgICAgIC8vICAgPC0tIHJldCAtLT4KLSsgICAgICAgIC8vICAgYmxyCi0rICAgICAgICAvLyBJ biB0aGUgW3BvcHBlZEZQLCByZXQpIHdpbmRvdyB0aGUgYWRkaSBoYXMgbm90IHJ1biwgc28gKnNw Ci0rICAgICAgICAvLyBpcyBzdGlsbCB0aGUgc2F2ZWQgRnJhbWUgYW5kIHNwWzhdIGlzIHRoZSBj YWxsZXIncyBSQS4KLSsgICAgICAgIC8vIChyZWdpc3RlcnMubHIgd291bGQgYWxzbyBiZSBjb3Jy ZWN0IGFmdGVyIG10bHIgZXhlY3V0ZXMsIGJ1dAotKyAgICAgICAgLy8gc3BbOF0gaXMgdmFsaWQg dGhyb3VnaG91dCB0aGlzIHdpbmRvdyDigJQgaW5jbHVkaW5nIGJlZm9yZSBtdGxyIOKAlAotKyAg ICAgICAgLy8gc28gd2UgcmVhZCBpdCBjb25zaXN0ZW50bHkuKQotKyAgICAgICAgTU9aX0FTU0VS VCgqc3AgPT0gZnApOwotKyAgICAgICAgZml4ZWRQQyA9IEZyYW1lOjpmcm9tVW50YWdnZWRXYXNt RXhpdEZQKHNwKS0+cmV0dXJuQWRkcmVzcygpOwotKyAgICAgICAgZml4ZWRGUCA9IGZwOwotKyAg ICAgICAgQXNzZXJ0TWF0Y2hlc0NhbGxTaXRlKGZpeGVkUEMsIGZpeGVkRlApOwotKyAgICAgIH0g ZWxzZSBpZiAob2Zmc2V0SW5Db2RlID09IGNvZGVSYW5nZS0+cmV0KCkpIHsKLSsgICAgICAgIC8v IFBQQzY0IGVwaWxvZ3VlLCBhdCB0aGUgYmxyOiBhZGRpIGhhcyBydW4sIHNvIFNQIGlzIHRoZQot KyAgICAgICAgLy8gY2FsbGVyJ3MgYW5kICpzcCBpcyB1bnJlbGF0ZWQgbWVtb3J5LiBtdGxyIHJh biBlYXJsaWVyIGluCi0rICAgICAgICAvLyB0aGUgW3BvcHBlZEZQLCByZXQpIHdpbmRvdywgc28g TFIgaG9sZHMgdGhlIGNhbGxlcidzIFJBLgotKyAgICAgICAgLy8gZnAgaG9sZHMgdGhlIHJlc3Rv cmVkIGNhbGxlcidzIEZQLgotKyAgICAgICAgZml4ZWRQQyA9ICh1aW50OF90KilyZWdpc3RlcnMu bHI7Ci0rICAgICAgICBmaXhlZEZQID0gZnA7Ci0rICAgICAgICBBc3NlcnRNYXRjaGVzQ2FsbFNp dGUoZml4ZWRQQywgZml4ZWRGUCk7Ci0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkKLSAgICAgICAgIC8vIFRoZSBzdGFjayBwb2lu dGVyIGRvZXMgbm90IG1vdmUgdW50aWwgYWxsIHZhbHVlcyBoYXZlCi0gICAgICAgICAvLyBiZWVu IHJlc3RvcmVkIHNvIHNldmVyYWwgY2FzZXMgY2FuIGJlIGNvYWxlc2NlZCBoZXJlLgotZGlmZiAt LWdpdCBhL2pzL3NyYy93YXNtL1dhc21HQy5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtR0MuY3BwCi1p bmRleCBlNTljZDRmNWFiYTAuLjIxY2QwMWZkMWM1ZSAxMDA2NDQKLS0tLSBhL2pzL3NyYy93YXNt L1dhc21HQy5jcHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21HQy5jcHAKLUBAIC00NDQsNiArNDQ0 LDE0IEBAIGJvb2wgd2FzbTo6SXNQbGF1c2libGVTdGFja01hcEtleShjb25zdCB1aW50OF90KiBu ZXh0UEMpIHsKLSAgICAgICAgICAgICBpbnNuWy0xXSA9PSAweDAwMDAwMDEzIC8qIGFkZGkgemVy bywgemVybywgMCAqLykgfHwgIC8vIGphbDsgbm9wCi0gICAgICAgICAgICAoaW5zblstMV0gPT0g MHgwMDEwMDA3MyAmJgotICAgICAgICAgICAgIChpbnNuWy0yXSAmIGtJVHlwZU1hc2spID09IFJP X0NTUlJXSSkpKTsgIC8vIHdhc20gdHJhcAotKyMgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQ QzY0KQotKyAgY29uc3QgdWludDMyX3QqIGluc24gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVp bnQzMl90Kj4obmV4dFBDKTsKLSsgIE1PWl9BU1NFUlQoKHVpbnRwdHJfdChpbnNuKSAmIDMpID09 IDApOwotKyAgLy8geHNfdHJhcCgpID0gdHcgMzEscjAscjAgKFBQQ190cmFwKTsgYmN0cmwgPSBQ UENfYmN0cnwxOyBibCA9IEktZm9ybQotKyAgLy8gb3Bjb2RlIDE4IChQUENfYikgd2l0aCBMSz0x LCBBQT0wLCBjaGVja2VkIHZpYSAweEZDMDAwMDAzIG1hc2suCi0rICByZXR1cm4gaW5zblstMV0g PT0gdWludDMyX3QoUFBDX3RyYXApIHx8Ci0rICAgICAgICAgaW5zblstMV0gPT0gKHVpbnQzMl90 KFBQQ19iY3RyKSB8IDF1KSB8fAotKyAgICAgICAgIChpbnNuWy0xXSAmIDB4RkMwMDAwMDN1KSA9 PSAodWludDMyX3QoUFBDX2IpIHwgMXUpOwotICMgIGVsc2UKLSAgIE1PWl9DUkFTSCgiSXNWYWxp ZFN0YWNrTWFwS2V5OiByZXF1aXJlcyBpbXBsZW1lbnRhdGlvbiBvbiB0aGlzIHBsYXRmb3JtIik7 Ci0gIyAgZW5kaWYKLWRpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtR2VuZXJhdG9yLmNwcCBi L2pzL3NyYy93YXNtL1dhc21HZW5lcmF0b3IuY3BwCi1pbmRleCAyZGFmYWM3M2U5NmEuLjA3ZmZl MTUwZmM1NyAxMDA2NDQKLS0tLSBhL2pzL3NyYy93YXNtL1dhc21HZW5lcmF0b3IuY3BwCi0rKysg Yi9qcy9zcmMvd2FzbS9XYXNtR2VuZXJhdG9yLmNwcAotQEAgLTkzMCw3ICs5MzAsMjMgQEAgYm9v bCBNb2R1bGVHZW5lcmF0b3I6OmZpbmlzaENvZGVCbG9jayhDb2RlQmxvY2tSZXN1bHQqIHJlc3Vs dCkgewotICAgY2FsbFNpdGVUYXJnZXRzXy5jbGVhcigpOwotICAgY2FsbEZhckp1bXBzXy5jbGVh cigpOwotIAotLSAgLy8gTm9uZSBvZiB0aGUgbGlua2luZyBvciBmYXItanVtcCBvcGVyYXRpb25z IHNob3VsZCBlbWl0IG1hc20gbWV0YWRhdGEuCi0rICAvLyBOb25lIG9mIHRoZSBsaW5raW5nIG9y IGZhci1qdW1wIG9wZXJhdGlvbnMgc2hvdWxkIGVtaXQgbWFzbSBtZXRhZGF0YSwKLSsgIC8vIGV4 Y2VwdCBvbiBQUEM2NCB3aGVyZSBwYXRjaEZhckp1bXAgdXNlcyBhZGRMb25nSnVtcCB0byBjcmVh dGUgQ29kZUxhYmVscwotKyAgLy8gZm9yIGFic29sdXRlLWFkZHJlc3MgZmFyIGp1bXBzLiBEcmFp biB0aG9zZSBpbnRvIGxpbmtEYXRhXyBoZXJlLgotKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0r ICBmb3IgKGNvbnN0IGppdDo6Q29kZUxhYmVsJiBjb2RlTGFiZWwgOiBtYXNtXy0+Y29kZUxhYmVs cygpKSB7Ci0rICAgIExpbmtEYXRhOjpJbnRlcm5hbExpbmsgbGluazsKLSsgICAgbGluay5wYXRj aEF0T2Zmc2V0ID0gY29kZUxhYmVsLnBhdGNoQXQoKS5vZmZzZXQoKTsKLSsgICAgbGluay50YXJn ZXRPZmZzZXQgPSBjb2RlTGFiZWwudGFyZ2V0KCkub2Zmc2V0KCk7Ci0rIyAgaWZkZWYgSlNfQ09E RUxBQkVMX0xJTktNT0RFCi0rICAgIGxpbmsubW9kZSA9IGNvZGVMYWJlbC5saW5rTW9kZSgpOwot KyMgIGVuZGlmCi0rICAgIGlmICghbGlua0RhdGFfLT5pbnRlcm5hbExpbmtzLmFwcGVuZChsaW5r KSkgewotKyAgICAgIHJldHVybiBmYWxzZTsKLSsgICAgfQotKyAgfQotKyAgbWFzbV8tPmNvZGVM YWJlbHMoKS5jbGVhcigpOwotKyNlbmRpZgotIAotICAgTU9aX0FTU0VSVChtYXNtXy0+aW5saW5p bmdDb250ZXh0KCkuZW1wdHkoKSk7Ci0gICBNT1pfQVNTRVJUKG1hc21fLT5jYWxsU2l0ZXMoKS5l bXB0eSgpKTsKLWRpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtSW9uQ29tcGlsZS5jcHAgYi9q cy9zcmMvd2FzbS9XYXNtSW9uQ29tcGlsZS5jcHAKLWluZGV4IDljNzliOWNmMDcwNC4uMGQwZTY2 MTc3MGFmIDEwMDY0NAotLS0tIGEvanMvc3JjL3dhc20vV2FzbUlvbkNvbXBpbGUuY3BwCi0rKysg Yi9qcy9zcmMvd2FzbS9XYXNtSW9uQ29tcGlsZS5jcHAKLUBAIC0xMTYwMiw3ICsxMTYwMiw3IEBA IGJvb2wganM6Ondhc206OklvblBsYXRmb3JtU3VwcG9ydCgpIHsKLSAjaWYgZGVmaW5lZChKU19D T0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1g4NikgfHwgICAgICAgXAotICAgICBk ZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCAg ICBcCi0gICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X0xPT05HNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCi0rICAgIGRl ZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0g ICByZXR1cm4gdHJ1ZTsKLSAjZWxzZQotICAgcmV0dXJuIGZhbHNlOwotZGlmZiAtLWdpdCBhL2pz L3NyYy93YXNtL1dhc21NZW1vcnkuY3BwIGIvanMvc3JjL3dhc20vV2FzbU1lbW9yeS5jcHAKLWlu ZGV4IDBlM2U2ZDM1MDlhZC4uZmVlZTlmNmVhMWM5IDEwMDY0NAotLS0tIGEvanMvc3JjL3dhc20v V2FzbU1lbW9yeS5jcHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21NZW1vcnkuY3BwCi1AQCAtMjg4 LDkgKzI4OCw5IEBAIHN0YXRpY19hc3NlcnQoTWF4TWVtb3J5QWNjZXNzU2l6ZSA8PSBIdWdlVW5h bGlnbmVkR3VhcmRQYWdlLAotIHN0YXRpY19hc3NlcnQoSHVnZU9mZnNldEd1YXJkTGltaXQgPCBV SU5UMzJfTUFYLAotICAgICAgICAgICAgICAgImNoZWNraW5nIGZvciBvdmVyZmxvdyBhZ2FpbnN0 IE9mZnNldEd1YXJkTGltaXQgaXMgZW5vdWdoLiIpOwotIAotLS8vIFdlIGhhdmUgb25seSB0ZXN0 ZWQgaHVnZSBtZW1vcnkgb24geDY0LCBhcm02NCBhbmQgcmlzY3Y2NC4KLSsvLyBXZSBoYXZlIG9u bHkgdGVzdGVkIGh1Z2UgbWVtb3J5IG9uIHg2NCwgYXJtNjQsIHJpc2N2NjQgYW5kIHBwYzY0Lgot ICMgIGlmICEoZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FS TTY0KSB8fCBcCi0tICAgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkpCi0rICAgICAg ICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0 KSkKLSAjICAgIGVycm9yICJOb3QgYW4gZXhwZWN0ZWQgY29uZmlndXJhdGlvbiIKLSAjICBlbmRp ZgotIAotZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21TaWduYWxIYW5kbGVycy5jcHAgYi9q cy9zcmMvd2FzbS9XYXNtU2lnbmFsSGFuZGxlcnMuY3BwCi1pbmRleCBjYzhiYzI3NTU3NDUuLjg0 ZDNjNGVjMTY0ZCAxMDA2NDQKLS0tLSBhL2pzL3NyYy93YXNtL1dhc21TaWduYWxIYW5kbGVycy5j cHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21TaWduYWxIYW5kbGVycy5jcHAKLUBAIC0xMTEsNyAr MTExLDkgQEAgdXNpbmcgbmFtZXNwYWNlIGpzOjp3YXNtOwotICMgICAgaWYgZGVmaW5lZChfX3Bw YzY0X18pIHx8IGRlZmluZWQoX19QUEM2NF9fKSB8fCBkZWZpbmVkKF9fcHBjNjRsZV9fKSB8fCBc Ci0gICAgICAgICBkZWZpbmVkKF9fUFBDNjRMRV9fKQotICMgICAgICBkZWZpbmUgUjAxX3NpZyhw KSAoKHApLT5zY19mcmFtZS5maXhyZWdbMV0pCi0rIyAgICAgIGRlZmluZSBSMzFfc2lnKHApICgo cCktPnNjX2ZyYW1lLmZpeHJlZ1szMV0pCi0gIyAgICAgIGRlZmluZSBSMzJfc2lnKHApICgocCkt PnNjX2ZyYW1lLnNycjApCi0rIyAgICAgIGRlZmluZSBSMzZfc2lnKHApICgocCktPnNjX2ZyYW1l LmxyKQotICMgICAgZW5kaWYKLSAjICBlbGlmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVk KF9fc3VuKQotICMgICAgaWYgZGVmaW5lZChfX2xpbnV4X18pCi1AQCAtMTU3LDcgKzE1OSw5IEBA IHVzaW5nIG5hbWVzcGFjZSBqczo6d2FzbTsKLSAjICAgIGlmIGRlZmluZWQoX19saW51eF9fKSAm JiAoZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19QUEM2NF9fKSB8fCBcCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoX19wcGM2NGxlX18pIHx8IGRlZmluZWQo X19QUEM2NExFX18pKQotICMgICAgICBkZWZpbmUgUjAxX3NpZyhwKSAoKHApLT51Y19tY29udGV4 dC5ncF9yZWdzWzFdKQotKyMgICAgICBkZWZpbmUgUjMxX3NpZyhwKSAoKHApLT51Y19tY29udGV4 dC5ncF9yZWdzWzMxXSkKLSAjICAgICAgZGVmaW5lIFIzMl9zaWcocCkgKChwKS0+dWNfbWNvbnRl eHQuZ3BfcmVnc1szMl0pCi0rIyAgICAgIGRlZmluZSBSMzZfc2lnKHApICgocCktPnVjX21jb250 ZXh0LmdwX3JlZ3NbMzZdKQotICMgICAgZW5kaWYKLSAjICAgIGlmIGRlZmluZWQoX19saW51eF9f KSAmJiBkZWZpbmVkKF9fbG9vbmdhcmNoX18pCi0gIyAgICAgIGRlZmluZSBFUENfc2lnKHApICgo cCktPnVjX21jb250ZXh0Ll9fcGMpCi1AQCAtMjAwLDcgKzIwNCw5IEBAIHVzaW5nIG5hbWVzcGFj ZSBqczo6d2FzbTsKLSAjICAgIGlmIGRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZpbmVkKF9fUFBD NjRfXykgfHwgZGVmaW5lZChfX3BwYzY0bGVfXykgfHwgXAotICAgICAgICAgZGVmaW5lZChfX1BQ QzY0TEVfXykKLSAjICAgICAgZGVmaW5lIFIwMV9zaWcocCkgKChwKS0+dWNfbWNvbnRleHQuX19n cmVnc1tfUkVHX1IxXSkKLSsjICAgICAgZGVmaW5lIFIzMV9zaWcocCkgKChwKS0+dWNfbWNvbnRl eHQuX19ncmVnc1tfUkVHX1IzMV0pCi0gIyAgICAgIGRlZmluZSBSMzJfc2lnKHApICgocCktPnVj X21jb250ZXh0Ll9fZ3JlZ3NbX1JFR19QQ10pCi0rIyAgICAgIGRlZmluZSBSMzZfc2lnKHApICgo cCktPnVjX21jb250ZXh0Ll9fZ3JlZ3NbX1JFR19MUl0pCi0gIyAgICBlbmRpZgotICMgIGVsaWYg ZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBcCi0gICAg ICAgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCi1AQCAtMjM0LDcgKzI0MCw5IEBAIHVzaW5n IG5hbWVzcGFjZSBqczo6d2FzbTsKLSAjICAgIGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIChk ZWZpbmVkKF9fcHBjNjRfXykgfHwgZGVmaW5lZChfX1BQQzY0X18pIHx8IFwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKF9fcHBjNjRsZV9fKSB8fCBkZWZpbmVkKF9f UFBDNjRMRV9fKSkKLSAjICAgICAgZGVmaW5lIFIwMV9zaWcocCkgKChwKS0+dWNfbWNvbnRleHQu bWNfZ3ByWzFdKQotKyMgICAgICBkZWZpbmUgUjMxX3NpZyhwKSAoKHApLT51Y19tY29udGV4dC5t Y19ncHJbMzFdKQotICMgICAgICBkZWZpbmUgUjMyX3NpZyhwKSAoKHApLT51Y19tY29udGV4dC5t Y19zcnIwKQotKyMgICAgICBkZWZpbmUgUjM2X3NpZyhwKSAoKHApLT51Y19tY29udGV4dC5tY19s cikKLSAjICAgIGVuZGlmCi0gIyAgZWxpZiBkZWZpbmVkKFhQX0RBUldJTikKLSAjICAgIGRlZmlu ZSBFSVBfc2lnKHApICgocCktPnRocmVhZC51dHMudHMzMi5fX2VpcCkKLUBAIC00MTIsNyArNDIw LDggQEAgc3RydWN0IG1hY29zX2FhcmNoNjRfY29udGV4dCB7Ci0gICAgICAgZGVmaW5lZChfX1BQ QzY0TEVfXykKLSAjICAgIGRlZmluZSBQQ19zaWcocCkgUjMyX3NpZyhwKQotICMgICAgZGVmaW5l IFNQX3NpZyhwKSBSMDFfc2lnKHApCi0tIyAgICBkZWZpbmUgRlBfc2lnKHApIFIwMV9zaWcocCkK LSsjICAgIGRlZmluZSBGUF9zaWcocCkgUjMxX3NpZyhwKQotKyMgICAgZGVmaW5lIExSX3NpZyhw KSBSMzZfc2lnKHApCi0gIyAgZWxpZiBkZWZpbmVkKF9fbG9vbmdhcmNoX18pCi0gIyAgICBkZWZp bmUgUENfc2lnKHApIEVQQ19zaWcocCkKLSAjICAgIGRlZmluZSBGUF9zaWcocCkgUkZQX3NpZyhw KQotQEAgLTQ1OCw3ICs0NjcsOCBAQCBzdGF0aWMgdWludDhfdCogQ29udGV4dFRvU1AoQ09OVEVY VCogY29udGV4dCkgewotIH0KLSAKLSAjICBpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQo X19hYXJjaDY0X18pIHx8IGRlZmluZWQoX19taXBzX18pIHx8IFwKLS0gICAgICBkZWZpbmVkKF9f bG9vbmdhcmNoX18pIHx8IGRlZmluZWQoX19yaXNjdikKLSsgICAgICBkZWZpbmVkKF9fbG9vbmdh cmNoX18pIHx8IGRlZmluZWQoX19yaXNjdikgfHwgXAotKyAgICAgIGRlZmluZWQoX19wcGM2NF9f KSB8fCBkZWZpbmVkKF9fUFBDNjRfXykKLSBzdGF0aWMgdWludDhfdCogQ29udGV4dFRvTFIoQ09O VEVYVCogY29udGV4dCkgewotICMgICAgaWZkZWYgTFJfc2lnCi0gICByZXR1cm4gbW96aWxsYTo6 Qml0d2lzZUNhc3Q8dWludDhfdCo+KExSX3NpZyhjb250ZXh0KSk7Ci1AQCAtNDc1LDcgKzQ4NSw4 IEBAIHN0YXRpYyBKUzo6UHJvZmlsaW5nRnJhbWVJdGVyYXRvcjo6UmVnaXN0ZXJTdGF0ZSBUb1Jl Z2lzdGVyU3RhdGUoCi0gICBzdGF0ZS5wYyA9IENvbnRleHRUb1BDKGNvbnRleHQpOwotICAgc3Rh dGUuc3AgPSBDb250ZXh0VG9TUChjb250ZXh0KTsKLSAjICBpZiBkZWZpbmVkKF9fYXJtX18pIHx8 IGRlZmluZWQoX19hYXJjaDY0X18pIHx8IGRlZmluZWQoX19taXBzX18pIHx8IFwKLS0gICAgICBk ZWZpbmVkKF9fbG9vbmdhcmNoX18pIHx8IGRlZmluZWQoX19yaXNjdikKLSsgICAgICBkZWZpbmVk KF9fbG9vbmdhcmNoX18pIHx8IGRlZmluZWQoX19yaXNjdikgfHwgXAotKyAgICAgIGRlZmluZWQo X19wcGM2NF9fKSB8fCBkZWZpbmVkKF9fUFBDNjRfXykKLSAgIHN0YXRlLmxyID0gQ29udGV4dFRv TFIoY29udGV4dCk7Ci0gIyAgZWxzZQotICAgc3RhdGUubHIgPSAodm9pZCopVUlOVFBUUl9NQVg7 Ci1AQCAtNzc2LDYgKzc4Nyw5IEBAIHN0YXRpYyB2b2lkIE1hY2hFeGNlcHRpb25IYW5kbGVyVGhy ZWFkKCkgewotIAotICMgICAgaWYgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX2xvb25n YXJjaF9fKQotIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrV2FzbVRyYXBTaWduYWwgPSBTSUdGUEU7 Ci0rIyAgICBlbGlmIGRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZpbmVkKF9fUFBDNjRfXykgfHwg XCAKLSsgICAgICAgICAgZGVmaW5lZChfX3BwYzY0bGVfXykgfHwgZGVmaW5lZChfX1BQQzY0TEVf XykKLStzdGF0aWMgY29uc3QgdWludDMyX3Qga1dhc21UcmFwU2lnbmFsID0gU0lHVFJBUDsKLSAj ICAgIGVsc2UKLSBzdGF0aWMgY29uc3QgdWludDMyX3Qga1dhc21UcmFwU2lnbmFsID0gU0lHSUxM OwotICMgICAgZW5kaWYKLWRpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtU3RhY2tzLmNwcCBi L2pzL3NyYy93YXNtL1dhc21TdGFja3MuY3BwCi1pbmRleCA3MTQ5NzM1M2M1YzEuLjY1MTRkOGIw ZTJlNCAxMDA2NDQKLS0tLSBhL2pzL3NyYy93YXNtL1dhc21TdGFja3MuY3BwCi0rKysgYi9qcy9z cmMvd2FzbS9XYXNtU3RhY2tzLmNwcAotQEAgLTQyNiw2ICs0MjYsMzAgQEAgc3RhdGljIGNvbnN0 ZXhwciBzaXplX3QgQ29udFN0YWNrTWF4Sml0U3RhY2tTaXplID0gMTAgKiAxMDI0ICogMTAyNDsK LSAvLyBvciBzdGFjayBzbmFwc2hvdHMgdXRpbGl0aWVzLgotIHN0YXRpYyBjb25zdGV4cHIgc2l6 ZV90IENvbnRTdGFja1JlZFpvbmVTaXplID0gMHg4MDAwOwotIAotKy8vIEVmZmVjdGl2ZSByZWQt em9uZSBzaXplIHVzZWQgd2hlbiBsYXlpbmcgb3V0IGEgY29udGludWF0aW9uIHN0YWNrLgotKy8v Ci0rLy8gVGhlIGppdCBzdGFjayAoYW5kIHRoZXJlZm9yZSB0aGUgYm90dG9tIGd1YXJkIHBhZ2Up IG11c3Qgc3RhcnQgb24gYSBwYWdlCi0rLy8gYm91bmRhcnk7IG90aGVyd2lzZSBnYzo6UHJvdGVj dFBhZ2VzIHRyaXBzIE1PWl9SRUxFQVNFX0FTU0VSVChsZW5ndGggJQotKy8vIHBhZ2VTaXplID09 IDApLiBUaGUgcmVkIHpvbmUgc2l0cyBiZXR3ZWVuIHRoZSB0b3AgZ3VhcmQgcGFnZSBhbmQgdGhl IGppdAotKy8vIHN0YWNrLCBzbyBpdHMgc2l6ZSBoYXMgdG8gYmUgYSBwYWdlIG11bHRpcGxlIHRv IGtlZXAgdGhhdCBzdGFydCBhbGlnbmVkLgotKy8vCi0rLy8gUm91bmRpbmcgdGhlIHJlZCB6b25l IHVwIHRvIGEgcGFnZSBpcyBjb3JyZWN0IG9uIGV2ZXJ5IHBsYXRmb3JtIGFuZCB3b3VsZAotKy8v IGFsc28gY292ZXIgYW55IGNvbmZpZ3VyYXRpb24gd2hvc2UgcGFnZSBzaXplIGV4Y2VlZHMgQ29u dFN0YWNrUmVkWm9uZVNpemUKLSsvLyAoMzJLKSAtLSBlLmcuIGEgNjRLLXBhZ2UgQUFyY2g2NCBr ZXJuZWwgLS0gYnV0IENvbnRTdGFja1JlZFpvbmVTaXplIGlzCi0rLy8gYWxyZWFkeSBhIG11bHRp cGxlIG9mIHRoZSA0Sy8xNksgcGFnZXMgdXNlZCBvbiB0aGUgdGllci0xIHBsYXRmb3Jtcywgc28g dGhlCi0rLy8gcm91bmQtdXAgaXMgYSBuby1vcCB0aGVyZSB0b2RheS4gV2UgZGVsaWJlcmF0ZWx5 IGdhdGUgaXQgdG8gUFBDNjQgKDY0SwotKy8vIHBhZ2VzLCB3aGVyZSB0aGUgcm91bmQtdXAgaXMg bG9hZC1iZWFyaW5nKSBzbyB0aGlzIHBhdGNoIGNhbm5vdCBhbHRlcgotKy8vIGNvbnRpbnVhdGlv biBzdGFjayBsYXlvdXQgb24gYW55IHRpZXItMSBwbGF0Zm9ybS4gRHJvcCB0aGUgZ2F0ZSBpZiB0 aGUKLSsvLyBnZW5lcmFsIGNhc2UgaXMgZXZlciB3YW50ZWQuCi0rc3RhdGljIGlubGluZSBzaXpl X3QgQ29udFN0YWNrRWZmZWN0aXZlUmVkWm9uZVNpemUoCi0rICAgIFtbbWF5YmVfdW51c2VkXV0g c2l6ZV90IHBhZ2VTaXplKSB7Ci0rI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKLSsgIHJldHVybiBS b3VuZFVwKENvbnRTdGFja1JlZFpvbmVTaXplLCBwYWdlU2l6ZSk7Ci0rI2Vsc2UKLSsgIHJldHVy biBDb250U3RhY2tSZWRab25lU2l6ZTsKLSsjZW5kaWYKLSt9Ci0rCi0gLy8gTnVtYmVyIG9mIGd1 YXJkIHBhZ2VzIGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiBlYWNoIGNvbnRpbnVhdGlvbiBzdGFj ayBzbG90LgotIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IENvbnRTdGFja1RvcEd1YXJkUGFnZXMg PSAxOwotIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IENvbnRTdGFja0JvdHRvbUd1YXJkUGFnZXMg PSAxOwotQEAgLTQ0NCw4ICs0NjgsOCBAQCB2b2lkIENvbnRTdGFja1NpemU6OmNvbXB1dGUoKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRTdGFja01pbkppdFN0YWNrU2l6ZSwgQ29u dFN0YWNrTWF4Sml0U3RhY2tTaXplKSwKLSAgICAgICAgICAgICAgIHBhZ2VTaXplKTsKLSAgIGhl YWRlclNpemUgPSBSb3VuZFVwKHNpemVvZihDb250U3RhY2spLCBwYWdlU2l6ZSk7Ci0tICB0b3Rh bFNpemUgPSB0b3BHdWFyZFNpemUgKyBDb250U3RhY2tSZWRab25lU2l6ZSArIGppdFN0YWNrU2l6 ZSArCi0tICAgICAgICAgICAgICBib3R0b21HdWFyZFNpemUgKyBoZWFkZXJTaXplOwotKyAgdG90 YWxTaXplID0gdG9wR3VhcmRTaXplICsgQ29udFN0YWNrRWZmZWN0aXZlUmVkWm9uZVNpemUocGFn ZVNpemUpICsKLSsgICAgICAgICAgICAgIGppdFN0YWNrU2l6ZSArIGJvdHRvbUd1YXJkU2l6ZSAr IGhlYWRlclNpemU7Ci0gCi0gICAvLyBBc3NlcnQgd2UgY2FuJ3Qgb3ZlcmZsb3cgd2hlbiBtdWx0 aXBseWluZyBvdXIgc2l6ZSBieSBjYXBhY2l0eS4gQXNzdW1lCi0gICAvLyAzMi1iaXQgaW50ZWdl cnMgdG8gYmUgY29uc2VydmF0aXZlLgotQEAgLTQ2Nyw3ICs0OTEsOCBAQCB2b2lkIENvbnRTdGFj azo6aW5pdChDb250U3RhY2tBcmVuYSogYXJlbmEsIHVpbnRwdHJfdCBhbGxvY2F0aW9uQmFzZSwK LSAgIHVpbnRwdHJfdCB0b3BHdWFyZFBhZ2VQaHlzaWNhbFN0YXJ0ID0gYWxsb2NhdGlvbkJhc2U7 Ci0gICB1aW50cHRyX3QgdG9wR3VhcmRQYWdlUGh5c2ljYWxFbmQgPSBhbGxvY2F0aW9uQmFzZSAr IHRvcEd1YXJkUGFnZVNpemU7Ci0gICB1aW50cHRyX3QgcmVkWm9uZVBoeXNpY2FsU3RhcnQgPSB0 b3BHdWFyZFBhZ2VQaHlzaWNhbEVuZDsKLS0gIHVpbnRwdHJfdCBqaXRTdGFja1BoeXNpY2FsU3Rh cnQgPSByZWRab25lUGh5c2ljYWxTdGFydCArIENvbnRTdGFja1JlZFpvbmVTaXplOwotKyAgdWlu dHB0cl90IGppdFN0YWNrUGh5c2ljYWxTdGFydCA9Ci0rICAgICAgcmVkWm9uZVBoeXNpY2FsU3Rh cnQgKyBDb250U3RhY2tFZmZlY3RpdmVSZWRab25lU2l6ZShwYWdlU2l6ZSk7Ci0gICB1aW50cHRy X3Qgaml0U3RhY2tQaHlzaWNhbEVuZCA9IGppdFN0YWNrUGh5c2ljYWxTdGFydCArIGppdFN0YWNr U2l6ZTsKLSAgIHVpbnRwdHJfdCBib3R0b21HdWFyZFBhZ2VQaHlzaWNhbFN0YXJ0ID0gaml0U3Rh Y2tQaHlzaWNhbEVuZDsKLSAgIHVpbnRwdHJfdCBoZWFkZXJQaHlzaWNhbFN0YXJ0ID0KLWRpZmYg LS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtU3R1YnMuY3BwIGIvanMvc3JjL3dhc20vV2FzbVN0dWJz LmNwcAotaW5kZXggOGE5OGUyMDFhNDUyLi44NDk3ODE0ZmNkMzcgMTAwNjQ0Ci0tLS0gYS9qcy9z cmMvd2FzbS9XYXNtU3R1YnMuY3BwCi0rKysgYi9qcy9zcmMvd2FzbS9XYXNtU3R1YnMuY3BwCi1A QCAtNjQ2LDggKzY0Niw5IEBAIHN0YXRpYyBib29sIEdlbmVyYXRlSW50ZXJwRW50cnkoTWFjcm9B c3NlbWJsZXImIG1hc20sIGNvbnN0IEZ1bmNFeHBvcnQmIGZlLAotIAotICAgLy8gU2F2ZSB0aGUg cmV0dXJuIGFkZHJlc3MgaWYgaXQgd2Fzbid0IGFscmVhZHkgc2F2ZWQgYnkgdGhlIGNhbGwgaW5z bi4KLSAjaWZkZWYgSlNfVVNFX0xJTktfUkVHSVNURVIKLS0jICBpZiBkZWZpbmVkKEpTX0NPREVH RU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBcCi0tICAgICAgZGVmaW5l ZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyMg IGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQp IHx8ICAgICAgXAotKyAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgXAotKyAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKLSAgIG1hc20ucHVzaFJldHVybkFkZHJlc3MoKTsKLSAjICBlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9BUk02NCkKLSAgIC8vIFdhc21QdXNoIHVwZGF0ZXMgZnJhbWVQdXNoZWQoKSB1bmxpa2Ug cHVzaFJldHVybkFkZHJlc3MoKSwgYnV0IHRoYXQncwotQEAgLTIxMjMsOSArMjEyNCwxMCBAQCBz dGF0aWMgYm9vbCBHZW5lcmF0ZUltcG9ydEludGVycEV4aXQoTWFjcm9Bc3NlbWJsZXImIG1hc20s IGNvbnN0IEZ1bmNJbXBvcnQmIGZpLAotICAgLy8gVGhlIG5hdGl2ZSBBQkkgcHJlc2VydmVzIHRo ZSBpbnN0YW5jZSwgaGVhcCBhbmQgZ2xvYmFsIHJlZ2lzdGVycyBzaW5jZSB0aGV5Ci0gICAvLyBh cmUgbm9uLXZvbGF0aWxlLgotICAgTU9aX0FTU0VSVChOb25Wb2xhdGlsZVJlZ3MuaGFzKEluc3Rh bmNlUmVnKSk7Ci0tI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9BUk0pIHx8ICAgICAgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKLS0gICAgZGVmaW5lZChKU19DT0RFR0VOX0xP T05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQotKyNpZiBkZWZpbmVkKEpTX0NP REVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCAgICAgICAgIFwKLSsgICAg ZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8 fCAgICBcCi0rICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUklTQ1Y2NCkgfHwgXAotKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0gICBN T1pfQVNTRVJUKE5vblZvbGF0aWxlUmVncy5oYXMoSGVhcFJlZykpOwotICNlbmRpZgotIAotQEAg LTI1NzEsNiArMjU3MywxNSBAQCBib29sIHdhc206OkdlbmVyYXRlQnVpbHRpblRodW5rKE1hY3Jv QXNzZW1ibGVyJiBtYXNtLCBBQklGdW5jdGlvblR5cGUgYWJpVHlwZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3Rlcjo6RnJvbUNvZGUocmVnSWQgKyAxKSk7Ci0gICAgICAgICB9Ci0g ICAgICAgfQotKyNlbmRpZgotKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0Ci0rICAgICAgLy8gUFBD NjQgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHplcm8tZXh0ZW5kIHRvIDY0IGJpdHMgKHVubGlr ZQotKyAgICAgIC8vIHg4Ni02NC9BUk02NC9MQTY0KS4gVGhlIEVMRnYyIEFCSSByZXF1aXJlcyBj YWxsZXJzIHRvIHplcm8vc2lnbi1leHRlbmQKLSsgICAgICAvLyBuYXJyb3cgYXJncy4gV2FzbSBp MzIgdmFsdWVzIG1heSBoYXZlIGdhcmJhZ2UgdXBwZXIgYml0cyBpbiA2NC1iaXQKLSsgICAgICAv LyByZWdpc3RlcnMsIHNvIHplcm8tZXh0ZW5kIHRoZW0gYmVmb3JlIGNhbGxpbmcgQysrIGJ1aWx0 aW5zLgotKyAgICAgIGlmIChzZWxmQXJncy5taXJUeXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpIHsK LSsgICAgICAgIG1hc20ubW92ZTMyWmVyb0V4dGVuZFRvUHRyKHNlbGZBcmdzLT5ncHIoKSwgc2Vs ZkFyZ3MtPmdwcigpKTsKLSsgICAgICB9Ci0gI2VuZGlmCi0gICAgICAgY29udGludWU7Ci0gICAg IH0KLUBAIC0yNjU5LDYgKzI2NzAsMjggQEAgc3RhdGljIGNvbnN0IExpdmVSZWdpc3RlclNldCBS ZWdzVG9QcmVzZXJ2ZSgKLSAjICBpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECi0gIyAgICBlcnJvciAi aGlnaCBsYW5lcyBvZiBTSU1EIHJlZ2lzdGVycyBuZWVkIHRvIGJlIHNhdmVkIHRvby4iCi0gIyAg ZW5kaWYKLSsjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCi0rLy8gRXhjbHVkZSByMCAo U2NyYXRjaFJlZ2lzdGVyLCBub3QgYWxsb2NhdGFibGUsIHNwZWNpYWwgYWRkcmVzc2luZyBzZW1h bnRpY3MpLAotKy8vIHIxIChTUCksIHIyIChUT0MgcG9pbnRlciwgcmVzZXJ2ZWQpLCBhbmQgcjEz IChUTFMgcG9pbnRlciwgcmVzZXJ2ZWQpLgotK3N0YXRpYyBjb25zdCBMaXZlUmVnaXN0ZXJTZXQg UmVnc1RvUHJlc2VydmUoCi0rICAgIEdlbmVyYWxSZWdpc3RlclNldChSZWdpc3RlcnM6OkFsbE1h c2sgJiB+KCh1aW50MzJfdCgxKSA8PCBSZWdpc3RlcnM6OnIwKSB8Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCgxKSA8PCBSZWdpc3RlcnM6 OnIxKSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1 aW50MzJfdCgxKSA8PCBSZWdpc3RlcnM6OnIyKSB8Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCgxKSA8PCBSZWdpc3RlcnM6OnIxMykpKSwK LSsjICBpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECi0rICAgIC8vIFVubGlrZSBBUk02NCwgd2hlcmUg dGhlIHZlY3RvciByZWdpc3RlcnMgYWxpYXMgdGhlIGRvdWJsZXMsIFBQQzY0Ci0rICAgIC8vIGRv dWJsZXMgbGl2ZSBpbiB0aGUgRlBScyAoVlNSMC0zMSkgd2hpbGUgd2FzbSB2MTI4IHZhbHVlcyBs aXZlIGluIHRoZQotKyAgICAvLyBWUnMgKFZTUjMyLTYzKSAtLSB0d28gZGlzam9pbnQgcGh5c2lj YWwgcG9vbHMsIHNvIGJvdGggbXVzdCBiZQotKyAgICAvLyBwcmVzZXJ2ZWQuIFNhdmluZyBvbmx5 IHRoZSBkb3VibGVzIGxvc2VzIHRoZSBlbnRpcmUgbGl2ZSB2MTI4IHN0YXRlOiBhCi0rICAgIC8v IHRyYXAgZmlyaW5nIHdoaWxlIGEgdjEyOCBpcyBsaXZlIChub3RhYmx5IHRoZSBpbnRlcnJ1cHQt Y2hlY2sgdHJhcCwKLSsgICAgLy8gd2hpY2ggZmlyZXMgY29uc3RhbnRseSBpbiBob3QgbG9vcHMp IHJlc3VtZXMgd2l0aCB3aGF0ZXZlciB0aGUgQysrCi0rICAgIC8vIGhhbmRsZXIncyBsaWJjIGxl ZnQgaW4gdGhlIFZScyAoZS5nLiBnbGliYydzIHZlY3RvciBtZW1jcHkgbGVhdmVzIGx2c2wKLSsg ICAgLy8gYWxpZ25tZW50LWNvbnRyb2wgcGF0dGVybnMgaW4gbG93IFZScykuCi0rICAgIEZsb2F0 UmVnaXN0ZXJTZXQoRmxvYXRSZWdpc3RlcnM6OkFsbERvdWJsZU1hc2sgfAotKyAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpBbGxTaW1kMTI4TWFzaykpOwotKyMgIGVsc2UKLSsg ICAgRmxvYXRSZWdpc3RlclNldChGbG9hdFJlZ2lzdGVyczo6QWxsRG91YmxlTWFzaykpOwotKyMg IGVuZGlmCi0gI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQotIC8vIFdlIGFzc3VtZSB0 aGF0IHRyYXBzIGRvIG5vdCBoYXBwZW4gd2hpbGUgbHIgaXMgbGl2ZS4gVGhpcyBib3RoIGVuc3Vy ZXMgdGhhdAotIC8vIHRoZSBzaXplIG9mIFJlZ3NUb1ByZXNlcnZlIGlzIGEgbXVsdGlwbGUgb2Yg MiAocHJlc2VydmluZyBXYXNtU3RhY2tBbGlnbm1lbnQpCi1kaWZmIC0tZ2l0IGEvanMvc3JjL3dh c20vV2FzbVN1bW1hcml6ZUluc24uY3BwIGIvanMvc3JjL3dhc20vV2FzbVN1bW1hcml6ZUluc24u Y3BwCi1pbmRleCA3YmI0ZjRiN2E3MjUuLjJhZTU1YTFiMWI5ZSAxMDA2NDQKLS0tLSBhL2pzL3Ny Yy93YXNtL1dhc21TdW1tYXJpemVJbnNuLmNwcAotKysrIGIvanMvc3JjL3dhc20vV2FzbVN1bW1h cml6ZUluc24uY3BwCi1AQCAtMTczMSw2ICsxNzMxLDE2OSBAQCBNYXliZTxUcmFwTWFjaGluZUlu c24+IFN1bW1hcml6ZVRyYXBJbnN0cnVjdGlvbihjb25zdCB1aW50OF90KiBpbnNuQWRkcikgewot ICAgcmV0dXJuIE5vdGhpbmcoKTsKLSB9Ci0gCi0rLy8gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IHBwYzY0ID09PT0KLSsK LSsjICBlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSsKLStNYXliZTxUcmFwTWFjaGlu ZUluc24+IFN1bW1hcml6ZVRyYXBJbnN0cnVjdGlvbihjb25zdCB1aW50OF90KiBpbnNuQWRkcikg ewotKyAgTU9aX0FTU0VSVCgwID09ICh1aW50cHRyX3QoaW5zbkFkZHIpICYgMykpOwotKwotKyAg Y29uc3QgdWludDMyX3QgaW5zbiA9ICoodWludDMyX3QqKWluc25BZGRyOwotKyAgY29uc3QgdWlu dDMyX3QgbWFqb3JPcCA9IGluc24gPj4gMjY7Ci0rICAvLyBYLWZvcm0gc2Vjb25kYXJ5IG9wY29k ZTogYml0cyAxMC4uMS4KLSsgIGNvbnN0IHVpbnQzMl90IHhvID0gKGluc24gPj4gMSkgJiAweDNG RjsKLSsKLSsgIC8vIFBQQ190cmFwID0gMHg3RkUwMDAwOCA9IHR3IDMxLDAsMC4KLSsgIGlmIChp bnNuID09IDB4N0ZFMDAwMDgpIHsKLSsgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpP ZmZpY2lhbFVEKTsKLSsgIH0KLSsKLSsgIC8vIEQtZm9ybSAvIERTLWZvcm0gbG9hZHMuCi0rICBz d2l0Y2ggKG1ham9yT3ApIHsKLSsgICAgY2FzZSAzNDogIC8vIGxiegotKyAgICAgIHJldHVybiBT b21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDgpOwotKyAgICBjYXNlIDQwOiAgLy8gbGh6Ci0rICAg IGNhc2UgNDI6ICAvLyBsaGEKLSsgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246Okxv YWQxNik7Ci0rICAgIGNhc2UgMzI6ICAvLyBsd3oKLSsgICAgICByZXR1cm4gU29tZShUcmFwTWFj aGluZUluc246OkxvYWQzMik7Ci0rICAgIGNhc2UgNTg6ICAvLyBsZCAoRFM9MCkgLyBsd2EgKERT PTIpCi0rICAgICAgaWYgKChpbnNuICYgMykgPT0gMikgewotKyAgICAgICAgcmV0dXJuIFNvbWUo VHJhcE1hY2hpbmVJbnNuOjpMb2FkMzIpOyAgLy8gbHdhCi0rICAgICAgfQotKyAgICAgIHJldHVy biBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDY0KTsgIC8vIGxkCi0rICAgIGNhc2UgNDg6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGZzCi0rICAgICAgcmV0dXJuIFNvbWUo VHJhcE1hY2hpbmVJbnNuOjpMb2FkMzIpOwotKyAgICBjYXNlIDUwOiAgLy8gbGZkCi0rICAgICAg cmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkNjQpOwotKyAgICBkZWZhdWx0OgotKyAg ICAgIGJyZWFrOwotKyAgfQotKwotKyAgLy8gRC1mb3JtIC8gRFMtZm9ybSBzdG9yZXMuCi0rICBz d2l0Y2ggKG1ham9yT3ApIHsKLSsgICAgY2FzZSAzODogIC8vIHN0YgotKyAgICAgIHJldHVybiBT b21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmU4KTsKLSsgICAgY2FzZSA0NDogIC8vIHN0aAotKyAg ICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUxNik7Ci0rICAgIGNhc2UgMzY6 ICAvLyBzdHcKLSsgICAgY2FzZSAzNzogIC8vIHN0d3UKLSsgICAgICByZXR1cm4gU29tZShUcmFw TWFjaGluZUluc246OlN0b3JlMzIpOwotKyAgICBjYXNlIDUyOiAgLy8gc3RmcwotKyAgICAgIHJl dHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUzMik7Ci0rICAgIGNhc2UgNjI6ICAvLyBz dGQgKERTPTApIC8gc3RkdSAoRFM9MSkKLSsgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUlu c246OlN0b3JlNjQpOwotKyAgICBjYXNlIDU0OiAgLy8gc3RmZAotKyAgICBjYXNlIDU1OiAgLy8g c3RmZHUKLSsgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlNjQpOwotKyAg ICBkZWZhdWx0OgotKyAgICAgIGJyZWFrOwotKyAgfQotKwotKyAgLy8gWC1mb3JtIGluc3RydWN0 aW9ucyAobWFqb3Igb3Bjb2RlIDMxKS4KLSsgIGlmIChtYWpvck9wID09IDMxKSB7Ci0rICAgIHN3 aXRjaCAoeG8pIHsKLSsgICAgICAvLyBJbmRleGVkIGxvYWRzLgotKyAgICAgIGNhc2UgODc6ICAv LyBsYnp4Ci0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQ4KTsKLSsg ICAgICBjYXNlIDI3OTogIC8vIGxoengKLSsgICAgICBjYXNlIDM0MzogIC8vIGxoYXgKLSsgICAg ICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDE2KTsKLSsgICAgICBjYXNlIDIz OiAgLy8gbHd6eAotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkMzIp OwotKyAgICAgIGNhc2UgMjE6ICAvLyBsZHgKLSsgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNo aW5lSW5zbjo6TG9hZDY0KTsKLSsgICAgICBjYXNlIDUzNTogIC8vIGxmc3gKLSsgICAgICBjYXNl IDg1NTogIC8vIGxmaXdheAotKyAgICAgIGNhc2UgODg3OiAgLy8gbGZpd3p4Ci0rICAgICAgICBy ZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7Ci0rICAgICAgY2FzZSA1OTk6ICAv LyBsZmR4Ci0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQ2NCk7Ci0r ICAgICAgY2FzZSA3OTA6ICAvLyBsaGJyeCAoYnl0ZS1yZXZlcnNlIGhhbGZ3b3JkKQotKyAgICAg ICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkMTYpOwotKyAgICAgIGNhc2UgNTM0 OiAgLy8gbHdicnggKGJ5dGUtcmV2ZXJzZSB3b3JkKQotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJh cE1hY2hpbmVJbnNuOjpMb2FkMzIpOwotKwotKyAgICAgIC8vIEluZGV4ZWQgc3RvcmVzLgotKyAg ICAgIGNhc2UgMjE1OiAgLy8gc3RieAotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJ bnNuOjpTdG9yZTgpOwotKyAgICAgIGNhc2UgNDA3OiAgLy8gc3RoeAotKyAgICAgICAgcmV0dXJu IFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTE2KTsKLSsgICAgICBjYXNlIDE1MTogIC8vIHN0 d3gKLSsgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUzMik7Ci0rICAg ICAgY2FzZSAxNDk6ICAvLyBzdGR4Ci0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUlu c246OlN0b3JlNjQpOwotKyAgICAgIGNhc2UgNjYzOiAgLy8gc3Rmc3gKLSsgICAgICAgIHJldHVy biBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUzMik7Ci0rICAgICAgY2FzZSA3Mjc6ICAvLyBz dGZkeAotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTY0KTsKLSsg ICAgICBjYXNlIDkxODogIC8vIHN0aGJyeCAoYnl0ZS1yZXZlcnNlIGhhbGZ3b3JkIHN0b3JlKQot KyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTE2KTsKLSsgICAgICBj YXNlIDY2MjogIC8vIHN0d2JyeCAoYnl0ZS1yZXZlcnNlIHdvcmQgc3RvcmUpCi0rICAgICAgICBy ZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlMzIpOwotKwotKyAgICAgIC8vIFZTWCBT SU1EIGluZGV4ZWQgbG9hZC9zdG9yZSAoWFgxLWZvcm0sIHNhbWUgbWFqb3Igb3Bjb2RlIDMxKS4K LSsgICAgICBjYXNlIDI2ODogIC8vIGx4dnggKFBPV0VSOSkKLSsgICAgICBjYXNlIDg0NDogIC8v IGx4dmQyeCAoUE9XRVI4KQotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpM b2FkMTI4KTsKLSsgICAgICBjYXNlIDM5NjogIC8vIHN0eHZ4IChQT1dFUjkpCi0rICAgICAgY2Fz ZSA5NzI6ICAvLyBzdHh2ZDJ4IChQT1dFUjgpCi0rICAgICAgICByZXR1cm4gU29tZShUcmFwTWFj aGluZUluc246OlN0b3JlMTI4KTsKLSsKLSsgICAgICAvLyBBdG9taWMgKGxvYWQtcmVzZXJ2ZSAv IHN0b3JlLWNvbmRpdGlvbmFsKS4KLSsgICAgICBjYXNlIDIwOiAgIC8vIGx3YXJ4Ci0rICAgICAg Y2FzZSA1MjogICAvLyBsYmFyeCAoUE9XRVI3KykKLSsgICAgICBjYXNlIDg0OiAgIC8vIGxkYXJ4 Ci0rICAgICAgY2FzZSAxMTY6ICAvLyBsaGFyeCAoUE9XRVI3KykKLSsgICAgICAgIHJldHVybiBT b21lKFRyYXBNYWNoaW5lSW5zbjo6QXRvbWljKTsKLSsgICAgICBkZWZhdWx0OgotKyAgICAgICAg YnJlYWs7Ci0rICAgIH0KLSsgICAgLy8gc3R3Y3guIChYTz0xNTAsIFJjPTEpLCBzdGRjeC4gKFhP PTIxNCwgUmM9MSksIHN0YmN4LiAoWE89Njk0LCBSYz0xKQotKyAgICAvLyBhbmQgc3RoY3guIChY Tz03MjYsIFJjPTEpIGhhdmUgYml0IDAgc2V0LiBOb3RlIHhvIGFib3ZlIGFscmVhZHkKLSsgICAg Ly8gZGlzY2FyZHMgYml0IDAsIHNvIHdlIG5lZWQgYSBzZXBhcmF0ZSBsb3ctMTEtYml0IG1hdGNo LgotKyAgICBjb25zdCB1aW50MzJfdCB4b1JjID0gaW5zbiAmIDB4N0ZGOyAgLy8gYml0cyAxMC4u MAotKyAgICBpZiAoeG9SYyA9PSAoKDE1MCA8PCAxKSB8IDEpIHx8IHhvUmMgPT0gKCgyMTQgPDwg MSkgfCAxKSB8fAotKyAgICAgICAgeG9SYyA9PSAoKDY5NCA8PCAxKSB8IDEpIHx8IHhvUmMgPT0g KCg3MjYgPDwgMSkgfCAxKSkgewotKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6 QXRvbWljKTsKLSsgICAgfQotKyAgfQotKwotKyAgLy8gUE9XRVIxMCBwcmVmaXhlZCBsb2Fkcy9z dG9yZXMgKG1ham9yIG9wY29kZSAxKS4gVGhlIHRyYXAtc2l0ZSBQQwotKyAgLy8gcG9pbnRzIGF0 IHRoZSBwcmVmaXggd29yZDsgdGhlIGFjdHVhbCBsb2FkL3N0b3JlIGtpbmQgaXMgZW5jb2RlZCBp bgotKyAgLy8gdGhlIHN1ZmZpeCB3b3JkIGF0IGluc25BZGRyICsgNC4gVGhlIDY0LWJ5dGUtYm91 bmRhcnkgcnVsZQotKyAgLy8gKGVuc3VyZVByZWZpeGVkQWxpZ25tZW50KSBndWFyYW50ZWVzIHRo ZSBzdWZmaXggaXMgaW4gdGhlIHNhbWUgYmxvY2suCi0rICBpZiAobWFqb3JPcCA9PSAxKSB7Ci0r ICAgIGNvbnN0IHVpbnQzMl90IHN1ZmZpeCA9ICoodWludDMyX3QqKShpbnNuQWRkciArIDQpOwot KyAgICBjb25zdCB1aW50MzJfdCBzdWZmaXhPcDYgPSBzdWZmaXggPj4gMjY7ICAgICAgICAgIC8v IDYtYml0IHN1ZmZpeCBvcAotKyAgICBjb25zdCB1aW50MzJfdCBzdWZmaXhPcDUgPSBzdWZmaXgg Pj4gMjc7ICAgICAgICAgIC8vIDUtYml0IHN1ZmZpeCBvcCAocGx4di9wc3R4dikKLSsgICAgc3dp dGNoIChzdWZmaXhPcDYpIHsKLSsgICAgICBjYXNlIDU3OiAgLy8gcGxkCi0rICAgICAgICByZXR1 cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQ2NCk7Ci0rICAgICAgY2FzZSA1MDogIC8vIHBs ZmQKLSsgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDY0KTsKLSsgICAg ICBjYXNlIDQ4OiAgLy8gcGxmcwotKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNu OjpMb2FkMzIpOwotKyAgICAgIGNhc2UgNjE6ICAvLyBwc3RkCi0rICAgICAgICByZXR1cm4gU29t ZShUcmFwTWFjaGluZUluc246OlN0b3JlNjQpOwotKyAgICAgIGNhc2UgNTQ6ICAvLyBwc3RmZAot KyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTY0KTsKLSsgICAgICBj YXNlIDUyOiAgLy8gcHN0ZnMKLSsgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6 U3RvcmUzMik7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIGJyZWFrOwotKyAgICB9Ci0rICAg IGlmIChzdWZmaXhPcDUgPT0gMjUpIHsgIC8vIHBseHYKLSsgICAgICByZXR1cm4gU29tZShUcmFw TWFjaGluZUluc246OkxvYWQxMjgpOwotKyAgICB9Ci0rICAgIGlmIChzdWZmaXhPcDUgPT0gMjcp IHsgIC8vIHBzdHh2Ci0rICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTEy OCk7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHJldHVybiBOb3RoaW5nKCk7Ci0rfQotKwotIC8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSBub25lID09PT0KLSAKLSAjICBlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQot ZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21WYWx1ZS5jcHAgYi9qcy9zcmMvd2FzbS9XYXNt VmFsdWUuY3BwCi1pbmRleCBmZGEwOTk2ODUxZTEuLjQ1ZmZmMjRmYTU4MiAxMDA2NDQKLS0tLSBh L2pzL3NyYy93YXNtL1dhc21WYWx1ZS5jcHAKLSsrKyBiL2pzL3NyYy93YXNtL1dhc21WYWx1ZS5j cHAKLUBAIC00MzAsNyArNDMwLDcgQEAgYm9vbCBUb1dlYkFzc2VtYmx5VmFsdWVfaTMyKEpTQ29u dGV4dCogY3gsIEhhbmRsZVZhbHVlIHZhbCwgaW50MzJfdCogbG9jLAotICAgYm9vbCBvayA9IFRv SW50MzIoY3gsIHZhbCwgbG9jKTsKLSAgIGlmIChvayAmJiBtdXN0V3JpdGU2NCkgewotICNpZiBk ZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg fHwgXAotLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKLSsgICAgZGVmaW5lZChKU19D T0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKLSAgICAgbG9jWzFd ID0gbG9jWzBdID4+IDMxOwotICNlbHNlCi0gICAgIGxvY1sxXSA9IDA7Ci1kaWZmIC0tZ2l0IGEv bWZidC9Bc3NlcnRpb25zLmggYi9tZmJ0L0Fzc2VydGlvbnMuaAotaW5kZXggYTQzNmQwMTlhMTk3 Li40ODg3YWY3ZTc2NzYgMTAwNjQ0Ci0tLS0gYS9tZmJ0L0Fzc2VydGlvbnMuaAotKysrIGIvbWZi dC9Bc3NlcnRpb25zLmgKLUBAIC0yODIsNiArMjgyLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBN T1pfQ3Jhc2hTZXF1ZW5jZSh2b2lkKiBhQWRkcmVzcywgaW50cHRyX3QgYUxpbmUpIHsKLSAgICAg ICAic3QuZCAlMSwlMCwwO1xuIiAgLy8gV3JpdGUgdGhlIGxpbmUgbnVtYmVyIHRvIHRoZSBjcmFz aGluZyBhZGRyZXNzCi0gICAgICAgOiAgICAgICAgICAgICAgICAgIC8vIG5vIG91dHB1dCByZWdp c3RlcnMKLSAgICAgICA6ICJyIihhQWRkcmVzcyksICJyIihhTGluZSkpOwotKyMgIGVsaWYgZGVm aW5lZChfX3Bvd2VycGM2NF9fKQotKyAgYXNtIHZvbGF0aWxlKAotKyAgICAgICJzdGQgJTEsMCgl MCk7XG4iICAvLyBXcml0ZSB0aGUgbGluZSBudW1iZXIgdG8gdGhlIGNyYXNoaW5nIGFkZHJlc3MK LSsgICAgICA6ICAgICAgICAgICAgICAgICAgLy8gbm8gb3V0cHV0IHJlZ2lzdGVycwotKyAgICAg IDogInIiKGFBZGRyZXNzKSwgInIiKGFMaW5lKSk7Ci0gIyAgZWxzZQotICMgICAgd2FybmluZyBc Ci0gICAgICAgICAiVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLCByZXBsYWNlIHRoZSBjb2RlIGJl bG93IHdpdGggYXNzZW1ibHkgc3VpdGFibGUgdG8gY3Jhc2ggdGhlIHByb2Nlc3MiCi0tLSAKLTIu NTIuMAotCgpkaWZmIC0tZ2l0IGEvZmlyZWZveC5zcGVjIGIvZmlyZWZveC5zcGVjCmluZGV4IGJl OGFiYWYuLjA2YTY5MDAgMTAwNjQ0Ci0tLSBhL2ZpcmVmb3guc3BlYworKysgYi9maXJlZm94LnNw ZWMKQEAgLTI4MSwxMSArMjgxLDYgQEAgUGF0Y2g2MDA6ICAgICAgICBwZ28ucGF0Y2gKIFBhdGNo NjAyOiAgICAgICAgbW96aWxsYS0xNTE2ODAzLnBhdGNoCiBQYXRjaDYwMzogICAgICAgIGZpcmVm b3gtZ2NjLWFsd2F5cy1pbmxpbmUucGF0Y2gKIAotIyBwcGM2NGxlIEpJVAotUGF0Y2g5MDA6ICAg ICAgICAwMDAxLUFkZC1WU1gtaW5zdHJ1Y3Rpb25zLWZvci1TS0lBLnBhdGNoCi1QYXRjaDkwMTog ICAgICAgIDAwMDItQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLWxpYndlYnAucGF0Y2gKLVBhdGNo OTAyOiAgICAgICAgMDAwMy1BZGQtUFBDNjRMRS1KSVQtYmFja2VuZC5wYXRjaAotCiAKICVpZiAl ez9zeXN0ZW1fbnNzfQogQnVpbGRSZXF1aXJlczogIHBrZ2NvbmZpZyhuc3ByKSA+PSAle25zcHJf dmVyc2lvbn0KQEAgLTYwNiwxMSArNjAxLDYgQEAgY2F0ICV7U09VUkNFNDl9IHwgc2VkIC1lICJz fExJQkNMQU5HX1JUX1BMQUNFSE9MREVSfGBwd2RgL3dhc2ktc2RrLTMwL2J1aWxkL3N5c3IKICVl bmRpZgogJXBhdGNoIC1QNjAzIC1wMSAtYiAuaW5saW5lCiAKLSMgcHBjNjRsZSBKSVQKLSVwYXRj aCAtUDkwMCAtcDEKLSVwYXRjaCAtUDkwMSAtcDEKLSVwYXRjaCAtUDkwMiAtcDEKLQogcm0gLWYg Lm1vemNvbmZpZwogY3AgJXtTT1VSQ0UxMH0gLm1vemNvbmZpZwogZWNobyAiYWNfYWRkX29wdGlv bnMgLS1lbmFibGUtZGVmYXVsdC10b29sa2l0PWNhaXJvLWd0azMtd2F5bGFuZCIgPj4gLm1vemNv bmZpZwo=