{ "name": "DigitalMarketplaceWithTups", "structs": { "ListingKey": [ { "name": "owner", "type": "address" }, { "name": "asset", "type": "uint64" }, { "name": "nonce", "type": "uint64" } ], "ListingValue": [ { "name": "deposited", "type": "uint64" }, { "name": "unitaryPrice", "type": "uint64" }, { "name": "bidder", "type": "address" }, { "name": "bid", "type": "uint64" }, { "name": "bidUnitaryPrice", "type": "uint64" } ] }, "methods": [ { "name": "getListingsMbr", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "allowAsset", "args": [ { "type": "pay", "name": "mbr_pay" }, { "type": "uint64", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "firstDeposit", "args": [ { "type": "pay", "name": "mbr_pay" }, { "type": "axfer", "name": "xfer" }, { "type": "uint64", "name": "unitary_price" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deposit", "args": [ { "type": "axfer", "name": "xfer" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setPrice", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" }, { "type": "uint64", "name": "unitary_price" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "buy", "args": [ { "type": "address", "name": "owner" }, { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" }, { "type": "pay", "name": "buy_pay" }, { "type": "uint64", "name": "quantity" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "withdraw", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "bid", "args": [ { "type": "address", "name": "owner" }, { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" }, { "type": "pay", "name": "bid_pay" }, { "type": "uint64", "name": "quantity" }, { "type": "uint64", "name": "unitary_price" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "acceptBid", "args": [ { "type": "uint64", "name": "asset" }, { "type": "uint64", "name": "nonce" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "listings": { "keyType": "ListingKey", "valueType": "ListingValue", "prefix": "bGlzdGluZ3M=" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 605, 749, 948, 981, 1125 ], "errorMessage": "asset exists" }, { "pc": [ 392, 478, 578, 714, 897, 1074 ], "errorMessage": "check self.listings entry exists" }, { "pc": [ 524, 825 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 158, 232, 241, 347, 443, 452, 461, 532, 541, 560, 688, 698, 833, 845, 866, 877, 1046, 1056 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 224, 339 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 150, 214, 552, 858 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDggMCA0IDUwNTAwCiAgICBieXRlY2Jsb2NrIDB4NmM2OTczNzQ2OTZlNjc3MwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6NDAKICAgIC8vIGxvZygiaW5pdCIpCiAgICBwdXNoYnl0ZXMgImluaXQiCiAgICBsb2cKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MzgKICAgIC8vIGNsYXNzIERpZ2l0YWxNYXJrZXRwbGFjZVdpdGhUdXBzKGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE4CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHhkOThlZjZhOSAweDZhNGU3ZmNhIDB4MTJmMDhjOTggMHg5YjRiODIzNCAweDRkOGIyM2Q4IDB4NTJhYzVkZjcgMHhlM2FlYjI1YyAweDMyMzRiNzExIDB4Y2M4MjYzNDYgLy8gbWV0aG9kICJnZXRMaXN0aW5nc01icigpdWludDY0IiwgbWV0aG9kICJhbGxvd0Fzc2V0KHBheSx1aW50NjQpdm9pZCIsIG1ldGhvZCAiZmlyc3REZXBvc2l0KHBheSxheGZlcix1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImRlcG9zaXQoYXhmZXIsdWludDY0KXZvaWQiLCBtZXRob2QgInNldFByaWNlKHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImJ1eShhZGRyZXNzLHVpbnQ2NCx1aW50NjQscGF5LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhdyh1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImJpZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQscGF5LHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYWNjZXB0QmlkKHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ2V0TGlzdGluZ3NNYnJfcm91dGVANiBhbGxvd19hc3NldCBmaXJzdF9kZXBvc2l0IGRlcG9zaXQgc2V0X3ByaWNlIGJ1eSB3aXRoZHJhdyBiaWQgYWNjZXB0X2JpZAogICAgZXJyCgptYWluX2dldExpc3RpbmdzTWJyX3JvdXRlQDY6CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUsIG5hbWU9ImdldExpc3RpbmdzTWJyIikKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwYzU0NAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLm1hcmtldHBsYWNlX2RlbW8ubWFya2V0cGxhY2Vfd2l0aF90dXBzLkRpZ2l0YWxNYXJrZXRwbGFjZVdpdGhUdXBzLmFsbG93X2Fzc2V0W3JvdXRpbmddKCkgLT4gdm9pZDoKYWxsb3dfYXNzZXQ6CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo4MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9ImFsbG93QXNzZXQiKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo4NQogICAgLy8gYXNzZXJ0IG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKGFzc2V0KQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGRpZyAxCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo4NwogICAgLy8gYXNzZXJ0IG1icl9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6ODgKICAgIC8vIGFzc2VydCBtYnJfcGF5LmFtb3VudCA9PSBHbG9iYWwuYXNzZXRfb3B0X2luX21pbl9iYWxhbmNlCiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgIGdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6OTAtOTIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLCBhc3NldF9hbW91bnQ9MAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6OTEKICAgIC8vIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIGFzc2V0X2Ftb3VudD0wCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjkwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6OTAtOTIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLCBhc3NldF9hbW91bnQ9MAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iYWxsb3dBc3NldCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5tYXJrZXRwbGFjZV9kZW1vLm1hcmtldHBsYWNlX3dpdGhfdHVwcy5EaWdpdGFsTWFya2V0cGxhY2VXaXRoVHVwcy5maXJzdF9kZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKZmlyc3RfZGVwb3NpdDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5Ojk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iZmlyc3REZXBvc2l0IikKICAgIHR4biBHcm91cEluZGV4CiAgICBwdXNoaW50IDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18zIC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjEwMgogICAgLy8gYXNzZXJ0IG1icl9wYXkuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAzCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjEwMwogICAgLy8gYXNzZXJ0IG1icl9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDMKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTA0CiAgICAvLyBhc3NlcnQgbWJyX3BheS5hbW91bnQgPT0gc2VsZi5saXN0aW5nc19ib3hfbWJyKCkKICAgIHVuY292ZXIgMwogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo0NS02NgogICAgLy8gcmV0dXJuIFVJbnQ2NCgKICAgIC8vICAgICAyXzUwMAogICAgLy8gICAgICsKICAgIC8vICAgICAjIGZtdDogb2ZmCiAgICAvLyAgICAgIyBLZXkgbGVuZ3RoCiAgICAvLyAgICAgKAogICAgLy8gICAgICAgICA4CiAgICAvLyAgICAgICAgICsgMzIKICAgIC8vICAgICAgICAgKyA4CiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICAgICArCiAgICAvLyAgICAgICAgICMgVmFsdWUgbGVuZ3RoCiAgICAvLyAgICAgICAgIDgKICAgIC8vICAgICAgICAgKyA4CiAgICAvLyAgICAgICAgICsgMzIKICAgIC8vICAgICAgICAgKyA4CiAgICAvLyAgICAgICAgICsgOAogICAgLy8gICAgICkKICAgIC8vICAgICAqCiAgICAvLyAgICAgIyBmbXQ6IG9uCiAgICAvLyAgICAgNDAwCiAgICAvLyApCiAgICBpbnRjIDQgLy8gNTA1MDAKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjEwNAogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IHNlbGYubGlzdGluZ3NfYm94X21icigpCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxMDYKICAgIC8vIGtleSA9IExpc3RpbmdLZXkob3duZXI9VHhuLnNlbmRlciwgYXNzZXQ9eGZlci54ZmVyX2Fzc2V0LmlkLCBub25jZT1ub25jZSkKICAgIHR4biBTZW5kZXIKICAgIGRpZyAzCiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjEwNwogICAgLy8gYXNzZXJ0IGtleSBub3QgaW4gc2VsZi5saXN0aW5ncwogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjEwOQogICAgLy8gYXNzZXJ0IHhmZXIuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIGRpZyAyCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjExMAogICAgLy8gYXNzZXJ0IHhmZXIuYXNzZXRfcmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZGlnIDIKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxMTEKICAgIC8vIGFzc2VydCB4ZmVyLmFzc2V0X2Ftb3VudCA+IDAKICAgIHVuY292ZXIgMgogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxMTYKICAgIC8vIGJpZGRlcj1BY2NvdW50KCksCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjExMwogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgc3dhcAogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTE3CiAgICAvLyBiaWQ9VUludDY0KCksCiAgICBpbnRjXzIgLy8gMAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTEzCiAgICAvLyBzZWxmLmxpc3RpbmdzW2tleV0gPSBMaXN0aW5nVmFsdWUoCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjExMy0xMTkKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIC8vICAgICBkZXBvc2l0ZWQ9eGZlci5hc3NldF9hbW91bnQsCiAgICAvLyAgICAgdW5pdGFyeVByaWNlPXVuaXRhcnlfcHJpY2UsCiAgICAvLyAgICAgYmlkZGVyPUFjY291bnQoKSwKICAgIC8vICAgICBiaWQ9VUludDY0KCksCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPVVJbnQ2NCgpLAogICAgLy8gKQogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6OTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChuYW1lPSJmaXJzdERlcG9zaXQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMubWFya2V0cGxhY2VfZGVtby5tYXJrZXRwbGFjZV93aXRoX3R1cHMuRGlnaXRhbE1hcmtldHBsYWNlV2l0aFR1cHMuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTIzCiAgICAvLyBrZXkgPSBMaXN0aW5nS2V5KG93bmVyPVR4bi5zZW5kZXIsIGFzc2V0PXhmZXIueGZlcl9hc3NldC5pZCwgbm9uY2U9bm9uY2UpCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZ3R4bnMgWGZlckFzc2V0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxMjUKICAgIC8vIGFzc2VydCB4ZmVyLnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgMwogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxMjYKICAgIC8vIGFzc2VydCB4ZmVyLmFzc2V0X3JlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGRpZyAzCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTI3CiAgICAvLyBhc3NlcnQgeGZlci5hc3NldF9hbW91bnQgPiAwCiAgICB1bmNvdmVyIDMKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICBkdXAKICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTI5CiAgICAvLyBleGlzdGluZyA9IHNlbGYubGlzdGluZ3Nba2V5XQogICAgc3dhcAogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4NmM2OTczNzQ2OTZlNjc3MwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxpc3RpbmdzIGVudHJ5IGV4aXN0cwogICAgZHVwCiAgICBpbnRjXzIgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBleHRyYWN0IDggOAogICAgZGlnIDIKICAgIGV4dHJhY3QgMTYgMzIKICAgIGRpZyAzCiAgICBleHRyYWN0IDQ4IDgKICAgIHVuY292ZXIgNAogICAgZXh0cmFjdCA1NiA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxMzUKICAgIC8vIGRlcG9zaXRlZD1leGlzdGluZy5kZXBvc2l0ZWQgKyB4ZmVyLmFzc2V0X2Ftb3VudCwKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA2CiAgICArCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxMzAKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIGl0b2IKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTMwLTEzNgogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgLy8gICAgIGJpZD1leGlzdGluZy5iaWQsCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPWV4aXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIC8vICAgICBiaWRkZXI9ZXhpc3RpbmcuYmlkZGVyLAogICAgLy8gICAgIHVuaXRhcnlQcmljZT1leGlzdGluZy51bml0YXJ5UHJpY2UsCiAgICAvLyAgICAgZGVwb3NpdGVkPWV4aXN0aW5nLmRlcG9zaXRlZCArIHhmZXIuYXNzZXRfYW1vdW50LAogICAgLy8gKQogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLm1hcmtldHBsYWNlX2RlbW8ubWFya2V0cGxhY2Vfd2l0aF90dXBzLkRpZ2l0YWxNYXJrZXRwbGFjZVdpdGhUdXBzLnNldF9wcmljZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9wcmljZToKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjEzOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKG5hbWU9InNldFByaWNlIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE0MAogICAgLy8ga2V5ID0gTGlzdGluZ0tleShvd25lcj1UeG4uc2VuZGVyLCBhc3NldD1hc3NldC5pZCwgbm9uY2U9bm9uY2UpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxNDIKICAgIC8vIGV4aXN0aW5nID0gc2VsZi5saXN0aW5nc1trZXldCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGlzdGluZ3MgZW50cnkgZXhpc3RzCiAgICBkdXAKICAgIGV4dHJhY3QgMCA4CiAgICBkaWcgMQogICAgZXh0cmFjdCAxNiAzMgogICAgZGlnIDIKICAgIGV4dHJhY3QgNDggOAogICAgdW5jb3ZlciAzCiAgICBleHRyYWN0IDU2IDgKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE0MwogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE0My0xNDkKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIC8vICAgICBiaWQ9ZXhpc3RpbmcuYmlkLAogICAgLy8gICAgIGJpZFVuaXRhcnlQcmljZT1leGlzdGluZy5iaWRVbml0YXJ5UHJpY2UsCiAgICAvLyAgICAgYmlkZGVyPWV4aXN0aW5nLmJpZGRlciwKICAgIC8vICAgICBkZXBvc2l0ZWQ9ZXhpc3RpbmcuZGVwb3NpdGVkLAogICAgLy8gICAgIHVuaXRhcnlQcmljZT11bml0YXJ5X3ByaWNlLAogICAgLy8gKQogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0ic2V0UHJpY2UiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMubWFya2V0cGxhY2VfZGVtby5tYXJrZXRwbGFjZV93aXRoX3R1cHMuRGlnaXRhbE1hcmtldHBsYWNlV2l0aFR1cHMuYnV5W3JvdXRpbmddKCkgLT4gdm9pZDoKYnV5OgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18wIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTYyCiAgICAvLyBsaXN0aW5nID0gc2VsZi5saXN0aW5nc1trZXldCiAgICBkaWcgMwogICAgaXRvYgogICAgZGlnIDUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGlzdGluZ3MgZW50cnkgZXhpc3RzCiAgICBkdXAKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDIKICAgIGV4dHJhY3QgMTYgMzIKICAgIGRpZyAzCiAgICBleHRyYWN0IDQ4IDgKICAgIHVuY292ZXIgNAogICAgZXh0cmFjdCA1NiA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxNjQKICAgIC8vIGFtb3VudF90b19iZV9wYWlkID0gc2VsZi5xdWFudGl0eV9wcmljZShxdWFudGl0eSwgbGlzdGluZy51bml0YXJ5UHJpY2UsIGFzc2V0LmRlY2ltYWxzKQogICAgZGlnIDgKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6NzAKICAgIC8vIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdyA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KQogICAgZGlnIDQKICAgIGRpZyA4CiAgICBtdWx3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo3MQogICAgLy8gc2NhbGluZ19mYWN0b3JfaGlnaCwgc2NhbGluZ19mYWN0b3JfbG93ID0gb3AuZXhwdygxMCwgYXNzZXRfZGVjaW1hbHMpCiAgICBwdXNoaW50IDEwCiAgICB1bmNvdmVyIDMKICAgIGV4cHcKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjcyLTc0CiAgICAvLyBfcXVvdGllbnRfaGlnaCwgYW1vdW50X3RvX2JlX3BhaWQsIF9yZW1haW5kZXJfaGlnaCwgX3JlbWFpbmRlcl9sb3cgPSBvcC5kaXZtb2R3KAogICAgLy8gICAgIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdywgc2NhbGluZ19mYWN0b3JfaGlnaCwgc2NhbGluZ19mYWN0b3JfbG93CiAgICAvLyApCiAgICBkaXZtb2R3CiAgICBwb3BuIDIKICAgIHN3YXAKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5Ojc1CiAgICAvLyBhc3NlcnQgX3F1b3RpZW50X2hpZ2ggPT0gMAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxNjYKICAgIC8vIGFzc2VydCBidXlfcGF5LnNlbmRlciA9PSBUeG4uc2VuZGVyCiAgICBkaWcgOAogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxNjcKICAgIC8vIGFzc2VydCBidXlfcGF5LnJlY2VpdmVyID09IG93bmVyCiAgICBkaWcgOAogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIHVuY292ZXIgMTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE2OAogICAgLy8gYXNzZXJ0IGJ1eV9wYXkuYW1vdW50ID09IGFtb3VudF90b19iZV9wYWlkCiAgICB1bmNvdmVyIDgKICAgIGd0eG5zIEFtb3VudAogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTc1CiAgICAvLyBkZXBvc2l0ZWQ9bGlzdGluZy5kZXBvc2l0ZWQgLSBxdWFudGl0eSwKICAgIHVuY292ZXIgNAogICAgZGlnIDYKICAgIC0KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE3MAogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxNzAtMTc2CiAgICAvLyBzZWxmLmxpc3RpbmdzW2tleV0gPSBMaXN0aW5nVmFsdWUoCiAgICAvLyAgICAgYmlkPWxpc3RpbmcuYmlkLAogICAgLy8gICAgIGJpZFVuaXRhcnlQcmljZT1saXN0aW5nLmJpZFVuaXRhcnlQcmljZSwKICAgIC8vICAgICBiaWRkZXI9bGlzdGluZy5iaWRkZXIsCiAgICAvLyAgICAgdW5pdGFyeVByaWNlPWxpc3RpbmcudW5pdGFyeVByaWNlLAogICAgLy8gICAgIGRlcG9zaXRlZD1saXN0aW5nLmRlcG9zaXRlZCAtIHF1YW50aXR5LAogICAgLy8gKQogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTc4LTE4MAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPVR4bi5zZW5kZXIsIGFzc2V0X2Ftb3VudD1xdWFudGl0eQogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTc5CiAgICAvLyB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLCBhc3NldF9hbW91bnQ9cXVhbnRpdHkKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE3OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE3OC0xODAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLCBhc3NldF9hbW91bnQ9cXVhbnRpdHkKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxNTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMubWFya2V0cGxhY2VfZGVtby5tYXJrZXRwbGFjZV93aXRoX3R1cHMuRGlnaXRhbE1hcmtldHBsYWNlV2l0aFR1cHMud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE4NAogICAgLy8ga2V5ID0gTGlzdGluZ0tleShvd25lcj1UeG4uc2VuZGVyLCBhc3NldD1hc3NldC5pZCwgbm9uY2U9bm9uY2UpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxODYKICAgIC8vIGxpc3RpbmcgPSBzZWxmLmxpc3RpbmdzW2tleV0KICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHg2YzY5NzM3NDY5NmU2NzczCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGlzdGluZ3MgZW50cnkgZXhpc3RzCiAgICBkdXAKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgZHVwCiAgICBleHRyYWN0IDE2IDMyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDUKICAgIGR1cAogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIGNvdmVyIDUKICAgIHB1c2hpbnQgNTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBjb3ZlciA0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxODcKICAgIC8vIGlmIGxpc3RpbmcuYmlkZGVyICE9IEFjY291bnQoKToKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IHdpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTg5CiAgICAvLyBsaXN0aW5nLmJpZCwgbGlzdGluZy5iaWRVbml0YXJ5UHJpY2UsIGFzc2V0LmRlY2ltYWxzCiAgICBkaWcgMgogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo3MAogICAgLy8gYW1vdW50X25vdF9zY2FsZWRfaGlnaCwgYW1vdW50X25vdF9zY2FsZWRfbG93ID0gb3AubXVsdyhwcmljZSwgcXVhbnRpdHkpCiAgICBkaWcgNAogICAgZGlnIDYKICAgIG11bHcKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjcxCiAgICAvLyBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cgPSBvcC5leHB3KDEwLCBhc3NldF9kZWNpbWFscykKICAgIHB1c2hpbnQgMTAKICAgIHVuY292ZXIgMwogICAgZXhwdwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6NzItNzQKICAgIC8vIF9xdW90aWVudF9oaWdoLCBhbW91bnRfdG9fYmVfcGFpZCwgX3JlbWFpbmRlcl9oaWdoLCBfcmVtYWluZGVyX2xvdyA9IG9wLmRpdm1vZHcoCiAgICAvLyAgICAgYW1vdW50X25vdF9zY2FsZWRfaGlnaCwgYW1vdW50X25vdF9zY2FsZWRfbG93LCBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cKICAgIC8vICkKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6NzUKICAgIC8vIGFzc2VydCBfcXVvdGllbnRfaGlnaCA9PSAwCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE5MQogICAgLy8gaXR4bi5QYXltZW50KHJlY2VpdmVyPWxpc3RpbmcuYmlkZGVyLCBhbW91bnQ9Y3VycmVudF9iaWRfZGVwb3NpdCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgNQogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50Y18wIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKd2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTkzCiAgICAvLyBkZWwgc2VsZi5saXN0aW5nc1trZXldCiAgICBzd2FwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE5NQogICAgLy8gaXR4bi5QYXltZW50KHJlY2VpdmVyPVR4bi5zZW5kZXIsIGFtb3VudD1zZWxmLmxpc3RpbmdzX2JveF9tYnIoKSkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjQ1LTY2CiAgICAvLyByZXR1cm4gVUludDY0KAogICAgLy8gICAgIDJfNTAwCiAgICAvLyAgICAgKwogICAgLy8gICAgICMgZm10OiBvZmYKICAgIC8vICAgICAjIEtleSBsZW5ndGgKICAgIC8vICAgICAoCiAgICAvLyAgICAgICAgIDgKICAgIC8vICAgICAgICAgKyAzMgogICAgLy8gICAgICAgICArIDgKICAgIC8vICAgICAgICAgKyA4CiAgICAvLyAgICAgICAgICsKICAgIC8vICAgICAgICAgIyBWYWx1ZSBsZW5ndGgKICAgIC8vICAgICAgICAgOAogICAgLy8gICAgICAgICArIDgKICAgIC8vICAgICAgICAgKyAzMgogICAgLy8gICAgICAgICArIDgKICAgIC8vICAgICAgICAgKyA4CiAgICAvLyAgICAgKQogICAgLy8gICAgICoKICAgIC8vICAgICAjIGZtdDogb24KICAgIC8vICAgICA0MDAKICAgIC8vICkKICAgIGludGMgNCAvLyA1MDUwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE5NQogICAgLy8gaXR4bi5QYXltZW50KHJlY2VpdmVyPVR4bi5zZW5kZXIsIGFtb3VudD1zZWxmLmxpc3RpbmdzX2JveF9tYnIoKSkuc3VibWl0KCkKICAgIGludGNfMCAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE5Ny0xOTkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1UeG4uc2VuZGVyLCBhc3NldF9hbW91bnQ9bGlzdGluZy5kZXBvc2l0ZWQKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjE5OAogICAgLy8geGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwgYXNzZXRfYW1vdW50PWxpc3RpbmcuZGVwb3NpdGVkCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxOTcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToxOTctMTk5CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9VHhuLnNlbmRlciwgYXNzZXRfYW1vdW50PWxpc3RpbmcuZGVwb3NpdGVkCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MTgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLm1hcmtldHBsYWNlX2RlbW8ubWFya2V0cGxhY2Vfd2l0aF90dXBzLkRpZ2l0YWxNYXJrZXRwbGFjZVdpdGhUdXBzLmJpZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmJpZDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjIwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBjb3ZlciA1CiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18wIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgMwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjEzCiAgICAvLyBsaXN0aW5nID0gc2VsZi5saXN0aW5nc1trZXldCiAgICBzd2FwCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4NmM2OTczNzQ2OTZlNjc3MwogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGNvdmVyIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxpc3RpbmdzIGVudHJ5IGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDAgOAogICAgY292ZXIgMwogICAgZHVwCiAgICBleHRyYWN0IDggOAogICAgY292ZXIgMwogICAgZHVwCiAgICBleHRyYWN0IDE2IDMyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDkKICAgIGR1cAogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIGNvdmVyIDkKICAgIHB1c2hpbnQgNTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBjb3ZlciA4CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToyMTQKICAgIC8vIGlmIGxpc3RpbmcuYmlkZGVyICE9IEFjY291bnQoKToKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGJpZF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjIxNQogICAgLy8gYXNzZXJ0IHVuaXRhcnlfcHJpY2UgPiBsaXN0aW5nLmJpZFVuaXRhcnlQcmljZQogICAgZHVwCiAgICBkaWcgOAogICAgZHVwCiAgICBjb3ZlciAyCiAgICA+CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjIxOAogICAgLy8gbGlzdGluZy5iaWQsIGxpc3RpbmcuYmlkVW5pdGFyeVByaWNlLCBhc3NldC5kZWNpbWFscwogICAgZGlnIDIKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6NzAKICAgIC8vIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdyA9IG9wLm11bHcocHJpY2UsIHF1YW50aXR5KQogICAgc3dhcAogICAgZGlnIDEwCiAgICBtdWx3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo3MQogICAgLy8gc2NhbGluZ19mYWN0b3JfaGlnaCwgc2NhbGluZ19mYWN0b3JfbG93ID0gb3AuZXhwdygxMCwgYXNzZXRfZGVjaW1hbHMpCiAgICBwdXNoaW50IDEwCiAgICB1bmNvdmVyIDMKICAgIGV4cHcKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjcyLTc0CiAgICAvLyBfcXVvdGllbnRfaGlnaCwgYW1vdW50X3RvX2JlX3BhaWQsIF9yZW1haW5kZXJfaGlnaCwgX3JlbWFpbmRlcl9sb3cgPSBvcC5kaXZtb2R3KAogICAgLy8gICAgIGFtb3VudF9ub3Rfc2NhbGVkX2hpZ2gsIGFtb3VudF9ub3Rfc2NhbGVkX2xvdywgc2NhbGluZ19mYWN0b3JfaGlnaCwgc2NhbGluZ19mYWN0b3JfbG93CiAgICAvLyApCiAgICBkaXZtb2R3CiAgICBwb3BuIDIKICAgIHN3YXAKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5Ojc1CiAgICAvLyBhc3NlcnQgX3F1b3RpZW50X2hpZ2ggPT0gMAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToyMjEKICAgIC8vIGl0eG4uUGF5bWVudChyZWNlaXZlcj1saXN0aW5nLmJpZGRlciwgYW1vdW50PWN1cnJlbnRfYmlkX2Ftb3VudCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgOQogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50Y18wIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKYmlkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjIyMwogICAgLy8gYW1vdW50X3RvX2JlX2JpZCA9IHNlbGYucXVhbnRpdHlfcHJpY2UocXVhbnRpdHksIHVuaXRhcnlfcHJpY2UsIGFzc2V0LmRlY2ltYWxzKQogICAgc3dhcAogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo3MAogICAgLy8gYW1vdW50X25vdF9zY2FsZWRfaGlnaCwgYW1vdW50X25vdF9zY2FsZWRfbG93ID0gb3AubXVsdyhwcmljZSwgcXVhbnRpdHkpCiAgICBkaWcgMQogICAgdW5jb3ZlciA1CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIG11bHcKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjcxCiAgICAvLyBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cgPSBvcC5leHB3KDEwLCBhc3NldF9kZWNpbWFscykKICAgIHB1c2hpbnQgMTAKICAgIHVuY292ZXIgMwogICAgZXhwdwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6NzItNzQKICAgIC8vIF9xdW90aWVudF9oaWdoLCBhbW91bnRfdG9fYmVfcGFpZCwgX3JlbWFpbmRlcl9oaWdoLCBfcmVtYWluZGVyX2xvdyA9IG9wLmRpdm1vZHcoCiAgICAvLyAgICAgYW1vdW50X25vdF9zY2FsZWRfaGlnaCwgYW1vdW50X25vdF9zY2FsZWRfbG93LCBzY2FsaW5nX2ZhY3Rvcl9oaWdoLCBzY2FsaW5nX2ZhY3Rvcl9sb3cKICAgIC8vICkKICAgIGRpdm1vZHcKICAgIHBvcG4gMgogICAgc3dhcAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6NzUKICAgIC8vIGFzc2VydCBfcXVvdGllbnRfaGlnaCA9PSAwCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjIyNQogICAgLy8gYXNzZXJ0IGJpZF9wYXkuc2VuZGVyID09IFR4bi5zZW5kZXIKICAgIHVuY292ZXIgNgogICAgZHVwCiAgICBndHhucyBTZW5kZXIKICAgIHR4biBTZW5kZXIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjIyNgogICAgLy8gYXNzZXJ0IGJpZF9wYXkucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjIyNwogICAgLy8gYXNzZXJ0IGJpZF9wYXkuYW1vdW50ID09IGFtb3VudF90b19iZV9iaWQKICAgIGd0eG5zIEFtb3VudAogICAgPT0KICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjMyCiAgICAvLyBiaWRkZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjIyOQogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjI5LTIzNQogICAgLy8gc2VsZi5saXN0aW5nc1trZXldID0gTGlzdGluZ1ZhbHVlKAogICAgLy8gICAgIGRlcG9zaXRlZD1saXN0aW5nLmRlcG9zaXRlZCwKICAgIC8vICAgICB1bml0YXJ5UHJpY2U9bGlzdGluZy51bml0YXJ5UHJpY2UsCiAgICAvLyAgICAgYmlkZGVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYmlkPXF1YW50aXR5LAogICAgLy8gICAgIGJpZFVuaXRhcnlQcmljZT11bml0YXJ5X3ByaWNlLAogICAgLy8gKQogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLm1hcmtldHBsYWNlX2RlbW8ubWFya2V0cGxhY2Vfd2l0aF90dXBzLkRpZ2l0YWxNYXJrZXRwbGFjZVdpdGhUdXBzLmFjY2VwdF9iaWRbcm91dGluZ10oKSAtPiB2b2lkOgphY2NlcHRfYmlkOgogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iYWNjZXB0QmlkIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjM5CiAgICAvLyBrZXkgPSBMaXN0aW5nS2V5KG93bmVyPVR4bi5zZW5kZXIsIGFzc2V0PWFzc2V0LmlkLCBub25jZT1ub25jZSkKICAgIHR4biBTZW5kZXIKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjI0MQogICAgLy8gbGlzdGluZyA9IHNlbGYubGlzdGluZ3Nba2V5XQogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDZjNjk3Mzc0Njk2ZTY3NzMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5saXN0aW5ncyBlbnRyeSBleGlzdHMKICAgIGR1cAogICAgaW50Y18yIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBleHRyYWN0IDggOAogICAgY292ZXIgNAogICAgZHVwCiAgICBleHRyYWN0IDE2IDMyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGR1cAogICAgcHVzaGludCA0OAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgMwogICAgY292ZXIgNAogICAgcHVzaGludCA1NgogICAgZXh0cmFjdF91aW50NjQKICAgIGNvdmVyIDMKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjI0MgogICAgLy8gYXNzZXJ0IGxpc3RpbmcuYmlkZGVyICE9IEFjY291bnQoKQogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToyNDQKICAgIC8vIG1pbl9xdWFudGl0eSA9IGxpc3RpbmcuZGVwb3NpdGVkIGlmIGxpc3RpbmcuZGVwb3NpdGVkIDwgbGlzdGluZy5iaWQgZWxzZSBsaXN0aW5nLmJpZAogICAgPAogICAgYnogYWNjZXB0X2JpZF90ZXJuYXJ5X2ZhbHNlQDMKICAgIGRpZyAzCgphY2NlcHRfYmlkX3Rlcm5hcnlfbWVyZ2VANDoKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjI0NwogICAgLy8gbWluX3F1YW50aXR5LCBsaXN0aW5nLmJpZFVuaXRhcnlQcmljZSwgYXNzZXQuZGVjaW1hbHMKICAgIHVuY292ZXIgNQogICAgZHVwCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjcwCiAgICAvLyBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3cgPSBvcC5tdWx3KHByaWNlLCBxdWFudGl0eSkKICAgIHVuY292ZXIgMwogICAgZHVwCiAgICBjb3ZlciAzCiAgICB1bmNvdmVyIDQKICAgIGR1cAogICAgY292ZXIgMwogICAgbXVsdwogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6NzEKICAgIC8vIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdyA9IG9wLmV4cHcoMTAsIGFzc2V0X2RlY2ltYWxzKQogICAgcHVzaGludCAxMAogICAgdW5jb3ZlciAzCiAgICBleHB3CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo3Mi03NAogICAgLy8gX3F1b3RpZW50X2hpZ2gsIGFtb3VudF90b19iZV9wYWlkLCBfcmVtYWluZGVyX2hpZ2gsIF9yZW1haW5kZXJfbG93ID0gb3AuZGl2bW9kdygKICAgIC8vICAgICBhbW91bnRfbm90X3NjYWxlZF9oaWdoLCBhbW91bnRfbm90X3NjYWxlZF9sb3csIHNjYWxpbmdfZmFjdG9yX2hpZ2gsIHNjYWxpbmdfZmFjdG9yX2xvdwogICAgLy8gKQogICAgZGl2bW9kdwogICAgcG9wbiAyCiAgICBzd2FwCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weTo3NQogICAgLy8gYXNzZXJ0IF9xdW90aWVudF9oaWdoID09IDAKICAgICEKICAgIGFzc2VydAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjUwCiAgICAvLyBpdHhuLlBheW1lbnQocmVjZWl2ZXI9VHhuLnNlbmRlciwgYW1vdW50PWJlc3RfYmlkX2Ftb3VudCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToyNTItMjU0CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9bGlzdGluZy5iaWRkZXIsIGFzc2V0X2Ftb3VudD1taW5fcXVhbnRpdHkKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGR1cAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgdW5jb3ZlciA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjUyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjUyLTI1NAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPWxpc3RpbmcuYmlkZGVyLCBhc3NldF9hbW91bnQ9bWluX3F1YW50aXR5CiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjYwCiAgICAvLyBkZXBvc2l0ZWQ9bGlzdGluZy5kZXBvc2l0ZWQgLSBtaW5fcXVhbnRpdHksCiAgICB1bmNvdmVyIDQKICAgIGRpZyAxCiAgICAtCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToyNjEKICAgIC8vIGJpZD1saXN0aW5nLmJpZCAtIG1pbl9xdWFudGl0eSwKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciAyCiAgICAtCiAgICAvLyBtYXJrZXRwbGFjZV9kZW1vL21hcmtldHBsYWNlX3dpdGhfdHVwcy5weToyNTYKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIHN3YXAKICAgIGl0b2IKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIG1hcmtldHBsYWNlX2RlbW8vbWFya2V0cGxhY2Vfd2l0aF90dXBzLnB5OjI1Ni0yNjIKICAgIC8vIHNlbGYubGlzdGluZ3Nba2V5XSA9IExpc3RpbmdWYWx1ZSgKICAgIC8vICAgICBiaWRkZXI9bGlzdGluZy5iaWRkZXIsCiAgICAvLyAgICAgYmlkVW5pdGFyeVByaWNlPWxpc3RpbmcuYmlkVW5pdGFyeVByaWNlLAogICAgLy8gICAgIHVuaXRhcnlQcmljZT1saXN0aW5nLnVuaXRhcnlQcmljZSwKICAgIC8vICAgICBkZXBvc2l0ZWQ9bGlzdGluZy5kZXBvc2l0ZWQgLSBtaW5fcXVhbnRpdHksCiAgICAvLyAgICAgYmlkPWxpc3RpbmcuYmlkIC0gbWluX3F1YW50aXR5LAogICAgLy8gKQogICAgYm94X3B1dAogICAgLy8gbWFya2V0cGxhY2VfZGVtby9tYXJrZXRwbGFjZV93aXRoX3R1cHMucHk6MjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QobmFtZT0iYWNjZXB0QmlkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCmFjY2VwdF9iaWRfdGVybmFyeV9mYWxzZUAzOgogICAgZGlnIDEKICAgIGIgYWNjZXB0X2JpZF90ZXJuYXJ5X21lcmdlQDQK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAFAQgABMSKAyYBCGxpc3RpbmdzMRhAAAeABGluaXSwMRtBAF8xGRREMRhEggkE2Y72qQRqTn/KBBLwjJgEm0uCNARNiyPYBFKsXfcE466yXAQyNLcRBMyCY0Y2GgCOCQABABoAWQDXAUEBkQI2Ar4DnACADBUffHUAAAAAAADFRLAiQzEZFDEYFBBDMRYiCUk4ECISRDYaAUkVIxJEFzIKSwFwAEUBFERLATgHMgoSREw4CDIQEkSxMgokshKyFLIRJbIQJLIBsyJDMRaBAglJOBAiEkQxFiIJSTgQJRJENhoBSRUjEkQXNhoCSRUjEkQXSwM4ADEAEkRLAzgHMgoSRE8DOAghBBJEMQBLAzgRFlBMFlAoTFBJvUUBFERLAjgAMQASREsCOBQyChJETwI4EklEMgNMFk8DFlBMUCQWTEsBUExQvyJDMRYiCUk4ECUSRDYaAUkVIxJEFzEASwI4EUsDOAAxABJESwM4FDIKEkRPAzgSSURMFk8CTFBPAhZQKExQSb5ESSRbSwFXCAhLAlcQIEsDVzAITwRXOAhPBE8GCBZPBFBPA1BPAlBMUL8iQzYaAUkVIxJEFzYaAkkVIxJEFzYaA0kVIxJEFzEATwMWUE8CFlAoTFBJvkRJVwAISwFXECBLAlcwCE8DVzgITwUWTwRMUE8DUE8CUExQvyJDNhoBSRWBIBJENhoCSRUjEkQXNhoDSRUjEkQXMRYiCUk4ECISRDYaBEkVIxJEF0sDFksFTFBPAxZQKExQSb5ESSRbSwEjW0sCVxAgSwNXMAhPBFc4CEsIcQFESwRLCB2BCk8DlR9GAkwUREsIOAAxABJESwg4B08LEkRPCDgIEkRPBEsGCRZPBBZQTwNQTwJQTFC/sTEAshSyErIRJbIQJLIBsyJDNhoBSRUjEkQXSTYaAkkVIxJEFzEATwIWUEwWUChMUEm+REkkW0xJVxAgSU4CTgVJgTBbTgWBOFtOBDIDE0EAI0sCcQFESwRLBh2BCk8DlR9GAkwURLGyCEsFsgcishAksgGzTLxIsTEAIQSyCLIHIrIQJLIBs7ExALIUshKyESWyECSyAbMiQzYaAUkVgSASRDYaAkkVIxJEF0lOAjYaA0kVIxJEFzEWIglJTgU4ECISRDYaBEkVIxJEF04ENhoFSRUjEkQXTgNMFk8CTFBMFlAoTFBJTgS+RElXAAhOA0lXCAhOA0lXECBJTgJOCUmBMFtOCYE4W04IMgMTQQAqSUsISU4CDURLAnEBRExLCh2BCk8DlR9GAkwURLGyCEsJsgcishAksgGzTHEBREsBTwVJTgMdgQpPA5UfRgJMFERPBkk4ADEAEkRJOAcyChJEOAgSRDEATwRPBFBMUEwWUEwWUL8iQzYaAUkVIxJEF0k2GgJJFSMSRBcxAE8CFlBMFlAoTFBJTgK+REkkW0lPAklXCAhOBElXECBJTgJOA0mBMFtJTgNOBIE4W04DMgMTRAxBAF1LA08FSXEBRE8DSU4DTwRJTgMdgQpPA5UfRgJMFESxMQCyB7IIIrIQJLIBs7FJshJPBElOArIUTwKyESWyECSyAbNPBEsBCU8ETwIJTBZPBFBPAlBMFlBMFlC/IkNLAUL/oA==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }