{ "name": "TokenVesting", "structs": { "VestingSchedule": [ { "name": "total_amount", "type": "uint64" }, { "name": "claimed_amount", "type": "uint64" }, { "name": "start_time", "type": "uint64" }, { "name": "cliff_end", "type": "uint64" }, { "name": "vesting_end", "type": "uint64" }, { "name": "is_revoked", "type": "bool" } ] }, "methods": [ { "name": "get_admin", "args": [], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "initialize", "args": [ { "type": "uint64", "name": "vesting_asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deposit_tokens", "args": [ { "type": "axfer", "name": "deposit_txn" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "create_schedule", "args": [ { "type": "address", "name": "beneficiary" }, { "type": "uint64", "name": "total_amount" }, { "type": "uint64", "name": "cliff_duration" }, { "type": "uint64", "name": "vesting_duration" }, { "type": "pay", "name": "mbr_payment" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claim", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "Claimed", "args": [ { "type": "address", "name": "beneficiary" }, { "type": "uint64", "name": "amount" } ], "desc": "ARC-28 event: who was paid, and how much (Example 8-16's device)." } ], "recommendations": {} }, { "name": "revoke", "args": [ { "type": "address", "name": "beneficiary" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "cleanup_schedule", "args": [ { "type": "address", "name": "beneficiary" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_vesting_info", "args": [ { "type": "address", "name": "beneficiary" } ], "returns": { "type": "(uint64,uint64,uint64,uint64,uint64,bool)", "struct": "VestingSchedule" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_claimable", "args": [ { "type": "address", "name": "beneficiary" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 4, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "admin": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "YWRtaW4=" }, "asset_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRfaWQ=" }, "is_initialized": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "aXNfaW5pdGlhbGl6ZWQ=" }, "beneficiary_count": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YmVuZWZpY2lhcnlfY291bnQ=" }, "available_tokens": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXZhaWxhYmxlX3Rva2Vucw==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "schedules": { "keyType": "address", "valueType": "VestingSchedule", "prefix": "dl8=" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [ "DeleteApplication", "UpdateApplication" ] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 812, 886 ], "errorMessage": "Address length is 32 bytes" }, { "pc": [ 305 ], "errorMessage": "Already initialized" }, { "pc": [ 732 ], "errorMessage": "Already revoked" }, { "pc": [ 486 ], "errorMessage": "Amount must be positive" }, { "pc": [ 212 ], "errorMessage": "Contract is immutable" }, { "pc": [ 358, 465 ], "errorMessage": "Expected 2 transactions" }, { "pc": [ 502 ], "errorMessage": "Insufficient tokens" }, { "pc": [ 713, 852, 917, 941 ], "errorMessage": "No schedule" }, { "pc": [ 601 ], "errorMessage": "No vesting schedule" }, { "pc": [ 366, 473 ], "errorMessage": "Not initialized" }, { "pc": [ 635 ], "errorMessage": "Nothing to claim" }, { "pc": [ 298, 352, 459, 705 ], "errorMessage": "Only admin" }, { "pc": [ 270 ], "errorMessage": "Overflow in vesting calculation" }, { "pc": [ 483 ], "errorMessage": "Schedule already exists" }, { "pc": [ 492 ], "errorMessage": "Vesting must exceed cliff" }, { "pc": [ 275, 296, 350, 457, 703, 807, 881 ], "errorMessage": "check self.admin exists" }, { "pc": [ 380, 640, 803 ], "errorMessage": "check self.asset_id exists" }, { "pc": [ 391, 497 ], "errorMessage": "check self.available_tokens exists" }, { "pc": [ 582, 870 ], "errorMessage": "check self.beneficiary_count exists" }, { "pc": [ 303, 363, 470 ], "errorMessage": "check self.is_initialized exists" }, { "pc": [ 669 ], "errorMessage": "index out of bounds" }, { "pc": [ 413, 697, 844, 909, 933 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 289, 421, 431, 440 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 344 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 451 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMzIgOCAzMjUwMAogICAgYnl0ZWNibG9jayAiYWRtaW4iIDB4MTUxZjdjNzUgMHg3NjVmICJhc3NldF9pZCIgImlzX2luaXRpYWxpemVkIiAiYmVuZWZpY2lhcnlfY291bnQiICJhdmFpbGFibGVfdG9rZW5zIgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6NTcKICAgIC8vIHNlbGYuYWRtaW4gPSBHbG9iYWxTdGF0ZShCeXRlcygpKQogICAgYnl0ZWNfMCAvLyAiYWRtaW4iCiAgICBwdXNoYnl0ZXMgMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo1OAogICAgLy8gc2VsZi5hc3NldF9pZCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjXzMgLy8gImFzc2V0X2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo1OQogICAgLy8gc2VsZi5pc19pbml0aWFsaXplZCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDQgLy8gImlzX2luaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo2MAogICAgLy8gc2VsZi5iZW5lZmljaWFyeV9jb3VudCA9IEdsb2JhbFN0YXRlKFVJbnQ2NCgwKSkKICAgIGJ5dGVjIDUgLy8gImJlbmVmaWNpYXJ5X2NvdW50IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo2MQogICAgLy8gc2VsZi5hdmFpbGFibGVfdG9rZW5zID0gR2xvYmFsU3RhdGUoVUludDY0KDApKQogICAgYnl0ZWMgNiAvLyAiYXZhaWxhYmxlX3Rva2VucyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo1NQogICAgLy8gY2xhc3MgVG9rZW5WZXN0aW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTgKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDM0NmIzZGJjIDB4MDg1NDlhZDcgMHgzMTU1YmJhYyAweGUxNTk5Y2I0IDB4Y2M4MmFiOTkgMHhiNzEzMmE1NiAweGY3MWFjYjc5IDB4NTRhZjQ4M2YgMHg3ZjA2YzIwOSAvLyBtZXRob2QgImdldF9hZG1pbigpYWRkcmVzcyIsIG1ldGhvZCAiaW5pdGlhbGl6ZSh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZGVwb3NpdF90b2tlbnMoYXhmZXIpdWludDY0IiwgbWV0aG9kICJjcmVhdGVfc2NoZWR1bGUoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCxwYXkpdm9pZCIsIG1ldGhvZCAiY2xhaW0oKXVpbnQ2NCIsIG1ldGhvZCAicmV2b2tlKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJjbGVhbnVwX3NjaGVkdWxlKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAiZ2V0X3Zlc3RpbmdfaW5mbyhhZGRyZXNzKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wpIiwgbWV0aG9kICJnZXRfY2xhaW1hYmxlKGFkZHJlc3MpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggZ2V0X2FkbWluIGluaXRpYWxpemUgZGVwb3NpdF90b2tlbnMgY3JlYXRlX3NjaGVkdWxlIGNsYWltIHJldm9rZSBjbGVhbnVwX3NjaGVkdWxlIGdldF92ZXN0aW5nX2luZm8gZ2V0X2NsYWltYWJsZQoKbWFpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6NTUKICAgIC8vIGNsYXNzIFRva2VuVmVzdGluZyhBUkM0Q29udHJhY3QpOgogICAgZXJyCgptYWluX2JhcmVfcm91dGluZ0AxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjbGFzcyBUb2tlblZlc3RpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHN3aXRjaCBtYWluX2NyZWF0ZUAxOSBtYWluX2FmdGVyX2lmX2Vsc2VAMjIgbWFpbl9hZnRlcl9pZl9lbHNlQDIyIG1haW5fYWZ0ZXJfaWZfZWxzZUAyMiBtYWluX3JlamVjdF9saWZlY3ljbGVAMjAgbWFpbl9yZWplY3RfbGlmZWN5Y2xlQDIwCiAgICBlcnIKCm1haW5fcmVqZWN0X2xpZmVjeWNsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjY4CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJVcGRhdGVBcHBsaWNhdGlvbiIsICJEZWxldGVBcHBsaWNhdGlvbiJdKQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6NzAKICAgIC8vIGFzc2VydCBGYWxzZSwgIkNvbnRyYWN0IGlzIGltbXV0YWJsZSIKICAgIGVyciAvLyBDb250cmFjdCBpcyBpbW11dGFibGUKCm1haW5fY3JlYXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6NjQKICAgIC8vIEBhcmM0LmJhcmVtZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjY2CiAgICAvLyBzZWxmLmFkbWluLnZhbHVlID0gVHhuLnNlbmRlci5ieXRlcwogICAgYnl0ZWNfMCAvLyAiYWRtaW4iCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6NjQKICAgIC8vIEBhcmM0LmJhcmVtZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudG9rZW5fdmVzdGluZy5jb250cmFjdC5jYWxjdWxhdGVfdmVzdGVkKHRvdGFsOiB1aW50NjQsIHN0YXJ0OiB1aW50NjQsIGNsaWZmX2VuZDogdWludDY0LCB2ZXN0aW5nX2VuZDogdWludDY0LCBub3c6IHVpbnQ2NCkgLT4gdWludDY0OgpjYWxjdWxhdGVfdmVzdGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MzUtNDIKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgY2FsY3VsYXRlX3Zlc3RlZCgKICAgIC8vICAgICB0b3RhbDogVUludDY0LAogICAgLy8gICAgIHN0YXJ0OiBVSW50NjQsCiAgICAvLyAgICAgY2xpZmZfZW5kOiBVSW50NjQsCiAgICAvLyAgICAgdmVzdGluZ19lbmQ6IFVJbnQ2NCwKICAgIC8vICAgICBub3c6IFVJbnQ2NCwKICAgIC8vICkgLT4gVUludDY0OgogICAgcHJvdG8gNSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo0MwogICAgLy8gaWYgbm93IDwgY2xpZmZfZW5kOgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgLTMKICAgIDwKICAgIGJ6IGNhbGN1bGF0ZV92ZXN0ZWRfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo0NAogICAgLy8gcmV0dXJuIFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIHJldHN1YgoKY2FsY3VsYXRlX3Zlc3RlZF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo0NQogICAgLy8gaWYgbm93ID49IHZlc3RpbmdfZW5kOgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBieiBjYWxjdWxhdGVfdmVzdGVkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6NDYKICAgIC8vIHJldHVybiB0b3RhbAogICAgZnJhbWVfZGlnIC01CiAgICByZXRzdWIKCmNhbGN1bGF0ZV92ZXN0ZWRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6NDcKICAgIC8vIGVsYXBzZWQgPSBub3cgLSBzdGFydAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgLTQKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBkdXJhdGlvbiA9IHZlc3RpbmdfZW5kIC0gc3RhcnQKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC00CiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo0OQogICAgLy8gaGlnaCwgbG93ID0gb3AubXVsdyh0b3RhbCwgZWxhcHNlZCkKICAgIGZyYW1lX2RpZyAtNQogICAgdW5jb3ZlciAyCiAgICBtdWx3CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo1MAogICAgLy8gcV9oaSwgdmVzdGVkLCByX2hpLCByX2xvID0gb3AuZGl2bW9kdyhoaWdoLCBsb3csIFVJbnQ2NCgwKSwgZHVyYXRpb24pCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBkaXZtb2R3CiAgICBwb3BuIDIKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjUxCiAgICAvLyBhc3NlcnQgcV9oaSA9PSAwLCAiT3ZlcmZsb3cgaW4gdmVzdGluZyBjYWxjdWxhdGlvbiIKICAgICEKICAgIGFzc2VydCAvLyBPdmVyZmxvdyBpbiB2ZXN0aW5nIGNhbGN1bGF0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo1MgogICAgLy8gcmV0dXJuIHZlc3RlZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnRva2VuX3Zlc3RpbmcuY29udHJhY3QuVG9rZW5WZXN0aW5nLmdldF9hZG1pbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9hZG1pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyByZXR1cm4gYXJjNC5BZGRyZXNzLmZyb21fYnl0ZXMoc2VsZi5hZG1pbi52YWx1ZSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJhZG1pbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZG1pbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjcyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudG9rZW5fdmVzdGluZy5jb250cmFjdC5Ub2tlblZlc3RpbmcuaW5pdGlhbGl6ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmluaXRpYWxpemU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo3OAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIuYnl0ZXMgPT0gc2VsZi5hZG1pbi52YWx1ZSwgIk9ubHkgYWRtaW4iCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYWRtaW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRtaW4gZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgYWRtaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBhc3NlcnQgc2VsZi5pc19pbml0aWFsaXplZC52YWx1ZSA9PSBVSW50NjQoMCksICJBbHJlYWR5IGluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImlzX2luaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmlzX2luaXRpYWxpemVkIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIEFscmVhZHkgaW5pdGlhbGl6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjgxCiAgICAvLyBzZWxmLmFzc2V0X2lkLnZhbHVlID0gdmVzdGluZ19hc3NldC5pZAogICAgYnl0ZWNfMyAvLyAiYXNzZXRfaWQiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBzZWxmLmlzX2luaXRpYWxpemVkLnZhbHVlID0gVUludDY0KDEpCiAgICBieXRlYyA0IC8vICJpc19pbml0aWFsaXplZCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6ODQtODkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXZlc3RpbmdfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDApLAogICAgLy8gICAgIGZlZT1VSW50NjQoMCksCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo4NgogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo4NwogICAgLy8gYXNzZXRfYW1vdW50PVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo4NAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo4OAogICAgLy8gZmVlPVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6ODQtODkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXZlc3RpbmdfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9VUludDY0KDApLAogICAgLy8gICAgIGZlZT1VSW50NjQoMCksCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6NzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy50b2tlbl92ZXN0aW5nLmNvbnRyYWN0LlRva2VuVmVzdGluZy5kZXBvc2l0X3Rva2Vuc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXRfdG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6OTYKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyLmJ5dGVzID09IHNlbGYuYWRtaW4udmFsdWUsICJPbmx5IGFkbWluIgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGFkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo5NwogICAgLy8gYXNzZXJ0IEdsb2JhbC5ncm91cF9zaXplID09IFVJbnQ2NCgyKSwgIkV4cGVjdGVkIDIgdHJhbnNhY3Rpb25zIgogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgcHVzaGludCAyCiAgICA9PQogICAgYXNzZXJ0IC8vIEV4cGVjdGVkIDIgdHJhbnNhY3Rpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weTo5OAogICAgLy8gYXNzZXJ0IHNlbGYuaXNfaW5pdGlhbGl6ZWQudmFsdWUgPT0gVUludDY0KDEpLCAiTm90IGluaXRpYWxpemVkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImlzX2luaXRpYWxpemVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmlzX2luaXRpYWxpemVkIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gTm90IGluaXRpYWxpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxMDAKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxMDEKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi54ZmVyX2Fzc2V0ID09IEFzc2V0KHNlbGYuYXNzZXRfaWQudmFsdWUpCiAgICBkdXAKICAgIGd0eG5zIFhmZXJBc3NldAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImFzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2lkIGV4aXN0cwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTAyCiAgICAvLyBhc3NlcnQgZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50ID4gVUludDY0KDApCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjEwNAogICAgLy8gc2VsZi5hdmFpbGFibGVfdG9rZW5zLnZhbHVlICs9IGRlcG9zaXRfdHhuLmFzc2V0X2Ftb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImF2YWlsYWJsZV90b2tlbnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXZhaWxhYmxlX3Rva2VucyBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICBieXRlYyA2IC8vICJhdmFpbGFibGVfdG9rZW5zIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudG9rZW5fdmVzdGluZy5jb250cmFjdC5Ub2tlblZlc3RpbmcuY3JlYXRlX3NjaGVkdWxlW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlX3NjaGVkdWxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgZHVwCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjExNgogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIuYnl0ZXMgPT0gc2VsZi5hZG1pbi52YWx1ZSwgIk9ubHkgYWRtaW4iCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYWRtaW4iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRtaW4gZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgYWRtaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjExNwogICAgLy8gYXNzZXJ0IEdsb2JhbC5ncm91cF9zaXplID09IFVJbnQ2NCgyKSwgIkV4cGVjdGVkIDIgdHJhbnNhY3Rpb25zIgogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgcHVzaGludCAyCiAgICA9PQogICAgYXNzZXJ0IC8vIEV4cGVjdGVkIDIgdHJhbnNhY3Rpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxMTgKICAgIC8vIGFzc2VydCBzZWxmLmlzX2luaXRpYWxpemVkLnZhbHVlID09IFVJbnQ2NCgxKSwgIk5vdCBpbml0aWFsaXplZCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJpc19pbml0aWFsaXplZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pc19pbml0aWFsaXplZCBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIE5vdCBpbml0aWFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTE5CiAgICAvLyBhc3NlcnQgYmVuZWZpY2lhcnkgbm90IGluIHNlbGYuc2NoZWR1bGVzLCAiU2NoZWR1bGUgYWxyZWFkeSBleGlzdHMiCiAgICBieXRlY18yIC8vIDB4NzY1ZgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gU2NoZWR1bGUgYWxyZWFkeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gYXNzZXJ0IHRvdGFsX2Ftb3VudCA+IFVJbnQ2NCgwKSwgIkFtb3VudCBtdXN0IGJlIHBvc2l0aXZlIgogICAgZGlnIDQKICAgIGFzc2VydCAvLyBBbW91bnQgbXVzdCBiZSBwb3NpdGl2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgdmVzdGluZ19kdXJhdGlvbiA+IGNsaWZmX2R1cmF0aW9uLCAiVmVzdGluZyBtdXN0IGV4Y2VlZCBjbGlmZiIKICAgIGRpZyAyCiAgICBkaWcgNAogICAgPgogICAgYXNzZXJ0IC8vIFZlc3RpbmcgbXVzdCBleGNlZWQgY2xpZmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjEyMgogICAgLy8gYXNzZXJ0IHNlbGYuYXZhaWxhYmxlX3Rva2Vucy52YWx1ZSA+PSB0b3RhbF9hbW91bnQsICJJbnN1ZmZpY2llbnQgdG9rZW5zIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImF2YWlsYWJsZV90b2tlbnMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXZhaWxhYmxlX3Rva2VucyBleGlzdHMKICAgIGR1cAogICAgZGlnIDYKICAgID49CiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IHRva2VucwogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTI1CiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDIKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTI2CiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAyCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjEyNwogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LmFtb3VudCA9PSBib3hfbWJyCiAgICB1bmNvdmVyIDIKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTI0CiAgICAvLyBib3hfbWJyID0gVUludDY0KDI1MDApICsgVUludDY0KDQwMCkgKiAoVUludDY0KDM0KSArIFVJbnQ2NCg0MSkpCiAgICBpbnRjIDQgLy8gMzI1MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjEyNwogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LmFtb3VudCA9PSBib3hfbWJyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxMjkKICAgIC8vIG5vdyA9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxMzMKICAgIC8vIHN0YXJ0X3RpbWU9YXJjNC5VSW50NjQobm93KSwKICAgIGR1cAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTM0CiAgICAvLyBjbGlmZl9lbmQ9YXJjNC5VSW50NjQobm93ICsgY2xpZmZfZHVyYXRpb24pLAogICAgZGlnIDEKICAgIHVuY292ZXIgNgogICAgKwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTM1CiAgICAvLyB2ZXN0aW5nX2VuZD1hcmM0LlVJbnQ2NChub3cgKyB2ZXN0aW5nX2R1cmF0aW9uKSwKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA1CiAgICArCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxMzAtMTM3CiAgICAvLyBzZWxmLnNjaGVkdWxlc1tiZW5lZmljaWFyeV0gPSBWZXN0aW5nU2NoZWR1bGUoCiAgICAvLyAgICAgdG90YWxfYW1vdW50PWFyYzQuVUludDY0KHRvdGFsX2Ftb3VudCksCiAgICAvLyAgICAgY2xhaW1lZF9hbW91bnQ9YXJjNC5VSW50NjQoMCksCiAgICAvLyAgICAgc3RhcnRfdGltZT1hcmM0LlVJbnQ2NChub3cpLAogICAgLy8gICAgIGNsaWZmX2VuZD1hcmM0LlVJbnQ2NChub3cgKyBjbGlmZl9kdXJhdGlvbiksCiAgICAvLyAgICAgdmVzdGluZ19lbmQ9YXJjNC5VSW50NjQobm93ICsgdmVzdGluZ19kdXJhdGlvbiksCiAgICAvLyAgICAgaXNfcmV2b2tlZD1hcmM0LkJvb2woRmFsc2UpLAogICAgLy8gKQogICAgdW5jb3ZlciA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxMzIKICAgIC8vIGNsYWltZWRfYW1vdW50PWFyYzQuVUludDY0KDApLAogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTMwLTEzNwogICAgLy8gc2VsZi5zY2hlZHVsZXNbYmVuZWZpY2lhcnldID0gVmVzdGluZ1NjaGVkdWxlKAogICAgLy8gICAgIHRvdGFsX2Ftb3VudD1hcmM0LlVJbnQ2NCh0b3RhbF9hbW91bnQpLAogICAgLy8gICAgIGNsYWltZWRfYW1vdW50PWFyYzQuVUludDY0KDApLAogICAgLy8gICAgIHN0YXJ0X3RpbWU9YXJjNC5VSW50NjQobm93KSwKICAgIC8vICAgICBjbGlmZl9lbmQ9YXJjNC5VSW50NjQobm93ICsgY2xpZmZfZHVyYXRpb24pLAogICAgLy8gICAgIHZlc3RpbmdfZW5kPWFyYzQuVUludDY0KG5vdyArIHZlc3RpbmdfZHVyYXRpb24pLAogICAgLy8gICAgIGlzX3Jldm9rZWQ9YXJjNC5Cb29sKEZhbHNlKSwKICAgIC8vICkKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gaXNfcmV2b2tlZD1hcmM0LkJvb2woRmFsc2UpLAogICAgcHVzaGJ5dGVzIDB4MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjEzMC0xMzcKICAgIC8vIHNlbGYuc2NoZWR1bGVzW2JlbmVmaWNpYXJ5XSA9IFZlc3RpbmdTY2hlZHVsZSgKICAgIC8vICAgICB0b3RhbF9hbW91bnQ9YXJjNC5VSW50NjQodG90YWxfYW1vdW50KSwKICAgIC8vICAgICBjbGFpbWVkX2Ftb3VudD1hcmM0LlVJbnQ2NCgwKSwKICAgIC8vICAgICBzdGFydF90aW1lPWFyYzQuVUludDY0KG5vdyksCiAgICAvLyAgICAgY2xpZmZfZW5kPWFyYzQuVUludDY0KG5vdyArIGNsaWZmX2R1cmF0aW9uKSwKICAgIC8vICAgICB2ZXN0aW5nX2VuZD1hcmM0LlVJbnQ2NChub3cgKyB2ZXN0aW5nX2R1cmF0aW9uKSwKICAgIC8vICAgICBpc19yZXZva2VkPWFyYzQuQm9vbChGYWxzZSksCiAgICAvLyApCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTM4CiAgICAvLyBzZWxmLmF2YWlsYWJsZV90b2tlbnMudmFsdWUgLT0gdG90YWxfYW1vdW50CiAgICBzd2FwCiAgICAtCiAgICBieXRlYyA2IC8vICJhdmFpbGFibGVfdG9rZW5zIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjEzOQogICAgLy8gc2VsZi5iZW5lZmljaWFyeV9jb3VudC52YWx1ZSArPSBVSW50NjQoMSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJiZW5lZmljaWFyeV9jb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5iZW5lZmljaWFyeV9jb3VudCBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlYyA1IC8vICJiZW5lZmljaWFyeV9jb3VudCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy50b2tlbl92ZXN0aW5nLmNvbnRyYWN0LlRva2VuVmVzdGluZy5jbGFpbVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTQzCiAgICAvLyBiZW5lZmljaWFyeSA9IFR4bi5zZW5kZXIKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE0NAogICAgLy8gYXNzZXJ0IGJlbmVmaWNpYXJ5IGluIHNlbGYuc2NoZWR1bGVzLCAiTm8gdmVzdGluZyBzY2hlZHVsZSIKICAgIGJ5dGVjXzIgLy8gMHg3NjVmCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIE5vIHZlc3Rpbmcgc2NoZWR1bGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gc2NoZWR1bGUgPSBzZWxmLnNjaGVkdWxlc1tiZW5lZmljaWFyeV0uY29weSgpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTQ4CiAgICAvLyBzY2hlZHVsZS50b3RhbF9hbW91bnQuYXNfdWludDY0KCksCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTQ5CiAgICAvLyBzY2hlZHVsZS5zdGFydF90aW1lLmFzX3VpbnQ2NCgpLAogICAgZGlnIDEKICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNTAKICAgIC8vIHNjaGVkdWxlLmNsaWZmX2VuZC5hc191aW50NjQoKSwKICAgIGRpZyAyCiAgICBwdXNoaW50IDI0CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTUxCiAgICAvLyBzY2hlZHVsZS52ZXN0aW5nX2VuZC5hc191aW50NjQoKSwKICAgIGRpZyAzCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNTIKICAgIC8vIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTQ3LTE1MwogICAgLy8gdmVzdGVkID0gY2FsY3VsYXRlX3Zlc3RlZCgKICAgIC8vICAgICBzY2hlZHVsZS50b3RhbF9hbW91bnQuYXNfdWludDY0KCksCiAgICAvLyAgICAgc2NoZWR1bGUuc3RhcnRfdGltZS5hc191aW50NjQoKSwKICAgIC8vICAgICBzY2hlZHVsZS5jbGlmZl9lbmQuYXNfdWludDY0KCksCiAgICAvLyAgICAgc2NoZWR1bGUudmVzdGluZ19lbmQuYXNfdWludDY0KCksCiAgICAvLyAgICAgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAsCiAgICAvLyApCiAgICBjYWxsc3ViIGNhbGN1bGF0ZV92ZXN0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE1NQogICAgLy8gY2xhaW1hYmxlID0gdmVzdGVkIC0gc2NoZWR1bGUuY2xhaW1lZF9hbW91bnQuYXNfdWludDY0KCkKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgZGlnIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gYXNzZXJ0IGNsYWltYWJsZSA+IFVJbnQ2NCgwKSwgIk5vdGhpbmcgdG8gY2xhaW0iCiAgICBkdXAKICAgIGFzc2VydCAvLyBOb3RoaW5nIHRvIGNsYWltCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNTgtMTYzCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1Bc3NldChzZWxmLmFzc2V0X2lkLnZhbHVlKSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1iZW5lZmljaWFyeSwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9Y2xhaW1hYmxlLAogICAgLy8gICAgIGZlZT1VSW50NjQoMCksCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNTkKICAgIC8vIHhmZXJfYXNzZXQ9QXNzZXQoc2VsZi5hc3NldF9pZC52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRfaWQgZXhpc3RzCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZGlnIDQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE1OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNjIKICAgIC8vIGZlZT1VSW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE1OC0xNjMKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PUFzc2V0KHNlbGYuYXNzZXRfaWQudmFsdWUpLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPWJlbmVmaWNpYXJ5LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1jbGFpbWFibGUsCiAgICAvLyAgICAgZmVlPVVJbnQ2NCgwKSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNjYKICAgIC8vIHNjaGVkdWxlLmNsYWltZWRfYW1vdW50LmFzX3VpbnQ2NCgpICsgY2xhaW1hYmxlCiAgICBzd2FwCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTY1LTE2NwogICAgLy8gc2NoZWR1bGUuY2xhaW1lZF9hbW91bnQgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBzY2hlZHVsZS5jbGFpbWVkX2Ftb3VudC5hc191aW50NjQoKSArIGNsYWltYWJsZQogICAgLy8gKQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTY1LTE2OAogICAgLy8gc2NoZWR1bGUuY2xhaW1lZF9hbW91bnQgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBzY2hlZHVsZS5jbGFpbWVkX2Ftb3VudC5hc191aW50NjQoKSArIGNsYWltYWJsZQogICAgLy8gKQogICAgLy8gc2VsZi5zY2hlZHVsZXNbYmVuZWZpY2lhcnldID0gc2NoZWR1bGUuY29weSgpCiAgICB1bmNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNzAKICAgIC8vIGFyYzQuZW1pdChDbGFpbWVkKGFyYzQuQWRkcmVzcyhiZW5lZmljaWFyeSksIGFyYzQuVUludDY0KGNsYWltYWJsZSkpKQogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4YzJhM2Q1ZjcgLy8gbWV0aG9kICJDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy50b2tlbl92ZXN0aW5nLmNvbnRyYWN0LlRva2VuVmVzdGluZy5yZXZva2Vbcm91dGluZ10oKSAtPiB2b2lkOgpyZXZva2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNzUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyLmJ5dGVzID09IHNlbGYuYWRtaW4udmFsdWUsICJPbmx5IGFkbWluIgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGFkbWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNzYKICAgIC8vIGFzc2VydCBiZW5lZmljaWFyeSBpbiBzZWxmLnNjaGVkdWxlcywgIk5vIHNjaGVkdWxlIgogICAgYnl0ZWNfMiAvLyAweDc2NWYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBObyBzY2hlZHVsZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTc4CiAgICAvLyBzY2hlZHVsZSA9IHNlbGYuc2NoZWR1bGVzW2JlbmVmaWNpYXJ5XS5jb3B5KCkKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxNzkKICAgIC8vIGFzc2VydCBub3Qgc2NoZWR1bGUuaXNfcmV2b2tlZC5uYXRpdmUsICJBbHJlYWR5IHJldm9rZWQiCiAgICBkdXAKICAgIHB1c2hpbnQgMzIwCiAgICBnZXRiaXQKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBBbHJlYWR5IHJldm9rZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE4MQogICAgLy8gbm93ID0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gc2NoZWR1bGUudG90YWxfYW1vdW50LmFzX3VpbnQ2NCgpLAogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTg0CiAgICAvLyBzY2hlZHVsZS5zdGFydF90aW1lLmFzX3VpbnQ2NCgpLAogICAgZGlnIDIKICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxODUKICAgIC8vIHNjaGVkdWxlLmNsaWZmX2VuZC5hc191aW50NjQoKSwKICAgIGRpZyAzCiAgICBwdXNoaW50IDI0CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTg2CiAgICAvLyBzY2hlZHVsZS52ZXN0aW5nX2VuZC5hc191aW50NjQoKSwKICAgIGRpZyA0CiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxODItMTg4CiAgICAvLyB2ZXN0ZWQgPSBjYWxjdWxhdGVfdmVzdGVkKAogICAgLy8gICAgIHNjaGVkdWxlLnRvdGFsX2Ftb3VudC5hc191aW50NjQoKSwKICAgIC8vICAgICBzY2hlZHVsZS5zdGFydF90aW1lLmFzX3VpbnQ2NCgpLAogICAgLy8gICAgIHNjaGVkdWxlLmNsaWZmX2VuZC5hc191aW50NjQoKSwKICAgIC8vICAgICBzY2hlZHVsZS52ZXN0aW5nX2VuZC5hc191aW50NjQoKSwKICAgIC8vICAgICBub3csCiAgICAvLyApCiAgICBkaWcgMwogICAgY292ZXIgMwogICAgZGlnIDUKICAgIGNhbGxzdWIgY2FsY3VsYXRlX3Zlc3RlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTg5CiAgICAvLyB1bnZlc3RlZCA9IHNjaGVkdWxlLnRvdGFsX2Ftb3VudC5hc191aW50NjQoKSAtIHZlc3RlZAogICAgc3dhcAogICAgZGlnIDEKICAgIC0KICAgIGR1cAogICAgY292ZXIgNAogICAgY292ZXIgNQogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTkxCiAgICAvLyBzY2hlZHVsZS5pc19yZXZva2VkID0gYXJjNC5Cb29sKFRydWUpCiAgICB1bmNvdmVyIDIKICAgIHB1c2hpbnQgMzIwCiAgICBpbnRjXzEgLy8gMQogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxOTIKICAgIC8vIHNjaGVkdWxlLnRvdGFsX2Ftb3VudCA9IGFyYzQuVUludDY0KHZlc3RlZCkKICAgIHN3YXAKICAgIGl0b2IKICAgIHJlcGxhY2UyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE5MwogICAgLy8gc2NoZWR1bGUuY2xpZmZfZW5kID0gYXJjNC5VSW50NjQobm93KQogICAgc3dhcAogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIHJlcGxhY2UyIDI0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxOTQKICAgIC8vIHNjaGVkdWxlLnZlc3RpbmdfZW5kID0gYXJjNC5VSW50NjQobm93KQogICAgc3dhcAogICAgcmVwbGFjZTIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE5NQogICAgLy8gc2VsZi5zY2hlZHVsZXNbYmVuZWZpY2lhcnldID0gc2NoZWR1bGUuY29weSgpCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE5NwogICAgLy8gaWYgdW52ZXN0ZWQgPiBVSW50NjQoMCk6CiAgICBieiByZXZva2VfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToxOTgtMjAzCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1Bc3NldChzZWxmLmFzc2V0X2lkLnZhbHVlKSwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1BY2NvdW50KHNlbGYuYWRtaW4udmFsdWUpLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD11bnZlc3RlZCwKICAgIC8vICAgICBmZWU9VUludDY0KDApLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MTk5CiAgICAvLyB4ZmVyX2Fzc2V0PUFzc2V0KHNlbGYuYXNzZXRfaWQudmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImFzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjAwCiAgICAvLyBhc3NldF9yZWNlaXZlcj1BY2NvdW50KHNlbGYuYWRtaW4udmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBBZGRyZXNzIGxlbmd0aCBpcyAzMiBieXRlcwogICAgZGlnIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE5OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyMDIKICAgIC8vIGZlZT1VSW50NjQoMCksCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE5OC0yMDMKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PUFzc2V0KHNlbGYuYXNzZXRfaWQudmFsdWUpLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUFjY291bnQoc2VsZi5hZG1pbi52YWx1ZSksCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXVudmVzdGVkLAogICAgLy8gICAgIGZlZT1VSW50NjQoMCksCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKcmV2b2tlX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBkdXAKICAgIGl0b2IKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudG9rZW5fdmVzdGluZy5jb250cmFjdC5Ub2tlblZlc3RpbmcuY2xlYW51cF9zY2hlZHVsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsZWFudXBfc2NoZWR1bGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyMDkKICAgIC8vIGFzc2VydCBiZW5lZmljaWFyeSBpbiBzZWxmLnNjaGVkdWxlcywgIk5vIHNjaGVkdWxlIgogICAgYnl0ZWNfMiAvLyAweDc2NWYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBObyBzY2hlZHVsZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjExCiAgICAvLyBzY2hlZHVsZSA9IHNlbGYuc2NoZWR1bGVzW2JlbmVmaWNpYXJ5XS5jb3B5KCkKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyMTMKICAgIC8vIHNjaGVkdWxlLmNsYWltZWRfYW1vdW50LmFzX3VpbnQ2NCgpCiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjE0CiAgICAvLyA+PSBzY2hlZHVsZS50b3RhbF9hbW91bnQuYXNfdWludDY0KCkKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjEzLTIxNAogICAgLy8gc2NoZWR1bGUuY2xhaW1lZF9hbW91bnQuYXNfdWludDY0KCkKICAgIC8vID49IHNjaGVkdWxlLnRvdGFsX2Ftb3VudC5hc191aW50NjQoKQogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIxMi0yMTUKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2NoZWR1bGUuY2xhaW1lZF9hbW91bnQuYXNfdWludDY0KCkKICAgIC8vICAgICA+PSBzY2hlZHVsZS50b3RhbF9hbW91bnQuYXNfdWludDY0KCkKICAgIC8vICkKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjE3CiAgICAvLyBkZWwgc2VsZi5zY2hlZHVsZXNbYmVuZWZpY2lhcnldCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIxOAogICAgLy8gc2VsZi5iZW5lZmljaWFyeV9jb3VudC52YWx1ZSAtPSBVSW50NjQoMSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJiZW5lZmljaWFyeV9jb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5iZW5lZmljaWFyeV9jb3VudCBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBieXRlYyA1IC8vICJiZW5lZmljaWFyeV9jb3VudCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyMjEtMjI1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9QWNjb3VudChzZWxmLmFkbWluLnZhbHVlKSwKICAgIC8vICAgICBhbW91bnQ9Ym94X21iciwKICAgIC8vICAgICBmZWU9VUludDY0KDApLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjIyCiAgICAvLyByZWNlaXZlcj1BY2NvdW50KHNlbGYuYWRtaW4udmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBBZGRyZXNzIGxlbmd0aCBpcyAzMiBieXRlcwogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjIwCiAgICAvLyBib3hfbWJyID0gVUludDY0KDI1MDApICsgVUludDY0KDQwMCkgKiAoVUludDY0KDM0KSArIFVJbnQ2NCg0MSkpCiAgICBpbnRjIDQgLy8gMzI1MDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyMjEKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIyNAogICAgLy8gZmVlPVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjIxLTIyNQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPUFjY291bnQoc2VsZi5hZG1pbi52YWx1ZSksCiAgICAvLyAgICAgYW1vdW50PWJveF9tYnIsCiAgICAvLyAgICAgZmVlPVVJbnQ2NCgwKSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy50b2tlbl92ZXN0aW5nLmNvbnRyYWN0LlRva2VuVmVzdGluZy5nZXRfdmVzdGluZ19pbmZvW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X3Zlc3RpbmdfaW5mbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIyOQogICAgLy8gYXNzZXJ0IGJlbmVmaWNpYXJ5IGluIHNlbGYuc2NoZWR1bGVzLCAiTm8gc2NoZWR1bGUiCiAgICBieXRlY18yIC8vIDB4NzY1ZgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIE5vIHNjaGVkdWxlCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyMzAKICAgIC8vIHJldHVybiBzZWxmLnNjaGVkdWxlc1tiZW5lZmljaWFyeV0uY29weSgpCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnRva2VuX3Zlc3RpbmcuY29udHJhY3QuVG9rZW5WZXN0aW5nLmdldF9jbGFpbWFibGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfY2xhaW1hYmxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjM0CiAgICAvLyBhc3NlcnQgYmVuZWZpY2lhcnkgaW4gc2VsZi5zY2hlZHVsZXMsICJObyBzY2hlZHVsZSIKICAgIGJ5dGVjXzIgLy8gMHg3NjVmCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gTm8gc2NoZWR1bGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIzNQogICAgLy8gc2NoZWR1bGUgPSBzZWxmLnNjaGVkdWxlc1tiZW5lZmljaWFyeV0uY29weSgpCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIzNwogICAgLy8gc2NoZWR1bGUudG90YWxfYW1vdW50LmFzX3VpbnQ2NCgpLAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIzOAogICAgLy8gc2NoZWR1bGUuc3RhcnRfdGltZS5hc191aW50NjQoKSwKICAgIGRpZyAxCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjM5CiAgICAvLyBzY2hlZHVsZS5jbGlmZl9lbmQuYXNfdWludDY0KCksCiAgICBkaWcgMgogICAgcHVzaGludCAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjI0MAogICAgLy8gc2NoZWR1bGUudmVzdGluZ19lbmQuYXNfdWludDY0KCksCiAgICBkaWcgMwogICAgaW50Y18yIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Rva2VuX3Zlc3RpbmcvY29udHJhY3QucHk6MjQxCiAgICAvLyBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCwKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy90b2tlbl92ZXN0aW5nL2NvbnRyYWN0LnB5OjIzNi0yNDIKICAgIC8vIHZlc3RlZCA9IGNhbGN1bGF0ZV92ZXN0ZWQoCiAgICAvLyAgICAgc2NoZWR1bGUudG90YWxfYW1vdW50LmFzX3VpbnQ2NCgpLAogICAgLy8gICAgIHNjaGVkdWxlLnN0YXJ0X3RpbWUuYXNfdWludDY0KCksCiAgICAvLyAgICAgc2NoZWR1bGUuY2xpZmZfZW5kLmFzX3VpbnQ2NCgpLAogICAgLy8gICAgIHNjaGVkdWxlLnZlc3RpbmdfZW5kLmFzX3VpbnQ2NCgpLAogICAgLy8gICAgIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wLAogICAgLy8gKQogICAgY2FsbHN1YiBjYWxjdWxhdGVfdmVzdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyNDMKICAgIC8vIHJldHVybiB2ZXN0ZWQgLSBzY2hlZHVsZS5jbGFpbWVkX2Ftb3VudC5hc191aW50NjQoKQogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvdG9rZW5fdmVzdGluZy9jb250cmFjdC5weToyMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "DCAFAAEgCPT9ASYHBWFkbWluBBUffHUCdl8IYXNzZXRfaWQOaXNfaW5pdGlhbGl6ZWQRYmVuZWZpY2lhcnlfY291bnQQYXZhaWxhYmxlX3Rva2VuczEYQAATKIAAZysiZycEImcnBSJnJwYiZzEbQQBOMRkURDEYRIIJBDRrPbwECFSa1wQxVbusBOFZnLQEzIKrmQS3EypWBPcay3kEVK9IPwR/BsIJNhoAjgkAUQBbAI8A1wGQAfMChgLHAt8AMRmNBgAF/+//7//vAAEAAQAxGEQAMRgURCgxAGcjQ4oFAYv/i/0MQQACIomL/4v+D0EAA4v7iYv/i/wJi/6L/AmL+08CHSJPAx9GAkwURIkiKGVEKUxQsCNDNhoBSRUlEkQXMQAiKGVEEkQiJwRlRBREK0sBZycEI2exMgoishKyFLIRgQSyECKyAbMjQzEWIwlJOBCBBBJEMQAiKGVEEkQyBIECEkQiJwRlRCMSREk4FDIKEkRJOBEiK2VEEkQ4EklEIicGZURLAQgnBkxnFilMULAjQzYaAUkVJBJENhoCSRUlEkRJFzYaA0kVJRJEFzYaBEkVJRJEFzEWIwlJOBAjEkQxACIoZUQSRDIEgQISRCInBGVEIxJEKk8GUEm9RQEUREsEREsCSwQNRCInBmVESUsGD0RLAjgHMgoSREsCOAAxABJETwI4CCEEEkQyB0kWSwFPBggWTwJPBQgWTwaACAAAAAAAAAAAUE8DUE8CUExQgAEAUE8CTL9MCScGTGciJwVlRCMIJwVMZyNDMQAqSwFQSb1FAURJvkhJIltLAYEQW0sCgRhbSwMkWzIHiP5sTCVbTEsBCUlEsSIrZURLAbISSwSyFLIRgQSyECKyAbNMSwEIFk8CJU8CuxZMSwFQgATCo9X3TFCwKUxQsCNDNhoBSRUkEkQxACIoZUQSRCpMUEm9RQFESb5ISYHAAlOAAQAiTwJUIlMURDIHSwEiW0sCgRBbSwOBGFtLBCRbSwNOA0sFiP3lTEsBCUlOBE4FTwKBwAIjVEwWXABMFkxLAVwYTFwgTwJMv0EAHrEiK2VEIihlREkVJBJESwKyErIUshGBBLIQIrIBs0kWKUxQsCNDNhoBSRUkEkQqTFBJvUUBREm+SEklW0wiWw9EvEgiJwVlRCMJJwVMZ7EiKGVESRUkEkQhBLIIsgcjshAisgGzI0M2GgFJFSQSRCpMUEm9RQFEvkgpTFCwI0M2GgFJFSQSRCpMUEm9RQFEvkhJIltLAYEQW0sCgRhbSwMkWzIHiP0ZTCVbCRYpTFCwI0M=", "clear": "DIEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 8, "patch": 1 } }, "events": [ { "name": "Claimed", "args": [ { "type": "address", "name": "beneficiary" }, { "type": "uint64", "name": "amount" } ], "desc": "ARC-28 event: who was paid, and how much (Example 8-16's device)." } ], "templateVariables": {} }