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--