Transaction executed successfully

Transaction Details

Inspect execution, participants, message data, gas usage, events and raw transaction data.

Transaction hash
79D35C71D6F69E463C6BBAD0A619C88769DE42FBEDC3F630187C7A9F5E807BAB

Transaction overview

Status
Success
Execution completed
Block
#265712
Included in block
Message Type
m_addpkg
Primary message

Execution summary

TX INDEX
0
Position in block
GAS WANTED
50,000,000
Requested gas limit
GAS USED
30,508,099
Gas consumed
FEE
100000ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g136j0m08pkm2lwwde9dmlx8uee26llent9s5cpf10000000ugnot

Execution log

msg:0,success:true,log:,events:[]

Events

No events emitted by this transaction.

Raw encoded transaction

Cs2XAQoML3ZtLm1fYWRkcGtnEruXAQooZzEzNmowbTA4cGttMmx3d2RlOWRtbHg4dWVlMjZsbGVudDlzNWNwZhL+lgEKFWdub2J1aWxkZXJzX2JhZGdlc192MhIoZ25vLmxhbmQvci9zYW1jcmV3L2dub2J1aWxkZXJzX2JhZGdlc192Mhq4kwEKFmdub2J1aWxkZXJzX2JhZGdlcy5nbm8SnJMBcGFja2FnZSBnbm9idWlsZGVyc19iYWRnZXNfdjIKCi8vIGdub2J1aWxkZXJzX2JhZGdlcyDigJQgR1JDNzIxIGJhZGdlIGNvbGxlY3Rpb24gZm9yIEdub0J1aWxkZXJzIHF1ZXN0cy4KLy8KLy8gRmVhdHVyZXM6Ci8vICAgLSBBZG1pbi1vbmx5IG1pbnRpbmcgKGJhY2tlbmQgdHJpZ2dlcnMgbWludCBhZnRlciBxdWVzdCB2ZXJpZmljYXRpb24pCi8vICAgLSBUd28gYmFkZ2UgdHlwZXM6IFF1ZXN0IGJhZGdlcyAodHJhbnNmZXJhYmxlKSBhbmQgUmFuayBiYWRnZXMgKHNvdWxib3VuZCkKLy8gICAtIFBlci1xdWVzdCBkZWR1cGxpY2F0aW9uIChvbmUgYmFkZ2UgcGVyIHF1ZXN0IHBlciB1c2VyKQovLyAgIC0gU3RhbmRhcmQgR1JDNzIxOiBCYWxhbmNlT2YsIE93bmVyT2YsIFRva2VuVVJJLCBUcmFuc2ZlckZyb20sIEFwcHJvdmUKLy8gICAtIFJlbmRlcigpIGNvbnRyYWN0IGZvciBiYWRnZSBnYWxsZXJ5IGRpc3BsYXkKLy8KLy8gU2VjdXJpdHk6Ci8vICAgLSBPbmx5IGFkbWluIGNhbiBtaW50IChwcmV2ZW50cyBzZWxmLW1pbnRpbmcpCi8vICAgLSBTb3VsYm91bmQgYmFkZ2VzOiBUcmFuc2ZlckZyb20gcGFuaWNzIGZvciByYW5rIGJhZGdlcwovLyAgIC0gT3duZXIgY2FuIGFkZC9yZW1vdmUgYWRtaW5zCi8vICAgLSBUb2tlbiBJRCBmb3JtYXQ6ICJ7YWRkcmVzc306e3F1ZXN0SWR9IiAoZ2xvYmFsbHkgdW5pcXVlKQoKaW1wb3J0ICgKCSJjaGFpbiIKCSJjaGFpbi9ydW50aW1lIgoJImNoYWluL3J1bnRpbWUvdW5zYWZlIgoJInN0cmNvbnYiCgkic3RyaW5ncyIKCgkiZ25vLmxhbmQvcC9zYW1jcmV3L2F2bCIKCSJnbm8ubGFuZC9wL250L3VmbXQvdjAiCikKCi8vIOKUgOKUgCBDb25zdGFudHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpjb25zdCAoCglDb2xsZWN0aW9uTmFtZSAgID0gIkdub0J1aWxkZXJzIEJhZGdlcyIKCUNvbGxlY3Rpb25TeW1ib2wgPSAiR05PQkFER0UiCglNYXhBZG1pbnMgICAgICAgID0gMTAKKQoKLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKdHlwZSBCYWRnZSBzdHJ1Y3QgewoJVG9rZW5JRCAgIHN0cmluZyAgLy8gInthZGRyZXNzfTp7cXVlc3RJZH0iCglPd25lciAgICAgYWRkcmVzcwoJUXVlc3RJRCAgIHN0cmluZwoJVG9rZW5VUkkgIHN0cmluZyAgLy8gSVBGUyBDSUQgb3IgVVJMIHRvIGJhZGdlIG1ldGFkYXRhIEpTT04KCVNvdWxib3VuZCBib29sICAgIC8vIHRydWUgZm9yIHJhbmsgYmFkZ2VzIChub24tdHJhbnNmZXJhYmxlKQoJTWludGVkQXQgIGludDY0ICAgLy8gYmxvY2sgaGVpZ2h0Cn0KCi8vIOKUgOKUgCBTdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCnZhciAoCgliYWRnZXMgICAgICAqYXZsLlRyZWUgLy8gdG9rZW5JRCAtPiAqQmFkZ2UKCW93bmVySW5kZXggICphdmwuVHJlZSAvLyBhZGRyZXNzIC0+IGNvbW1hLXNlcGFyYXRlZCB0b2tlbklEcyAoc2Vjb25kYXJ5IGluZGV4KQoJYmFsYW5jZXMgICAgKmF2bC5UcmVlIC8vIGFkZHJlc3MgLT4gaW50IChiYWRnZSBjb3VudCkKCWFwcHJvdmFscyAgICphdmwuVHJlZSAvLyB0b2tlbklEIC0+IGFwcHJvdmVkIGFkZHJlc3MKCW9wQXBwcm92ZSAgICphdmwuVHJlZSAvLyAib3duZXI6b3BlcmF0b3IiIC0+IGJvb2wgKGFwcHJvdmFsIGZvciBhbGwpCglhZG1pbnMgICAgICAqYXZsLlRyZWUgLy8gYWRkcmVzcyAtPiBib29sCgkvLyBvd25lciBpcyB0aGUgcHVibGlzaGluZyB0cmFuc2FjdGlvbidzIHNpZ25lciwgY2FwdHVyZWQgYXQgcGFja2FnZSBsb2FkIChvbgoJLy8gZ25vbGFuZC0xIHRoZSBzYW1jcmV3IG5hbWVzcGFjZSBtdWx0aXNpZywgdGhlIHN0YW1wZWQgY3JlYXRvciBhdCBlbmFibGUKCS8vIHRpbWUpLiBwZW5kaW5nT3duZXIgaXMgdGhlIHN0YWdlZCBzdWNjZXNzb3Igb2YgYSB0d28tc3RlcCBoYW5kb2ZmLCBvciBlbXB0eS4KCW93bmVyICAgICAgICA9IHVuc2FmZS5PcmlnaW5DYWxsZXIoKQoJcGVuZGluZ093bmVyIGFkZHJlc3MKCXRvdGFsTWludGVkIHVpbnQ2NAoJcGF1c2VkICAgICAgYm9vbAopCgpmdW5jIGluaXQoKSB7CgliYWRnZXMgPSBhdmwuTmV3VHJlZSgpCglvd25lckluZGV4ID0gYXZsLk5ld1RyZWUoKQoJYmFsYW5jZXMgPSBhdmwuTmV3VHJlZSgpCglhcHByb3ZhbHMgPSBhdmwuTmV3VHJlZSgpCglvcEFwcHJvdmUgPSBhdmwuTmV3VHJlZSgpCglhZG1pbnMgPSBhdmwuTmV3VHJlZSgpCgoJYWRtaW5zLlNldChvd25lci5TdHJpbmcoKSwgdHJ1ZSkKfQoKLy8g4pSA4pSAIEVtZXJnZW5jeSBQYXVzZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmZ1bmMgYXNzZXJ0Tm90UGF1c2VkKCkgewoJaWYgcGF1c2VkIHsKCQlwYW5pYygicmVhbG0gaXMgcGF1c2VkIOKAlCBlbWVyZ2VuY3kgbWFpbnRlbmFuY2UiKQoJfQp9CgpmdW5jIFBhdXNlKGN1ciByZWFsbSkgewoJYXNzZXJ0Q2FsbGVySXNPd25lcigpCglwYXVzZWQgPSB0cnVlCn0KCmZ1bmMgVW5wYXVzZShjdXIgcmVhbG0pIHsKCWFzc2VydENhbGxlcklzT3duZXIoKQoJcGF1c2VkID0gZmFsc2UKfQoKZnVuYyBJc1BhdXNlZCgpIGJvb2wgeyByZXR1cm4gcGF1c2VkIH0KCi8vIOKUgOKUgCBHUkM3MjEgU3RhbmRhcmQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpmdW5jIE5hbWUoKSBzdHJpbmcgICB7IHJldHVybiBDb2xsZWN0aW9uTmFtZSB9CmZ1bmMgU3ltYm9sKCkgc3RyaW5nIHsgcmV0dXJuIENvbGxlY3Rpb25TeW1ib2wgfQoKZnVuYyBUb3RhbFN1cHBseSgpIHVpbnQ2NCB7IHJldHVybiB0b3RhbE1pbnRlZCB9CgpmdW5jIEJhbGFuY2VPZihhZGRyIGFkZHJlc3MpIHVpbnQ2NCB7Cgl2YWwsIGV4aXN0cyA6PSBiYWxhbmNlcy5HZXQoYWRkci5TdHJpbmcoKSkKCWlmICFleGlzdHMgewoJCXJldHVybiAwCgl9CglyZXR1cm4gdWludDY0KHZhbC4oaW50KSkKfQoKZnVuYyBPd25lck9mKHRva2VuSUQgc3RyaW5nKSBhZGRyZXNzIHsKCXZhbCwgZXhpc3RzIDo9IGJhZGdlcy5HZXQodG9rZW5JRCkKCWlmICFleGlzdHMgewoJCXBhbmljKCJ0b2tlbiBub3QgZm91bmQ6ICIgKyB0b2tlbklEKQoJfQoJcmV0dXJuIHZhbC4oKkJhZGdlKS5Pd25lcgp9CgpmdW5jIFRva2VuVVJJKHRva2VuSUQgc3RyaW5nKSBzdHJpbmcgewoJdmFsLCBleGlzdHMgOj0gYmFkZ2VzLkdldCh0b2tlbklEKQoJaWYgIWV4aXN0cyB7CgkJcGFuaWMoInRva2VuIG5vdCBmb3VuZDogIiArIHRva2VuSUQpCgl9CglyZXR1cm4gdmFsLigqQmFkZ2UpLlRva2VuVVJJCn0KCmZ1bmMgQXBwcm92ZShjdXIgcmVhbG0sIGFwcHJvdmVkIGFkZHJlc3MsIHRva2VuSUQgc3RyaW5nKSB7Cglhc3NlcnROb3RQYXVzZWQoKQoJY2FsbGVyIDo9IHVuc2FmZS5QcmV2aW91c1JlYWxtKCkuQWRkcmVzcygpCgl2YWwsIGV4aXN0cyA6PSBiYWRnZXMuR2V0KHRva2VuSUQpCglpZiAhZXhpc3RzIHsKCQlwYW5pYygidG9rZW4gbm90IGZvdW5kIikKCX0KCWJhZGdlIDo9IHZhbC4oKkJhZGdlKQoJaWYgYmFkZ2UuT3duZXIgIT0gY2FsbGVyIHsKCQlwYW5pYygib25seSBvd25lciBjYW4gYXBwcm92ZSIpCgl9CglpZiBiYWRnZS5Tb3VsYm91bmQgewoJCXBhbmljKCJzb3VsYm91bmQgYmFkZ2VzIGNhbm5vdCBiZSBhcHByb3ZlZCBmb3IgdHJhbnNmZXIiKQoJfQoJYXBwcm92YWxzLlNldCh0b2tlbklELCBhcHByb3ZlZC5TdHJpbmcoKSkKCgkvLyBHUkM3MjEgQXBwcm92YWwgZXZlbnQKCWNoYWluLkVtaXQoIkFwcHJvdmFsIiwKCQkib3duZXIiLCBjYWxsZXIuU3RyaW5nKCksCgkJImFwcHJvdmVkIiwgYXBwcm92ZWQuU3RyaW5nKCksCgkJInRva2VuSWQiLCB0b2tlbklELAoJKQp9CgpmdW5jIFNldEFwcHJvdmFsRm9yQWxsKGN1ciByZWFsbSwgb3BlcmF0b3IgYWRkcmVzcywgYXBwcm92ZWQgYm9vbCkgewoJYXNzZXJ0Tm90UGF1c2VkKCkKCWlmIG9wZXJhdG9yID09ICIiIHsKCQlwYW5pYygib3BlcmF0b3IgYWRkcmVzcyBjYW5ub3QgYmUgZW1wdHkiKQoJfQoJY2FsbGVyIDo9IHVuc2FmZS5QcmV2aW91c1JlYWxtKCkuQWRkcmVzcygpCglpZiBvcGVyYXRvciA9PSBjYWxsZXIgewoJCXBhbmljKCJjYW5ub3QgYXBwcm92ZSBzZWxmIikKCX0KCWtleSA6PSBjYWxsZXIuU3RyaW5nKCkgKyAiOiIgKyBvcGVyYXRvci5TdHJpbmcoKQoJaWYgYXBwcm92ZWQgewoJCW9wQXBwcm92ZS5TZXQoa2V5LCB0cnVlKQoJfSBlbHNlIHsKCQlvcEFwcHJvdmUuUmVtb3ZlKGtleSkKCX0KfQoKZnVuYyBJc0FwcHJvdmVkRm9yQWxsKG93bmVyQWRkciBhZGRyZXNzLCBvcGVyYXRvciBhZGRyZXNzKSBib29sIHsKCWtleSA6PSBvd25lckFkZHIuU3RyaW5nKCkgKyAiOiIgKyBvcGVyYXRvci5TdHJpbmcoKQoJXywgZXhpc3RzIDo9IG9wQXBwcm92ZS5HZXQoa2V5KQoJcmV0dXJuIGV4aXN0cwp9CgpmdW5jIEdldEFwcHJvdmVkKHRva2VuSUQgc3RyaW5nKSBhZGRyZXNzIHsKCXZhbCwgZXhpc3RzIDo9IGFwcHJvdmFscy5HZXQodG9rZW5JRCkKCWlmICFleGlzdHMgewoJCXJldHVybiAiIgoJfQoJcmV0dXJuIGFkZHJlc3ModmFsLihzdHJpbmcpKQp9CgpmdW5jIFRyYW5zZmVyRnJvbShjdXIgcmVhbG0sIGZyb20gYWRkcmVzcywgdG8gYWRkcmVzcywgdG9rZW5JRCBzdHJpbmcpIHsKCWFzc2VydE5vdFBhdXNlZCgpCgljYWxsZXIgOj0gdW5zYWZlLlByZXZpb3VzUmVhbG0oKS5BZGRyZXNzKCkKCgl2YWwsIGV4aXN0cyA6PSBiYWRnZXMuR2V0KHRva2VuSUQpCglpZiAhZXhpc3RzIHsKCQlwYW5pYygidG9rZW4gbm90IGZvdW5kIikKCX0KCWJhZGdlIDo9IHZhbC4oKkJhZGdlKQoKCS8vIFNvdWxib3VuZCBjaGVjawoJaWYgYmFkZ2UuU291bGJvdW5kIHsKCQlwYW5pYygic291bGJvdW5kIGJhZGdlcyBjYW5ub3QgYmUgdHJhbnNmZXJyZWQiKQoJfQoKCS8vIEF1dGggY2hlY2sKCWlmIGJhZGdlLk93bmVyICE9IGNhbGxlciB7CgkJYXBwcm92ZWQgOj0gR2V0QXBwcm92ZWQodG9rZW5JRCkKCQlpZiBhcHByb3ZlZCAhPSBjYWxsZXIgJiYgIUlzQXBwcm92ZWRGb3JBbGwoZnJvbSwgY2FsbGVyKSB7CgkJCXBhbmljKCJub3QgYXV0aG9yaXplZCB0byB0cmFuc2ZlciIpCgkJfQoJfQoKCWlmIGJhZGdlLk93bmVyICE9IGZyb20gewoJCXBhbmljKCJmcm9tIGFkZHJlc3MgaXMgbm90IHRoZSBvd25lciIpCgl9CgoJLy8gVHJhbnNmZXIKCWJhZGdlLk93bmVyID0gdG8KCWJhZGdlcy5TZXQodG9rZW5JRCwgYmFkZ2UpCglhcHByb3ZhbHMuUmVtb3ZlKHRva2VuSUQpIC8vIENsZWFyIGFwcHJvdmFsCgoJLy8gVXBkYXRlIGJhbGFuY2VzIGFuZCBvd25lciBpbmRleAoJcmVtb3ZlRnJvbU93bmVySW5kZXgoZnJvbSwgdG9rZW5JRCkKCWFkZFRvT3duZXJJbmRleCh0bywgdG9rZW5JRCkKCWRlY0JhbGFuY2UoZnJvbSkKCWluY0JhbGFuY2UodG8pCgoJLy8gR1JDNzIxIFRyYW5zZmVyIGV2ZW50CgljaGFpbi5FbWl0KCJUcmFuc2ZlciIsCgkJImZyb20iLCBmcm9tLlN0cmluZygpLAoJCSJ0byIsIHRvLlN0cmluZygpLAoJCSJ0b2tlbklkIiwgdG9rZW5JRCwKCSkKfQoKLy8g4pSA4pSAIE1pbnRpbmcgKEFkbWluIE9ubHkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKLy8gTWludFF1ZXN0QmFkZ2UgbWludHMgYSBxdWVzdCBjb21wbGV0aW9uIGJhZGdlIHRvIGEgdXNlci4KLy8gVG9rZW4gSUQgaXMgInthZGRyZXNzfTp7cXVlc3RJZH0iIHRvIGVuZm9yY2Ugb25lIGJhZGdlIHBlciBxdWVzdCBwZXIgdXNlci4KLy8gUXVlc3QgYmFkZ2VzIGFyZSB0cmFuc2ZlcmFibGUgYnkgZGVmYXVsdC4KZnVuYyBNaW50UXVlc3RCYWRnZShjdXIgcmVhbG0sIHRvIGFkZHJlc3MsIHF1ZXN0SUQgc3RyaW5nLCB0b2tlblVSSSBzdHJpbmcpIHN0cmluZyB7Cglhc3NlcnROb3RQYXVzZWQoKQoJYXNzZXJ0Q2FsbGVySXNBZG1pbigpCglpZiBsZW4ocXVlc3RJRCkgPT0gMCB7CgkJcGFuaWMoInF1ZXN0SUQgY2Fubm90IGJlIGVtcHR5IikKCX0KCWlmIGNvbnRhaW5zQ2hhcihxdWVzdElELCAnLCcpIHx8IGNvbnRhaW5zQ2hhcihxdWVzdElELCAnOicpIHsKCQlwYW5pYygicXVlc3RJRCBtdXN0IG5vdCBjb250YWluICcsJyBvciAnOiciKQoJfQoKCXRva2VuSUQgOj0gdG8uU3RyaW5nKCkgKyAiOiIgKyBxdWVzdElECgoJLy8gQ2hlY2sgZGVkdXAKCWlmIF8sIGV4aXN0cyA6PSBiYWRnZXMuR2V0KHRva2VuSUQpOyBleGlzdHMgewoJCXBhbmljKCJiYWRnZSBhbHJlYWR5IG1pbnRlZCBmb3IgdGhpcyBxdWVzdDogIiArIHRva2VuSUQpCgl9CgoJYmFkZ2UgOj0gJkJhZGdlewoJCVRva2VuSUQ6ICAgdG9rZW5JRCwKCQlPd25lcjogICAgIHRvLAoJCVF1ZXN0SUQ6ICAgcXVlc3RJRCwKCQlUb2tlblVSSTogIHRva2VuVVJJLAoJCVNvdWxib3VuZDogZmFsc2UsCgkJTWludGVkQXQ6ICBydW50aW1lLkNoYWluSGVpZ2h0KCksCgl9CgoJYmFkZ2VzLlNldCh0b2tlbklELCBiYWRnZSkKCWFkZFRvT3duZXJJbmRleCh0bywgdG9rZW5JRCkKCWluY0JhbGFuY2UodG8pCgl0b3RhbE1pbnRlZCsrCgoJLy8gR1JDNzIxIFRyYW5zZmVyIGV2ZW50IGZyb20gemVybyBhZGRyZXNzIChtaW50IGNvbnZlbnRpb24pCgljaGFpbi5FbWl0KCJUcmFuc2ZlciIsCgkJImZyb20iLCAiIiwKCQkidG8iLCB0by5TdHJpbmcoKSwKCQkidG9rZW5JZCIsIHRva2VuSUQsCgkpCgljaGFpbi5FbWl0KCJRdWVzdEJhZGdlTWludGVkIiwKCQkidG8iLCB0by5TdHJpbmcoKSwKCQkicXVlc3RJZCIsIHF1ZXN0SUQsCgkJInRva2VuSWQiLCB0b2tlbklELAoJKQoKCXJldHVybiB0b2tlbklECn0KCi8vIE1pbnRSYW5rQmFkZ2UgbWludHMgYSBzb3VsYm91bmQgcmFuayBiYWRnZSB0byBhIHVzZXIuCi8vIFRva2VuIElEIGlzICJ7YWRkcmVzc306cmFuazp7dGllcn0iIHRvIGVuZm9yY2Ugb25lIHJhbmsgYmFkZ2UgcGVyIHRpZXIgcGVyIHVzZXIuCi8vIFJhbmsgYmFkZ2VzIGFyZSBOT04tdHJhbnNmZXJhYmxlIChzb3VsYm91bmQpLgpmdW5jIE1pbnRSYW5rQmFkZ2UoY3VyIHJlYWxtLCB0byBhZGRyZXNzLCB0aWVyIGludCwgdG9rZW5VUkkgc3RyaW5nKSBzdHJpbmcgewoJYXNzZXJ0Tm90UGF1c2VkKCkKCWFzc2VydENhbGxlcklzQWRtaW4oKQoKCXRva2VuSUQgOj0gdG8uU3RyaW5nKCkgKyAiOnJhbms6IiArIHN0cmNvbnYuSXRvYSh0aWVyKQoKCS8vIENoZWNrIGRlZHVwCglpZiBfLCBleGlzdHMgOj0gYmFkZ2VzLkdldCh0b2tlbklEKTsgZXhpc3RzIHsKCQlwYW5pYygicmFuayBiYWRnZSBhbHJlYWR5IG1pbnRlZCBmb3IgdGllciAiICsgc3RyY29udi5JdG9hKHRpZXIpKQoJfQoKCWJhZGdlIDo9ICZCYWRnZXsKCQlUb2tlbklEOiAgIHRva2VuSUQsCgkJT3duZXI6ICAgICB0bywKCQlRdWVzdElEOiAgICJyYW5rOiIgKyBzdHJjb252Lkl0b2EodGllciksCgkJVG9rZW5VUkk6ICB0b2tlblVSSSwKCQlTb3VsYm91bmQ6IHRydWUsCgkJTWludGVkQXQ6ICBydW50aW1lLkNoYWluSGVpZ2h0KCksCgl9CgoJYmFkZ2VzLlNldCh0b2tlbklELCBiYWRnZSkKCWFkZFRvT3duZXJJbmRleCh0bywgdG9rZW5JRCkKCWluY0JhbGFuY2UodG8pCgl0b3RhbE1pbnRlZCsrCgoJY2hhaW4uRW1pdCgiVHJhbnNmZXIiLAoJCSJmcm9tIiwgIiIsCgkJInRvIiwgdG8uU3RyaW5nKCksCgkJInRva2VuSWQiLCB0b2tlbklELAoJKQoJY2hhaW4uRW1pdCgiUmFua0JhZGdlTWludGVkIiwKCQkidG8iLCB0by5TdHJpbmcoKSwKCQkidGllciIsIHN0cmNvbnYuSXRvYSh0aWVyKSwKCQkidG9rZW5JZCIsIHRva2VuSUQsCgkpCgoJcmV0dXJuIHRva2VuSUQKfQoKLy8gVXBkYXRlVG9rZW5VUkkgYWxsb3dzIGFuIGFkbWluIHRvIHVwZGF0ZSB0aGUgbWV0YWRhdGEgVVJJIG9mIGEgYmFkZ2UuCi8vIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSByZWFsbSBjb2RlIGlzIGltbXV0YWJsZSBvbmNlIGRlcGxveWVkIOKAlCBpZiBiYWRnZQovLyBtZXRhZGF0YSBuZWVkcyBjb3JyZWN0aW9uIChlLmcuLCBicm9rZW4gSVBGUyBDSUQpLCB0aGlzIGlzIHRoZSBvbmx5IG1lY2hhbmlzbS4KZnVuYyBVcGRhdGVUb2tlblVSSShjdXIgcmVhbG0sIHRva2VuSUQgc3RyaW5nLCBuZXdVUkkgc3RyaW5nKSB7Cglhc3NlcnROb3RQYXVzZWQoKQoJYXNzZXJ0Q2FsbGVySXNBZG1pbigpCgl2YWwsIGV4aXN0cyA6PSBiYWRnZXMuR2V0KHRva2VuSUQpCglpZiAhZXhpc3RzIHsKCQlwYW5pYygidG9rZW4gbm90IGZvdW5kOiAiICsgdG9rZW5JRCkKCX0KCWJhZGdlIDo9IHZhbC4oKkJhZGdlKQoJYmFkZ2UuVG9rZW5VUkkgPSBuZXdVUkkKCWJhZGdlcy5TZXQodG9rZW5JRCwgYmFkZ2UpCn0KCi8vIOKUgOKUgCBCdXJuIC8gUmV2b2tlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKLy8gQnVybkJhZGdlIHBlcm1hbmVudGx5IHJlbW92ZXMgYSBiYWRnZS4gQWRtaW4tb25seSBmb3Igc291bGJvdW5kIGJhZGdlcywKLy8gb3duZXIgb3IgYWRtaW4gZm9yIHRyYW5zZmVyYWJsZSBiYWRnZXMuCmZ1bmMgQnVybkJhZGdlKGN1ciByZWFsbSwgdG9rZW5JRCBzdHJpbmcpIHsKCWFzc2VydE5vdFBhdXNlZCgpCgljYWxsZXIgOj0gdW5zYWZlLlByZXZpb3VzUmVhbG0oKS5BZGRyZXNzKCkKCXZhbCwgZXhpc3RzIDo9IGJhZGdlcy5HZXQodG9rZW5JRCkKCWlmICFleGlzdHMgewoJCXBhbmljKCJ0b2tlbiBub3QgZm91bmQ6ICIgKyB0b2tlbklEKQoJfQoJYmFkZ2UgOj0gdmFsLigqQmFkZ2UpCgoJaWYgYmFkZ2UuU291bGJvdW5kIHsKCQkvLyBTb3VsYm91bmQ6IGFkbWluLW9ubHkgYnVybiAocmV2b2NhdGlvbikKCQlhc3NlcnRDYWxsZXJJc0FkbWluKCkKCX0gZWxzZSB7CgkJLy8gVHJhbnNmZXJhYmxlOiBvd25lciBvciBhZG1pbiBjYW4gYnVybgoJCWlzQWRtaW4gOj0gZmFsc2UKCQlpZiBfLCBhb2sgOj0gYWRtaW5zLkdldChjYWxsZXIuU3RyaW5nKCkpOyBhb2sgewoJCQlpc0FkbWluID0gdHJ1ZQoJCX0KCQlpZiBiYWRnZS5Pd25lciAhPSBjYWxsZXIgJiYgIWlzQWRtaW4gewoJCQlwYW5pYygib25seSBiYWRnZSBvd25lciBvciBhZG1pbiBjYW4gYnVybiIpCgkJfQoJfQoKCWJhZGdlT3duZXIgOj0gYmFkZ2UuT3duZXIKCWJhZGdlcy5SZW1vdmUodG9rZW5JRCkKCWFwcHJvdmFscy5SZW1vdmUodG9rZW5JRCkKCXJlbW92ZUZyb21Pd25lckluZGV4KGJhZGdlT3duZXIsIHRva2VuSUQpCglkZWNCYWxhbmNlKGJhZGdlT3duZXIpCglpZiB0b3RhbE1pbnRlZCA+IDAgewoJCXRvdGFsTWludGVkLS0KCX0KCgkvLyBHUkM3MjEgVHJhbnNmZXIgZXZlbnQgdG8gemVybyBhZGRyZXNzIChidXJuIGNvbnZlbnRpb24pCgljaGFpbi5FbWl0KCJUcmFuc2ZlciIsCgkJImZyb20iLCBiYWRnZU93bmVyLlN0cmluZygpLAoJCSJ0byIsICIiLAoJCSJ0b2tlbklkIiwgdG9rZW5JRCwKCSkKfQoKLy8g4pSA4pSAIEFkbWluIE1hbmFnZW1lbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpmdW5jIEFkZEFkbWluKGN1ciByZWFsbSwgYWRkciBhZGRyZXNzKSB7Cglhc3NlcnRDYWxsZXJJc093bmVyKCkKCWlmIGFkZHIgPT0gIiIgewoJCXBhbmljKCJhZGRyZXNzIGNhbm5vdCBiZSBlbXB0eSIpCgl9CglpZiBhZG1pbnMuU2l6ZSgpID49IE1heEFkbWlucyB7CgkJcGFuaWMoImFkbWluIGxpbWl0IHJlYWNoZWQiKQoJfQoJYWRtaW5zLlNldChhZGRyLlN0cmluZygpLCB0cnVlKQp9CgpmdW5jIFJlbW92ZUFkbWluKGN1ciByZWFsbSwgYWRkciBhZGRyZXNzKSB7Cglhc3NlcnRDYWxsZXJJc093bmVyKCkKCWlmIGFkZHIgPT0gb3duZXIgewoJCXBhbmljKCJjYW5ub3QgcmVtb3ZlIG93bmVyIikKCX0KCWlmIF8sIGV4aXN0cyA6PSBhZG1pbnMuR2V0KGFkZHIuU3RyaW5nKCkpOyAhZXhpc3RzIHsKCQlwYW5pYygiYWRkcmVzcyBpcyBub3QgYW4gYWRtaW46ICIgKyBhZGRyLlN0cmluZygpKQoJfQoJYWRtaW5zLlJlbW92ZShhZGRyLlN0cmluZygpKQp9CgovLyBUcmFuc2Zlck93bmVyc2hpcCBzdGFnZXMgYSBzdWNjZXNzb3Igb3duZXIuIE5vdGhpbmcgbW92ZXMgdW50aWwgdGhhdCBhZGRyZXNzCi8vIGNhbGxzIEFjY2VwdE93bmVyc2hpcCB3aXRoIGl0cyBvd24gdHJhbnNhY3Rpb24sIHNvIG93bmVyc2hpcCBjYW4gbmV2ZXIgbGFuZCBvbgovLyBhbiBhZGRyZXNzIHRoYXQgY2Fubm90IGFjdC4gQSBsYXRlciBjYWxsIHJlcGxhY2VzIHRoZSBzdGFnZWQgYWRkcmVzczsKLy8gQ2FuY2VsT3duZXJzaGlwVHJhbnNmZXIgd2l0aGRyYXdzIGl0LgpmdW5jIFRyYW5zZmVyT3duZXJzaGlwKGN1ciByZWFsbSwgbmV3T3duZXIgYWRkcmVzcykgewoJYXNzZXJ0Q2FsbGVySXNPd25lcigpCglpZiBuZXdPd25lciA9PSAiIiB7CgkJcGFuaWMoImFkZHJlc3MgY2Fubm90IGJlIGVtcHR5IikKCX0KCWlmICFuZXdPd25lci5Jc1ZhbGlkKCkgewoJCXBhbmljKCJpbnZhbGlkIGFkZHJlc3M6ICIgKyBuZXdPd25lci5TdHJpbmcoKSkKCX0KCWlmIG5ld093bmVyID09IG93bmVyIHsKCQlwYW5pYygiYWxyZWFkeSBvd25lciIpCgl9CglwZW5kaW5nT3duZXIgPSBuZXdPd25lcgoJY2hhaW4uRW1pdCgiT3duZXJzaGlwVHJhbnNmZXJTdGFydGVkIiwgInBlbmRpbmciLCBuZXdPd25lci5TdHJpbmcoKSkKfQoKLy8gQ2FuY2VsT3duZXJzaGlwVHJhbnNmZXIgd2l0aGRyYXdzIGEgc3RhZ2VkIGhhbmRvZmYuIE93bmVyIG9ubHkuCmZ1bmMgQ2FuY2VsT3duZXJzaGlwVHJhbnNmZXIoY3VyIHJlYWxtKSB7Cglhc3NlcnRDYWxsZXJJc093bmVyKCkKCWlmIHBlbmRpbmdPd25lciA9PSAiIiB7CgkJcGFuaWMoIm5vIHBlbmRpbmcgb3duZXJzaGlwIHRyYW5zZmVyIikKCX0KCWNhbmNlbGxlZCA6PSBwZW5kaW5nT3duZXIKCXBlbmRpbmdPd25lciA9ICIiCgljaGFpbi5FbWl0KCJPd25lcnNoaXBUcmFuc2ZlckNhbmNlbGxlZCIsICJwZW5kaW5nIiwgY2FuY2VsbGVkLlN0cmluZygpKQp9CgovLyBBY2NlcHRPd25lcnNoaXAgY29tcGxldGVzIHRoZSBoYW5kb2ZmLiBPbmx5IHRoZSBzdGFnZWQgcGVuZGluZ093bmVyIG1heSBjYWxsCi8vIGl0LiBUaGUgc3VjY2Vzc29yIGJlY29tZXMgYW4gYWRtaW4gYW5kIHRoZSBmb3JtZXIgb3duZXIncyBhZG1pbiBncmFudCBpcwovLyByZXZva2VkIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiBPdGhlciBleHBsaWNpdGx5IGFwcG9pbnRlZCBhZG1pbnMgcmVtYWluLgpmdW5jIEFjY2VwdE93bmVyc2hpcChjdXIgcmVhbG0pIHsKCWlmICFjdXIuSXNDdXJyZW50KCkgewoJCXBhbmljKCJzcG9vZmVkIHJlYWxtIikKCX0KCWNhbGxlciA6PSBjdXIuUHJldmlvdXMoKS5BZGRyZXNzKCkKCWlmIHBlbmRpbmdPd25lciA9PSAiIiB8fCBjYWxsZXIgIT0gcGVuZGluZ093bmVyIHsKCQlwYW5pYygidW5hdXRob3JpemVkOiBjYWxsZXIgIiArIGNhbGxlci5TdHJpbmcoKSArICIgaXMgbm90IHRoZSBwZW5kaW5nIG93bmVyIikKCX0KCXByZXYgOj0gb3duZXIKCWFkbWlucy5TZXQoY2FsbGVyLlN0cmluZygpLCB0cnVlKQoJYWRtaW5zLlJlbW92ZShwcmV2LlN0cmluZygpKQoJb3duZXIgPSBjYWxsZXIKCXBlbmRpbmdPd25lciA9ICIiCgljaGFpbi5FbWl0KCJPd25lcnNoaXBUcmFuc2ZlcnJlZCIsCgkJInByZXZpb3VzT3duZXIiLCBwcmV2LlN0cmluZygpLAoJCSJuZXdPd25lciIsIGNhbGxlci5TdHJpbmcoKSwKCSkKfQoKLy8gR2V0UGVuZGluZ093bmVyIHJldHVybnMgdGhlIHN0YWdlZCBzdWNjZXNzb3IsIG9yIHRoZSBlbXB0eSBhZGRyZXNzLgpmdW5jIEdldFBlbmRpbmdPd25lcigpIGFkZHJlc3MgeyByZXR1cm4gcGVuZGluZ093bmVyIH0KCmZ1bmMgSXNBZG1pbihhZGRyIGFkZHJlc3MpIGJvb2wgewoJXywgZXhpc3RzIDo9IGFkbWlucy5HZXQoYWRkci5TdHJpbmcoKSkKCXJldHVybiBleGlzdHMKfQoKZnVuYyBHZXRPd25lcigpIGFkZHJlc3MgeyByZXR1cm4gb3duZXIgfQoKLy8g4pSA4pSAIFF1ZXJpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgovLyBHZXRCYWRnZSByZXR1cm5zIGJhZGdlIGluZm8gYXMgYSBwaXBlLWRlbGltaXRlZCBzdHJpbmcuCmZ1bmMgR2V0QmFkZ2UodG9rZW5JRCBzdHJpbmcpIHN0cmluZyB7Cgl2YWwsIGV4aXN0cyA6PSBiYWRnZXMuR2V0KHRva2VuSUQpCglpZiAhZXhpc3RzIHsKCQlyZXR1cm4gIiIKCX0KCWIgOj0gdmFsLigqQmFkZ2UpCglzYiA6PSBzdHJjb252LkZvcm1hdEJvb2woYi5Tb3VsYm91bmQpCglyZXR1cm4gdWZtdC5TcHJpbnRmKCIlc3wlc3wlc3wlc3wlc3wlZCIsCgkJYi5Ub2tlbklELCBiLk93bmVyLCBiLlF1ZXN0SUQsIGIuVG9rZW5VUkksIHNiLCBiLk1pbnRlZEF0KQp9CgovLyBHZXRVc2VyQmFkZ2VzIHJldHVybnMgYWxsIGJhZGdlIHRva2VuIElEcyBmb3IgYSB1c2VyIGFzIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcuCi8vIFVzZXMgdGhlIG93bmVySW5kZXggZm9yIE8oMSkgbG9va3VwIGluc3RlYWQgb2YgZnVsbCB0YWJsZSBzY2FuLgpmdW5jIEdldFVzZXJCYWRnZXMoYWRkciBhZGRyZXNzKSBzdHJpbmcgewoJdmFsLCBleGlzdHMgOj0gb3duZXJJbmRleC5HZXQoYWRkci5TdHJpbmcoKSkKCWlmICFleGlzdHMgewoJCXJldHVybiAiIgoJfQoJcmV0dXJuIHZhbC4oc3RyaW5nKQp9CgovLyBHZXRVc2VyQmFkZ2VEZXRhaWxzIHJldHVybnMgZnVsbCBiYWRnZSBkZXRhaWxzIGZvciBhIHVzZXIgYXMgYSBtdWx0aS1saW5lIHN0cmluZy4KLy8gRWFjaCBsaW5lOiB0b2tlbklEfG93bmVyfHF1ZXN0SUR8dG9rZW5VUkl8c291bGJvdW5kfG1pbnRlZEF0Ci8vIFRoaXMgYXZvaWRzIE4rMSBxdWVyaWVzIGZyb20gdGhlIGZyb250ZW5kIOKAlCBvbmUgY2FsbCByZXR1cm5zIGFsbCBiYWRnZSBkYXRhLgpmdW5jIEdldFVzZXJCYWRnZURldGFpbHMoYWRkciBhZGRyZXNzKSBzdHJpbmcgewoJdG9rZW5JRHNTdHIgOj0gR2V0VXNlckJhZGdlcyhhZGRyKQoJaWYgdG9rZW5JRHNTdHIgPT0gIiIgewoJCXJldHVybiAiIgoJfQoKCXZhciBsaW5lcyBbXXN0cmluZwoJZm9yIF8sIHRva2VuSUQgOj0gcmFuZ2Ugc3RyaW5ncy5TcGxpdCh0b2tlbklEc1N0ciwgIiwiKSB7CgkJaW5mbyA6PSBHZXRCYWRnZSh0b2tlbklEKQoJCWlmIGluZm8gIT0gIiIgewoJCQlsaW5lcyA9IGFwcGVuZChsaW5lcywgaW5mbykKCQl9Cgl9CglyZXR1cm4gc3RyaW5ncy5Kb2luKGxpbmVzLCAiXG4iKQp9CgovLyDilIDilIAgUmVuZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZnVuYyBSZW5kZXIocGF0aCBzdHJpbmcpIHN0cmluZyB7CglpZiBwYXRoID09ICIiIHsKCQlyZXR1cm4gcmVuZGVySG9tZSgpCgl9CglpZiBzdHJpbmdzLkhhc1ByZWZpeChwYXRoLCAiYmFkZ2UvIikgewoJCXRva2VuSUQgOj0gc3RyaW5ncy5UcmltUHJlZml4KHBhdGgsICJiYWRnZS8iKQoJCXJldHVybiByZW5kZXJCYWRnZSh0b2tlbklEKQoJfQoJaWYgc3RyaW5ncy5IYXNQcmVmaXgocGF0aCwgInVzZXIvIikgewoJCWFkZHIgOj0gc3RyaW5ncy5UcmltUHJlZml4KHBhdGgsICJ1c2VyLyIpCgkJcmV0dXJuIHJlbmRlclVzZXJCYWRnZXMoYWRkcikKCX0KCXJldHVybiAiIyA0MDRcblBhZ2Ugbm90IGZvdW5kOiAiICsgcGF0aAp9CgpmdW5jIHJlbmRlckhvbWUoKSBzdHJpbmcgewoJdmFyIHNiIHN0cmluZ3MuQnVpbGRlcgoJc2IuV3JpdGVTdHJpbmcoIiMgR25vQnVpbGRlcnMgQmFkZ2VzXG5cbiIpCglzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoIioqQ29sbGVjdGlvbjoqKiAlcyAoJXMpXG4iLCBDb2xsZWN0aW9uTmFtZSwgQ29sbGVjdGlvblN5bWJvbCkpCglzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoIioqVG90YWwgTWludGVkOioqICVkXG4iLCB0b3RhbE1pbnRlZCkpCglzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoIioqT3duZXI6KiogJXNcbiIsIG93bmVyKSkKCXNiLldyaXRlU3RyaW5nKHVmbXQuU3ByaW50ZigiKipBZG1pbnM6KiogJWRcblxuIiwgYWRtaW5zLlNpemUoKSkpCgoJLy8gUmVjZW50IGJhZGdlcyAobGFzdCAyMCkKCWNvdW50IDo9IDAKCXNiLldyaXRlU3RyaW5nKCIjIyBSZWNlbnQgQmFkZ2VzXG5cbiIpCglzYi5Xcml0ZVN0cmluZygifCBUb2tlbiB8IFF1ZXN0IHwgT3duZXIgfCBTb3VsYm91bmQgfFxuIikKCXNiLldyaXRlU3RyaW5nKCJ8LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tLS18XG4iKQoJYmFkZ2VzLlJldmVyc2VJdGVyYXRlKCIiLCAiIiwgZnVuYyhrZXkgc3RyaW5nLCB2YWx1ZSBhbnkpIGJvb2wgewoJCWlmIGNvdW50ID49IDIwIHsKCQkJcmV0dXJuIHRydWUKCQl9CgkJYiA6PSB2YWx1ZS4oKkJhZGdlKQoJCXNvdWwgOj0gIiIKCQlpZiBiLlNvdWxib3VuZCB7CgkJCXNvdWwgPSAieWVzIgoJCX0KCQlzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoInwgJXMgfCAlcyB8ICVzIHwgJXMgfFxuIiwKCQkJdHJ1bmNTdHIoYi5Ub2tlbklELCAzMCksIGIuUXVlc3RJRCwgdHJ1bmNBZGRyKGIuT3duZXIpLCBzb3VsKSkKCQljb3VudCsrCgkJcmV0dXJuIGZhbHNlCgl9KQoKCXJldHVybiBzYi5TdHJpbmcoKQp9CgpmdW5jIHJlbmRlckJhZGdlKHRva2VuSUQgc3RyaW5nKSBzdHJpbmcgewoJdmFsLCBleGlzdHMgOj0gYmFkZ2VzLkdldCh0b2tlbklEKQoJaWYgIWV4aXN0cyB7CgkJcmV0dXJuICIjIEJhZGdlIE5vdCBGb3VuZFxuTm8gYmFkZ2Ugd2l0aCBJRDogIiArIHRva2VuSUQKCX0KCWIgOj0gdmFsLigqQmFkZ2UpCgl2YXIgc2Igc3RyaW5ncy5CdWlsZGVyCglzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoIiMgQmFkZ2U6ICVzXG5cbiIsIGIuUXVlc3RJRCkpCglzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoIioqVG9rZW4gSUQ6KiogJXNcbiIsIGIuVG9rZW5JRCkpCglzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoIioqT3duZXI6KiogJXNcbiIsIGIuT3duZXIpKQoJc2IuV3JpdGVTdHJpbmcodWZtdC5TcHJpbnRmKCIqKlF1ZXN0OioqICVzXG4iLCBiLlF1ZXN0SUQpKQoJc2IuV3JpdGVTdHJpbmcodWZtdC5TcHJpbnRmKCIqKlNvdWxib3VuZDoqKiAlc1xuIiwgc3RyY29udi5Gb3JtYXRCb29sKGIuU291bGJvdW5kKSkpCglzYi5Xcml0ZVN0cmluZyh1Zm10LlNwcmludGYoIioqTWludGVkIGF0IGJsb2NrOioqICVkXG4iLCBiLk1pbnRlZEF0KSkKCWlmIGIuVG9rZW5VUkkgIT0gIiIgewoJCXNiLldyaXRlU3RyaW5nKHVmbXQuU3ByaW50ZigiKipNZXRhZGF0YToqKiAlc1xuIiwgYi5Ub2tlblVSSSkpCgl9CglyZXR1cm4gc2IuU3RyaW5nKCkKfQoKZnVuYyByZW5kZXJVc2VyQmFkZ2VzKGFkZHIgc3RyaW5nKSBzdHJpbmcgewoJdmFyIHNiIHN0cmluZ3MuQnVpbGRlcgoJc2IuV3JpdGVTdHJpbmcodWZtdC5TcHJpbnRmKCIjIEJhZGdlcyBmb3IgJXNcblxuIiwgYWRkcikpCgoJLy8gVXNlIG93bmVySW5kZXggZm9yIE8oMSkgbG9va3VwIGluc3RlYWQgb2YgZnVsbCB0YWJsZSBzY2FuCgl0b2tlbklEc1N0ciA6PSBHZXRVc2VyQmFkZ2VzKGFkZHJlc3MoYWRkcikpCglpZiB0b2tlbklEc1N0ciA9PSAiIiB7CgkJc2IuV3JpdGVTdHJpbmcoIipObyBiYWRnZXMgeWV0LipcbiIpCgkJcmV0dXJuIHNiLlN0cmluZygpCgl9CgoJdG9rZW5JRHMgOj0gc3RyaW5ncy5TcGxpdCh0b2tlbklEc1N0ciwgIiwiKQoJZm9yIF8sIHRva2VuSUQgOj0gcmFuZ2UgdG9rZW5JRHMgewoJCXZhbCwgZXhpc3RzIDo9IGJhZGdlcy5HZXQodG9rZW5JRCkKCQlpZiAhZXhpc3RzIHsKCQkJY29udGludWUKCQl9CgkJYiA6PSB2YWwuKCpCYWRnZSkKCQlzb3VsIDo9ICIiCgkJaWYgYi5Tb3VsYm91bmQgewoJCQlzb3VsID0gIiAoc291bGJvdW5kKSIKCQl9CgkJc2IuV3JpdGVTdHJpbmcodWZtdC5TcHJpbnRmKCItICoqJXMqKiDigJQgJXMlcyAoYmxvY2sgJWQpXG4iLAoJCQliLlF1ZXN0SUQsIHRydW5jU3RyKGIuVG9rZW5VUkksIDQwKSwgc291bCwgYi5NaW50ZWRBdCkpCgl9CgoJcmV0dXJuIHNiLlN0cmluZygpCn0KCi8vIOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZnVuYyBhc3NlcnRDYWxsZXJJc0FkbWluKCkgewoJY2FsbGVyIDo9IHVuc2FmZS5QcmV2aW91c1JlYWxtKCkuQWRkcmVzcygpCglpZiBfLCBleGlzdHMgOj0gYWRtaW5zLkdldChjYWxsZXIuU3RyaW5nKCkpOyAhZXhpc3RzIHsKCQlwYW5pYygidW5hdXRob3JpemVkOiBjYWxsZXIgIiArIGNhbGxlci5TdHJpbmcoKSArICIgaXMgbm90IGFuIGFkbWluIikKCX0KfQoKZnVuYyBhc3NlcnRDYWxsZXJJc093bmVyKCkgewoJY2FsbGVyIDo9IHVuc2FmZS5QcmV2aW91c1JlYWxtKCkuQWRkcmVzcygpCglpZiBjYWxsZXIgIT0gb3duZXIgewoJCXBhbmljKCJ1bmF1dGhvcml6ZWQ6IGNhbGxlciAiICsgY2FsbGVyLlN0cmluZygpICsgIiBpcyBub3QgdGhlIG93bmVyIikKCX0KfQoKZnVuYyBpbmNCYWxhbmNlKGFkZHIgYWRkcmVzcykgewoJdmFsLCBleGlzdHMgOj0gYmFsYW5jZXMuR2V0KGFkZHIuU3RyaW5nKCkpCglpZiAhZXhpc3RzIHsKCQliYWxhbmNlcy5TZXQoYWRkci5TdHJpbmcoKSwgMSkKCX0gZWxzZSB7CgkJYmFsYW5jZXMuU2V0KGFkZHIuU3RyaW5nKCksIHZhbC4oaW50KSsxKQoJfQp9CgpmdW5jIGRlY0JhbGFuY2UoYWRkciBhZGRyZXNzKSB7Cgl2YWwsIGV4aXN0cyA6PSBiYWxhbmNlcy5HZXQoYWRkci5TdHJpbmcoKSkKCWlmICFleGlzdHMgewoJCXJldHVybgoJfQoJbiA6PSB2YWwuKGludCkgLSAxCglpZiBuIDw9IDAgewoJCWJhbGFuY2VzLlJlbW92ZShhZGRyLlN0cmluZygpKQoJfSBlbHNlIHsKCQliYWxhbmNlcy5TZXQoYWRkci5TdHJpbmcoKSwgbikKCX0KfQoKZnVuYyB0cnVuY0FkZHIoYWRkciBhZGRyZXNzKSBzdHJpbmcgewoJcyA6PSBhZGRyLlN0cmluZygpCglpZiBsZW4ocykgPiAxMyB7CgkJcmV0dXJuIHNbOjEwXSArICIuLi4iCgl9CglyZXR1cm4gcwp9CgpmdW5jIHRydW5jU3RyKHMgc3RyaW5nLCBtYXhMZW4gaW50KSBzdHJpbmcgewoJaWYgbGVuKHMpID4gbWF4TGVuIHsKCQlyZXR1cm4gc1s6bWF4TGVuLTNdICsgIi4uLiIKCX0KCXJldHVybiBzCn0KCi8vIOKUgOKUgCBPd25lciBJbmRleCBNYW5hZ2VtZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKZnVuYyBhZGRUb093bmVySW5kZXgoYWRkciBhZGRyZXNzLCB0b2tlbklEIHN0cmluZykgewoJa2V5IDo9IGFkZHIuU3RyaW5nKCkKCXZhbCwgZXhpc3RzIDo9IG93bmVySW5kZXguR2V0KGtleSkKCWlmICFleGlzdHMgewoJCW93bmVySW5kZXguU2V0KGtleSwgdG9rZW5JRCkKCX0gZWxzZSB7CgkJb3duZXJJbmRleC5TZXQoa2V5LCB2YWwuKHN0cmluZykrIiwiK3Rva2VuSUQpCgl9Cn0KCmZ1bmMgY29udGFpbnNDaGFyKHMgc3RyaW5nLCBjaCBydW5lKSBib29sIHsKCWZvciBfLCBjIDo9IHJhbmdlIHMgewoJCWlmIGMgPT0gY2ggewoJCQlyZXR1cm4gdHJ1ZQoJCX0KCX0KCXJldHVybiBmYWxzZQp9CgpmdW5jIHJlbW92ZUZyb21Pd25lckluZGV4KGFkZHIgYWRkcmVzcywgdG9rZW5JRCBzdHJpbmcpIHsKCWtleSA6PSBhZGRyLlN0cmluZygpCgl2YWwsIGV4aXN0cyA6PSBvd25lckluZGV4LkdldChrZXkpCglpZiAhZXhpc3RzIHsKCQlyZXR1cm4KCX0KCWlkcyA6PSBzdHJpbmdzLlNwbGl0KHZhbC4oc3RyaW5nKSwgIiwiKQoJdmFyIHJlbWFpbmluZyBbXXN0cmluZwoJZm9yIF8sIGlkIDo9IHJhbmdlIGlkcyB7CgkJaWYgaWQgIT0gdG9rZW5JRCB7CgkJCXJlbWFpbmluZyA9IGFwcGVuZChyZW1haW5pbmcsIGlkKQoJCX0KCX0KCWlmIGxlbihyZW1haW5pbmcpID09IDAgewoJCW93bmVySW5kZXguUmVtb3ZlKGtleSkKCX0gZWxzZSB7CgkJb3duZXJJbmRleC5TZXQoa2V5LCBzdHJpbmdzLkpvaW4ocmVtYWluaW5nLCAiLCIpKQoJfQp9ChpPCgtnbm9tb2QudG9tbBJAbW9kdWxlID0gImduby5sYW5kL3Ivc2FtY3Jldy9nbm9idWlsZGVyc19iYWRnZXNfdjIiCmdubyA9ICIwLjkiChqJAgoUZ292ZXJuYW5jZV9yZWFkcy5nbm8S8AFwYWNrYWdlIGdub2J1aWxkZXJzX2JhZGdlc192MgoKLy8gR2V0QWRtaW5Db3VudCBpcyBhIHZhbHVlLW9ubHkgZ292ZXJuYW5jZSByZWFkYmFjay4gSXQgbGV0cyBhIHByb3Bvc2FsIGZyZWV6ZQovLyB0aGUgZXhhY3QgYWRtaW4gY2FwYWNpdHkgYmVmb3JlIHZvdGluZyBhbmQgdmVyaWZ5IHRoZSBjb3VudCBhZnRlciBkaXNwYXRjaC4KZnVuYyBHZXRBZG1pbkNvdW50KCkgaW50IHsgcmV0dXJuIGFkbWlucy5TaXplKCkgfQoiIgoTL2duby5NZW1QYWNrYWdlVHlwZRILCglNUFVzZXJBbGwiDTEwMDAwMDAwdWdub3QSEgiAwtcvEgsxMDAwMDB1Z25vdBqIAwrNAQoSL3RtLlB1YktleU11bHRpc2lnErYBCAISOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiEDXU7K848tqANWyscQogEgTFVEXmW3vBUKP59RlEEvX+0SOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiEDKOOJ3rhkJhDgSaVn8LeWBXf9fD3IHUtT4nWr6t2RpngSOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiEDIOV/XirsLZoGpqv9CvKHp1VH1UALFVlXp85ozdflgQASiwEKBQgDEgGgEkAe9x1AdGaxZHHp7VX8rwU1gngpWbzOZD49w5mtxCGZQ3KVIfUvcENd+MX+yVGqoN+/9It9IVs4X5WA67wtLifiEkD/m9D5jVLtxeKtO4sTfcKY2fq3cm7uQIddjAFdggihlCAxuRLXbxjyMOaXVDiick07uc7NyYuldLxTGEBKVUJyGihnMXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWx1dXhl

Raw transaction data

Raw JSON data