Re: backup manifests
David Steele <[email protected]> Tue, 14 Jan 2020 22:21:00 -0700
| Newsgroups | gmane.comp.db.postgresql.devel.general |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------8ED3A72BFE2CC5E8F1A8B04A Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi Tom, On 1/14/20 9:47 PM, Tom Lane wrote: > David Steele <[email protected]> writes: >> I'm happy to work up a prototype unless the consensus is that we >> absolutely don't want a second JSON parser in core. > > How much code are we talking about? If the answer is "a few hundred > lines", it's a lot easier to swallow than if it's "a few thousand". It's currently about a thousand lines but we have a lot of functions to convert to/from specific types. I imagine the line count would be similar using one of the approaches I discussed above. Current source attached for reference. Regards, -- -David [email protected] --------------8ED3A72BFE2CC5E8F1A8B04A Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="json.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="json.c" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCkNvbnZlcnQgSlNPTiB0by9mcm9tIEtleVZhbHVl CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwojaW5jbHVkZSAiYnVpbGQuYXV0by5oIgoKI2lu Y2x1ZGUgPGN0eXBlLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNpbmNsdWRlICJjb21tb24v ZGVidWcuaCIKI2luY2x1ZGUgImNvbW1vbi9sb2cuaCIKI2luY2x1ZGUgImNvbW1vbi90eXBl L2pzb24uaCIKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpQcm90b3R5cGVzCioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwpzdGF0aWMgVmFyaWFudCAqanNvblRvVmFySW50ZXJuYWwoY29u c3QgY2hhciAqanNvbiwgdW5zaWduZWQgaW50ICpqc29uUG9zKTsKCi8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgpDb25zdW1lIHdoaXRlc3BhY2UKKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CnN0YXRpYyB2b2lkCmpzb25Db25zdW1lV2hpdGVTcGFjZShjb25zdCBjaGFyICpqc29uLCB1 bnNpZ25lZCBpbnQgKmpzb25Qb3MpCnsKICAgIEZVTkNUSU9OX1RFU1RfQkVHSU4oKTsKICAg ICAgICBGVU5DVElPTl9URVNUX1BBUkFNKFNUUklOR1osIGpzb24pOwogICAgICAgIEZVTkNU SU9OX1RFU1RfUEFSQU1fUChVSU5ULCBqc29uUG9zKTsKICAgIEZVTkNUSU9OX1RFU1RfRU5E KCk7CgogICAgLy8gQ29uc3VtZSB3aGl0ZXNwYWNlCiAgICB3aGlsZSAoanNvblsqanNvblBv c10gPT0gJyAnIHx8IGpzb25bKmpzb25Qb3NdID09ICdcdCcgfHwganNvblsqanNvblBvc10g PT0gJ1xuJyAgfHwganNvblsqanNvblBvc10gPT0gJ1xyJykKICAgICAgICAoKmpzb25Qb3Mp Kys7CgogICAgRlVOQ1RJT05fVEVTVF9SRVRVUk5fVk9JRCgpOwp9CgovKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKQ29udmVydCBhIGpzb24gc3RyaW5nIHRvIGEgYm9vbAoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8Kc3RhdGljIGJvb2wKanNvblRvQm9vbEludGVybmFsKGNvbnN0IGNo YXIgKmpzb24sIHVuc2lnbmVkIGludCAqanNvblBvcykKewogICAgRlVOQ1RJT05fVEVTVF9C RUdJTigpOwogICAgICAgIEZVTkNUSU9OX1RFU1RfUEFSQU0oU1RSSU5HWiwganNvbik7CiAg ICAgICAgRlVOQ1RJT05fVEVTVF9QQVJBTV9QKFVJTlQsIGpzb25Qb3MpOwogICAgRlVOQ1RJ T05fVEVTVF9FTkQoKTsKCiAgICBib29sIHJlc3VsdDsKCiAgICBpZiAoc3RybmNtcChqc29u ICsgKmpzb25Qb3MsIFRSVUVfWiwgNCkgPT0gMCkKICAgIHsKICAgICAgICByZXN1bHQgPSB0 cnVlOwogICAgICAgICpqc29uUG9zICs9IDQ7CiAgICB9CiAgICBlbHNlIGlmIChzdHJuY21w KGpzb24gKyAqanNvblBvcywgRkFMU0VfWiwgNSkgPT0gMCkKICAgIHsKICAgICAgICByZXN1 bHQgPSBmYWxzZTsKICAgICAgICAqanNvblBvcyArPSA1OwogICAgfQogICAgZWxzZQogICAg ICAgIFRIUk9XX0ZNVChKc29uRm9ybWF0RXJyb3IsICJleHBlY3RlZCBib29sZWFuIGF0ICcl cyciLCBqc29uICsgKmpzb25Qb3MpOwoKICAgIEZVTkNUSU9OX1RFU1RfUkVUVVJOKHJlc3Vs dCk7Cn0KCmJvb2wKanNvblRvQm9vbChjb25zdCBTdHJpbmcgKmpzb24pCnsKICAgIEZVTkNU SU9OX1RFU1RfQkVHSU4oKTsKICAgICAgICBGVU5DVElPTl9URVNUX1BBUkFNKFNUUklORywg anNvbik7CiAgICBGVU5DVElPTl9URVNUX0VORCgpOwoKICAgIHVuc2lnbmVkIGludCBqc29u UG9zID0gMDsKICAgIGpzb25Db25zdW1lV2hpdGVTcGFjZShzdHJQdHIoanNvbiksICZqc29u UG9zKTsKCiAgICBib29sIHJlc3VsdCA9IGpzb25Ub0Jvb2xJbnRlcm5hbChzdHJQdHIoanNv biksICZqc29uUG9zKTsKCiAgICBqc29uQ29uc3VtZVdoaXRlU3BhY2Uoc3RyUHRyKGpzb24p LCAmanNvblBvcyk7CgogICAgaWYgKGpzb25Qb3MgIT0gc3RyU2l6ZShqc29uKSkKICAgICAg ICBUSFJPV19GTVQoSnNvbkZvcm1hdEVycm9yLCAidW5leHBlY3RlZCBjaGFyYWN0ZXJzIGFm dGVyIGJvb2xlYW4gYXQgJyVzJyIsIHN0clB0cihqc29uKSArIGpzb25Qb3MpOwoKICAgIEZV TkNUSU9OX1RFU1RfUkVUVVJOKHJlc3VsdCk7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgpDb252ZXJ0IGEganNvbiBudW1iZXIgdG8gdmFyaW91cyBpbnRlZ2VyIHR5cGVzCioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwpzdGF0aWMgVmFyaWFudCAqCmpzb25Ub051bWJlckludGVy bmFsKGNvbnN0IGNoYXIgKmpzb24sIHVuc2lnbmVkIGludCAqanNvblBvcykKewogICAgRlVO Q1RJT05fVEVTVF9CRUdJTigpOwogICAgICAgIEZVTkNUSU9OX1RFU1RfUEFSQU0oU1RSSU5H WiwganNvbik7CiAgICAgICAgRlVOQ1RJT05fVEVTVF9QQVJBTV9QKFVJTlQsIGpzb25Qb3Mp OwogICAgRlVOQ1RJT05fVEVTVF9FTkQoKTsKCiAgICBWYXJpYW50ICpyZXN1bHQgPSBOVUxM OwogICAgdW5zaWduZWQgaW50IGJlZ2luUG9zID0gKmpzb25Qb3M7CiAgICBib29sIGludFNp Z25lZCA9IGZhbHNlOwoKICAgIC8vIENvbnN1bWUgdGhlIC0KICAgIGlmIChqc29uWypqc29u UG9zXSA9PSAnLScpCiAgICB7CiAgICAgICAgKCpqc29uUG9zKSsrOwogICAgICAgIGludFNp Z25lZCA9IHRydWU7CiAgICB9CgogICAgLy8gQ29uc3VtZSBhbGwgZGlnaXRzCiAgICB3aGls ZSAoaXNkaWdpdChqc29uWypqc29uUG9zXSkpCiAgICAgICAgKCpqc29uUG9zKSsrOwoKICAg IC8vIEludmFsaWQgaWYgb25seSBhIC0gd2FzIGZvdW5kCiAgICBpZiAoanNvblsqanNvblBv cyAtIDFdID09ICctJykKICAgICAgICBUSFJPV19GTVQoSnNvbkZvcm1hdEVycm9yLCAiZm91 bmQgJy0nIHdpdGggbm8gaW50ZWdlciBhdCAnJXMnIiwganNvbiArIGJlZ2luUG9zKTsKCiAg ICBNRU1fQ09OVEVYVF9URU1QX0JFR0lOKCkKICAgIHsKICAgICAgICAvLyBFeHRyYWN0IHRo ZSBudW1lcmljIGFzIGEgc3RyaW5nCiAgICAgICAgU3RyaW5nICpyZXN1bHRTdHIgPSBzdHJO ZXdOKGpzb24gKyBiZWdpblBvcywgKmpzb25Qb3MgLSBiZWdpblBvcyk7CgogICAgICAgIC8v IENvbnZlcnQgdGhlIHN0cmluZyB0byBhIGludGVnZXIgdmFyaWFudAogICAgICAgIG1lbUNv bnRleHRTd2l0Y2goTUVNX0NPTlRFWFRfT0xEKCkpOwoKICAgICAgICBpZiAoaW50U2lnbmVk KQogICAgICAgICAgICByZXN1bHQgPSB2YXJOZXdJbnQ2NChjdnRaVG9JbnQ2NChzdHJQdHIo cmVzdWx0U3RyKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmVzdWx0ID0gdmFyTmV3 VUludDY0KGN2dFpUb1VJbnQ2NChzdHJQdHIocmVzdWx0U3RyKSkpOwoKICAgICAgICBtZW1D b250ZXh0U3dpdGNoKE1FTV9DT05URVhUX1RFTVAoKSk7CiAgICB9CiAgICBNRU1fQ09OVEVY VF9URU1QX0VORCgpOwoKICAgIEZVTkNUSU9OX1RFU1RfUkVUVVJOKHJlc3VsdCk7Cn0KCnN0 YXRpYyBWYXJpYW50ICoKanNvblRvTnVtYmVyKGNvbnN0IFN0cmluZyAqanNvbikKewogICAg RlVOQ1RJT05fVEVTVF9CRUdJTigpOwogICAgICAgIEZVTkNUSU9OX1RFU1RfUEFSQU0oU1RS SU5HLCBqc29uKTsKICAgIEZVTkNUSU9OX1RFU1RfRU5EKCk7CgogICAgdW5zaWduZWQgaW50 IGpzb25Qb3MgPSAwOwogICAganNvbkNvbnN1bWVXaGl0ZVNwYWNlKHN0clB0cihqc29uKSwg Jmpzb25Qb3MpOwoKICAgIFZhcmlhbnQgKnJlc3VsdCA9IGpzb25Ub051bWJlckludGVybmFs KHN0clB0cihqc29uKSwgJmpzb25Qb3MpOwoKICAgIGpzb25Db25zdW1lV2hpdGVTcGFjZShz dHJQdHIoanNvbiksICZqc29uUG9zKTsKCiAgICBpZiAoanNvblBvcyAhPSBzdHJTaXplKGpz b24pKQogICAgICAgIFRIUk9XX0ZNVChKc29uRm9ybWF0RXJyb3IsICJ1bmV4cGVjdGVkIGNo YXJhY3RlcnMgYWZ0ZXIgbnVtYmVyIGF0ICclcyciLCBzdHJQdHIoanNvbikgKyBqc29uUG9z KTsKCiAgICBGVU5DVElPTl9URVNUX1JFVFVSTihyZXN1bHQpOwp9CgppbnQKanNvblRvSW50 KGNvbnN0IFN0cmluZyAqanNvbikKewogICAgRlVOQ1RJT05fVEVTVF9CRUdJTigpOwogICAg ICAgIEZVTkNUSU9OX1RFU1RfUEFSQU0oU1RSSU5HLCBqc29uKTsKICAgIEZVTkNUSU9OX1RF U1RfRU5EKCk7CgogICAgaW50IHJlc3VsdCA9IDA7CgogICAgTUVNX0NPTlRFWFRfVEVNUF9C RUdJTigpCiAgICB7CiAgICAgICAgcmVzdWx0ID0gdmFySW50Rm9yY2UoanNvblRvTnVtYmVy KGpzb24pKTsKICAgIH0KICAgIE1FTV9DT05URVhUX1RFTVBfRU5EKCk7CgogICAgRlVOQ1RJ T05fVEVTVF9SRVRVUk4ocmVzdWx0KTsKfQoKaW50NjRfdApqc29uVG9JbnQ2NChjb25zdCBT dHJpbmcgKmpzb24pCnsKICAgIEZVTkNUSU9OX1RFU1RfQkVHSU4oKTsKICAgICAgICBGVU5D VElPTl9URVNUX1BBUkFNKFNUUklORywganNvbik7CiAgICBGVU5DVElPTl9URVNUX0VORCgp OwoKICAgIGludDY0X3QgcmVzdWx0ID0gMDsKCiAgICBNRU1fQ09OVEVYVF9URU1QX0JFR0lO KCkKICAgIHsKICAgICAgICByZXN1bHQgPSB2YXJJbnQ2NEZvcmNlKGpzb25Ub051bWJlcihq c29uKSk7CiAgICB9CiAgICBNRU1fQ09OVEVYVF9URU1QX0VORCgpOwoKICAgIEZVTkNUSU9O X1RFU1RfUkVUVVJOKHJlc3VsdCk7Cn0KCnVuc2lnbmVkIGludApqc29uVG9VSW50KGNvbnN0 IFN0cmluZyAqanNvbikKewogICAgRlVOQ1RJT05fVEVTVF9CRUdJTigpOwogICAgICAgIEZV TkNUSU9OX1RFU1RfUEFSQU0oU1RSSU5HLCBqc29uKTsKICAgIEZVTkNUSU9OX1RFU1RfRU5E KCk7CgogICAgdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CgogICAgTUVNX0NPTlRFWFRfVEVN UF9CRUdJTigpCiAgICB7CiAgICAgICAgcmVzdWx0ID0gdmFyVUludEZvcmNlKGpzb25Ub051 bWJlcihqc29uKSk7CiAgICB9CiAgICBNRU1fQ09OVEVYVF9URU1QX0VORCgpOwoKICAgIEZV TkNUSU9OX1RFU1RfUkVUVVJOKHJlc3VsdCk7Cn0KCnVpbnQ2NF90Cmpzb25Ub1VJbnQ2NChj b25zdCBTdHJpbmcgKmpzb24pCnsKICAgIEZVTkNUSU9OX1RFU1RfQkVHSU4oKTsKICAgICAg ICBGVU5DVElPTl9URVNUX1BBUkFNKFNUUklORywganNvbik7CiAgICBGVU5DVElPTl9URVNU X0VORCgpOwoKICAgIHVpbnQ2NF90IHJlc3VsdCA9IDA7CgogICAgTUVNX0NPTlRFWFRfVEVN UF9CRUdJTigpCiAgICB7CiAgICAgICAgcmVzdWx0ID0gdmFyVUludDY0Rm9yY2UoanNvblRv TnVtYmVyKGpzb24pKTsKICAgIH0KICAgIE1FTV9DT05URVhUX1RFTVBfRU5EKCk7CgogICAg RlVOQ1RJT05fVEVTVF9SRVRVUk4ocmVzdWx0KTsKfQoKLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCkNvbnZlcnQgYSBqc29uIHN0cmluZyB0byBhIFN0cmluZwoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8Kc3RhdGljIFN0cmluZyAqCmpzb25Ub1N0ckludGVybmFsKGNvbnN0IGNoYXIg Kmpzb24sIHVuc2lnbmVkIGludCAqanNvblBvcykKewogICAgRlVOQ1RJT05fVEVTVF9CRUdJ TigpOwogICAgICAgIEZVTkNUSU9OX1RFU1RfUEFSQU0oU1RSSU5HWiwganNvbik7CiAgICAg ICAgRlVOQ1RJT05fVEVTVF9QQVJBTV9QKFVJTlQsIGpzb25Qb3MpOwogICAgRlVOQ1RJT05f VEVTVF9FTkQoKTsKCiAgICBTdHJpbmcgKnJlc3VsdCA9IHN0ck5ldygiIik7CgogICAgaWYg KGpzb25bKmpzb25Qb3NdICE9ICciJykKICAgICAgICBUSFJPV19GTVQoSnNvbkZvcm1hdEVy cm9yLCAiZXhwZWN0ZWQgJ1wiJyBhdCAnJXMnIiwganNvbiArICpqc29uUG9zKTsKCiAgICBN RU1fQ09OVEVYVF9URU1QX0JFR0lOKCkKICAgIHsKICAgICAgICAoKmpzb25Qb3MpKys7Cgog ICAgICAgIHdoaWxlIChqc29uWypqc29uUG9zXSAhPSAnIicpCiAgICAgICAgewogICAgICAg ICAgICBpZiAoanNvblsqanNvblBvc10gPT0gJ1xcJykKICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgKCpqc29uUG9zKSsrOzsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKGpzb25b Kmpzb25Qb3NdKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNhc2Ug JyInOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQ2F0Q2hyKHJlc3VsdCwgJyIn KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAg IGNhc2UgJ1xcJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckNhdENocihyZXN1 bHQsICdcXCcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAg ICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJDYXRD aHIocmVzdWx0LCAnLycpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAg ICAgICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJDYXRDaHIocmVzdWx0LCAnXG4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RyQ2F0Q2hyKHJlc3VsdCwgJ1xyJyk7CiAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0ckNhdENocihyZXN1bHQsICdcdCcpOwogICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJDYXRDaHIocmVzdWx0LCAnXGInKTsKICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQ2F0Q2hyKHJlc3VsdCwgJ1xmJyk7CiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBkZWZh dWx0OgogICAgICAgICAgICAgICAgICAgICAgICBUSFJPV19GTVQoSnNvbkZvcm1hdEVycm9y LCAiaW52YWxpZCBlc2NhcGUgY2hhcmFjdGVyICclYyciLCBqc29uWypqc29uUG9zXSk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICBpZiAoanNvblsqanNvblBvc10gPT0gJ1wwJykKICAg ICAgICAgICAgICAgICAgICBUSFJPVyhKc29uRm9ybWF0RXJyb3IsICJleHBlY3RlZCAnXCIn IGJ1dCBmb3VuZCBudWxsIGRlbGltaXRlciIpOwoKICAgICAgICAgICAgICAgICAgICBzdHJD YXRDaHIocmVzdWx0LCBqc29uWypqc29uUG9zXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICgqanNvblBvcykrKzs7CiAgICAgICAgfTsKCiAgICAgICAgLy8gQWR2YW5jZSB0aGUg Y2hhcmFjdGVyIGFycmF5IHBvaW50ZXIgdG8gdGhlIG5leHQgZWxlbWVudCBhZnRlciB0aGUg c3RyaW5nCiAgICAgICAgKCpqc29uUG9zKSsrOzsKICAgIH0KICAgIE1FTV9DT05URVhUX1RF TVBfRU5EKCk7CgogICAgRlVOQ1RJT05fVEVTVF9SRVRVUk4ocmVzdWx0KTsKfQoKU3RyaW5n ICoKanNvblRvU3RyKGNvbnN0IFN0cmluZyAqanNvbikKewogICAgRlVOQ1RJT05fVEVTVF9C RUdJTigpOwogICAgICAgIEZVTkNUSU9OX1RFU1RfUEFSQU0oU1RSSU5HLCBqc29uKTsKICAg IEZVTkNUSU9OX1RFU1RfRU5EKCk7CgogICAgdW5zaWduZWQgaW50IGpzb25Qb3MgPSAwOwog ICAganNvbkNvbnN1bWVXaGl0ZVNwYWNlKHN0clB0cihqc29uKSwgJmpzb25Qb3MpOwoKICAg IFN0cmluZyAqcmVzdWx0ID0gTlVMTDsKCiAgICBpZiAoc3RybmNtcChzdHJQdHIoanNvbiks IE5VTExfWiwgNCkgPT0gMCkKICAgICAgICBqc29uUG9zICs9IDQ7CiAgICBlbHNlCiAgICAg ICAgcmVzdWx0ID0ganNvblRvU3RySW50ZXJuYWwoc3RyUHRyKGpzb24pLCAmanNvblBvcyk7 CgogICAganNvbkNvbnN1bWVXaGl0ZVNwYWNlKHN0clB0cihqc29uKSwgJmpzb25Qb3MpOwoK ICAgIGlmIChqc29uUG9zICE9IHN0clNpemUoanNvbikpCiAgICAgICAgVEhST1dfRk1UKEpz b25Gb3JtYXRFcnJvciwgInVuZXhwZWN0ZWQgY2hhcmFjdGVycyBhZnRlciBzdHJpbmcgYXQg JyVzJyIsIHN0clB0cihqc29uKSArIGpzb25Qb3MpOwoKICAgIEZVTkNUSU9OX1RFU1RfUkVU VVJOKHJlc3VsdCk7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb252ZXJ0IGEganNv biBvYmplY3QgdG8gYSBLZXlWYWx1ZQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kc3RhdGlj IEtleVZhbHVlICoKanNvblRvS3ZJbnRlcm5hbChjb25zdCBjaGFyICpqc29uLCB1bnNpZ25l ZCBpbnQgKmpzb25Qb3MpCnsKICAgIEZVTkNUSU9OX1RFU1RfQkVHSU4oKTsKICAgICAgICBG VU5DVElPTl9URVNUX1BBUkFNKFNUUklOR1osIGpzb24pOwogICAgICAgIEZVTkNUSU9OX1RF U1RfUEFSQU1fUChVSU5ULCBqc29uUG9zKTsKICAgIEZVTkNUSU9OX1RFU1RfRU5EKCk7Cgog ICAgS2V5VmFsdWUgKnJlc3VsdCA9IGt2TmV3KCk7CgogICAgTUVNX0NPTlRFWFRfVEVNUF9C RUdJTigpCiAgICB7CiAgICAgICAgLy8gTW92ZSBwb3NpdGlvbiB0byB0aGUgZmlyc3Qga2V5 L3ZhbHVlIGluIHRoZSBvYmplY3QKICAgICAgICAoKmpzb25Qb3MpKys7CiAgICAgICAganNv bkNvbnN1bWVXaGl0ZVNwYWNlKGpzb24sIGpzb25Qb3MpOwoKICAgICAgICAvLyBPbmx5IHBy b2NlZWQgaWYgdGhlIGFycmF5IGlzIG5vdCBlbXB0eQogICAgICAgIGlmIChqc29uWypqc29u UG9zXSAhPSAnfScpCiAgICAgICAgewogICAgICAgICAgICBkbwogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBpZiAoanNvblsqanNvblBvc10gPT0gJywnKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICgqanNvblBvcykrKzsKICAgICAgICAgICAgICAg ICAgICBqc29uQ29uc3VtZVdoaXRlU3BhY2UoanNvbiwganNvblBvcyk7CiAgICAgICAgICAg ICAgICB9CgogICAgICAgICAgICAgICAgVmFyaWFudCAqa2V5ID0gdmFyTmV3U3RyKGpzb25U b1N0ckludGVybmFsKGpzb24sIGpzb25Qb3MpKTsKCiAgICAgICAgICAgICAgICBqc29uQ29u c3VtZVdoaXRlU3BhY2UoanNvbiwganNvblBvcyk7CgogICAgICAgICAgICAgICAgaWYgKGpz b25bKmpzb25Qb3NdICE9ICc6JykKICAgICAgICAgICAgICAgICAgICBUSFJPV19GTVQoSnNv bkZvcm1hdEVycm9yLCAiZXhwZWN0ZWQgJzonIGF0ICclcyciLCBqc29uICsgKmpzb25Qb3Mp OwogICAgICAgICAgICAgICAgKCpqc29uUG9zKSsrOwoKICAgICAgICAgICAgICAgIGpzb25D b25zdW1lV2hpdGVTcGFjZShqc29uLCBqc29uUG9zKTsKCiAgICAgICAgICAgICAgICBrdlB1 dChyZXN1bHQsIGtleSwganNvblRvVmFySW50ZXJuYWwoanNvbiwganNvblBvcykpOwogICAg ICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlIChqc29uWypqc29uUG9zXSA9PSAnLCcpOwog ICAgICAgIH0KCiAgICAgICAgaWYgKGpzb25bKmpzb25Qb3NdICE9ICd9JykKICAgICAgICAg ICAgVEhST1dfRk1UKEpzb25Gb3JtYXRFcnJvciwgImV4cGVjdGVkICd9JyBhdCAnJXMnIiwg anNvbiArICpqc29uUG9zKTsKICAgICAgICAoKmpzb25Qb3MpKys7CiAgICB9CiAgICBNRU1f Q09OVEVYVF9URU1QX0VORCgpOwoKICAgIEZVTkNUSU9OX1RFU1RfUkVUVVJOKHJlc3VsdCk7 Cn0KCktleVZhbHVlICoKanNvblRvS3YoY29uc3QgU3RyaW5nICpqc29uKQp7CiAgICBGVU5D VElPTl9URVNUX0JFR0lOKCk7CiAgICAgICAgRlVOQ1RJT05fVEVTVF9QQVJBTShTVFJJTkcs IGpzb24pOwogICAgRlVOQ1RJT05fVEVTVF9FTkQoKTsKCiAgICB1bnNpZ25lZCBpbnQganNv blBvcyA9IDA7CiAgICBqc29uQ29uc3VtZVdoaXRlU3BhY2Uoc3RyUHRyKGpzb24pLCAmanNv blBvcyk7CgogICAgaWYgKHN0clB0cihqc29uKVtqc29uUG9zXSAhPSAneycpCiAgICAgICAg VEhST1dfRk1UKEpzb25Gb3JtYXRFcnJvciwgImV4cGVjdGVkICd7JyBhdCAnJXMnIiwgc3Ry UHRyKGpzb24pICsganNvblBvcyk7CgogICAgS2V5VmFsdWUgKnJlc3VsdCA9IGpzb25Ub0t2 SW50ZXJuYWwoc3RyUHRyKGpzb24pLCAmanNvblBvcyk7CgogICAganNvbkNvbnN1bWVXaGl0 ZVNwYWNlKHN0clB0cihqc29uKSwgJmpzb25Qb3MpOwoKICAgIGlmIChqc29uUG9zICE9IHN0 clNpemUoanNvbikpCiAgICAgICAgVEhST1dfRk1UKEpzb25Gb3JtYXRFcnJvciwgInVuZXhw ZWN0ZWQgY2hhcmFjdGVycyBhZnRlciBvYmplY3QgYXQgJyVzJyIsIHN0clB0cihqc29uKSAr IGpzb25Qb3MpOwoKICAgIEZVTkNUSU9OX1RFU1RfUkVUVVJOKHJlc3VsdCk7Cn0KCi8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgpDb252ZXJ0IGEganNvbiBzdHJpbmcgdG8gYW4gYXJyYXkK KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCnN0YXRpYyBWYXJpYW50TGlzdCAqCmpzb25Ub1Zh ckxzdEludGVybmFsKGNvbnN0IGNoYXIgKmpzb24sIHVuc2lnbmVkIGludCAqanNvblBvcykK ewogICAgRlVOQ1RJT05fVEVTVF9CRUdJTigpOwogICAgICAgIEZVTkNUSU9OX1RFU1RfUEFS QU0oU1RSSU5HWiwganNvbik7CiAgICAgICAgRlVOQ1RJT05fVEVTVF9QQVJBTV9QKFVJTlQs IGpzb25Qb3MpOwogICAgRlVOQ1RJT05fVEVTVF9FTkQoKTsKCiAgICBWYXJpYW50TGlzdCAq cmVzdWx0ID0gdmFyTHN0TmV3KCk7CgogICAgaWYgKGpzb25bKmpzb25Qb3NdICE9ICdbJykK ICAgICAgICBUSFJPV19GTVQoSnNvbkZvcm1hdEVycm9yLCAiZXhwZWN0ZWQgJ1snIGF0ICcl cyciLCBqc29uICsgKmpzb25Qb3MpOwoKICAgIE1FTV9DT05URVhUX1RFTVBfQkVHSU4oKQog ICAgewogICAgICAgIC8vIE1vdmUgcG9zaXRpb24gdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4g dGhlIGFycmF5CiAgICAgICAgKCpqc29uUG9zKSsrOwogICAgICAgIGpzb25Db25zdW1lV2hp dGVTcGFjZShqc29uLCBqc29uUG9zKTsKCiAgICAgICAgLy8gT25seSBwcm9jZWVkIGlmIHRo ZSBhcnJheSBpcyBub3QgZW1wdHkKICAgICAgICBpZiAoanNvblsqanNvblBvc10gIT0gJ10n KQogICAgICAgIHsKICAgICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgaWYgKGpzb25bKmpzb25Qb3NdID09ICcsJykKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAoKmpzb25Qb3MpKys7CiAgICAgICAgICAgICAgICAgICAganNvbkNv bnN1bWVXaGl0ZVNwYWNlKGpzb24sIGpzb25Qb3MpOwogICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgIG1lbUNvbnRleHRTd2l0Y2goTUVNX0NPTlRFWFRfT0xEKCkpOwogICAg ICAgICAgICAgICAgdmFyTHN0QWRkKHJlc3VsdCwganNvblRvVmFySW50ZXJuYWwoanNvbiwg anNvblBvcykpOwogICAgICAgICAgICAgICAgbWVtQ29udGV4dFN3aXRjaChNRU1fQ09OVEVY VF9URU1QKCkpOwoKICAgICAgICAgICAgICAgIGpzb25Db25zdW1lV2hpdGVTcGFjZShqc29u LCBqc29uUG9zKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3aGlsZSAoanNvblsqanNv blBvc10gPT0gJywnKTsKICAgICAgICB9CgogICAgICAgIGlmIChqc29uWypqc29uUG9zXSAh PSAnXScpCiAgICAgICAgICAgIFRIUk9XX0ZNVChKc29uRm9ybWF0RXJyb3IsICJleHBlY3Rl ZCAnXScgYXQgJyVzJyIsIGpzb24gKyAqanNvblBvcyk7CgogICAgICAgICgqanNvblBvcykr KzsKICAgIH0KICAgIE1FTV9DT05URVhUX1RFTVBfRU5EKCk7CgogICAgRlVOQ1RJT05fVEVT VF9SRVRVUk4ocmVzdWx0KTsKfQoKVmFyaWFudExpc3QgKgpqc29uVG9WYXJMc3QoY29uc3Qg U3RyaW5nICpqc29uKQp7CiAgICBGVU5DVElPTl9URVNUX0JFR0lOKCk7CiAgICAgICAgRlVO Q1RJT05fVEVTVF9QQVJBTShTVFJJTkcsIGpzb24pOwogICAgRlVOQ1RJT05fVEVTVF9FTkQo KTsKCiAgICB1bnNpZ25lZCBpbnQganNvblBvcyA9IDA7CiAgICBqc29uQ29uc3VtZVdoaXRl U3BhY2Uoc3RyUHRyKGpzb24pLCAmanNvblBvcyk7CgogICAgVmFyaWFudExpc3QgKnJlc3Vs dCA9IGpzb25Ub1ZhckxzdEludGVybmFsKHN0clB0cihqc29uKSwgJmpzb25Qb3MpOwoKICAg IGpzb25Db25zdW1lV2hpdGVTcGFjZShzdHJQdHIoanNvbiksICZqc29uUG9zKTsKCiAgICBp ZiAoanNvblBvcyAhPSBzdHJTaXplKGpzb24pKQogICAgICAgIFRIUk9XX0ZNVChKc29uRm9y bWF0RXJyb3IsICJ1bmV4cGVjdGVkIGNoYXJhY3RlcnMgYWZ0ZXIgYXJyYXkgYXQgJyVzJyIs IHN0clB0cihqc29uKSArIGpzb25Qb3MpOwoKICAgIEZVTkNUSU9OX1RFU1RfUkVUVVJOKHJl c3VsdCk7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb252ZXJ0IEpTT04gdG8gYSB2 YXJpYW50CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpzdGF0aWMgVmFyaWFudCAqCmpzb25U b1ZhckludGVybmFsKGNvbnN0IGNoYXIgKmpzb24sIHVuc2lnbmVkIGludCAqanNvblBvcykK ewogICAgRlVOQ1RJT05fVEVTVF9CRUdJTigpOwogICAgICAgIEZVTkNUSU9OX1RFU1RfUEFS QU0oU1RSSU5HWiwganNvbik7CiAgICAgICAgRlVOQ1RJT05fVEVTVF9QQVJBTV9QKFVJTlQs IGpzb25Qb3MpOwogICAgRlVOQ1RJT05fVEVTVF9FTkQoKTsKCiAgICBWYXJpYW50ICpyZXN1 bHQgPSBOVUxMOwoKICAgIGpzb25Db25zdW1lV2hpdGVTcGFjZShqc29uLCBqc29uUG9zKTsK CiAgICAvLyBUaGVyZSBzaG91bGQgYmUgc29tZSBkYXRhCiAgICBpZiAoanNvblsqanNvblBv c10gPT0gJ1wwJykKICAgICAgICBUSFJPVyhKc29uRm9ybWF0RXJyb3IsICJleHBlY3RlZCBk YXRhIik7CgogICAgLy8gRGV0ZXJtaW5lIGRhdGEgdHlwZQogICAgc3dpdGNoIChqc29uWypq c29uUG9zXSkKICAgIHsKICAgICAgICAvLyBTdHJpbmcKICAgICAgICBjYXNlICciJzoKICAg ICAgICB7CiAgICAgICAgICAgIHJlc3VsdCA9IHZhck5ld1N0cihqc29uVG9TdHJJbnRlcm5h bChqc29uLCBqc29uUG9zKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAg ICAgLy8gSW50ZWdlcgogICAgICAgIGNhc2UgJy0nOgogICAgICAgIGNhc2UgJzAnIC4uLiAn OSc6CiAgICAgICAgewogICAgICAgICAgICByZXN1bHQgPSBqc29uVG9OdW1iZXJJbnRlcm5h bChqc29uLCBqc29uUG9zKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAg ICAvLyBCb29sZWFuCiAgICAgICAgY2FzZSAndCc6CiAgICAgICAgY2FzZSAnZic6CiAgICAg ICAgewogICAgICAgICAgICByZXN1bHQgPSB2YXJOZXdCb29sKGpzb25Ub0Jvb2xJbnRlcm5h bChqc29uLCBqc29uUG9zKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAg ICAgLy8gTnVsbAogICAgICAgIGNhc2UgJ24nOgogICAgICAgIHsKICAgICAgICAgICAgaWYg KHN0cm5jbXAoanNvbiArICpqc29uUG9zLCBOVUxMX1osIDQpID09IDApCiAgICAgICAgICAg ICAgICAqanNvblBvcyArPSA0OwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBU SFJPV19GTVQoSnNvbkZvcm1hdEVycm9yLCAiZXhwZWN0ZWQgbnVsbCBhdCAnJXMnIiwganNv biArICpqc29uUG9zKTsKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAg Ly8gQXJyYXkKICAgICAgICBjYXNlICdbJzoKICAgICAgICB7CiAgICAgICAgICAgIHJlc3Vs dCA9IHZhck5ld1ZhckxzdChqc29uVG9WYXJMc3RJbnRlcm5hbChqc29uLCBqc29uUG9zKSk7 CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgLy8gT2JqZWN0CiAgICAg ICAgY2FzZSAneyc6CiAgICAgICAgewogICAgICAgICAgICByZXN1bHQgPSB2YXJOZXdLdihq c29uVG9LdkludGVybmFsKGpzb24sIGpzb25Qb3MpKTsKICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgfQoKICAgICAgICAvLyBPYmplY3QKICAgICAgICBkZWZhdWx0OgogICAgICAgIHsK ICAgICAgICAgICAgVEhST1dfRk1UKEpzb25Gb3JtYXRFcnJvciwgImludmFsaWQgdHlwZSBh dCAnJXMnIiwganNvbiArICpqc29uUG9zKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg fQogICAgfQoKICAgIGpzb25Db25zdW1lV2hpdGVTcGFjZShqc29uLCBqc29uUG9zKTsKCiAg ICBGVU5DVElPTl9URVNUX1JFVFVSTihyZXN1bHQpOwp9CgpWYXJpYW50ICoKanNvblRvVmFy KGNvbnN0IFN0cmluZyAqanNvbikKewogICAgRlVOQ1RJT05fTE9HX0JFR0lOKGxvZ0xldmVs VHJhY2UpOwogICAgICAgIEZVTkNUSU9OX0xPR19QQVJBTShTVFJJTkcsIGpzb24pOwogICAg RlVOQ1RJT05fTE9HX0VORCgpOwoKICAgIGNvbnN0IGNoYXIgKmpzb25QdHIgPSBzdHJQdHIo anNvbik7CiAgICB1bnNpZ25lZCBpbnQganNvblBvcyA9IDA7CgogICAgRlVOQ1RJT05fTE9H X1JFVFVSTihWQVJJQU5ULCBqc29uVG9WYXJJbnRlcm5hbChqc29uUHRyLCAmanNvblBvcykp Owp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29udmVydCBhIGJvb2xlYW4gdG8gSlNP TgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KY29uc3QgU3RyaW5nICoKanNvbkZyb21Cb29s KGJvb2wgdmFsdWUpCnsKICAgIEZVTkNUSU9OX1RFU1RfQkVHSU4oKTsKICAgICAgICBGVU5D VElPTl9URVNUX1BBUkFNKEJPT0wsIHZhbHVlKTsKICAgIEZVTkNUSU9OX1RFU1RfRU5EKCk7 CgogICAgRlVOQ1RJT05fVEVTVF9SRVRVUk4odmFsdWUgPyBUUlVFX1NUUiA6IEZBTFNFX1NU Uik7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb252ZXJ0IGEgbnVtYmVyIHRvIEpT T04KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovClN0cmluZyAqCmpzb25Gcm9tSW50KGludCBu dW1iZXIpCnsKICAgIEZVTkNUSU9OX1RFU1RfQkVHSU4oKTsKICAgICAgICBGVU5DVElPTl9U RVNUX1BBUkFNKElOVCwgbnVtYmVyKTsKICAgIEZVTkNUSU9OX1RFU1RfRU5EKCk7CgogICAg Y2hhciB3b3JraW5nW0NWVF9CQVNFMTBfQlVGRkVSX1NJWkVdOwogICAgY3Z0SW50VG9aKG51 bWJlciwgd29ya2luZywgc2l6ZW9mKHdvcmtpbmcpKTsKCiAgICBGVU5DVElPTl9URVNUX1JF VFVSTihzdHJOZXcod29ya2luZykpOwp9CgpTdHJpbmcgKgpqc29uRnJvbUludDY0KGludDY0 X3QgbnVtYmVyKQp7CiAgICBGVU5DVElPTl9URVNUX0JFR0lOKCk7CiAgICAgICAgRlVOQ1RJ T05fVEVTVF9QQVJBTShJTlQ2NCwgbnVtYmVyKTsKICAgIEZVTkNUSU9OX1RFU1RfRU5EKCk7 CgogICAgY2hhciB3b3JraW5nW0NWVF9CQVNFMTBfQlVGRkVSX1NJWkVdOwogICAgY3Z0SW50 NjRUb1oobnVtYmVyLCB3b3JraW5nLCBzaXplb2Yod29ya2luZykpOwoKICAgIEZVTkNUSU9O X1RFU1RfUkVUVVJOKHN0ck5ldyh3b3JraW5nKSk7Cn0KClN0cmluZyAqCmpzb25Gcm9tVUlu dCh1bnNpZ25lZCBpbnQgbnVtYmVyKQp7CiAgICBGVU5DVElPTl9URVNUX0JFR0lOKCk7CiAg ICAgICAgRlVOQ1RJT05fVEVTVF9QQVJBTShVSU5ULCBudW1iZXIpOwogICAgRlVOQ1RJT05f VEVTVF9FTkQoKTsKCiAgICBjaGFyIHdvcmtpbmdbQ1ZUX0JBU0UxMF9CVUZGRVJfU0laRV07 CiAgICBjdnRVSW50VG9aKG51bWJlciwgd29ya2luZywgc2l6ZW9mKHdvcmtpbmcpKTsKCiAg ICBGVU5DVElPTl9URVNUX1JFVFVSTihzdHJOZXcod29ya2luZykpOwp9CgpTdHJpbmcgKgpq c29uRnJvbVVJbnQ2NCh1aW50NjRfdCBudW1iZXIpCnsKICAgIEZVTkNUSU9OX1RFU1RfQkVH SU4oKTsKICAgICAgICBGVU5DVElPTl9URVNUX1BBUkFNKFVJTlQ2NCwgbnVtYmVyKTsKICAg IEZVTkNUSU9OX1RFU1RfRU5EKCk7CgogICAgY2hhciB3b3JraW5nW0NWVF9CQVNFMTBfQlVG RkVSX1NJWkVdOwogICAgY3Z0VUludDY0VG9aKG51bWJlciwgd29ya2luZywgc2l6ZW9mKHdv cmtpbmcpKTsKCiAgICBGVU5DVElPTl9URVNUX1JFVFVSTihzdHJOZXcod29ya2luZykpOwp9 CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKT3V0cHV0IGFuZCBlc2NhcGUgYSBzdHJpbmcK KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCnN0YXRpYyB2b2lkCmpzb25Gcm9tU3RySW50ZXJu YWwoU3RyaW5nICpqc29uLCBjb25zdCBTdHJpbmcgKnN0cmluZykKewogICAgRlVOQ1RJT05f VEVTVF9CRUdJTigpOwogICAgICAgIEZVTkNUSU9OX1RFU1RfUEFSQU0oU1RSSU5HLCBqc29u KTsKICAgICAgICBGVU5DVElPTl9URVNUX1BBUkFNKFNUUklORywgc3RyaW5nKTsKICAgIEZV TkNUSU9OX1RFU1RfRU5EKCk7CgogICAgQVNTRVJUKGpzb24gIT0gTlVMTCk7CgogICAgLy8g SWYgc3RyaW5nIGlzIG51bGwKICAgIGlmIChzdHJpbmcgPT0gTlVMTCkKICAgIHsKICAgICAg ICBzdHJDYXQoanNvbiwgTlVMTF9aKTsKICAgIH0KICAgIC8vIEVsc2UgZXNjYXBlIGFuZCBv dXRwdXQgc3RyaW5nCiAgICBlbHNlCiAgICB7CiAgICAgICAgc3RyQ2F0Q2hyKGpzb24sICci Jyk7CgogICAgICAgIGZvciAodW5zaWduZWQgaW50IHN0cmluZ0lkeCA9IDA7IHN0cmluZ0lk eCA8IHN0clNpemUoc3RyaW5nKTsgc3RyaW5nSWR4KyspCiAgICAgICAgewogICAgICAgICAg ICBjaGFyIHN0cmluZ0NociA9IHN0clB0cihzdHJpbmcpW3N0cmluZ0lkeF07CgogICAgICAg ICAgICBzd2l0Y2ggKHN0cmluZ0NocikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg Y2FzZSAnIic6CiAgICAgICAgICAgICAgICAgICAgc3RyQ2F0KGpzb24sICJcXFwiIik7CiAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnXFwnOgog ICAgICAgICAgICAgICAgICAgIHN0ckNhdChqc29uLCAiXFxcXCIpOwogICAgICAgICAgICAg ICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzoKICAgICAgICAgICAg ICAgICAgICBzdHJDYXQoanNvbiwgIlxcbiIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFr OwoKICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKICAgICAgICAgICAgICAgICAgICBzdHJD YXQoanNvbiwgIlxcciIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg ICAgICAgIGNhc2UgJ1x0JzoKICAgICAgICAgICAgICAgICAgICBzdHJDYXQoanNvbiwgIlxc dCIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2Ug J1xiJzoKICAgICAgICAgICAgICAgICAgICBzdHJDYXQoanNvbiwgIlxcYiIpOwogICAgICAg ICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ1xmJzoKICAgICAg ICAgICAgICAgICAgICBzdHJDYXQoanNvbiwgIlxcZiIpOwogICAgICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAg c3RyQ2F0Q2hyKGpzb24sIHN0cmluZ0Nocik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHN0ckNhdENocihqc29uLCAnIicp OwogICAgfQoKICAgIEZVTkNUSU9OX1RFU1RfUkVUVVJOX1ZPSUQoKTsKfQoKU3RyaW5nICoK anNvbkZyb21TdHIoY29uc3QgU3RyaW5nICpzdHJpbmcpCnsKICAgIEZVTkNUSU9OX1RFU1Rf QkVHSU4oKTsKICAgICAgICBGVU5DVElPTl9URVNUX1BBUkFNKFNUUklORywgc3RyaW5nKTsK ICAgIEZVTkNUSU9OX1RFU1RfRU5EKCk7CgogICAgU3RyaW5nICpqc29uID0gc3RyTmV3KCIi KTsKICAgIGpzb25Gcm9tU3RySW50ZXJuYWwoanNvbiwgc3RyaW5nKTsKCiAgICBGVU5DVElP Tl9URVNUX1JFVFVSTihqc29uKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkludGVy bmFsIHJlY3Vyc2l2ZSBmdW5jdGlvbiB0byB3YWxrIGEgS2V5VmFsdWUgYW5kIHJldHVybiBh IGpzb24gc3RyaW5nCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpzdGF0aWMgU3RyaW5nICoK anNvbkZyb21LdkludGVybmFsKGNvbnN0IEtleVZhbHVlICprdikKewogICAgRlVOQ1RJT05f VEVTVF9CRUdJTigpOwogICAgICAgIEZVTkNUSU9OX1RFU1RfUEFSQU0oS0VZX1ZBTFVFLCBr dik7CiAgICBGVU5DVElPTl9URVNUX0VORCgpOwoKICAgIEFTU0VSVChrdiAhPSBOVUxMKTsK CiAgICBTdHJpbmcgKnJlc3VsdCA9IHN0ck5ldygieyIpOwoKICAgIE1FTV9DT05URVhUX1RF TVBfQkVHSU4oKQogICAgewogICAgICAgIGNvbnN0IFN0cmluZ0xpc3QgKmtleUxpc3QgPSBz dHJMc3RTb3J0KHN0ckxzdE5ld1ZhckxzdChrdktleUxpc3Qoa3YpKSwgc29ydE9yZGVyQXNj KTsKCiAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQga2V5SWR4ID0gMDsga2V5SWR4IDwgc3Ry THN0U2l6ZShrZXlMaXN0KTsga2V5SWR4KyspCiAgICAgICAgewogICAgICAgICAgICBTdHJp bmcgKmtleSA9IHN0ckxzdEdldChrZXlMaXN0LCBrZXlJZHgpOwogICAgICAgICAgICBjb25z dCBWYXJpYW50ICp2YWx1ZSA9IGt2R2V0KGt2LCBWQVJTVFIoa2V5KSk7CgogICAgICAgICAg ICAvLyBJZiBnb2luZyB0byBhZGQgYW5vdGhlciBrZXksIHByZXBlbmQgYSBjb21tYQogICAg ICAgICAgICBpZiAoa2V5SWR4ID4gMCkKICAgICAgICAgICAgICAgIHN0ckNhdChyZXN1bHQs ICIsIik7CgogICAgICAgICAgICAvLyBLZXlzIGFyZSBhbHdheXMgc3RyaW5ncyBpbiB0aGUg b3V0cHV0LCBzbyBhZGQgc3RhcnRpbmcgcXVvdGUgYW5kIGNvbG9uLgogICAgICAgICAgICBz dHJDYXRGbXQocmVzdWx0LCAiXCIlc1wiOiIsIHN0clB0cihrZXkpKTsKCiAgICAgICAgICAg IC8vIE5VTEwgdmFsdWUKICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAg ICAgICAgICBzdHJDYXQocmVzdWx0LCBOVUxMX1opOwogICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyVHlwZSh2YWx1ZSkpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSB2YXJUeXBlS2V5VmFsdWU6 CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJDYXQo cmVzdWx0LCBzdHJQdHIoanNvbkZyb21LdkludGVybmFsKGt2RHVwKHZhckt2KHZhbHVlKSkp KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICAgICAgY2FzZSB2YXJUeXBlVmFyaWFudExpc3Q6CiAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXJy YXkgaXMgZW1wdHksIHRoZW4gZG8gbm90IGFkZCBmb3JtYXR0aW5nLCBlbHNlIHByb2Nlc3Mg dGhlIGFycmF5LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyVmFyTHN0KHZhbHVl KSA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQ2F0KHJlc3VsdCwg TlVMTF9aKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFyTHN0U2l6ZSh2 YXJWYXJMc3QodmFsdWUpKSA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry Q2F0KHJlc3VsdCwgIltdIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQ2F0 KHJlc3VsdCwgIlsiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln bmVkIGludCBhcnJheUlkeCA9IDA7IGFycmF5SWR4IDwgdmFyTHN0U2l6ZSh2YXJWYXJMc3Qo dmFsdWUpKTsgYXJyYXlJZHgrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYW50ICphcnJheVZhbHVlID0gdmFy THN0R2V0KHZhclZhckxzdCh2YWx1ZSksIGFycmF5SWR4KTsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gSWYgZ29pbmcgdG8gYWRkIGFub3RoZXIgZWxlbWVudCwgYWRk IGEgY29tbWEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXlJZHgg PiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJDYXQocmVzdWx0 LCAiLCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhcnJheSB2 YWx1ZSBpcyBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5 VmFsdWUgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckNhdChyZXN1bHQsIE5VTExfWik7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIElmIHRoZSB0eXBlIGlzIGEgc3RyaW5nLCBhZGQgbGVhZGluZyBh bmQgdHJhaWxpbmcgZG91YmxlIHF1b3RlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHZhclR5cGUoYXJyYXlWYWx1ZSkgPT0gdmFyVHlwZVN0cmluZykKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGpzb25Gcm9tU3RySW50ZXJuYWwocmVzdWx0LCB2YXJTdHIoYXJyYXlW YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YXJUeXBlKGFycmF5VmFsdWUpID09IHZh clR5cGVLZXlWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckNhdChyZXN1bHQsIHN0clB0cihq c29uRnJvbUt2SW50ZXJuYWwoa3ZEdXAodmFyS3YoYXJyYXlWYWx1ZSkpKSkpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmICh2YXJUeXBlKGFycmF5VmFsdWUpID09IHZhclR5cGVWYXJpYW50TGlz dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0ckNhdChyZXN1bHQsIHN0clB0cihqc29uRnJvbVZhcihh cnJheVZhbHVlKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOdW1lcmljLCBCb29sZWFuIG9yIG90aGVy IHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckNhdChyZXN1bHQsIHN0clB0cih2YXJTdHJG b3JjZShhcnJheVZhbHVlKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckNhdChyZXN1bHQsICJdIik7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nCiAgICAg ICAgICAgICAgICAgICAgY2FzZSB2YXJUeXBlU3RyaW5nOgogICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAganNvbkZyb21TdHJJbnRlcm5hbChyZXN1bHQs IHZhclN0cih2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJDYXQocmVzdWx0LCBz dHJQdHIodmFyU3RyRm9yY2UodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgIH0KCiAgICAgICAgcmVzdWx0ID0gc3RyQ2F0KHJlc3VsdCwgIn0iKTsK ICAgIH0KICAgIE1FTV9DT05URVhUX1RFTVBfRU5EKCk7CgogICAgRlVOQ1RJT05fVEVTVF9S RVRVUk4ocmVzdWx0KTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvbnZlcnQgS2V5 VmFsdWUgb2JqZWN0IHRvIEpTT04gc3RyaW5nLgoKQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24g aXMgb25seSBpbnRlbmRlZCB0byBjb252ZXJ0IHRoZSBsaW1pdGVkIHR5cGVzIHRoYXQgYXJl IGluY2x1ZGVkIGluIGluZm8gZmlsZXMuICBNb3JlIHR5cGVzIHdpbGwgYmUgYWRkZWQgYXMK bmVlZGVkLiAgU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGludGVuZGVkIHRvIHJlYWQg aW50ZXJuYWxseS1nZW5lcmF0ZWQgSlNPTiBpdCBpcyBhc3N1bWVkIHRvIGJlIHdlbGwtZm9y bWVkIHdpdGggbm8gZXh0cmFuZW91cwp3aGl0ZXNwYWNlLgoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KU3RyaW5nICoKanNvbkZyb21Ldihjb25zdCBLZXlWYWx1ZSAqa3YpCnsKICAgIEZV TkNUSU9OX0xPR19CRUdJTihsb2dMZXZlbFRyYWNlKTsKICAgICAgICBGVU5DVElPTl9MT0df UEFSQU0oS0VZX1ZBTFVFLCBrdik7CiAgICBGVU5DVElPTl9MT0dfRU5EKCk7CgogICAgQVNT RVJUKGt2ICE9IE5VTEwpOwoKICAgIFN0cmluZyAqcmVzdWx0ID0gTlVMTDsKCiAgICBNRU1f Q09OVEVYVF9URU1QX0JFR0lOKCkKICAgIHsKICAgICAgICBTdHJpbmcgKmpzb25TdHIgPSBq c29uRnJvbUt2SW50ZXJuYWwoa3YpOwoKICAgICAgICAvLyBEdXBsaWNhdGUgdGhlIHN0cmlu ZyBpbnRvIHRoZSBjYWxsaW5nIGNvbnRleHQKICAgICAgICBtZW1Db250ZXh0U3dpdGNoKE1F TV9DT05URVhUX09MRCgpKTsKICAgICAgICByZXN1bHQgPSBzdHJEdXAoanNvblN0cik7CiAg ICAgICAgbWVtQ29udGV4dFN3aXRjaChNRU1fQ09OVEVYVF9URU1QKCkpOwogICAgfQogICAg TUVNX0NPTlRFWFRfVEVNUF9FTkQoKTsKCiAgICBGVU5DVElPTl9MT0dfUkVUVVJOKFNUUklO RywgcmVzdWx0KTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvbnZlcnQgVmFyaWFu dCBvYmplY3QgdG8gSlNPTiBzdHJpbmcuCgpDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBpcyBv bmx5IGludGVuZGVkIHRvIGNvbnZlcnQgdGhlIGxpbWl0ZWQgdHlwZXMgdGhhdCBhcmUgaW5j bHVkZWQgaW4gaW5mbyBmaWxlcy4gIE1vcmUgdHlwZXMgd2lsbCBiZSBhZGRlZCBhcwpuZWVk ZWQuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwpTdHJpbmcgKgpqc29uRnJvbVZhcihjb25z dCBWYXJpYW50ICp2YXIpCnsKICAgIEZVTkNUSU9OX0xPR19CRUdJTihsb2dMZXZlbFRyYWNl KTsKICAgICAgICBGVU5DVElPTl9MT0dfUEFSQU0oVkFSSUFOVCwgdmFyKTsKICAgIEZVTkNU SU9OX0xPR19FTkQoKTsKCiAgICBTdHJpbmcgKnJlc3VsdCA9IE5VTEw7CgogICAgTUVNX0NP TlRFWFRfVEVNUF9CRUdJTigpCiAgICB7CiAgICAgICAgU3RyaW5nICpqc29uU3RyID0gc3Ry TmV3KCIiKTsKCiAgICAgICAgLy8gSWYgVmFyaWFudExpc3QgdGhlbiBwcm9jZXNzIGVhY2gg aXRlbSBpbiB0aGUgYXJyYXkuIEN1cnJlbnRseSB0aGUgbGlzdCBtdXN0IGJlIEtleVZhbHVl IHR5cGVzLgogICAgICAgIGlmICh2YXIgPT0gTlVMTCkKICAgICAgICB7CiAgICAgICAgICAg IHN0ckNhdChqc29uU3RyLCBzdHJQdHIoTlVMTF9TVFIpKTsKICAgICAgICB9CiAgICAgICAg ZWxzZSBpZiAodmFyVHlwZSh2YXIpID09IHZhclR5cGVCb29sKQogICAgICAgIHsKICAgICAg ICAgICAgc3RyQ2F0KGpzb25TdHIsIHN0clB0cihqc29uRnJvbUJvb2wodmFyQm9vbCh2YXIp KSkpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh2YXJUeXBlKHZhcikgPT0gdmFyVHlw ZVVJbnQpCiAgICAgICAgewogICAgICAgICAgICBzdHJDYXQoanNvblN0ciwgc3RyUHRyKGpz b25Gcm9tVUludCh2YXJVSW50KHZhcikpKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYg KHZhclR5cGUodmFyKSA9PSB2YXJUeXBlVUludDY0KQogICAgICAgIHsKICAgICAgICAgICAg c3RyQ2F0KGpzb25TdHIsIHN0clB0cihqc29uRnJvbVVJbnQ2NCh2YXJVSW50NjQodmFyKSkp KTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodmFyVHlwZSh2YXIpID09IHZhclR5cGVT dHJpbmcpCiAgICAgICAgewogICAgICAgICAgICBqc29uRnJvbVN0ckludGVybmFsKGpzb25T dHIsIHZhclN0cih2YXIpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodmFyVHlwZSh2 YXIpID09IHZhclR5cGVWYXJpYW50TGlzdCkKICAgICAgICB7CiAgICAgICAgICAgIGNvbnN0 IFZhcmlhbnRMaXN0ICp2bCA9IHZhclZhckxzdCh2YXIpOwoKICAgICAgICAgICAgLy8gSWYg bm90IGFuIGVtcHR5IGFycmF5CiAgICAgICAgICAgIGlmICh2YXJMc3RTaXplKHZsKSA+IDAp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0ckNhdChqc29uU3RyLCAiWyIpOwoK ICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSBvbmx5IEtleVZhbHVlIGFuZCBTdHJpbmcg bGlzdHMgYXJlIHN1cHBvcnRlZAogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg dmxJZHggPSAwOyB2bElkeCA8IHZhckxzdFNpemUodmwpOyB2bElkeCsrKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgIC8vIElmIGdvaW5nIHRvIGFkZCBhbm90aGVy IGtleSwgYXBwZW5kIGEgY29tbWEKICAgICAgICAgICAgICAgICAgICBpZiAodmxJZHggPiAw KQogICAgICAgICAgICAgICAgICAgICAgICBzdHJDYXQoanNvblN0ciwgIiwiKTsKCiAgICAg ICAgICAgICAgICAgICAgVmFyaWFudCAqdmFyU3ViID0gdmFyTHN0R2V0KHZsLCB2bElkeCk7 CgogICAgICAgICAgICAgICAgICAgIGlmICh2YXJTdWIgPT0gTlVMTCkKICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ckNhdChqc29uU3RyLCBOVUxM X1opOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlm ICh2YXJUeXBlKHZhclN1YikgPT0gdmFyVHlwZUJvb2wpCiAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICBzdHJDYXQoanNvblN0ciwgc3RyUHRyKGpzb25G cm9tQm9vbCh2YXJCb29sKHZhclN1YikpKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhclR5cGUodmFyU3ViKSA9PSB2YXJUeXBlS2V5 VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBz dHJDYXQoanNvblN0ciwgc3RyUHRyKGpzb25Gcm9tS3ZJbnRlcm5hbCh2YXJLdih2YXJTdWIp KSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlm ICh2YXJUeXBlKHZhclN1YikgPT0gdmFyVHlwZVZhcmlhbnRMaXN0KQogICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyQ2F0KGpzb25TdHIsIHN0clB0 cihqc29uRnJvbVZhcih2YXJTdWIpKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKHZhclR5cGUodmFyU3ViKSA9PSB2YXJUeXBlSW50KQog ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyQ2F0KGpz b25TdHIsIHN0clB0cihqc29uRnJvbUludCh2YXJJbnQodmFyU3ViKSkpKTsKICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFyVHlwZSh2YXJT dWIpID09IHZhclR5cGVJbnQ2NCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgIHN0ckNhdChqc29uU3RyLCBzdHJQdHIoanNvbkZyb21JbnQ2NCh2YXJJ bnQ2NCh2YXJTdWIpKSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmICh2YXJUeXBlKHZhclN1YikgPT0gdmFyVHlwZVVJbnQpCiAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJDYXQoanNvblN0ciwg c3RyUHRyKGpzb25Gcm9tVUludCh2YXJVSW50KHZhclN1YikpKSk7CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhclR5cGUodmFyU3ViKSA9 PSB2YXJUeXBlVUludDY0KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgc3RyQ2F0KGpzb25TdHIsIHN0clB0cihqc29uRnJvbVVJbnQ2NCh2YXJVSW50 NjQodmFyU3ViKSkpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBqc29uRnJvbVN0ckludGVybmFsKGpz b25TdHIsIHZhclN0cih2YXJTdWIpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICAvLyBDbG9zZSB0aGUgYXJyYXkKICAgICAgICAgICAgICAgIHN0ckNhdChqc29uU3Ry LCAiXSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEVsc2UgZW1wdHkgYXJyYXkK ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc3RyQ2F0KGpzb25TdHIsICJbXSIp OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh2YXJUeXBlKHZhcikgPT0gdmFyVHlwZUtl eVZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgc3RyQ2F0KGpzb25TdHIsIHN0clB0cihq c29uRnJvbUt2SW50ZXJuYWwodmFyS3YodmFyKSkpKTsKICAgICAgICB9CiAgICAgICAgZWxz ZQogICAgICAgICAgICBUSFJPVyhKc29uRm9ybWF0RXJyb3IsICJ2YXJpYW50IHR5cGUgaXMg aW52YWxpZCIpOwoKICAgICAgICAvLyBEdXBsaWNhdGUgdGhlIHN0cmluZyBpbnRvIHRoZSBj YWxsaW5nIGNvbnRleHQKICAgICAgICBtZW1Db250ZXh0U3dpdGNoKE1FTV9DT05URVhUX09M RCgpKTsKICAgICAgICByZXN1bHQgPSBzdHJEdXAoanNvblN0cik7CiAgICAgICAgbWVtQ29u dGV4dFN3aXRjaChNRU1fQ09OVEVYVF9URU1QKCkpOwogICAgfQogICAgTUVNX0NPTlRFWFRf VEVNUF9FTkQoKTsKCiAgICBGVU5DVElPTl9MT0dfUkVUVVJOKFNUUklORywgcmVzdWx0KTsK fQo= --------------8ED3A72BFE2CC5E8F1A8B04A Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="json.h" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="json.h" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCkNvbnZlcnQgSlNPTiB0by9mcm9tIEtleVZhbHVl CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwojaWZuZGVmIENPTU1PTl9UWVBFX0pTT05fSAoj ZGVmaW5lIENPTU1PTl9UWVBFX0pTT05fSAoKI2luY2x1ZGUgImNvbW1vbi90eXBlL2tleVZh bHVlLmgiCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKRnVuY3Rpb25zCioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwpib29sIGpzb25Ub0Jvb2woY29uc3QgU3RyaW5nICpqc29uKTsKaW50 IGpzb25Ub0ludChjb25zdCBTdHJpbmcgKmpzb24pOwppbnQ2NF90IGpzb25Ub0ludDY0KGNv bnN0IFN0cmluZyAqanNvbik7CktleVZhbHVlICpqc29uVG9Ldihjb25zdCBTdHJpbmcgKmpz b24pOwpTdHJpbmcgKmpzb25Ub1N0cihjb25zdCBTdHJpbmcgKmpzb24pOwp1bnNpZ25lZCBp bnQganNvblRvVUludChjb25zdCBTdHJpbmcgKmpzb24pOwp1aW50NjRfdCBqc29uVG9VSW50 NjQoY29uc3QgU3RyaW5nICpqc29uKTsKVmFyaWFudCAqanNvblRvVmFyKGNvbnN0IFN0cmlu ZyAqanNvbik7ClZhcmlhbnRMaXN0ICpqc29uVG9WYXJMc3QoY29uc3QgU3RyaW5nICpqc29u KTsKCmNvbnN0IFN0cmluZyAqanNvbkZyb21Cb29sKGJvb2wgdmFsdWUpOwpTdHJpbmcgKmpz b25Gcm9tSW50KGludCBudW1iZXIpOwpTdHJpbmcgKmpzb25Gcm9tSW50NjQoaW50NjRfdCBu dW1iZXIpOwpTdHJpbmcgKmpzb25Gcm9tS3YoY29uc3QgS2V5VmFsdWUgKmt2KTsKU3RyaW5n ICpqc29uRnJvbVN0cihjb25zdCBTdHJpbmcgKnN0cmluZyk7ClN0cmluZyAqanNvbkZyb21V SW50KHVuc2lnbmVkIGludCBudW1iZXIpOwpTdHJpbmcgKmpzb25Gcm9tVUludDY0KHVpbnQ2 NF90IG51bWJlcik7ClN0cmluZyAqanNvbkZyb21WYXIoY29uc3QgVmFyaWFudCAqdmFyKTsK CiNlbmRpZgo= --------------8ED3A72BFE2CC5E8F1A8B04A--