Transaction executed successfully

Transaction Details

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

Transaction hash
503515F4B97FC9A919587153DB6697B0E1E419FC9B3DDA950F476014265EF9B7

Transaction overview

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

Execution summary

TX INDEX
0
Position in block
GAS WANTED
55,834,923
Requested gas limit
GAS USED
46,529,132
Gas consumed
FEE
55835ugnot
Transaction fee

Participants

Sender
Package / Realm
Not available
Memo
None

Message

Message #1
m_addpkg
Caller
Arguments
g1q5tjjv3kkslzwf2na9y9wk7e5a8ugph8xfsk04

Execution log

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

Events

No events emitted by this transaction.

Raw encoded transaction

CoWEAgoML3ZtLm1fYWRkcGtnEvODAgooZzFxNXRqanYza2tzbHp3ZjJuYTl5OXdrN2U1YTh1Z3BoOHhmc2swNBLFgwIKBmludDI1NhIcZ25vLmxhbmQvcC9nbm9zd2FwL2ludDI1Ni92MRrKCAoJUkVBRE1FLm1kErwIIyBpbnQyNTYKCjI1Ni1iaXQgc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYyBmb3IgR25vU3dhcC4KCiMjIE92ZXJ2aWV3CgpGaXhlZC1zaXplIDI1Ni1iaXQgc2lnbmVkIGludGVnZXIgbGlicmFyeSBvcHRpbWl6ZWQgZm9yIEFNTSBjYWxjdWxhdGlvbnMuClRoZSB1bnN1ZmZpeGVkIGBBZGRgLCBgU3ViYCwgYW5kIGBNdWxgIG1ldGhvZHMgcmV0dXJuIHRoZSBsb3cgMjU2IGJpdHMKKHR3bydzLWNvbXBsZW1lbnQgd3JhcCkuIFRoZSBgQWRkT3ZlcmZsb3dgLCBgU3ViT3ZlcmZsb3dgLCBhbmQgYE11bE92ZXJmbG93YAp2YXJpYW50cyBhZGRpdGlvbmFsbHkgcmVwb3J0IHdoZXRoZXIgdGhlIHNpZ25lZCBvcGVyYXRpb24gb3ZlcmZsb3dlZC4KCiMjIEZlYXR1cmVzCgotIEZpeGVkIDI1Ni1iaXQgc2l6ZSAocHJlZGljdGFibGUgZ2FzIGNvc3RzKQotIFR3bydzIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24KLSBFeHBsaWNpdCBvdmVyZmxvdyBkZXRlY3Rpb24gdmlhIGAqT3ZlcmZsb3dgIHZhcmlhbnRzCi0gQU1NLW9wdGltaXplZCBmdW5jdGlvbnMKLSBSYW5nZTogLSgyXjI1NSkgdG8gMl4yNTUtMQoKIyMgVXNhZ2UKCmBgYGdvCnBhY2thZ2UgbWFpbgoKaW1wb3J0IGkyNTYgImduby5sYW5kL3AvZ25vc3dhcC9pbnQyNTYvdjEiCgpmdW5jIG1haW4oKSB7CiAgICBhIDo9IGkyNTYuTmV3SW50KDEwMCkKICAgIGIgOj0gaTI1Ni5NdXN0RnJvbURlY2ltYWwoIi0xMDAwIikKICAgIHJlc3VsdCwgb3ZlcmZsb3cgOj0gbmV3KGkyNTYuSW50KS5BZGRPdmVyZmxvdyhhLCBiKQogICAgaWYgb3ZlcmZsb3cgewogICAgICAgIHBhbmljKCJzaWduZWQgYWRkaXRpb24gb3ZlcmZsb3ciKQogICAgfQogICAgcHJpbnRsbihyZXN1bHQuVG9TdHJpbmcoKSkgLy8gLTkwMAp9CmBgYAoKIyMgSW1wbGVtZW50YXRpb24KClRoZSB0eXBlIHNoYXJlcyBhIGxpdHRsZS1lbmRpYW4gZm91ci13b3JkIHJlcHJlc2VudGF0aW9uIHdpdGggYHVpbnQyNTZgIGFuZAppbnRlcm9wZXJhdGVzIHdpdGggaXQgdGhyb3VnaCBjb252ZXJzaW9uIG1ldGhvZHMsIGJ1dCBzaWduZWQgYXJpdGhtZXRpYyBpcwppbXBsZW1lbnRlZCBpbmRlcGVuZGVudGx5LhrvFAoOYXJpdGhtZXRpYy5nbm8S3BRwYWNrYWdlIGludDI1NgoKaW1wb3J0ICJtYXRoL2JpdHMiCgpmdW5jIHVkaXZyZW0ocXVvdCwgdSBbXXVpbnQ2NCwgZCAqSW50KSAocmVtIEludCkgewoJdmFyIGRMZW4gaW50Cglmb3IgaSA6PSBsZW4oZCkgLSAxOyBpID49IDA7IGktLSB7CgkJaWYgZFtpXSAhPSAwIHsKCQkJZExlbiA9IGkgKyAxCgkJCWJyZWFrCgkJfQoJfQoKCXNoaWZ0IDo9IHVpbnQoYml0cy5MZWFkaW5nWmVyb3M2NChkW2RMZW4tMV0pKQoKCXZhciBkblN0b3JhZ2UgSW50CglkbiA6PSBkblN0b3JhZ2VbOmRMZW5dCglmb3IgaSA6PSBkTGVuIC0gMTsgaSA+IDA7IGktLSB7CgkJZG5baV0gPSAoZFtpXSA8PCBzaGlmdCkgfCAoZFtpLTFdID4+ICg2NCAtIHNoaWZ0KSkKCX0KCWRuWzBdID0gZFswXSA8PCBzaGlmdAoKCXZhciB1TGVuIGludAoJZm9yIGkgOj0gbGVuKHUpIC0gMTsgaSA+PSAwOyBpLS0gewoJCWlmIHVbaV0gIT0gMCB7CgkJCXVMZW4gPSBpICsgMQoJCQlicmVhawoJCX0KCX0KCglpZiB1TGVuIDwgZExlbiB7CgkJY29weShyZW1bOl0sIHUpCgkJcmV0dXJuIHJlbQoJfQoKCXZhciB1blN0b3JhZ2UgWzlddWludDY0Cgl1biA6PSB1blN0b3JhZ2VbOnVMZW4rMV0KCXVuW3VMZW5dID0gdVt1TGVuLTFdID4+ICg2NCAtIHNoaWZ0KQoJZm9yIGkgOj0gdUxlbiAtIDE7IGkgPiAwOyBpLS0gewoJCXVuW2ldID0gKHVbaV0gPDwgc2hpZnQpIHwgKHVbaS0xXSA+PiAoNjQgLSBzaGlmdCkpCgl9Cgl1blswXSA9IHVbMF0gPDwgc2hpZnQKCglpZiBkTGVuID09IDEgewoJCXIgOj0gdWRpdnJlbUJ5MShxdW90LCB1biwgZG5bMF0pCgkJcmVtLlNldFVpbnQ2NChyID4+IHNoaWZ0KQoJCXJldHVybiByZW0KCX0KCgl1ZGl2cmVtS251dGgocXVvdCwgdW4sIGRuKQoKCWZvciBpIDo9IDA7IGkgPCBkTGVuLTE7IGkrKyB7CgkJcmVtW2ldID0gKHVuW2ldID4+IHNoaWZ0KSB8ICh1bltpKzFdIDw8ICg2NCAtIHNoaWZ0KSkKCX0KCXJlbVtkTGVuLTFdID0gdW5bZExlbi0xXSA+PiBzaGlmdAoKCXJldHVybiByZW0KfQoKZnVuYyB1ZGl2cmVtQnkxKHF1b3QsIHUgW111aW50NjQsIGQgdWludDY0KSAocmVtIHVpbnQ2NCkgewoJcmVjaXByb2NhbCA6PSByZWNpcHJvY2FsMmJ5MShkKQoJcmVtID0gdVtsZW4odSktMV0KCWZvciBqIDo9IGxlbih1KSAtIDI7IGogPj0gMDsgai0tIHsKCQlxdW90W2pdLCByZW0gPSB1ZGl2cmVtMmJ5MShyZW0sIHVbal0sIGQsIHJlY2lwcm9jYWwpCgl9CglyZXR1cm4gcmVtCn0KCmZ1bmMgdWRpdnJlbUtudXRoKHF1b3QsIHUsIGQgW111aW50NjQpIHsKCWRMZW4gOj0gbGVuKGQpCglkaCA6PSBkW2RMZW4tMV0KCWRsIDo9IGRbZExlbi0yXQoJcmVjaXByb2NhbCA6PSByZWNpcHJvY2FsMmJ5MShkaCkKCglmb3IgaiA6PSBsZW4odSkgLSBkTGVuIC0gMTsgaiA+PSAwOyBqLS0gewoJCXUyIDo9IHVbaitkTGVuXQoJCXUxIDo9IHVbaitkTGVuLTFdCgkJdTAgOj0gdVtqK2RMZW4tMl0KCgkJdmFyIHFoYXQsIHJoYXQgdWludDY0CgkJaWYgdTIgPj0gZGggewoJCQlxaGF0ID0gXnVpbnQ2NCgwKQoJCX0gZWxzZSB7CgkJCXFoYXQsIHJoYXQgPSB1ZGl2cmVtMmJ5MSh1MiwgdTEsIGRoLCByZWNpcHJvY2FsKQoJCQlwaCwgcGwgOj0gYml0cy5NdWw2NChxaGF0LCBkbCkKCQkJaWYgcGggPiByaGF0IHx8IChwaCA9PSByaGF0ICYmIHBsID4gdTApIHsKCQkJCXFoYXQtLQoJCQl9CgkJfQoKCQlib3Jyb3cgOj0gc3ViTXVsVG8odVtqOl0sIGQsIHFoYXQpCgkJdVtqK2RMZW5dID0gdTIgLSBib3Jyb3cKCQlpZiB1MiA8IGJvcnJvdyB7CgkJCXFoYXQtLQoJCQl1W2orZExlbl0gKz0gYWRkVG8odVtqOl0sIGQpCgkJfQoKCQlxdW90W2pdID0gcWhhdAoJfQp9CgpmdW5jIHJlY2lwcm9jYWwyYnkxKGQgdWludDY0KSB1aW50NjQgewoJcmVjaXByb2NhbCwgXyA6PSBiaXRzLkRpdjY0KF5kLCBedWludDY0KDApLCBkKQoJcmV0dXJuIHJlY2lwcm9jYWwKfQoKZnVuYyB1ZGl2cmVtMmJ5MSh1aCwgdWwsIGQsIHJlY2lwcm9jYWwgdWludDY0KSAocXVvdCwgcmVtIHVpbnQ2NCkgewoJcWgsIHFsIDo9IGJpdHMuTXVsNjQocmVjaXByb2NhbCwgdWgpCglxbCwgY2FycnkgOj0gYml0cy5BZGQ2NChxbCwgdWwsIDApCglxaCArPSB1aCArIGNhcnJ5CglxaCsrCgoJciA6PSB1bCAtIHFoKmQKCglpZiByID4gcWwgewoJCXFoLS0KCQlyICs9IGQKCX0KCglpZiByID49IGQgewoJCXFoKysKCQlyIC09IGQKCX0KCglyZXR1cm4gcWgsIHIKfQoKZnVuYyBzdWJNdWxUbyh4LCB5IFtddWludDY0LCBtdWx0aXBsaWVyIHVpbnQ2NCkgdWludDY0IHsKCXZhciBib3Jyb3cgdWludDY0Cglmb3IgaSA6PSAwOyBpIDwgbGVuKHkpOyBpKysgewoJCXMsIGNhcnJ5MSA6PSBiaXRzLlN1YjY0KHhbaV0sIGJvcnJvdywgMCkKCQlwaCwgcGwgOj0gYml0cy5NdWw2NCh5W2ldLCBtdWx0aXBsaWVyKQoJCXQsIGNhcnJ5MiA6PSBiaXRzLlN1YjY0KHMsIHBsLCAwKQoJCXhbaV0gPSB0CgkJYm9ycm93ID0gcGggKyBjYXJyeTEgKyBjYXJyeTIKCX0KCXJldHVybiBib3Jyb3cKfQoKZnVuYyBhZGRUbyh4LCB5IFtddWludDY0KSB1aW50NjQgewoJdmFyIGNhcnJ5IHVpbnQ2NAoJZm9yIGkgOj0gMDsgaSA8IGxlbih5KTsgaSsrIHsKCQl4W2ldLCBjYXJyeSA9IGJpdHMuQWRkNjQoeFtpXSwgeVtpXSwgY2FycnkpCgl9CglyZXR1cm4gY2FycnkKfQoaoy8KDmNvbnZlcnNpb24uZ25vEpAvcGFja2FnZSBpbnQyNTYKCmltcG9ydCAoCgkiZXJyb3JzIgoJIm1hdGgvYml0cyIKCSJzdHJjb252IgoKCXUyNTYgImduby5sYW5kL3AvZ25vc3dhcC91aW50MjU2L3YxIgopCgpjb25zdCAoCgltYXhBYnNJMjU2RGVjID0gIjU3ODk2MDQ0NjE4NjU4MDk3NzExNzg1NDkyNTA0MzQzOTUzOTI2NjM0OTkyMzMyODIwMjgyMDE5NzI4NzkyMDAzOTU2NTY0ODE5OTY4IgoJbWF4V29yZHMgICAgICA9IDI1NiAvIGJpdHMuVWludFNpemUKKQoKLy8gTVVTVCBCRSBJTU1VVEFCTEUsIERPIE5PVCBNT0RJRlkKLy8gbXVsdGlwbGllcnMgaXMgYSB0YWJsZSBvZiBtdWx0aXBsaWVycyBmb3IgdGhlIGRlY2ltYWwgY29udmVyc2lvbi4KdmFyIF9tdWx0aXBsaWVycyA9IFs1XSpJbnR7CgluaWwsCgl7MHg4YWM3MjMwNDg5ZTgwMDAwLCAwLCAwLCAwfSwKCXsweDk4YTIyNDAwMDAwMDAwMCwgMHg0YjNiNGNhODVhODZjNDdhLCAwLCAwfSwKCXsweDRhMDAwMDAwMDAwMDAwMDAsIDB4ZWJmZGNiNTQ4NjRhZGE4MywgMHgyOGM4N2NiNWM4OWEyNTcxLCAwfSwKCXswLCAweDc3NzVhNWYxNzE5NTEwMDAsIDB4NzY0YjRhYmU4NjUyOTc5LCAweDE2MWJjY2E3MTE5OTE1YjV9LAp9CgovLyBGcm9tRGVjaW1hbCBwYXJzZXMgYSBzaWduZWQgZGVjaW1hbCBzdHJpbmcgaW50byBhIDI1Ni1iaXQgaW50ZWdlci4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIGRlY2ltYWw6IHRoZSBzaWduZWQgZGVjaW1hbCB0ZXh0LCBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggKyBvciAtCi8vCi8vIFJldHVybnM6Ci8vICAgLSB2YWx1ZTogYSBwYXJzZWQgc2lnbmVkIEludCwgb3IgbmlsIHdoZW4gcGFyc2luZyBmYWlscwovLyAgIC0gZXJyOiBuaWwgb24gc3VjY2Vzczsgb3RoZXJ3aXNlIGFuIGludmFsaWQtZm9ybWF0IG9yIHNpZ25lZC0yNTYtYml0LXJhbmdlIGVycm9yCmZ1bmMgRnJvbURlY2ltYWwoZGVjaW1hbCBzdHJpbmcpICgqSW50LCBlcnJvcikgewoJeiwgZXJyIDo9IG5ldyhJbnQpLlNldFN0cmluZyhkZWNpbWFsKQoJaWYgZXJyICE9IG5pbCB7CgkJcmV0dXJuIG5pbCwgZXJyCgl9CgoJcmV0dXJuIHosIG5pbAp9CgovLyBNdXN0RnJvbURlY2ltYWwgcGFyc2VzIGEgc2lnbmVkIGRlY2ltYWwgc3RyaW5nIGFuZCBwYW5pY3Mgb24gaW52YWxpZCBpbnB1dC4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIGRlY2ltYWw6IHRoZSBzaWduZWQgZGVjaW1hbCB0ZXh0LCBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggKyBvciAtCi8vCi8vIFJldHVybnM6Ci8vICAgLSByZXN1bHQ6IGEgcGFyc2VkIHNpZ25lZCBJbnQ7IGludmFsaWQgb3Igb3V0LW9mLXJhbmdlIGlucHV0IHBhbmljcwpmdW5jIE11c3RGcm9tRGVjaW1hbChkZWNpbWFsIHN0cmluZykgKkludCB7Cgl6LCBlcnIgOj0gRnJvbURlY2ltYWwoZGVjaW1hbCkKCWlmIGVyciAhPSBuaWwgewoJCXBhbmljKGVycikKCX0KCXJldHVybiB6Cn0KCi8vIFRvU3RyaW5nIHJldHVybnMgdGhlIHNpZ25lZCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHouCi8vCi8vIFJldHVybnM6Ci8vICAgLSBkZWNpbWFsOiB0aGUgc2lnbmVkIGJhc2UtMTAgcmVwcmVzZW50YXRpb24gb2YgegpmdW5jICh6ICpJbnQpIFRvU3RyaW5nKCkgc3RyaW5nIHsKCXMgOj0gei5TaWduKCkKCWlmIHMgPT0gMCB7CgkJcmV0dXJuICIwIgoJfQoJaWYgei5Jc0ludDY0KCkgewoJCXJldHVybiBzdHJjb252LkZvcm1hdEludCh6LkludDY0KCksIDEwKQoJfQoJeSA6PSBuZXcoSW50KQoJaWYgcyA+IDAgewoJCXkuU2V0KHopCgl9IGVsc2UgewoJCXkuTmVnKHopCgl9Cgl2YXIgKAoJCW91dCAgICAgPSBbXWJ5dGUoIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIikKCQlkaXZpc29yID0gbmV3KEludCkuU2V0VWludDY0KDEwMDAwMDAwMDAwMDAwMDAwMDAwKQoJCXBvcyAgICAgPSBsZW4ob3V0KQoJCWJ1ZiAgICAgPSBtYWtlKFtdYnl0ZSwgMCwgMTkpCgkpCgoJZm9yIHsKCQl2YXIgcXVvdCBJbnQKCQlyZW0gOj0gdWRpdnJlbShxdW90WzpdLCB5WzpdLCBkaXZpc29yKQoJCXkuU2V0KCZxdW90KQoJCWJ1ZiA9IHN0cmNvbnYuQXBwZW5kVWludChidWZbOjBdLCByZW0uVWludDY0KCksIDEwKQoJCWNvcHkob3V0W3Bvcy1sZW4oYnVmKTpdLCBidWYpCgkJaWYgeS5Jc1plcm8oKSB7CgkJCWJyZWFrCgkJfQoJCXBvcyAtPSAxOQoJfQoKCXZhciByZXMgc3RyaW5nCglpZiBzIDwgMCB7CgkJcmVzID0gIi0iCgl9CglyZXMgKz0gc3RyaW5nKG91dFtwb3MtbGVuKGJ1Zik6XSkKCXJldHVybiByZXMKfQoKLy8gU2V0U3RyaW5nIHBhcnNlcyBhIHNpZ25lZCBkZWNpbWFsIHN0cmluZyBpbnRvIGFuIEludC4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIHM6IHRoZSBzaWduZWQgZGVjaW1hbCB0ZXh0IHRvIHBhcnNlLCB3aXRoIGF0IG1vc3Qgb25lIGxlYWRpbmcgc2lnbgovLwovLyBSZXR1cm5zOgovLyAgIC0gdmFsdWU6IHRoZSBwYXJzZWQgc2lnbmVkIEludCwgb3IgbmlsIHdoZW4gcGFyc2luZyBmYWlscwovLyAgIC0gZXJyOiBuaWwgb24gc3VjY2Vzczsgb3RoZXJ3aXNlIHRoZSBwYXJzZSBvciBzaWduZWQtMjU2LWJpdC1yYW5nZSBlcnJvcgpmdW5jICh6ICpJbnQpIFNldFN0cmluZyhzIHN0cmluZykgKCpJbnQsIGVycm9yKSB7CglpZiBsZW4ocykgPT0gMCB7CgkJcmV0dXJuIG5pbCwgZXJyb3JzLk5ldygiaW50MjU2OiBlbXB0eSBzdHJpbmciKQoJfQoKCWlzTmVnIDo9IGZhbHNlCglzd2l0Y2ggc1swXSB7CgljYXNlICcrJzoKCQlzID0gc1sxOl0KCWNhc2UgJy0nOgoJCWlzTmVnID0gdHJ1ZQoJCXMgPSBzWzE6XQoJfQoKCWlmIGxlbihzKSA9PSAwIHsKCQlyZXR1cm4gbmlsLCBlcnJvcnMuTmV3KCJpbnQyNTY6IGVtcHR5IHN0cmluZyIpCgl9CgoJLy8gUGFyYWxsZWwgY29tcGFyaXNvbiB0ZWNobmlxdWUgZm9yIHZhbGlkYXRpb24KCS8vIFByb2Nlc3MgaW4gOC1ieXRlIGNodW5rcyBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZQoJc0xlbiA6PSBsZW4ocykKCWkgOj0gMAoKCS8vIFByb2Nlc3MgOCBieXRlcyBhdCBhIHRpbWUKCWZvciBpKzcgPCBzTGVuIHsKCQkvLyBBY2Nlc3MgdXAgdG8gc1tpKzddIGlzIHNhZmUsIHRoZW4gd2UgY2FuIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGJvdW5kcyBjaGVja3MKCQlfID0gc1tpKzddCgoJCS8vIENvbnZlcnQgOCBieXRlcyBpbnRvIGEgc2luZ2xlIHVpbnQ2NAoJCS8vIFRoaXMgbWV0aG9kIHByb2Nlc3NlcyBieXRlcyBkaXJlY3RseSwgc28gbm8gZW5kaWFubmVzcyBpc3N1ZXMKCQljaHVuayA6PSB1aW50NjQoc1tpXSkgfCB1aW50NjQoc1tpKzFdKTw8OAoJCWNodW5rIHw9IHVpbnQ2NChzW2krMl0pPDwxNiB8IHVpbnQ2NChzW2krM10pPDwyNAoJCWNodW5rIHw9IHVpbnQ2NChzW2krNF0pPDwzMiB8IHVpbnQ2NChzW2krNV0pPDw0MAoJCWNodW5rIHw9IHVpbnQ2NChzW2krNl0pPDw0OCB8IHVpbnQ2NChzW2krN10pPDw1NgoKCQkvLyBDaGVjayBmb3IgJysnICgweDJCKSB1c2luZyBTV0FSIHRlY2huaXF1ZQoJCS8vIFN1YnRyYWN0aW5nIDB4MkIgZnJvbSBlYWNoIGJ5dGUgbWFrZXMgJysnIGJ5dGVzIGJlY29tZSAwCgkJLy8gU3VidHJhY3RpbmcgMHgwMSBtYWtlcyBieXRlcyBpbiBBU0NJSSByYW5nZSAoMC0xMjcpIGhhdmUgMCBpbiB0aGVpciBoaWdoZXN0IGJpdAoJCS8vIFRoZXJlZm9yZSwgQU5EIHdpdGggMHg4MCB0byBjaGVjayBmb3IgemVybyBieXRlcwoJCXBsdXNUZXN0IDo9ICgoY2h1bmsgXiAweDJCMkIyQjJCMkIyQjJCMkIpIC0gMHgwMTAxMDEwMTAxMDEwMTAxKSAmIDB4ODA4MDgwODA4MDgwODA4MAoKCQkvLyBDaGVjayBmb3IgJy0nICgweDJEKSB1c2luZyBTV0FSIHRlY2huaXF1ZQoJCW1pbnVzVGVzdCA6PSAoKGNodW5rIF4gMHgyRDJEMkQyRDJEMkQyRDJEKSAtIDB4MDEwMTAxMDEwMTAxMDEwMSkgJiAweDgwODA4MDgwODA4MDgwODAKCgkJLy8gSWYgZWl0aGVyIHRlc3QgaXMgbm9uLXplcm8sIGEgc2lnbiBjaGFyYWN0ZXIgZXhpc3RzCgkJaWYgKHBsdXNUZXN0IHwgbWludXNUZXN0KSAhPSAwIHsKCQkJcmV0dXJuIG5pbCwgZXJyb3JzLk5ldygiaW50MjU2OiBpbnZhbGlkIHNpZ24gaW4gbWlkZGxlIG9mIG51bWJlciIpCgkJfQoKCQlpICs9IDgKCX0KCgkvLyBQcm9jZXNzIHJlbWFpbmluZyBieXRlcwoJZm9yIDsgaSA8IHNMZW47IGkrKyB7CgkJaWYgc1tpXSA9PSAnKycgfHwgc1tpXSA9PSAnLScgewoJCQlyZXR1cm4gbmlsLCBlcnJvcnMuTmV3KCJpbnQyNTY6IGludmFsaWQgc2lnbiBpbiBtaWRkbGUgb2YgbnVtYmVyIikKCQl9Cgl9CgoJLy8gU3RyaXAgbGVhZGluZyB6ZXJvcwoJaWYgbGVuKHMpID4gMCAmJiBzWzBdID09ICcwJyB7CgkJaWR4IDo9IDAKCQlmb3IgaWR4IDwgbGVuKHMpICYmIHNbaWR4XSA9PSAnMCcgewoJCQlpZHgrKwoJCX0KCQlzID0gc1tpZHg6XQoJCS8vIElmIGFsbCBjaGFyYWN0ZXJzIHdlcmUgemVyb3MsIHNldCB0byAiMCIKCQlpZiBsZW4ocykgPT0gMCB7CgkJCXMgPSAiMCIKCQl9Cgl9CgoJLy8gQ2hlY2sgZm9yIG92ZXJmbG93CglpZiBsZW4ocykgPiBsZW4obWF4QWJzSTI1NkRlYykgfHwKCQkobGVuKHMpID09IGxlbihtYXhBYnNJMjU2RGVjKSAmJiBzID4gbWF4QWJzSTI1NkRlYykgfHwKCQkocyA9PSBtYXhBYnNJMjU2RGVjICYmICFpc05lZykgewoJCXJldHVybiBuaWwsIGVycm9ycy5OZXcoImludDI1Njogb3ZlcmZsb3ciKQoJfQoKCWlmIGVyciA6PSB6LmZyb21EZWNpbWFsKHMpOyBlcnIgIT0gbmlsIHsKCQlyZXR1cm4gbmlsLCBlcnIKCX0KCglpZiBpc05lZyB7CgkJei5OZWcoeikKCX0KCglyZXR1cm4geiwgbmlsCn0KCmZ1bmMgKHogKkludCkgZnJvbURlY2ltYWwoYnMgc3RyaW5nKSBlcnJvciB7Cgl6LkNsZWFyKCkKCXZhciAoCgkJbnVtICAgICAgIHVpbnQ2NAoJCWVyciAgICAgICBlcnJvcgoJCXJlbWFpbmluZyA9IGxlbihicykKCSkKCglpZiByZW1haW5pbmcgPT0gMCB7CgkJcmV0dXJuIGVycm9ycy5OZXcoIkVPRiIpCgl9CgoJZm9yIGksIG11bHQgOj0gcmFuZ2UgX211bHRpcGxpZXJzIHsKCQlpZiByZW1haW5pbmcgPD0gMCB7CgkJCXJldHVybiBuaWwKCQl9CgkJaWYgcmVtYWluaW5nID4gMTkgewoJCQludW0sIGVyciA9IHN0cmNvbnYuUGFyc2VVaW50KGJzW3JlbWFpbmluZy0xOTpyZW1haW5pbmddLCAxMCwgNjQpCgkJfSBlbHNlIHsKCQkJbnVtLCBlcnIgPSBzdHJjb252LlBhcnNlVWludChicywgMTAsIDY0KQoJCX0KCQlpZiBlcnIgIT0gbmlsIHsKCQkJcmV0dXJuIGVycgoJCX0KCQlpZiBpID09IDAgewoJCQl6LlNldFVpbnQ2NChudW0pCgkJfSBlbHNlIHsKCQkJYmFzZSA6PSBuZXcoSW50KS5TZXRVaW50NjQobnVtKQoJCQl6LkFkZCh6LCBiYXNlLk11bChiYXNlLCBtdWx0KSkKCQl9CgkJaWYgcmVtYWluaW5nID4gMTkgewoJCQlicyA9IGJzWzAgOiByZW1haW5pbmctMTldCgkJfQoJCXJlbWFpbmluZyAtPSAxOQoJfQoJcmV0dXJuIG5pbAp9CgovLyBGcm9tVWludDI1NiBjb252ZXJ0cyBhIHVpbnQyNTYgdG8gaW50MjU2LgovLyBQYW5pY3MgaWYgdGhlIHVpbnQyNTYgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIE1heEludDI1NiAoMl4yNTUgLSAxKS4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIHg6IHRoZSB1bnNpZ25lZCB2YWx1ZSB0byBjb252ZXJ0OyB2YWx1ZXMgYWJvdmUgTWF4SW50MjU2IGNhdXNlIGEgcGFuaWMKLy8KLy8gUmV0dXJuczoKLy8gICAtIHJlc3VsdDogYSBzaWduZWQgSW50IHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgeApmdW5jIEZyb21VaW50MjU2KHggKnUyNTYuVWludCkgKkludCB7CgkvLyBDaGVjayBvdmVyZmxvdzogaWYgTVNCIG9mIHhbM10gaXMgc2V0LCB2YWx1ZSA+IE1heEludDI1NgoJaWYgeFszXSA+IDB4N2ZmZmZmZmZmZmZmZmZmZiB7CgkJcGFuaWMoImludDI1Njogb3ZlcmZsb3cgLSB1aW50MjU2IHZhbHVlIGV4Y2VlZHMgTWF4SW50MjU2IikKCX0KCXogOj0gJkludHt9Cgl6WzBdID0geFswXQoJelsxXSA9IHhbMV0KCXpbMl0gPSB4WzJdCgl6WzNdID0geFszXQoJcmV0dXJuIHoKfQoamAUKB2RvYy5nbm8SjAUvLyBQYWNrYWdlIGludDI1NiBpbXBsZW1lbnRzIDI1Ni1iaXQgc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYyBmb3IgR25vU3dhcC4KLy8KLy8gVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGFuIEludCB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIDI1Ni1iaXQgc2lnbmVkIGludGVnZXIKLy8gdXNpbmcgdHdvJ3MgY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4gSXQgc3VwcG9ydHMgdGhlIGZ1bGwgcmFuZ2UgZnJvbQovLyAtKDJeMjU1KSB0byAyXjI1NS0xLiBUaGUgdW5zdWZmaXhlZCBBZGQsIFN1YiwgYW5kIE11bCBtZXRob2RzIHJldHVybiB0aGUKLy8gdHJ1bmNhdGVkIDI1Ni1iaXQgcmVzdWx0OyBBZGRPdmVyZmxvdywgU3ViT3ZlcmZsb3csIGFuZCBNdWxPdmVyZmxvdyBhbHNvCi8vIHJldHVybiBhIHNpZ25lZC1vdmVyZmxvdyBmbGFnLgovLwovLyBUaGUgaW1wbGVtZW50YXRpb24gZm9sbG93cyBFdGhlcmV1bSdzIGludDI1NiBzZW1hbnRpY3MsIGVuc3VyaW5nIGNvbXBhdGliaWxpdHkKLy8gZm9yIGNyb3NzLWNoYWluIERlRmkgcHJvdG9jb2xzLiBPcGVyYXRpb25zIGFyZSBvcHRpbWl6ZWQgZm9yIGNvbW1vbiBBTU0KLy8gY2FsY3VsYXRpb25zIGluY2x1ZGluZyB0aWNrIG1hdGggYW5kIHByaWNlIGNvbXB1dGF0aW9ucy4KcGFja2FnZSBpbnQyNTYKGkMKC2dub21vZC50b21sEjRtb2R1bGUgPSAiZ25vLmxhbmQvcC9nbm9zd2FwL2ludDI1Ni92MSIKZ25vID0gIjAuOSIKGrKwAQoKaW50MjU2LmdubxKisAFwYWNrYWdlIGludDI1NgoKaW1wb3J0ICgKCSJlbmNvZGluZy9iaW5hcnkiCgkibWF0aCIKCSJtYXRoL2JpdHMiCgoJdTI1NiAiZ25vLmxhbmQvcC9nbm9zd2FwL3VpbnQyNTYvdjEiCikKCnR5cGUgSW50IFs0XXVpbnQ2NAoKLy8gWmVybyByZXR1cm5zIGEgZnJlc2ggSW50IHdob3NlIDI1NiBiaXRzIGFyZSBhbGwgemVyby4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHplcm86IEEgbXV0YWJsZSAqSW50IHJlcHJlc2VudGluZyB0aGUgc2lnbmVkIHZhbHVlIDAuCmZ1bmMgWmVybygpICpJbnQgewoJcmV0dXJuICZJbnR7fQp9CgovLyBPbmUgcmV0dXJucyBhIGZyZXNoIEludCByZXByZXNlbnRpbmcgdGhlIHNpZ25lZCB2YWx1ZSAxLgovLwovLyBSZXR1cm5zOgovLyAgIC0gb25lOiBBIG11dGFibGUgKkludCB3aXRoIG9ubHkgaXRzIGxlYXN0LXNpZ25pZmljYW50IGJpdCBzZXQuCmZ1bmMgT25lKCkgKkludCB7CglyZXR1cm4gJkludHsxLCAwLCAwLCAwfQp9CgovLyBNaW5JbnQyNTYgcmV0dXJucyB0aGUgbWluaW11bSBzaWduZWQgMjU2LWJpdCBpbnRlZ2VyLCAtMl4yNTUuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBtaW5pbXVtOiBBIGZyZXNoICpJbnQgY29udGFpbmluZyB0aGUgdHdvJ3MtY29tcGxlbWVudCBtaW5pbXVtIHZhbHVlLgpmdW5jIE1pbkludDI1NigpICpJbnQgewoJcmV0dXJuICZJbnR7MCwgMCwgMCwgMHg4MDAwMDAwMDAwMDAwMDAwfQp9CgovLyBNYXhJbnQyNTYgcmV0dXJucyB0aGUgbWF4aW11bSBzaWduZWQgMjU2LWJpdCBpbnRlZ2VyLCAyXjI1NSAtIDEuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBtYXhpbXVtOiBBIGZyZXNoICpJbnQgY29udGFpbmluZyB0aGUgbGFyZ2VzdCBwb3NpdGl2ZSBpbnQyNTYgdmFsdWUuCmZ1bmMgTWF4SW50MjU2KCkgKkludCB7CglyZXR1cm4gJkludHsweGZmZmZmZmZmZmZmZmZmZmYsIDB4ZmZmZmZmZmZmZmZmZmZmZiwgMHhmZmZmZmZmZmZmZmZmZmZmLCAweDdmZmZmZmZmZmZmZmZmZmZ9Cn0KCi8vIE5ld0ludCBjb25zdHJ1Y3RzIGEgc2lnbmVkIDI1Ni1iaXQgaW50ZWdlciBmcm9tIGFuIGludDY0LgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0gdmFsOiBTaWduZWQgNjQtYml0IHZhbHVlIHRvIHNpZ24tZXh0ZW5kIGludG8gMjU2IGJpdHMuCi8vCi8vIFJldHVybnM6Ci8vICAgLSB2YWx1ZTogQSBmcmVzaCAqSW50IHJlcHJlc2VudGluZyB2YWwuCmZ1bmMgTmV3SW50KHZhbCBpbnQ2NCkgKkludCB7Cgl6IDo9ICZJbnR7fQoJei5TZXRJbnQ2NCh2YWwpCglyZXR1cm4gegp9CgovLyBTZXQgY29waWVzIHRoZSBjb21wbGV0ZSAyNTYtYml0IHZhbHVlIGZyb20geCBpbnRvIHouCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBTb3VyY2UgSW50IHdob3NlIGZvdXIgbGltYnMgYXJlIGNvcGllZC4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSByZWNlaXZlciBhZnRlciBjb3B5aW5nIHguCmZ1bmMgKHogKkludCkgU2V0KHggKkludCkgKkludCB7Cgl6WzBdLCB6WzFdLCB6WzJdLCB6WzNdID0geFswXSwgeFsxXSwgeFsyXSwgeFszXQoJcmV0dXJuIHoKfQoKLy8gU2V0SW50NjQgYXNzaWducyB4IHRvIHogd2l0aCB0d28ncy1jb21wbGVtZW50IHNpZ24gZXh0ZW5zaW9uLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0geDogU2lnbmVkIDY0LWJpdCB2YWx1ZSB0byBzdG9yZS4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSByZWNlaXZlciByZXByZXNlbnRpbmcgeCBhcyBhbiBJbnQuCmZ1bmMgKHogKkludCkgU2V0SW50NjQoeCBpbnQ2NCkgKkludCB7CglpZiB4ID49IDAgewoJCXpbM10sIHpbMl0sIHpbMV0sIHpbMF0gPSAwLCAwLCAwLCB1aW50NjQoeCkKCQlyZXR1cm4gegoJfQoKCXpbM10sIHpbMl0sIHpbMV0sIHpbMF0gPSAweGZmZmZmZmZmZmZmZmZmZmYsIDB4ZmZmZmZmZmZmZmZmZmZmZiwgMHhmZmZmZmZmZmZmZmZmZmZmLCB1aW50NjQoeCkKCXJldHVybiB6Cn0KCi8vIElzSW50NjQgcmVwb3J0cyB3aGV0aGVyIHogY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBzaWduZWQgaW50NjQuCi8vCi8vIFJldHVybnM6Ci8vICAgLSBmaXRzOiBUcnVlIHdoZW4geiBpcyBpbiBbbWF0aC5NaW5JbnQ2NCwgbWF0aC5NYXhJbnQ2NF0sIGZhbHNlIG90aGVyd2lzZS4KZnVuYyAoeiAqSW50KSBJc0ludDY0KCkgYm9vbCB7CglyZXR1cm4gKCh6WzFdfHpbMl18elszXSkgPT0gMCAmJiB6WzBdIDw9IDB4N2ZmZmZmZmZmZmZmZmZmZikgfHwgLy8gemVybyBvciBwb3NpdGl2ZSBpbnQ2NAoJCSgoelsxXSZ6WzJdJnpbM10pID09IDB4ZmZmZmZmZmZmZmZmZmZmZiAmJiB6WzBdID49IDB4ODAwMDAwMDAwMDAwMDAwMCkgLy8gbmVnYXRpdmUgaW50NjQKfQoKLy8gSW50NjQgY29udmVydHMgeiB0byBpbnQ2NCBhZnRlciBjaGVja2luZyBpdHMgc2lnbmVkIHJhbmdlLgovLwovLyBSZXR1cm5zOgovLyAgIC0gdmFsdWU6IHoncyBleGFjdCBzaWduZWQgNjQtYml0IHZhbHVlLgovLwovLyBQYW5pY3MgaWYgeiBpcyBvdXRzaWRlIHRoZSBzaWduZWQgaW50NjQgcmFuZ2UuCmZ1bmMgKHogKkludCkgSW50NjQoKSBpbnQ2NCB7CglpZiAhei5Jc0ludDY0KCkgewoJCXBhbmljKCJpbnQyNTY6IGludDY0IG92ZXJmbG93IikKCX0KCXMgOj0gei5TaWduKCkKCWlmIHMgPT0gMCB7CgkJcmV0dXJuIDAKCX0KCWlmIHMgPiAwIHsKCQkvLyBvdmVyZmxvdyB3aGVuIHpbMF0gPiBtYXRoLk1heEludDY0CgkJcmV0dXJuIGludDY0KHpbMF0pCgl9CgkvLyAtKDJeNjQgLSB6WzBdKQoJcmV0dXJuIC1pbnQ2NChtYXRoLk1heFVpbnQ2NCAtIHpbMF0gKyAxKQp9CgovLyBTZXRVaW50NjQgYXNzaWducyB0aGUgbm9uLW5lZ2F0aXZlIHVpbnQ2NCB4IHRvIHosIGNsZWFyaW5nIGl0cyB1cHBlciBsaW1icy4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIHg6IFVuc2lnbmVkIDY0LWJpdCB2YWx1ZSB0byBzdG9yZS4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSByZWNlaXZlciByZXByZXNlbnRpbmcgeCBhcyBhIG5vbi1uZWdhdGl2ZSBJbnQuCmZ1bmMgKHogKkludCkgU2V0VWludDY0KHggdWludDY0KSAqSW50IHsKCXpbM10sIHpbMl0sIHpbMV0sIHpbMF0gPSAwLCAwLCAwLCB4CglyZXR1cm4gegp9CgovLyBJc1VpbnQ2NCByZXBvcnRzIHdoZXRoZXIgeiBmaXRzIGluIGFuIHVuc2lnbmVkIDY0LWJpdCB3b3JkLgovLwovLyBSZXR1cm5zOgovLyAgIC0gZml0czogVHJ1ZSB3aGVuIGFsbCB0aHJlZSB1cHBlciA2NC1iaXQgbGltYnMgb2YgeiBhcmUgemVyby4KZnVuYyAoeiAqSW50KSBJc1VpbnQ2NCgpIGJvb2wgewoJcmV0dXJuICh6WzFdIHwgelsyXSB8IHpbM10pID09IDAKfQoKLy8gVWludDY0IGNvbnZlcnRzIHogdG8gdWludDY0IHdoZW4gaXRzIHVwcGVyIDE5MiBiaXRzIGFyZSB6ZXJvLgovLwovLyBSZXR1cm5zOgovLyAgIC0gdmFsdWU6IHoncyBleGFjdCB1bnNpZ25lZCA2NC1iaXQgdmFsdWUuCi8vCi8vIFBhbmljcyBpZiBhbnkgdXBwZXIgbGltYiBvZiB6IGlzIG5vbi16ZXJvLgpmdW5jICh6ICpJbnQpIFVpbnQ2NCgpIHVpbnQ2NCB7CglpZiAhei5Jc1VpbnQ2NCgpIHsKCQlwYW5pYygiaW50MjU2OiB1aW50NjQgb3ZlcmZsb3ciKQoJfQoJcmV0dXJuIHpbMF0KfQoKLy8gQWJzIHJldHVybnMgdGhlIHVuc2lnbmVkIG1hZ25pdHVkZSBvZiB6LgovLwovLyBSZXR1cm5zOgovLyAgIC0gbWFnbml0dWRlOiBBICp1MjU2LlVpbnQgY29udGFpbmluZyB8enw7IG5lZ2F0aXZlIHZhbHVlcyBhcmUgbmVnYXRlZCBiZWZvcmUgY29udmVyc2lvbi4KLy8KLy8gUGFuaWNzIGZvciBNaW5JbnQyNTYgYmVjYXVzZSBOZWdPdmVyZmxvdyBjYW5ub3QgcmVwcmVzZW50IGl0cyBwb3NpdGl2ZSBtYWduaXR1ZGUgYXMgSW50LgpmdW5jICh6ICpJbnQpIEFicygpICp1MjU2LlVpbnQgewoJaWYgei5Jc05lZygpIHsKCQluZWcgOj0gbmV3KEludCkuTmVnT3ZlcmZsb3coeikKCQlyZXR1cm4gJnUyNTYuVWludHtuZWdbMF0sIG5lZ1sxXSwgbmVnWzJdLCBuZWdbM119Cgl9CglyZXR1cm4gJnUyNTYuVWludHt6WzBdLCB6WzFdLCB6WzJdLCB6WzNdfQp9CgovLyBTaWduIHJlcG9ydHMgdGhlIHNpZ25lZCBzaWduIG9mIHouCi8vCi8vIFJldHVybnM6Ci8vICAgLSBzaWduOiAtMSBmb3IgbmVnYXRpdmUgeiwgMCBmb3IgemVybyB6LCBvciAxIGZvciBwb3NpdGl2ZSB6LgpmdW5jICh6ICpJbnQpIFNpZ24oKSBpbnQgewoJaWYgei5Jc1plcm8oKSB7CgkJcmV0dXJuIDAKCX0KCWlmIHpbM10mMHg4MDAwMDAwMDAwMDAwMDAwID09IDAgewoJCXJldHVybiAxCgl9CglyZXR1cm4gLTEKfQoKLy8gSXNaZXJvIHJlcG9ydHMgd2hldGhlciBldmVyeSBsaW1iIG9mIHogaXMgemVyby4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGlzWmVybzogVHJ1ZSBleGFjdGx5IHdoZW4geiByZXByZXNlbnRzIHRoZSBzaWduZWQgdmFsdWUgMC4KZnVuYyAoeiAqSW50KSBJc1plcm8oKSBib29sIHsKCXJldHVybiAoelswXSB8IHpbMV0gfCB6WzJdIHwgelszXSkgPT0gMAp9CgovLyBJc09uZSByZXBvcnRzIHdoZXRoZXIgeiByZXByZXNlbnRzIHRoZSBzaWduZWQgdmFsdWUgMS4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGlzT25lOiBUcnVlIGV4YWN0bHkgd2hlbiB0aGUgbG93IGxpbWIgaXMgMSBhbmQgYWxsIHVwcGVyIGxpbWJzIGFyZSB6ZXJvLgpmdW5jICh6ICpJbnQpIElzT25lKCkgYm9vbCB7CglyZXR1cm4gKHpbMF0gPT0gMSkgJiYgKHpbMV18elsyXXx6WzNdKSA9PSAwCn0KCi8vIElzTmVnIHJlcG9ydHMgd2hldGhlciB6IGhhcyBpdHMgc2lnbmVkIHR3bydzLWNvbXBsZW1lbnQgc2lnbiBiaXQgc2V0LgovLwovLyBSZXR1cm5zOgovLyAgIC0gaXNOZWdhdGl2ZTogVHJ1ZSB3aGVuIHogaXMgbmVnYXRpdmUsIGluY2x1ZGluZyBNaW5JbnQyNTYuCmZ1bmMgKHogKkludCkgSXNOZWcoKSBib29sIHsKCXJldHVybiB6WzNdJjB4ODAwMDAwMDAwMDAwMDAwMCAhPSAwCn0KCi8vIElzUG9zaXRpdmUgcmVwb3J0cyB3aGV0aGVyIHogaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHplcm8uCi8vCi8vIFJldHVybnM6Ci8vICAgLSBpc1Bvc2l0aXZlOiBUcnVlIHdoZW4gdGhlIHNpZ24gYml0IGlzIGNsZWFyIGFuZCBhdCBsZWFzdCBvbmUgdmFsdWUgYml0IGlzIHNldC4KZnVuYyAoeiAqSW50KSBJc1Bvc2l0aXZlKCkgYm9vbCB7CglyZXR1cm4gKHpbM10mMHg4MDAwMDAwMDAwMDAwMDAwKSA9PSAwICYmICh6WzNdfHpbMl18elsxXXx6WzBdKSAhPSAwCn0KCi8vIElzTWluSTI1NiByZXBvcnRzIHdoZXRoZXIgeiBlcXVhbHMgTWluSW50MjU2LgovLwovLyBSZXR1cm5zOgovLyAgIC0gaXNNaW5pbXVtOiBUcnVlIG9ubHkgZm9yIHRoZSBiaXQgcGF0dGVybiAweDgwMDAuLi4wMDAwLgpmdW5jICh6ICpJbnQpIElzTWluSTI1NigpIGJvb2wgewoJcmV0dXJuICh6WzNdID09IDB4ODAwMDAwMDAwMDAwMDAwMCkgJiYgKCh6WzJdIHwgelsxXSB8IHpbMF0pID09IDApCn0KCi8vIE5lZ092ZXJmbG93IGNvbXB1dGVzIHRoZSB0d28ncy1jb21wbGVtZW50IG5lZ2F0aW9uIG9mIHggYW5kIHJlamVjdHMgdGhlCi8vIG9uZSB2YWx1ZSB3aG9zZSBwb3NpdGl2ZSBtYWduaXR1ZGUgaXMgb3V0c2lkZSBzaWduZWQgaW50MjU2LgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0geDogU2lnbmVkIDI1Ni1iaXQgdmFsdWUgdG8gbmVnYXRlLgovLwovLyBSZXR1cm5zOgovLyAgIC0gejogVGhlIHJlY2VpdmVyIGNvbnRhaW5pbmcgLXguCi8vCi8vIFBhbmljcyB3aGVuIHggaXMgTWluSW50MjU2LgpmdW5jICh6ICpJbnQpIE5lZ092ZXJmbG93KHggKkludCkgKkludCB7CglpZiB4WzNdID09IDB4ODAwMDAwMDAwMDAwMDAwMCAmJiB4WzJdID09IDAgJiYgeFsxXSA9PSAwICYmIHhbMF0gPT0gMCB7CgkJcGFuaWMoImludDI1Njogb3ZlcmZsb3ciKQoJfQoKCXJldHVybiB6Lk5lZyh4KQp9CgovLyBOZWcgY29tcHV0ZXMgdGhlIHR3bydzLWNvbXBsZW1lbnQgbmVnYXRpb24gb2YgeCBtb2R1bG8gMl4yNTYuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiAyNTYtYml0IHZhbHVlIHdob3NlIGJpdHMgYXJlIGNvbXBsZW1lbnRlZCBhbmQgaW5jcmVtZW50ZWQuCi8vCi8vIFJldHVybnM6Ci8vICAgLSB6OiBUaGUgcmVjZWl2ZXIgY29udGFpbmluZyB0aGUgd3JhcHBlZCBuZWdhdGlvbiBvZiB4LgpmdW5jICh6ICpJbnQpIE5lZyh4ICpJbnQpICpJbnQgewoJdmFyIGNhcnJ5IHVpbnQ2NAoJelswXSwgelsxXSwgelsyXSwgelszXSA9IF54WzBdLCBeeFsxXSwgXnhbMl0sIF54WzNdCgl6WzBdLCBjYXJyeSA9IGJpdHMuQWRkNjQoelswXSwgMSwgMCkKCXpbMV0sIGNhcnJ5ID0gYml0cy5BZGQ2NCh6WzFdLCAwLCBjYXJyeSkKCXpbMl0sIGNhcnJ5ID0gYml0cy5BZGQ2NCh6WzJdLCAwLCBjYXJyeSkKCXpbM10gKz0gY2FycnkKCXJldHVybiB6Cn0KCi8vIEVxIHJlcG9ydHMgd2hldGhlciB6IGFuZCB4IGhhdmUgaWRlbnRpY2FsIDI1Ni1iaXQgcmVwcmVzZW50YXRpb25zLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0geDogSW50IHRvIGNvbXBhcmUgd2l0aCB6LgovLwovLyBSZXR1cm5zOgovLyAgIC0gZXF1YWw6IFRydWUgd2hlbiBhbGwgZm91ciBsaW1icyBtYXRjaC4KZnVuYyAoeiAqSW50KSBFcSh4ICpJbnQpIGJvb2wgewoJcmV0dXJuICh6WzBdID09IHhbMF0pICYmICh6WzFdID09IHhbMV0pICYmICh6WzJdID09IHhbMl0pICYmICh6WzNdID09IHhbM10pCn0KCi8vIE5lcSByZXBvcnRzIHdoZXRoZXIgeiBhbmQgeCBoYXZlIGRpZmZlcmVudCAyNTYtYml0IHJlcHJlc2VudGF0aW9ucy4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIHg6IEludCB0byBjb21wYXJlIHdpdGggei4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGRpZmZlcmVudDogVHJ1ZSB3aGVuIGF0IGxlYXN0IG9uZSBsaW1iIGRpZmZlcnMuCmZ1bmMgKHogKkludCkgTmVxKHggKkludCkgYm9vbCB7CglyZXR1cm4gIXouRXEoeCkKfQoKLy8gQWRkIGFkZHMgeCBhbmQgeSBtb2R1bG8gMl4yNTYuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBGaXJzdCBzaWduZWQgMjU2LWJpdCBhZGRlbmQuCi8vICAgLSB5OiBTZWNvbmQgc2lnbmVkIDI1Ni1iaXQgYWRkZW5kLgovLwovLyBSZXR1cm5zOgovLyAgIC0gejogVGhlIHJlY2VpdmVyIGNvbnRhaW5pbmcgdGhlIGxvdyAyNTYgYml0cyBvZiB4ICsgeS4KZnVuYyAoeiAqSW50KSBBZGQoeCwgeSAqSW50KSAqSW50IHsKCXZhciBjYXJyeSB1aW50NjQKCXpbMF0sIGNhcnJ5ID0gYml0cy5BZGQ2NCh4WzBdLCB5WzBdLCAwKQoJelsxXSwgY2FycnkgPSBiaXRzLkFkZDY0KHhbMV0sIHlbMV0sIGNhcnJ5KQoJelsyXSwgY2FycnkgPSBiaXRzLkFkZDY0KHhbMl0sIHlbMl0sIGNhcnJ5KQoJelszXSA9IHhbM10gKyB5WzNdICsgY2FycnkKCXJldHVybiB6Cn0KCi8vIEFkZE92ZXJmbG93IGFkZHMgeCBhbmQgeSBtb2R1bG8gMl4yNTYgYW5kIHJlcG9ydHMgc2lnbmVkIG92ZXJmbG93LgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0geDogRmlyc3Qgc2lnbmVkIDI1Ni1iaXQgYWRkZW5kLgovLyAgIC0geTogU2Vjb25kIHNpZ25lZCAyNTYtYml0IGFkZGVuZC4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSB3cmFwcGVkIDI1Ni1iaXQgc3VtLgovLyAgIC0gb3ZlcmZsb3c6IFRydWUgd2hlbiB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgc2lnbiBidXQgdGhlIHdyYXBwZWQgc3VtIGhhcyB0aGUgb3Bwb3NpdGUgc2lnbi4KZnVuYyAoeiAqSW50KSBBZGRPdmVyZmxvdyh4LCB5ICpJbnQpICgqSW50LCBib29sKSB7Cgl2YXIgY2FycnkgdWludDY0Cgl6WzBdLCBjYXJyeSA9IGJpdHMuQWRkNjQoeFswXSwgeVswXSwgMCkKCXpbMV0sIGNhcnJ5ID0gYml0cy5BZGQ2NCh4WzFdLCB5WzFdLCBjYXJyeSkKCXpbMl0sIGNhcnJ5ID0gYml0cy5BZGQ2NCh4WzJdLCB5WzJdLCBjYXJyeSkKCXpbM10gPSB4WzNdICsgeVszXSArIGNhcnJ5Cgl2YXIgb3ZlcmZsb3cgYm9vbAoJc2lnblgsIHNpZ25ZLCBzaWduWiA6PSB4LlNpZ24oKSwgeS5TaWduKCksIHouU2lnbigpCglpZiAoc2lnblggPT0gc2lnblkpICYmIChzaWduWCAhPSBzaWduWikgewoJCW92ZXJmbG93ID0gdHJ1ZQoJfQoJcmV0dXJuIHosIG92ZXJmbG93Cn0KCi8vIFN1YiBzdWJ0cmFjdHMgeSBmcm9tIHggbW9kdWxvIDJeMjU2LgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0geDogU2lnbmVkIDI1Ni1iaXQgbWludWVuZC4KLy8gICAtIHk6IFNpZ25lZCAyNTYtYml0IHN1YnRyYWhlbmQuCi8vCi8vIFJldHVybnM6Ci8vICAgLSB6OiBUaGUgcmVjZWl2ZXIgY29udGFpbmluZyB0aGUgbG93IDI1NiBiaXRzIG9mIHggLSB5LgpmdW5jICh6ICpJbnQpIFN1Yih4LCB5ICpJbnQpICpJbnQgewoJdmFyIGNhcnJ5IHVpbnQ2NAoJelswXSwgY2FycnkgPSBiaXRzLlN1YjY0KHhbMF0sIHlbMF0sIDApCgl6WzFdLCBjYXJyeSA9IGJpdHMuU3ViNjQoeFsxXSwgeVsxXSwgY2FycnkpCgl6WzJdLCBjYXJyeSA9IGJpdHMuU3ViNjQoeFsyXSwgeVsyXSwgY2FycnkpCgl6WzNdID0geFszXSAtIHlbM10gLSBjYXJyeQoJcmV0dXJuIHoKfQoKLy8gU3ViT3ZlcmZsb3cgc3VidHJhY3RzIHkgZnJvbSB4IG1vZHVsbyAyXjI1NiBhbmQgcmVwb3J0cyBzaWduZWQgb3ZlcmZsb3cuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBTaWduZWQgMjU2LWJpdCBtaW51ZW5kLgovLyAgIC0geTogU2lnbmVkIDI1Ni1iaXQgc3VidHJhaGVuZC4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSB3cmFwcGVkIDI1Ni1iaXQgZGlmZmVyZW5jZS4KLy8gICAtIG92ZXJmbG93OiBUcnVlIHdoZW4gdGhlIG1hdGhlbWF0aWNhbCBzaWduZWQgZGlmZmVyZW5jZSBpcyBvdXRzaWRlIHRoZSBpbnQyNTYgcmFuZ2UuCmZ1bmMgKHogKkludCkgU3ViT3ZlcmZsb3coeCwgeSAqSW50KSAoKkludCwgYm9vbCkgewoJdmFyIGNhcnJ5IHVpbnQ2NAoJelswXSwgY2FycnkgPSBiaXRzLlN1YjY0KHhbMF0sIHlbMF0sIDApCgl6WzFdLCBjYXJyeSA9IGJpdHMuU3ViNjQoeFsxXSwgeVsxXSwgY2FycnkpCgl6WzJdLCBjYXJyeSA9IGJpdHMuU3ViNjQoeFsyXSwgeVsyXSwgY2FycnkpCgl6WzNdID0geFszXSAtIHlbM10gLSBjYXJyeQoJdmFyIG92ZXJmbG93IGJvb2wKCXNpZ25YLCBzaWduWSwgc2lnblogOj0geC5TaWduKCksIHkuU2lnbigpLCB6LlNpZ24oKQoJaWYgKHNpZ25YID09IDAgJiYgeS5Jc01pbkkyNTYoKSkgfHwgKChzaWduWCAhPSAwKSAmJiAoc2lnblggIT0gc2lnblkpICYmIChzaWduWCAhPSBzaWduWikpIHsKCQlvdmVyZmxvdyA9IHRydWUKCX0KCXJldHVybiB6LCBvdmVyZmxvdwp9CgovLyBNdWwgbXVsdGlwbGllcyB4IGFuZCB5IG1vZHVsbyAyXjI1Ni4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIHg6IEZpcnN0IHNpZ25lZCAyNTYtYml0IGZhY3Rvci4KLy8gICAtIHk6IFNlY29uZCBzaWduZWQgMjU2LWJpdCBmYWN0b3IuCi8vCi8vIFJldHVybnM6Ci8vICAgLSB6OiBUaGUgcmVjZWl2ZXIgY29udGFpbmluZyB0aGUgbG93IDI1NiBiaXRzIG9mIHggKiB5LgpmdW5jICh6ICpJbnQpIE11bCh4LCB5ICpJbnQpICpJbnQgewoJdmFyICgKCQlyZXMgICAgICAgICAgICAgIEludAoJCWNhcnJ5ICAgICAgICAgICAgdWludDY0CgkJcmVzMSwgcmVzMiwgcmVzMyB1aW50NjQKCSkKCgljYXJyeSwgcmVzWzBdID0gYml0cy5NdWw2NCh4WzBdLCB5WzBdKQoJY2FycnksIHJlczEgPSB1bXVsSG9wKGNhcnJ5LCB4WzFdLCB5WzBdKQoJY2FycnksIHJlczIgPSB1bXVsSG9wKGNhcnJ5LCB4WzJdLCB5WzBdKQoJcmVzMyA9IHhbM10qeVswXSArIGNhcnJ5CgoJY2FycnksIHJlc1sxXSA9IHVtdWxIb3AocmVzMSwgeFswXSwgeVsxXSkKCWNhcnJ5LCByZXMyID0gdW11bFN0ZXAocmVzMiwgeFsxXSwgeVsxXSwgY2FycnkpCglyZXMzID0gcmVzMyArIHhbMl0qeVsxXSArIGNhcnJ5CgoJY2FycnksIHJlc1syXSA9IHVtdWxIb3AocmVzMiwgeFswXSwgeVsyXSkKCXJlczMgPSByZXMzICsgeFsxXSp5WzJdICsgY2FycnkKCglyZXNbM10gPSByZXMzICsgeFswXSp5WzNdCgoJcmV0dXJuIHouU2V0KCZyZXMpCn0KCi8vIE11bE92ZXJmbG93IG11bHRpcGxpZXMgeCBhbmQgeSBhbmQgcmVwb3J0cyB3aGV0aGVyIHRoZSBzaWduZWQgcHJvZHVjdCBleGNlZWRzIGludDI1Ni4KLy8gVGhlIHJldHVybmVkIHZhbHVlIGlzIHN0aWxsIHRoZSB3cmFwcGVkIGxvdyAyNTYtYml0IHByb2R1Y3QuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBGaXJzdCBzaWduZWQgMjU2LWJpdCBmYWN0b3IuCi8vICAgLSB5OiBTZWNvbmQgc2lnbmVkIDI1Ni1iaXQgZmFjdG9yLgovLwovLyBSZXR1cm5zOgovLyAgIC0gejogVGhlIGxvdyAyNTYgYml0cyBvZiB0aGUgc2lnbmVkIHByb2R1Y3QsIHdpdGggaXRzIHNpZ24gcmVzdG9yZWQuCi8vICAgLSBvdmVyZmxvdzogVHJ1ZSB3aGVuIHRoZSBtYXRoZW1hdGljYWwgcHJvZHVjdCBpcyBvdXRzaWRlIFstMl4yNTUsIDJeMjU1IC0gMV0uCmZ1bmMgKHogKkludCkgTXVsT3ZlcmZsb3coeCwgeSAqSW50KSAoKkludCwgYm9vbCkgewoJaWYgKHguSXNNaW5JMjU2KCkgJiYgeS5Jc09uZSgpKSB8fCAoeC5Jc09uZSgpICYmIHkuSXNNaW5JMjU2KCkpIHsKCQlyZXR1cm4gei5TZXQoTWluSW50MjU2KCkpLCBmYWxzZQoJfQoKCXZhciBmbGlwU2lnbiBib29sCgl4U2lnbiwgeVNpZ24gOj0geC5TaWduKCksIHkuU2lnbigpCglpZiB4U2lnbip5U2lnbiA9PSAtMSB7CgkJZmxpcFNpZ24gPSB0cnVlCgl9CgoJeENvcHkgOj0geC5DbG9uZSgpCgl5Q29weSA6PSB5LkNsb25lKCkKCglpZiB4U2lnbiA8IDAgewoJCXhDb3B5Lk5lZyh4Q29weSkKCX0KCWlmIHlTaWduIDwgMCB7CgkJeUNvcHkuTmVnKHlDb3B5KQoJfQoKCXAgOj0gdW11bCh4Q29weSwgeUNvcHkpCgl6WzBdLCB6WzFdLCB6WzJdLCB6WzNdID0gcFswXSwgcFsxXSwgcFsyXSwgcFszXQoKCXZhciBvdmVyZmxvdyBib29sCglpZiAocFs0XSB8IHBbNV0gfCBwWzZdIHwgcFs3XSkgIT0gMCB7CgkJb3ZlcmZsb3cgPSB0cnVlCgl9IGVsc2UgaWYgei5Jc05lZygpIHsKCQkvLyBUaGUgMjU2dGggYml0IGlzIHNldCwgd2hpY2ggbWVhbnMgdGhlIGFic29sdXRlIHZhbHVlIGlzID49IDJeMjU1CgkJLy8gVGhpcyBpcyBvbmx5IHZhbGlkIGlmIHRoZSByZXN1bHQgc2hvdWxkIGJlIGV4YWN0bHkgLTJeMjU1CgkJaWYgIWZsaXBTaWduIHx8ICF6LklzTWluSTI1NigpIHsKCQkJb3ZlcmZsb3cgPSB0cnVlCgkJfQoJfQoKCWlmIGZsaXBTaWduIHsKCQl6Lk5lZyh6KQoJfQoKCXJldHVybiB6LCBvdmVyZmxvdwp9CgpmdW5jIHVtdWwoeCwgeSAqSW50KSBbOF11aW50NjQgewoJdmFyICgKCQlyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICBbOF11aW50NjQKCQljYXJyeSwgY2Fycnk0LCBjYXJyeTUsIGNhcnJ5NiB1aW50NjQKCQlyZXMxLCByZXMyLCByZXMzLCByZXM0LCByZXM1ICB1aW50NjQKCSkKCgljYXJyeSwgcmVzWzBdID0gYml0cy5NdWw2NCh4WzBdLCB5WzBdKQoJY2FycnksIHJlczEgPSB1bXVsSG9wKGNhcnJ5LCB4WzFdLCB5WzBdKQoJY2FycnksIHJlczIgPSB1bXVsSG9wKGNhcnJ5LCB4WzJdLCB5WzBdKQoJY2Fycnk0LCByZXMzID0gdW11bEhvcChjYXJyeSwgeFszXSwgeVswXSkKCgljYXJyeSwgcmVzWzFdID0gdW11bEhvcChyZXMxLCB4WzBdLCB5WzFdKQoJY2FycnksIHJlczIgPSB1bXVsU3RlcChyZXMyLCB4WzFdLCB5WzFdLCBjYXJyeSkKCWNhcnJ5LCByZXMzID0gdW11bFN0ZXAocmVzMywgeFsyXSwgeVsxXSwgY2FycnkpCgljYXJyeTUsIHJlczQgPSB1bXVsU3RlcChjYXJyeTQsIHhbM10sIHlbMV0sIGNhcnJ5KQoKCWNhcnJ5LCByZXNbMl0gPSB1bXVsSG9wKHJlczIsIHhbMF0sIHlbMl0pCgljYXJyeSwgcmVzMyA9IHVtdWxTdGVwKHJlczMsIHhbMV0sIHlbMl0sIGNhcnJ5KQoJY2FycnksIHJlczQgPSB1bXVsU3RlcChyZXM0LCB4WzJdLCB5WzJdLCBjYXJyeSkKCWNhcnJ5NiwgcmVzNSA9IHVtdWxTdGVwKGNhcnJ5NSwgeFszXSwgeVsyXSwgY2FycnkpCgoJY2FycnksIHJlc1szXSA9IHVtdWxIb3AocmVzMywgeFswXSwgeVszXSkKCWNhcnJ5LCByZXNbNF0gPSB1bXVsU3RlcChyZXM0LCB4WzFdLCB5WzNdLCBjYXJyeSkKCWNhcnJ5LCByZXNbNV0gPSB1bXVsU3RlcChyZXM1LCB4WzJdLCB5WzNdLCBjYXJyeSkKCXJlc1s3XSwgcmVzWzZdID0gdW11bFN0ZXAoY2Fycnk2LCB4WzNdLCB5WzNdLCBjYXJyeSkKCglyZXR1cm4gcmVzCn0KCmZ1bmMgdW11bFN0ZXAoeiwgeCwgeSwgY2FycnkgdWludDY0KSAoaGksIGxvIHVpbnQ2NCkgewoJaGksIGxvID0gYml0cy5NdWw2NCh4LCB5KQoJbG8sIGNhcnJ5ID0gYml0cy5BZGQ2NChsbywgY2FycnksIDApCgloaSArPSBjYXJyeQoJbG8sIGNhcnJ5ID0gYml0cy5BZGQ2NChsbywgeiwgMCkKCWhpICs9IGNhcnJ5CglyZXR1cm4gaGksIGxvCn0KCmZ1bmMgdW11bEhvcCh6LCB4LCB5IHVpbnQ2NCkgKGhpLCBsbyB1aW50NjQpIHsKCWhpLCBsbyA9IGJpdHMuTXVsNjQoeCwgeSkKCWxvLCBjYXJyeSA6PSBiaXRzLkFkZDY0KGxvLCB6LCAwKQoJaGkgKz0gY2FycnkKCXJldHVybiBoaSwgbG8KfQoKLy8gQ2xlYXIgc2V0cyBldmVyeSBsaW1iIG9mIHogdG8gemVyby4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSByZWNlaXZlciByZXByZXNlbnRpbmcgdGhlIHNpZ25lZCB2YWx1ZSAwLgpmdW5jICh6ICpJbnQpIENsZWFyKCkgKkludCB7Cgl6WzBdLCB6WzFdLCB6WzJdLCB6WzNdID0gMCwgMCwgMCwgMAoJcmV0dXJuIHoKfQoKLy8gU2V0T25lIHNldHMgeiB0byB0aGUgc2lnbmVkIHZhbHVlIDEuCi8vCi8vIFJldHVybnM6Ci8vICAgLSB6OiBUaGUgcmVjZWl2ZXIgd2l0aCBvbmx5IGl0cyBsZWFzdC1zaWduaWZpY2FudCBiaXQgc2V0LgpmdW5jICh6ICpJbnQpIFNldE9uZSgpICpJbnQgewoJelszXSwgelsyXSwgelsxXSwgelswXSA9IDAsIDAsIDAsIDEKCXJldHVybiB6Cn0KCi8vIFNldEFsbEJpdHNPbmUgc2V0cyBldmVyeSBiaXQgb2YgeiB0byBvbmUsIHRoZSB0d28ncy1jb21wbGVtZW50IHJlcHJlc2VudGF0aW9uIG9mIC0xLgovLwovLyBSZXR1cm5zOgovLyAgIC0gejogVGhlIHJlY2VpdmVyIGNvbnRhaW5pbmcgdGhlIGFsbC1vbmVzIDI1Ni1iaXQgcGF0dGVybi4KZnVuYyAoeiAqSW50KSBTZXRBbGxCaXRzT25lKCkgKkludCB7Cgl6WzBdLCB6WzFdLCB6WzJdLCB6WzNdID0gMHhmZmZmZmZmZmZmZmZmZmZmLCAweGZmZmZmZmZmZmZmZmZmZmYsIDB4ZmZmZmZmZmZmZmZmZmZmZiwgMHhmZmZmZmZmZmZmZmZmZmZmCglyZXR1cm4gegp9CgovLyBEaXYgZGl2aWRlcyBzaWduZWQgMjU2LWJpdCB4IGJ5IHksIHRydW5jYXRpbmcgdGhlIHF1b3RpZW50IHRvd2FyZCB6ZXJvLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0geDogU2lnbmVkIDI1Ni1iaXQgZGl2aWRlbmQuCi8vICAgLSB5OiBTaWduZWQgMjU2LWJpdCBkaXZpc29yLgovLwovLyBSZXR1cm5zOgovLyAgIC0gejogVGhlIHJlY2VpdmVyIGNvbnRhaW5pbmcgdGhlIHNpZ25lZCBxdW90aWVudCB4IC8geS4KLy8KLy8gUGFuaWNzIGlmIHkgaXMgemVyby4KZnVuYyAoeiAqSW50KSBEaXYoeCwgeSAqSW50KSAqSW50IHsKCWlmIHguU2lnbigpID4gMCB7CgkJaWYgeS5TaWduKCkgPiAwIHsKCQkJcmV0dXJuIHoudXF1byh4LCB5KQoJCX0KCQl6LnVxdW8oeCwgbmV3KEludCkuTmVnKHkpKQoJCXJldHVybiB6Lk5lZyh6KQoJfQoJaWYgeS5TaWduKCkgPCAwIHsKCQlyZXR1cm4gei51cXVvKG5ldyhJbnQpLk5lZyh4KSwgbmV3KEludCkuTmVnKHkpKQoJfQoJei51cXVvKG5ldyhJbnQpLk5lZyh4KSwgeSkKCXJldHVybiB6Lk5lZyh6KQp9CgpmdW5jICh6ICpJbnQpIHVxdW8oeCwgeSAqSW50KSAqSW50IHsKCWlmIHkuSXNaZXJvKCkgewoJCXBhbmljKCJ6ZXJvIGRpdmlzaW9uIikKCX0KCWlmIHguSXNaZXJvKCkgewoJCXJldHVybiB6LkNsZWFyKCkKCX0KCWlmIHguRXEoeSkgewoJCXJldHVybiB6LlNldE9uZSgpCgl9CglpZiB4LklzSW50NjQoKSAmJiB5LklzSW50NjQoKSB7CgkJcmV0dXJuIHouU2V0SW50NjQoeC5JbnQ2NCgpIC8geS5JbnQ2NCgpKQoJfQoJcXVvdCA6PSBJbnR7fQoJdWRpdnJlbShxdW90WzpdLCB4WzpdLCB5KQoJcmV0dXJuIHouU2V0KCZxdW90KQp9CgovLyBSZW0gY29tcHV0ZXMgdGhlIHNpZ25lZCByZW1haW5kZXIgb2YgeCBkaXZpZGVkIGJ5IHksIHByZXNlcnZpbmcgeCdzIHNpZ24uCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBTaWduZWQgMjU2LWJpdCBkaXZpZGVuZC4KLy8gICAtIHk6IFNpZ25lZCAyNTYtYml0IGRpdmlzb3IuCi8vCi8vIFJldHVybnM6Ci8vICAgLSB6OiBUaGUgcmVjZWl2ZXIgY29udGFpbmluZyB4ICUgeSwgd2l0aCBtYWduaXR1ZGUgbGVzcyB0aGFuIHx5fC4KLy8KLy8gUGFuaWNzIGlmIHkgaXMgemVyby4KZnVuYyAoeiAqSW50KSBSZW0oeCwgeSAqSW50KSAqSW50IHsKCWlmIHguU2lnbigpID4gMCB7CgkJaWYgeS5TaWduKCkgPiAwIHsKCQkJcmV0dXJuIHoudXJlbSh4LCB5KQoJCX0KCQlyZXR1cm4gei51cmVtKHgsIG5ldyhJbnQpLk5lZyh5KSkKCX0KCWlmIHkuU2lnbigpIDwgMCB7CgkJei51cmVtKG5ldyhJbnQpLk5lZyh4KSwgbmV3KEludCkuTmVnKHkpKQoJCXJldHVybiB6Lk5lZyh6KQoJfQoJei51cmVtKG5ldyhJbnQpLk5lZyh4KSwgeSkKCXJldHVybiB6Lk5lZyh6KQp9CgpmdW5jICh6ICpJbnQpIHVyZW0oeCwgeSAqSW50KSAqSW50IHsKCWlmIHkuSXNaZXJvKCkgewoJCXBhbmljKCJ6ZXJvIGRpdmlzaW9uIikKCX0KCWlmIHguSXNaZXJvKCkgewoJCXJldHVybiB6LkNsZWFyKCkKCX0KCWlmIHguRXEoeSkgewoJCXJldHVybiB6LkNsZWFyKCkKCX0KCWlmIHguSXNJbnQ2NCgpICYmIHkuSXNJbnQ2NCgpIHsKCQl4SW50NjQgOj0geC5JbnQ2NCgpCgkJeUludDY0IDo9IHkuSW50NjQoKQoJCXJldHVybiB6LlNldEludDY0KHhJbnQ2NCAlIHlJbnQ2NCkKCX0KCXF1b3QgOj0gSW50e30KCXJlbSA6PSB1ZGl2cmVtKHF1b3RbOl0sIHhbOl0sIHkpCglyZXR1cm4gei5TZXQoJnJlbSkKfQoKLy8gTHQgcmVwb3J0cyB3aGV0aGVyIHogaXMgbGVzcyB0aGFuIHggYXMgc2lnbmVkIGludDI1NiB2YWx1ZXMuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBTaWduZWQgMjU2LWJpdCB2YWx1ZSB0byBjb21wYXJlIHdpdGggei4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGxlc3M6IFRydWUgd2hlbiB6IDwgeC4KZnVuYyAoeiAqSW50KSBMdCh4ICpJbnQpIGJvb2wgewoJcmV0dXJuIHouQ21wKHgpIDwgMAp9CgovLyBMdGUgcmVwb3J0cyB3aGV0aGVyIHogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHggYXMgc2lnbmVkIGludDI1NiB2YWx1ZXMuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBTaWduZWQgMjU2LWJpdCB2YWx1ZSB0byBjb21wYXJlIHdpdGggei4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGxlc3NPckVxdWFsOiBUcnVlIHdoZW4geiA8PSB4LgpmdW5jICh6ICpJbnQpIEx0ZSh4ICpJbnQpIGJvb2wgewoJcmV0dXJuIHouQ21wKHgpIDw9IDAKfQoKLy8gR3QgcmVwb3J0cyB3aGV0aGVyIHogaXMgZ3JlYXRlciB0aGFuIHggYXMgc2lnbmVkIGludDI1NiB2YWx1ZXMuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBTaWduZWQgMjU2LWJpdCB2YWx1ZSB0byBjb21wYXJlIHdpdGggei4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGdyZWF0ZXI6IFRydWUgd2hlbiB6ID4geC4KZnVuYyAoeiAqSW50KSBHdCh4ICpJbnQpIGJvb2wgewoJcmV0dXJuIHouQ21wKHgpID4gMAp9CgovLyBHdGUgcmVwb3J0cyB3aGV0aGVyIHogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHggYXMgc2lnbmVkIGludDI1NiB2YWx1ZXMuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBTaWduZWQgMjU2LWJpdCB2YWx1ZSB0byBjb21wYXJlIHdpdGggei4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGdyZWF0ZXJPckVxdWFsOiBUcnVlIHdoZW4geiA+PSB4LgpmdW5jICh6ICpJbnQpIEd0ZSh4ICpJbnQpIGJvb2wgewoJcmV0dXJuIHouQ21wKHgpID49IDAKfQoKLy8gQ21wIGNvbXBhcmVzIHogYW5kIHggYXMgc2lnbmVkIHR3bydzLWNvbXBsZW1lbnQgaW50MjU2IHZhbHVlcy4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIHg6IFNpZ25lZCAyNTYtYml0IHZhbHVlIHRvIGNvbXBhcmUgd2l0aCB6LgovLwovLyBSZXR1cm5zOgovLyAgIC0gY29tcGFyaXNvbjogLTEgd2hlbiB6IDwgeCwgMCB3aGVuIHogPT0geCwgYW5kIDEgd2hlbiB6ID4geC4KZnVuYyAoeiAqSW50KSBDbXAoeCAqSW50KSBpbnQgewoJem5lZyA6PSBpbnQ4KHpbM10gPj4gNjMpCgl4bmVnIDo9IGludDgoeFszXSA+PiA2MykKCWlmIHpuZWcgIT0geG5lZyB7CgkJcmV0dXJuIGludCh4bmVnIC0gem5lZykKCX0KCWQwLCBjYXJyeSA6PSBiaXRzLlN1YjY0KHpbMF0sIHhbMF0sIDApCglkMSwgY2FycnkgOj0gYml0cy5TdWI2NCh6WzFdLCB4WzFdLCBjYXJyeSkKCWQyLCBjYXJyeSA6PSBiaXRzLlN1YjY0KHpbMl0sIHhbMl0sIGNhcnJ5KQoJZDMsIGNhcnJ5IDo9IGJpdHMuU3ViNjQoelszXSwgeFszXSwgY2FycnkpCglpZiBjYXJyeSA9PSAxIHsKCQlyZXR1cm4gLTEKCX0KCWlmIGQwfGQxfGQyfGQzID09IDAgewoJCXJldHVybiAwCgl9CglyZXR1cm4gMQp9CgovLyBDbG9uZSByZXR1cm5zIGFuIGluZGVwZW5kZW50IGNvcHkgb2Ygei4KLy8KLy8gUmV0dXJuczoKLy8gICAtIGNsb25lOiBBIGZyZXNoICpJbnQgd2l0aCB0aGUgc2FtZSBmb3VyIGxpbWJzIGFzIHouCmZ1bmMgKHogKkludCkgQ2xvbmUoKSAqSW50IHsKCXJldHVybiAmSW50e3pbMF0sIHpbMV0sIHpbMl0sIHpbM119Cn0KCi8vIE9yIHNldHMgeiB0byB0aGUgYml0d2lzZSBPUiBvZiB4IGFuZCB5LgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0geDogRmlyc3QgMjU2LWJpdCBvcGVyYW5kLgovLyAgIC0geTogU2Vjb25kIDI1Ni1iaXQgb3BlcmFuZC4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSByZWNlaXZlciBjb250YWluaW5nIHggfCB5LgpmdW5jICh6ICpJbnQpIE9yKHgsIHkgKkludCkgKkludCB7Cgl6WzBdID0geFswXSB8IHlbMF0KCXpbMV0gPSB4WzFdIHwgeVsxXQoJelsyXSA9IHhbMl0gfCB5WzJdCgl6WzNdID0geFszXSB8IHlbM10KCXJldHVybiB6Cn0KCi8vIEFuZCBzZXRzIHogdG8gdGhlIGJpdHdpc2UgQU5EIG9mIHggYW5kIHkuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBGaXJzdCAyNTYtYml0IG9wZXJhbmQuCi8vICAgLSB5OiBTZWNvbmQgMjU2LWJpdCBvcGVyYW5kLgovLwovLyBSZXR1cm5zOgovLyAgIC0gejogVGhlIHJlY2VpdmVyIGNvbnRhaW5pbmcgeCAmIHkuCmZ1bmMgKHogKkludCkgQW5kKHgsIHkgKkludCkgKkludCB7Cgl6WzBdID0geFswXSAmIHlbMF0KCXpbMV0gPSB4WzFdICYgeVsxXQoJelsyXSA9IHhbMl0gJiB5WzJdCgl6WzNdID0geFszXSAmIHlbM10KCXJldHVybiB6Cn0KCi8vIFhvciBzZXRzIHogdG8gdGhlIGJpdHdpc2UgZXhjbHVzaXZlIE9SIG9mIHggYW5kIHkuCi8vCi8vIFBhcmFtZXRlcnM6Ci8vICAgLSB4OiBGaXJzdCAyNTYtYml0IG9wZXJhbmQuCi8vICAgLSB5OiBTZWNvbmQgMjU2LWJpdCBvcGVyYW5kLgovLwovLyBSZXR1cm5zOgovLyAgIC0gejogVGhlIHJlY2VpdmVyIGNvbnRhaW5pbmcgeCBeIHkuCmZ1bmMgKHogKkludCkgWG9yKHgsIHkgKkludCkgKkludCB7Cgl6WzBdID0geFswXSBeIHlbMF0KCXpbMV0gPSB4WzFdIF4geVsxXQoJelsyXSA9IHhbMl0gXiB5WzJdCgl6WzNdID0geFszXSBeIHlbM10KCXJldHVybiB6Cn0KCi8vIE5vdCBzZXRzIHogdG8gdGhlIGJpdHdpc2UgY29tcGxlbWVudCBvZiB4LgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0geDogMjU2LWJpdCBvcGVyYW5kIHdob3NlIGJpdHMgYXJlIGNvbXBsZW1lbnRlZC4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSByZWNlaXZlciBjb250YWluaW5nIF54LgpmdW5jICh6ICpJbnQpIE5vdCh4ICpJbnQpICpJbnQgewoJelswXSA9IF54WzBdCgl6WzFdID0gXnhbMV0KCXpbMl0gPSBeeFsyXQoJelszXSA9IF54WzNdCglyZXR1cm4gegp9CgovLyBMc2ggc2V0cyB6IHRvIHggbGVmdC1zaGlmdGVkIGJ5IG4gYml0cywgdHJ1bmNhdGluZyB0byAyNTYgYml0cy4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIHg6IDI1Ni1iaXQgYml0IHBhdHRlcm4gdG8gc2hpZnQuCi8vICAgLSBuOiBOdW1iZXIgb2YgYml0IHBvc2l0aW9ucyB0byBzaGlmdCBsZWZ0OyBuID49IDI1NiB5aWVsZHMgemVyby4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSByZWNlaXZlciBjb250YWluaW5nICh4IDw8IG4pIG1vZHVsbyAyXjI1Ni4KZnVuYyAoeiAqSW50KSBMc2goeCAqSW50LCBuIHVpbnQpICpJbnQgewoJaWYgbiA9PSAwIHsKCQlyZXR1cm4gei5TZXQoeCkKCX0KCWlmIG4gPj0gMjU2IHsKCQlyZXR1cm4gei5DbGVhcigpCgl9CgkvLyBIYW5kbGUgZXhhY3QgbXVsdGlwbGVzIG9mIDY0IHNlcGFyYXRlbHkgdG8gYXZvaWQgNjQtYml0IHNoaWZ0IGlzc3VlcwoJaWYgbiYweDNmID09IDAgewoJCXN3aXRjaCBuIHsKCQljYXNlIDY0OgoJCQl6WzNdLCB6WzJdLCB6WzFdLCB6WzBdID0geFsyXSwgeFsxXSwgeFswXSwgMAoJCWNhc2UgMTI4OgoJCQl6WzNdLCB6WzJdLCB6WzFdLCB6WzBdID0geFsxXSwgeFswXSwgMCwgMAoJCWNhc2UgMTkyOgoJCQl6WzNdLCB6WzJdLCB6WzFdLCB6WzBdID0geFswXSwgMCwgMCwgMAoJCX0KCQlyZXR1cm4gegoJfQoJc3dpdGNoIHsKCWNhc2UgbiA+IDE5MjoKCQluIC09IDE5MgoJCXpbM10sIHpbMl0sIHpbMV0sIHpbMF0gPSB4WzBdPDxuLCAwLCAwLCAwCgljYXNlIG4gPiAxMjg6CgkJbiAtPSAxMjgKCQl6WzNdID0gKHhbMV0gPDwgbikgfCAoeFswXSA+PiAoNjQgLSBuKSkKCQl6WzJdID0geFswXSA8PCBuCgkJelsxXSwgelswXSA9IDAsIDAKCWNhc2UgbiA+IDY0OgoJCW4gLT0gNjQKCQl6WzNdID0gKHhbMl0gPDwgbikgfCAoeFsxXSA+PiAoNjQgLSBuKSkKCQl6WzJdID0gKHhbMV0gPDwgbikgfCAoeFswXSA+PiAoNjQgLSBuKSkKCQl6WzFdID0geFswXSA8PCBuCgkJelswXSA9IDAKCWRlZmF1bHQ6CgkJelszXSA9ICh4WzNdIDw8IG4pIHwgKHhbMl0gPj4gKDY0IC0gbikpCgkJelsyXSA9ICh4WzJdIDw8IG4pIHwgKHhbMV0gPj4gKDY0IC0gbikpCgkJelsxXSA9ICh4WzFdIDw8IG4pIHwgKHhbMF0gPj4gKDY0IC0gbikpCgkJelswXSA9IHhbMF0gPDwgbgoJfQoJcmV0dXJuIHoKfQoKLy8gUnNoIHNoaWZ0cyB4IHJpZ2h0IGJ5IG4gYml0cyB1c2luZyBzaWduZWQgYXJpdGhtZXRpYyBzZW1hbnRpY3MuCi8vIE5vbi1uZWdhdGl2ZSB2YWx1ZXMgcmVjZWl2ZSB6ZXJvLWZpbGw7IG5lZ2F0aXZlIHZhbHVlcyByZWNlaXZlIHNpZ24gZXh0ZW5zaW9uLgovLwovLyBQYXJhbWV0ZXJzOgovLyAgIC0geDogU2lnbmVkIDI1Ni1iaXQgdmFsdWUgdG8gc2hpZnQuCi8vICAgLSBuOiBOdW1iZXIgb2YgYml0IHBvc2l0aW9ucyB0byBzaGlmdCByaWdodC4KLy8KLy8gUmV0dXJuczoKLy8gICAtIHo6IFRoZSByZWNlaXZlciBjb250YWluaW5nIHRoZSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0IG9mIHguCmZ1bmMgKHogKkludCkgUnNoKHggKkludCwgbiB1aW50KSAqSW50IHsKCWlmIG4gPT0gMCB7CgkJcmV0dXJuIHouU2V0KHgpCgl9CglpZiB4LklzTmVnKCkgewoJCXJldHVybiB6Lm5lZ1JzaCh4LCBuKQoJfQoJcmV0dXJuIHoucnNoKHgsIG4pCn0KCmZ1bmMgKHogKkludCkgcnNoKHggKkludCwgbiB1aW50KSAqSW50IHsKCWlmIG4gPj0gMjU2IHsKCQlyZXR1cm4gei5DbGVhcigpCgl9CgkvLyBIYW5kbGUgZXhhY3QgbXVsdGlwbGVzIG9mIDY0IHNlcGFyYXRlbHkgdG8gYXZvaWQgNjQtYml0IHNoaWZ0IGlzc3VlcwoJaWYgbiYweDNmID09IDAgewoJCXN3aXRjaCBuIHsKCQljYXNlIDA6CgkJCXJldHVybiB6LlNldCh4KQoJCWNhc2UgNjQ6CgkJCXpbM10sIHpbMl0sIHpbMV0sIHpbMF0gPSAwLCB4WzNdLCB4WzJdLCB4WzFdCgkJY2FzZSAxMjg6CgkJCXpbM10sIHpbMl0sIHpbMV0sIHpbMF0gPSAwLCAwLCB4WzNdLCB4WzJdCgkJY2FzZSAxOTI6CgkJCXpbM10sIHpbMl0sIHpbMV0sIHpbMF0gPSAwLCAwLCAwLCB4WzNdCgkJfQoJCXJldHVybiB6Cgl9Cglzd2l0Y2ggewoJY2FzZSBuID4gMTkyOgoJCW4gLT0gMTkyCgkJelszXSwgelsyXSwgelsxXSwgelswXSA9IDAsIDAsIDAsIHhbM10+Pm4KCWNhc2UgbiA+IDEyODoKCQluIC09IDEyOAoJCXpbM10sIHpbMl0gPSAwLCAwCgkJelsxXSA9IHhbM10gPj4gbgoJCXpbMF0gPSAoeFszXSA8PCAoNjQgLSBuKSkgfCAoeFsyXSA+PiBuKQoJY2FzZSBuID4gNjQ6CgkJbiAtPSA2NAoJCXpbM10gPSAwCgkJelsyXSA9IHhbM10gPj4gbgoJCXpbMV0gPSAoeFszXSA8PCAoNjQgLSBuKSkgfCAoeFsyXSA+PiBuKQoJCXpbMF0gPSAoeFsyXSA8PCAoNjQgLSBuKSkgfCAoeFsxXSA+PiBuKQoJZGVmYXVsdDoKCQl6WzNdID0geFszXSA+PiBuCgkJelsyXSA9ICh4WzNdIDw8ICg2NCAtIG4pKSB8ICh4WzJdID4+IG4pCgkJelsxXSA9ICh4WzJdIDw8ICg2NCAtIG4pKSB8ICh4WzFdID4+IG4pCgkJelswXSA9ICh4WzFdIDw8ICg2NCAtIG4pKSB8ICh4WzBdID4+IG4pCgl9CglyZXR1cm4gegp9CgpmdW5jICh6ICpJbnQpIG5lZ1JzaCh4ICpJbnQsIG4gdWludCkgKkludCB7CglpZiBuID49IDI1NiB7CgkJcmV0dXJuIHouU2V0QWxsQml0c09uZSgpCgl9Cgl2YXIgdiB1aW50NjQgPSAweGZmZmZmZmZmZmZmZmZmZmYKCS8vIEhhbmRsZSBleGFjdCBtdWx0aXBsZXMgb2YgNjQgc2VwYXJhdGVseSB0byBhdm9pZCA2NC1iaXQgc2hpZnQgaXNzdWVzCglpZiBuJjB4M2YgPT0gMCB7CgkJc3dpdGNoIG4gewoJCWNhc2UgMDoKCQkJcmV0dXJuIHouU2V0KHgpCgkJY2FzZSA2NDoKCQkJelszXSwgelsyXSwgelsxXSwgelswXSA9IHYsIHhbM10sIHhbMl0sIHhbMV0KCQljYXNlIDEyODoKCQkJelszXSwgelsyXSwgelsxXSwgelswXSA9IHYsIHYsIHhbM10sIHhbMl0KCQljYXNlIDE5MjoKCQkJelszXSwgelsyXSwgelsxXSwgelswXSA9IHYsIHYsIHYsIHhbM10KCQl9CgkJcmV0dXJuIHoKCX0KCXN3aXRjaCB7CgljYXNlIG4gPiAxOTI6CgkJbiAtPSAxOTIKCQl6WzNdLCB6WzJdLCB6WzFdLCB6WzBdID0gdiwgdiwgdiwgKHY8PCg2NC1uKSl8KHhbM10+Pm4pCgljYXNlIG4gPiAxMjg6CgkJbiAtPSAxMjgKCQl6WzNdLCB6WzJdID0gdiwgdgoJCXpbMV0gPSAodiA8PCAoNjQgLSBuKSkgfCAoeFszXSA+PiBuKQoJCXpbMF0gPSAoeFszXSA8PCAoNjQgLSBuKSkgfCAoeFsyXSA+PiBuKQoJY2FzZSBuID4gNjQ6CgkJbiAtPSA2NAoJCXpbM10gPSB2CgkJelsyXSA9ICh2IDw8ICg2NCAtIG4pKSB8ICh4WzNdID4+IG4pCgkJelsxXSA9ICh4WzNdIDw8ICg2NCAtIG4pKSB8ICh4WzJdID4+IG4pCgkJelswXSA9ICh4WzJdIDw8ICg2NCAtIG4pKSB8ICh4WzFdID4+IG4pCglkZWZhdWx0OgoJCXpbM10gPSAodiA8PCAoNjQgLSBuKSkgfCAoeFszXSA+PiBuKQoJCXpbMl0gPSAoeFszXSA8PCAoNjQgLSBuKSkgfCAoeFsyXSA+PiBuKQoJCXpbMV0gPSAoeFsyXSA8PCAoNjQgLSBuKSkgfCAoeFsxXSA+PiBuKQoJCXpbMF0gPSAoeFsxXSA8PCAoNjQgLSBuKSkgfCAoeFswXSA+PiBuKQoJfQoJcmV0dXJuIHoKfQoKLy8gQml0TGVuIHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgeidzIHJhdyAyNTYtYml0IHBhdHRlcm4uCi8vCi8vIFJldHVybnM6Ci8vICAgLSBsZW5ndGg6IEJpdCBsZW5ndGggb2YgdGhlIGZvdXItbGltYiByZXByZXNlbnRhdGlvbjsgemVybyBoYXMgbGVuZ3RoIDAgYW5kCi8vICAgICBhIG5lZ2F0aXZlIHZhbHVlIG1heSByZXF1aXJlIGFsbCAyNTYgYml0cy4KZnVuYyAoeiAqSW50KSBCaXRMZW4oKSBpbnQgewoJc3dpdGNoIHsKCWNhc2UgelszXSAhPSAwOgoJCXJldHVybiAxOTIgKyBiaXRzLkxlbjY0KHpbM10pCgljYXNlIHpbMl0gIT0gMDoKCQlyZXR1cm4gMTI4ICsgYml0cy5MZW42NCh6WzJdKQoJY2FzZSB6WzFdICE9IDA6CgkJcmV0dXJuIDY0ICsgYml0cy5MZW42NCh6WzFdKQoJZGVmYXVsdDoKCQlyZXR1cm4gYml0cy5MZW42NCh6WzBdKQoJfQp9CgovLyBTZXRCeXRlczMyIGxvYWRzIHRoZSBmaXJzdCAzMiBieXRlcyBvZiBpbiBhcyBhIGJpZy1lbmRpYW4gMjU2LWJpdCB2YWx1ZS4KLy8KLy8gUGFyYW1ldGVyczoKLy8gICAtIGluOiBCeXRlIHNsaWNlIGNvbnRhaW5pbmcgYXQgbGVhc3QgMzIgYnl0ZXMsIHdpdGggdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdC4KLy8gICAgIEJ5dGVzIGJleW9uZCB0aGUgZmlyc3QgMzIgYXJlIGlnbm9yZWQuCi8vCi8vIFJldHVybnM6Ci8vICAgLSB6OiBUaGUgcmVjZWl2ZXIgcG9wdWxhdGVkIGZyb20gdGhlIDMyLWJ5dGUgYmlnLWVuZGlhbiByZXByZXNlbnRhdGlvbi4KLy8KLy8gUGFuaWNzIGlmIGluIGNvbnRhaW5zIGZld2VyIHRoYW4gMzIgYnl0ZXMuCmZ1bmMgKHogKkludCkgU2V0Qnl0ZXMzMihpbiBbXWJ5dGUpICpJbnQgewoJXyA9IGluWzMxXSAvLyBib3VuZHMgY2hlY2sgaGludCB0byBjb21waWxlcjsgc2VlIGdvbGFuZy5vcmcvaXNzdWUvMTQ4MDgKCXpbM10gPSBiaW5hcnkuQmlnRW5kaWFuLlVpbnQ2NChpblswOjhdKQoJelsyXSA9IGJpbmFyeS5CaWdFbmRpYW4uVWludDY0KGluWzg6MTZdKQoJelsxXSA9IGJpbmFyeS5CaWdFbmRpYW4uVWludDY0KGluWzE2OjI0XSkKCXpbMF0gPSBiaW5hcnkuQmlnRW5kaWFuLlVpbnQ2NChpblsyNDozMl0pCglyZXR1cm4gegp9CiIiChMvZ25vLk1lbVBhY2thZ2VUeXBlEgsKCU1QVXNlckFsbBIRCNbknzUSCjU1ODM1dWdub3QaqAEKOgoTL3RtLlB1YktleVNlY3AyNTZrMRIjCiEDBJzVBMPi0jqizwud5so4H6Lp9Zc4oYF/2VGlIjXCuuESQNZpLJ3LaVRVV8OPA3TYEofwQkcJWemBOgcRHNTpJsytMMuO237aK3AqpIO4I0Qz1SEK/aZjz41WqlKReNmPpfoaKGcxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxbHV1eGU=

Raw transaction data

Raw JSON data