{ "name": "AlgoPotato", "structs": { "GameBoxName": [ { "name": "player_1", "type": "address" }, { "name": "counter", "type": "uint64" } ], "GameBoxValue": [ { "name": "player_1", "type": "address" }, { "name": "player_2", "type": "address" }, { "name": "player_1_round", "type": "uint64" }, { "name": "player_2_round", "type": "uint64" }, { "name": "vrf_round", "type": "uint64" }, { "name": "asset", "type": "uint64" }, { "name": "asset_amount", "type": "uint64" } ] }, "methods": [ { "name": "asset_opt_in", "args": [ { "type": "asset", "name": "asset" }, { "type": "txn", "name": "mbr_payment" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Confirm the minimum balance requirement for the asset opt in of 100,000 Microalgo, or 0.1 Algo, was sent to the contract\n(Prevents potential usage of Algo funds reserves for games or excess mbr from box deletions)", "events": [], "recommendations": {} }, { "name": "create_game", "args": [ { "type": "txn", "name": "asset_deposit" }, { "type": "txn", "name": "mbr_fee" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Initializes a game\n- Dynamically confirms the contract is the receiver of both the asset deposit and mbr fee - Gets the asset id and amount transferred from the asset deposit - Constructs a box name instance using the sender and current global counter - Constructs a box value template with only non-default values being player 1 address, asset (0 if algo), asset deposit amount, and player 1 round (current round) - Writes the box name and value", "events": [], "recommendations": {} }, { "name": "prime_game_vrf", "args": [ { "type": "(address,uint64)", "struct": "GameBoxName", "name": "game_box_name" }, { "type": "txn", "name": "asset_deposit" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Asserts the contract is the receiver of player 2's asset deposit\nGets the current game details Verifies that the asset deposit matches the game details, Updates the current game box with player 2's information Writes the updated information into box storage", "events": [], "recommendations": {} }, { "name": "play_game", "args": [ { "type": "(address,uint64)", "struct": "GameBoxName", "name": "game_box_name" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Initializes the \"Hot Potato\" Game\n- Starts with an ensure budget requiring 14 inner txns - Gets the game information - Ensures a player 2 has joined and the game is ready - Gets the VRF Output % 240, see \"get_vrf_output_modulo\" for information on why the # 240 was chosen - Verifies both users are opted in or asset is Algorand which does not require opt in - If either of the users are not opted into the asset then the reward goes to the user that is still opted in - If both users are not opted in the first to opt in can claim the reward - If the VRF round has expired (1,512 rounds have passed since the VRF round selected) a new VRF round is created 9 rounds into the future - Hot Potato game starts, the contract sends Algo or Asset zero amount transactions to both players until the target modulo is reached - The player the 'Hot Potato' was on at the target modulo receives the reward - The reward is dispensed and the box is deleted to prevent state bloat - A little string is returned that states which player won", "events": [], "recommendations": {} }, { "name": "cancel_game", "args": [ { "type": "(address,uint64)", "struct": "GameBoxName", "name": "game_box_name" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Cancels a game if and only if there is no active player 2\nDispenses the asset deposit to player 1", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 3, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "games_played": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Z2FtZXNfcGxheWVk" }, "counter": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y291bnRlcg==" }, "vrf_app_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dnJmX2FwcF9pZA==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "game_box": { "keyType": "GameBoxName", "valueType": "GameBoxValue", "prefix": "" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 1179 ], "errorMessage": "ARC4 prefix is valid" }, { "pc": [ 504, 510, 523, 555, 565, 635, 667, 673, 1204, 1209 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ 132, 147, 175, 194, 214 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ 241 ], "errorMessage": "can only call when creating" }, { "pc": [ 135, 150, 178, 197, 217 ], "errorMessage": "can only call when not creating" }, { "pc": [ 391, 402 ], "errorMessage": "check self.counter exists" }, { "pc": [ 474, 633, 1202 ], "errorMessage": "check self.game_box entry exists" }, { "pc": [ 757, 858 ], "errorMessage": "check self.games_played exists" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcG90YXRvLkFsZ29Qb3RhdG8uX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDQgMiA2MDAwMTE4ODcKICAgIGJ5dGVjYmxvY2sgImdhbWVzX3BsYXllZCIgImNvdW50ZXIiIDB4MDAwMDAwMDAwMDAwMDAwMCAiIiAweDE1MWY3Yzc1IDB4MDY4MTAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBhbGdvcG90YXRvLnB5OjQxCiAgICAvLyBzZWxmLmdhbWVzX3BsYXllZCA9IFVJbnQ2NCgwKQogICAgYnl0ZWNfMCAvLyAiZ2FtZXNfcGxheWVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBhbGdvcG90YXRvLnB5OjQyCiAgICAvLyBzZWxmLmNvdW50ZXIgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzEgLy8gImNvdW50ZXIiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDQKICAgIC8vIHNlbGYudnJmX2FwcF9pZCA9IEFwcGxpY2F0aW9uKDYwMDAxMTg4NykgI1Rlc3RuZXQKICAgIHB1c2hieXRlcyAidnJmX2FwcF9pZCIKICAgIGludGMgNCAvLyA2MDAwMTE4ODcKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzEKICAgIC8vIGNsYXNzIEFsZ29Qb3RhdG8oQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxMAogICAgcHVzaGJ5dGVzcyAweDI4YzViZWVhIDB4MDNlMjBiZWEgMHhhOWMyMjU4NiAweDJmMzkyNGQ3IDB4ODM1MWRhYjcgLy8gbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQsdHhuKXZvaWQiLCBtZXRob2QgImNyZWF0ZV9nYW1lKHR4bix0eG4pdm9pZCIsIG1ldGhvZCAicHJpbWVfZ2FtZV92cmYoKGFkZHJlc3MsdWludDY0KSx0eG4pdm9pZCIsIG1ldGhvZCAicGxheV9nYW1lKChhZGRyZXNzLHVpbnQ2NCkpc3RyaW5nIiwgbWV0aG9kICJjYW5jZWxfZ2FtZSgoYWRkcmVzcyx1aW50NjQpKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2Fzc2V0X29wdF9pbl9yb3V0ZUA1IG1haW5fY3JlYXRlX2dhbWVfcm91dGVANiBtYWluX3ByaW1lX2dhbWVfdnJmX3JvdXRlQDcgbWFpbl9wbGF5X2dhbWVfcm91dGVAOCBtYWluX2NhbmNlbF9nYW1lX3JvdXRlQDkKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzEKICAgIC8vIGNsYXNzIEFsZ29Qb3RhdG8oQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fY2FuY2VsX2dhbWVfcm91dGVAOToKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDY4CiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzEKICAgIC8vIGNsYXNzIEFsZ29Qb3RhdG8oQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDY4CiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIGNhbmNlbF9nYW1lCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3BsYXlfZ2FtZV9yb3V0ZUA4OgogICAgLy8gYWxnb3BvdGF0by5weTo0MDcKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gYWxnb3BvdGF0by5weTozMQogICAgLy8gY2xhc3MgQWxnb1BvdGF0byhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gYWxnb3BvdGF0by5weTo0MDcKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgcGxheV9nYW1lCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9wcmltZV9nYW1lX3ZyZl9yb3V0ZUA3OgogICAgLy8gYWxnb3BvdGF0by5weToyNDcKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gYWxnb3BvdGF0by5weTozMQogICAgLy8gY2xhc3MgQWxnb1BvdGF0byhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICAvLyBhbGdvcG90YXRvLnB5OjI0NwogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBwcmltZV9nYW1lX3ZyZgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfZ2FtZV9yb3V0ZUA2OgogICAgLy8gYWxnb3BvdGF0by5weToxODAKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gYWxnb3BvdGF0by5weTozMQogICAgLy8gY2xhc3MgQWxnb1BvdGF0byhBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMyAvLyAyCiAgICAtCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIC8vIGFsZ29wb3RhdG8ucHk6MTgwCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIGNyZWF0ZV9nYW1lCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0X29wdF9pbl9yb3V0ZUA1OgogICAgLy8gYWxnb3BvdGF0by5weTo2MQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBhbGdvcG90YXRvLnB5OjMxCiAgICAvLyBjbGFzcyBBbGdvUG90YXRvKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgLy8gYWxnb3BvdGF0by5weTo2MQogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9vcHRfaW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDEwOgogICAgLy8gYWxnb3BvdGF0by5weTozMQogICAgLy8gY2xhc3MgQWxnb1BvdGF0byhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBhbGdvcG90YXRvLkFsZ29Qb3RhdG8uY29udHJhY3RfaXNfcmVjZWl2ZXIodHhuOiB1aW50NjQpIC0+IHZvaWQ6CmNvbnRyYWN0X2lzX3JlY2VpdmVyOgogICAgLy8gYWxnb3BvdGF0by5weTo0OC01MgogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBjb250cmFjdF9pc19yZWNlaXZlcigKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIHR4bjogZ3R4bi5UcmFuc2FjdGlvbiwKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gYWxnb3BvdGF0by5weTo1NgogICAgLy8gaWYgdHhuLnR5cGUgPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQ6CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBkdXAKICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBieiBjb250cmFjdF9pc19yZWNlaXZlcl9lbHNlX2JvZHlAMgogICAgLy8gYWxnb3BvdGF0by5weTo1NwogICAgLy8gYXNzZXJ0IHR4bi5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAoKY29udHJhY3RfaXNfcmVjZWl2ZXJfYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgpjb250cmFjdF9pc19yZWNlaXZlcl9lbHNlX2JvZHlAMjoKICAgIC8vIGFsZ29wb3RhdG8ucHk6NTgKICAgIC8vIGVsaWYgdHhuLnR5cGUgPT0gVHJhbnNhY3Rpb25UeXBlLkFzc2V0VHJhbnNmZXI6CiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18yIC8vIGF4ZmVyCiAgICA9PQogICAgYnogY29udHJhY3RfaXNfcmVjZWl2ZXJfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBhbGdvcG90YXRvLnB5OjU5CiAgICAvLyBhc3NlcnQgdHhuLmFzc2V0X3JlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIGFsZ29wb3RhdG8uQWxnb1BvdGF0by5hc3NldF9vcHRfaW4oYXNzZXQ6IHVpbnQ2NCwgbWJyX3BheW1lbnQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfb3B0X2luOgogICAgLy8gYWxnb3BvdGF0by5weTo2MS02NgogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X29wdF9pbigKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIGFzc2V0OiBBc3NldCwKICAgIC8vICAgICBtYnJfcGF5bWVudDogZ3R4bi5UcmFuc2FjdGlvbgogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBhbGdvcG90YXRvLnB5OjcyCiAgICAvLyBzZWxmLmNvbnRyYWN0X2lzX3JlY2VpdmVyKG1icl9wYXltZW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGNvbnRyYWN0X2lzX3JlY2VpdmVyCiAgICAvLyBhbGdvcG90YXRvLnB5Ojc0CiAgICAvLyBpZiBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKGFzc2V0KSA9PSBGYWxzZToKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTIKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYnVyeSAxCiAgICBibnogYXNzZXRfb3B0X2luX2Vsc2VfYm9keUAyCiAgICAvLyBhbGdvcG90YXRvLnB5Ojc1CiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID09IDEwMF8wMDAKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBwdXNoaW50IDEwMDAwMCAvLyAxMDAwMDAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFsZ29wb3RhdG8ucHk6OTAtOTMKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGFsZ29wb3RhdG8ucHk6OTIKICAgIC8vIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIGFsZ29wb3RhdG8ucHk6OTAKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMiAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBhbGdvcG90YXRvLnB5OjkwLTkzCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgphc3NldF9vcHRfaW5fZWxzZV9ib2R5QDI6CiAgICAvLyBhbGdvcG90YXRvLnB5Ojc5CiAgICAvLyBhc3NlcnQgbWJyX3BheW1lbnQuYW1vdW50ID09IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICAhCiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIGFsZ29wb3RhdG8uQWxnb1BvdGF0by5jcmVhdGVfZ2FtZShhc3NldF9kZXBvc2l0OiB1aW50NjQsIG1icl9mZWU6IHVpbnQ2NCkgLT4gdm9pZDoKY3JlYXRlX2dhbWU6CiAgICAvLyBhbGdvcG90YXRvLnB5OjE4MC0xODUKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBjcmVhdGVfZ2FtZSgKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIGFzc2V0X2RlcG9zaXQ6IGd0eG4uVHJhbnNhY3Rpb24sCiAgICAvLyAgICAgbWJyX2ZlZTogZ3R4bi5UcmFuc2FjdGlvbgogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBhbGdvcG90YXRvLnB5OjE5NAogICAgLy8gc2VsZi5jb250cmFjdF9pc19yZWNlaXZlcihhc3NldF9kZXBvc2l0KQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGNvbnRyYWN0X2lzX3JlY2VpdmVyCiAgICAvLyBhbGdvcG90YXRvLnB5OjE5NQogICAgLy8gc2VsZi5jb250cmFjdF9pc19yZWNlaXZlcihtYnJfZmVlKQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGNvbnRyYWN0X2lzX3JlY2VpdmVyCiAgICAvLyBhbGdvcG90YXRvLnB5OjEwNgogICAgLy8gYXNzZXRfaWQgPSBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBhbGdvcG90YXRvLnB5OjEwNwogICAgLy8gYW1vdW50X2RlcG9zaXRlZCA9IFVJbnQ2NCgwKQogICAgZHVwCiAgICAvLyBhbGdvcG90YXRvLnB5OjEwOQogICAgLy8gYXNzZXJ0IGFzc2V0X2RlcG9zaXQudHlwZSBpbiAoVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQsIFRyYW5zYWN0aW9uVHlwZS5Bc3NldFRyYW5zZmVyKQogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBUeXBlRW51bQogICAgZHVwCiAgICBpbnRjXzEgLy8gcGF5CiAgICA9PQogICAgZHVwCiAgICBibnogY3JlYXRlX2dhbWVfYm9vbF90cnVlQDMKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzIgLy8gYXhmZXIKICAgID09CiAgICBieiBjcmVhdGVfZ2FtZV9ib29sX2ZhbHNlQDQKCmNyZWF0ZV9nYW1lX2Jvb2xfdHJ1ZUAzOgogICAgaW50Y18xIC8vIDEKCmNyZWF0ZV9nYW1lX2Jvb2xfbWVyZ2VANToKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTA5CiAgICAvLyBhc3NlcnQgYXNzZXRfZGVwb3NpdC50eXBlIGluIChUcmFuc2FjdGlvblR5cGUuUGF5bWVudCwgVHJhbnNhY3Rpb25UeXBlLkFzc2V0VHJhbnNmZXIpCiAgICBhc3NlcnQKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTExCiAgICAvLyBpZiBhc3NldF9kZXBvc2l0LnR5cGUgPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQ6CiAgICBmcmFtZV9kaWcgMwogICAgYnogY3JlYXRlX2dhbWVfZWxzZV9ib2R5QDcKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTEyCiAgICAvLyBhc3NldF9pZCA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gYWxnb3BvdGF0by5weToxMTMKICAgIC8vIGFtb3VudF9kZXBvc2l0ZWQgPSBhc3NldF9kZXBvc2l0LmFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBBbW91bnQKICAgIGZyYW1lX2J1cnkgMQoKY3JlYXRlX2dhbWVfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTE5CiAgICAvLyBhc3NlcnQgYW1vdW50X2RlcG9zaXRlZCAhPSAwCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTMyCiAgICAvLyBzZWxmLmNvdW50ZXIgKz0gMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImNvdW50ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY291bnRlciBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlY18xIC8vICJjb3VudGVyIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTMzCiAgICAvLyB1c2VyX2FkZHIgPSBBZGRyZXNzKFR4bi5zZW5kZXIpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBhbGdvcG90YXRvLnB5OjEzNAogICAgLy8gY291bnRlciA9IGFyYzQuVUludDY0KHNlbGYuY291bnRlcikKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJjb3VudGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvdW50ZXIgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBhbGdvcG90YXRvLnB5OjEzNi0xMzkKICAgIC8vIHJldHVybiBHYW1lQm94TmFtZSgKICAgIC8vICAgICBwbGF5ZXJfMT11c2VyX2FkZHIsCiAgICAvLyAgICAgY291bnRlcj1jb3VudGVyCiAgICAvLyApCiAgICBjb25jYXQKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTUyCiAgICAvLyB1c2VyX2FkZHIgPSBBZGRyZXNzKFR4bi5zZW5kZXIpCiAgICB0eG4gU2VuZGVyCiAgICAvLyBhbGdvcG90YXRvLnB5OjE1NgogICAgLy8gcGxheWVyXzI9QWRkcmVzcyhHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgLy8gYWxnb3BvdGF0by5weToxNTcKICAgIC8vIHBsYXllcl8xX3JvdW5kPWFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCksCiAgICBnbG9iYWwgUm91bmQKICAgIGl0b2IKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTYwCiAgICAvLyBhc3NldD1hcmM0LlVJbnQ2NChhc3NldF9pZCksCiAgICBmcmFtZV9kaWcgMAogICAgaXRvYgogICAgLy8gYWxnb3BvdGF0by5weToxNjEKICAgIC8vIGFzc2V0X2Ftb3VudD1hcmM0LlVJbnQ2NChhc3NldF9hbW91bnQpCiAgICB1bmNvdmVyIDUKICAgIGl0b2IKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTU0LTE2MgogICAgLy8gcmV0dXJuIEdhbWVCb3hWYWx1ZSgKICAgIC8vICAgICAgICAgcGxheWVyXzE9dXNlcl9hZGRyLAogICAgLy8gICAgICAgICBwbGF5ZXJfMj1BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgICAgICBwbGF5ZXJfMV9yb3VuZD1hcmM0LlVJbnQ2NChHbG9iYWwucm91bmQpLAogICAgLy8gICAgICAgICBwbGF5ZXJfMl9yb3VuZD1hcmM0LlVJbnQ2NCgwKSwKICAgIC8vICAgICAgICAgdnJmX3JvdW5kPWFyYzQuVUludDY0KDApLAogICAgLy8gICAgICAgICBhc3NldD1hcmM0LlVJbnQ2NChhc3NldF9pZCksCiAgICAvLyAgICAgICAgIGFzc2V0X2Ftb3VudD1hcmM0LlVJbnQ2NChhc3NldF9hbW91bnQpCiAgICAvLyApCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgLy8gYWxnb3BvdGF0by5weToxNTgKICAgIC8vIHBsYXllcl8yX3JvdW5kPWFyYzQuVUludDY0KDApLAogICAgYnl0ZWNfMiAvLyAweDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTU0LTE2MgogICAgLy8gcmV0dXJuIEdhbWVCb3hWYWx1ZSgKICAgIC8vICAgICAgICAgcGxheWVyXzE9dXNlcl9hZGRyLAogICAgLy8gICAgICAgICBwbGF5ZXJfMj1BZGRyZXNzKEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgLy8gICAgICAgICBwbGF5ZXJfMV9yb3VuZD1hcmM0LlVJbnQ2NChHbG9iYWwucm91bmQpLAogICAgLy8gICAgICAgICBwbGF5ZXJfMl9yb3VuZD1hcmM0LlVJbnQ2NCgwKSwKICAgIC8vICAgICAgICAgdnJmX3JvdW5kPWFyYzQuVUludDY0KDApLAogICAgLy8gICAgICAgICBhc3NldD1hcmM0LlVJbnQ2NChhc3NldF9pZCksCiAgICAvLyAgICAgICAgIGFzc2V0X2Ftb3VudD1hcmM0LlVJbnQ2NChhc3NldF9hbW91bnQpCiAgICAvLyApCiAgICBjb25jYXQKICAgIC8vIGFsZ29wb3RhdG8ucHk6MTU5CiAgICAvLyB2cmZfcm91bmQ9YXJjNC5VSW50NjQoMCksCiAgICBieXRlY18yIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgLy8gYWxnb3BvdGF0by5weToxNTQtMTYyCiAgICAvLyByZXR1cm4gR2FtZUJveFZhbHVlKAogICAgLy8gICAgICAgICBwbGF5ZXJfMT11c2VyX2FkZHIsCiAgICAvLyAgICAgICAgIHBsYXllcl8yPUFkZHJlc3MoR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgICAgIHBsYXllcl8xX3JvdW5kPWFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCksCiAgICAvLyAgICAgICAgIHBsYXllcl8yX3JvdW5kPWFyYzQuVUludDY0KDApLAogICAgLy8gICAgICAgICB2cmZfcm91bmQ9YXJjNC5VSW50NjQoMCksCiAgICAvLyAgICAgICAgIGFzc2V0PWFyYzQuVUludDY0KGFzc2V0X2lkKSwKICAgIC8vICAgICAgICAgYXNzZXRfYW1vdW50PWFyYzQuVUludDY0KGFzc2V0X2Ftb3VudCkKICAgIC8vICkKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gYWxnb3BvdGF0by5weToyMDMKICAgIC8vIHNlbGYuZ2FtZV9ib3hbZ2FtZV9ib3hfbmFtZV0gPSBnYW1lX2JveF92YWx1ZS5jb3B5KCkKICAgIGJveF9wdXQKICAgIHJldHN1YgoKY3JlYXRlX2dhbWVfZWxzZV9ib2R5QDc6CiAgICAvLyBhbGdvcG90YXRvLnB5OjExNQogICAgLy8gZWxpZiBhc3NldF9kZXBvc2l0LnR5cGUgPT0gVHJhbnNhY3Rpb25UeXBlLkFzc2V0VHJhbnNmZXI6CiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18yIC8vIGF4ZmVyCiAgICA9PQogICAgYnogY3JlYXRlX2dhbWVfYWZ0ZXJfaWZfZWxzZUAxMAogICAgLy8gYWxnb3BvdGF0by5weToxMTYKICAgIC8vIGFzc2V0X2lkID0gYXNzZXRfZGVwb3NpdC54ZmVyX2Fzc2V0LmlkCiAgICBmcmFtZV9kaWcgLTIKICAgIGd0eG5zIFhmZXJBc3NldAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBhbGdvcG90YXRvLnB5OjExNwogICAgLy8gYW1vdW50X2RlcG9zaXRlZCA9IGFzc2V0X2RlcG9zaXQuYXNzZXRfYW1vdW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY3JlYXRlX2dhbWVfYWZ0ZXJfaWZfZWxzZUAxMAoKY3JlYXRlX2dhbWVfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgY3JlYXRlX2dhbWVfYm9vbF9tZXJnZUA1CgoKLy8gYWxnb3BvdGF0by5BbGdvUG90YXRvLnByaW1lX2dhbWVfdnJmKGdhbWVfYm94X25hbWU6IGJ5dGVzLCBhc3NldF9kZXBvc2l0OiB1aW50NjQpIC0+IHZvaWQ6CnByaW1lX2dhbWVfdnJmOgogICAgLy8gYWxnb3BvdGF0by5weToyNDctMjUyCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgcHJpbWVfZ2FtZV92cmYoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICBnYW1lX2JveF9uYW1lOiBHYW1lQm94TmFtZSwKICAgIC8vICAgICBhc3NldF9kZXBvc2l0OiBndHhuLlRyYW5zYWN0aW9uLAogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBhbGdvcG90YXRvLnB5OjI2MQogICAgLy8gc2VsZi5jb250cmFjdF9pc19yZWNlaXZlcihhc3NldF9kZXBvc2l0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGNvbnRyYWN0X2lzX3JlY2VpdmVyCiAgICAvLyBhbGdvcG90YXRvLnB5OjI2MwogICAgLy8gZ2FtZV9ib3ggPSBzZWxmLmdhbWVfYm94W2dhbWVfYm94X25hbWVdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nYW1lX2JveCBlbnRyeSBleGlzdHMKICAgIC8vIGFsZ29wb3RhdG8ucHk6MjE4CiAgICAvLyBhc3NlcnQgYXNzZXRfZGVwb3NpdC50eXBlIGluIChUcmFuc2FjdGlvblR5cGUuQXNzZXRUcmFuc2ZlciwgVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBkdXAKICAgIGludGNfMiAvLyBheGZlcgogICAgPT0KICAgIGJueiBwcmltZV9nYW1lX3ZyZl9ib29sX3RydWVAMwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBieiBwcmltZV9nYW1lX3ZyZl9ib29sX2ZhbHNlQDQKCnByaW1lX2dhbWVfdnJmX2Jvb2xfdHJ1ZUAzOgogICAgaW50Y18xIC8vIDEKCnByaW1lX2dhbWVfdnJmX2Jvb2xfbWVyZ2VANToKICAgIC8vIGFsZ29wb3RhdG8ucHk6MjE4CiAgICAvLyBhc3NlcnQgYXNzZXRfZGVwb3NpdC50eXBlIGluIChUcmFuc2FjdGlvblR5cGUuQXNzZXRUcmFuc2ZlciwgVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQpCiAgICBhc3NlcnQKICAgIC8vIGFsZ29wb3RhdG8ucHk6MjIwCiAgICAvLyBpZiBhc3NldF9kZXBvc2l0LnR5cGUgPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQ6CiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGJ6IHByaW1lX2dhbWVfdnJmX2Vsc2VfYm9keUA3CiAgICAvLyBhbGdvcG90YXRvLnB5OjIyMQogICAgLy8gYXNzZXJ0IGdhbWVfYm94X3ZhbHVlLmFzc2V0ID09IDAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGV4dHJhY3QgODggOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjXzIgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gYWxnb3BvdGF0by5weToyMjIKICAgIC8vIGFzc2VydCBnYW1lX2JveF92YWx1ZS5hc3NldF9hbW91bnQgPT0gYXNzZXRfZGVwb3NpdC5hbW91bnQKICAgIGV4dHJhY3QgOTYgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBpdG9iCiAgICBiPT0KICAgIGFzc2VydAoKcHJpbWVfZ2FtZV92cmZfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gYWxnb3BvdGF0by5weToyNDAKICAgIC8vIGFzc2VydCBnYW1lX2JveC5wbGF5ZXJfMiA9PSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBleHRyYWN0IDMyIDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhbGdvcG90YXRvLnB5OjI0MQogICAgLy8gZ2FtZV9ib3gucGxheWVyXzIgPSBBZGRyZXNzKFR4bi5zZW5kZXIpCiAgICB0eG4gU2VuZGVyCiAgICByZXBsYWNlMiAzMgogICAgLy8gYWxnb3BvdGF0by5weToyNDIKICAgIC8vIGdhbWVfYm94LnBsYXllcl8yX3JvdW5kID0gYXJjNC5VSW50NjQoR2xvYmFsLnJvdW5kKQogICAgZ2xvYmFsIFJvdW5kCiAgICBpdG9iCiAgICByZXBsYWNlMiA3MgogICAgLy8gYWxnb3BvdGF0by5weToyNDMKICAgIC8vIGdhbWVfYm94LnZyZl9yb3VuZCA9IGFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCArIDkpCiAgICBnbG9iYWwgUm91bmQKICAgIHB1c2hpbnQgOSAvLyA5CiAgICArCiAgICBpdG9iCiAgICByZXBsYWNlMiA4MAogICAgLy8gYWxnb3BvdGF0by5weToyNjgKICAgIC8vIHNlbGYuZ2FtZV9ib3hbZ2FtZV9ib3hfbmFtZV0gPSBnYW1lX2JveC5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgpwcmltZV9nYW1lX3ZyZl9lbHNlX2JvZHlANzoKICAgIC8vIGFsZ29wb3RhdG8ucHk6MjI1CiAgICAvLyBhc3NlcnQgZ2FtZV9ib3hfdmFsdWUuYXNzZXQgPT0gYXNzZXRfZGVwb3NpdC54ZmVyX2Fzc2V0LmlkCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBleHRyYWN0IDg4IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFhmZXJBc3NldAogICAgaXRvYgogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIGFsZ29wb3RhdG8ucHk6MjI2CiAgICAvLyBhc3NlcnQgZ2FtZV9ib3hfdmFsdWUuYXNzZXRfYW1vdW50ID09IGFzc2V0X2RlcG9zaXQuYXNzZXRfYW1vdW50CiAgICBleHRyYWN0IDk2IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICBpdG9iCiAgICBiPT0KICAgIGFzc2VydAogICAgYiBwcmltZV9nYW1lX3ZyZl9hZnRlcl9pZl9lbHNlQDgKCnByaW1lX2dhbWVfdnJmX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIHByaW1lX2dhbWVfdnJmX2Jvb2xfbWVyZ2VANQoKCi8vIGFsZ29wb3RhdG8uQWxnb1BvdGF0by5wbGF5X2dhbWUoZ2FtZV9ib3hfbmFtZTogYnl0ZXMpIC0+IGJ5dGVzOgpwbGF5X2dhbWU6CiAgICAvLyBhbGdvcG90YXRvLnB5OjQwNy00MTEKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBwbGF5X2dhbWUoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICBnYW1lX2JveF9uYW1lOiBHYW1lQm94TmFtZSwKICAgIC8vICkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiA2CiAgICBieXRlY18zIC8vICIiCiAgICBkdXBuIDcKCnBsYXlfZ2FtZV93aGlsZV90b3BAMjU6CiAgICBwdXNoaW50IDEwMDEwIC8vIDEwMDEwCiAgICBnbG9iYWwgT3Bjb2RlQnVkZ2V0CiAgICA+CiAgICBieiBwbGF5X2dhbWVfYWZ0ZXJfd2hpbGVAMzAKICAgIGl0eG5fYmVnaW4KICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBieXRlYyA1IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgNSAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgYiBwbGF5X2dhbWVfd2hpbGVfdG9wQDI1CgpwbGF5X2dhbWVfYWZ0ZXJfd2hpbGVAMzA6CiAgICAvLyBhbGdvcG90YXRvLnB5OjQzMQogICAgLy8gZ2FtZV9ib3ggPSBzZWxmLmdhbWVfYm94W2dhbWVfYm94X25hbWVdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2FtZV9ib3ggZW50cnkgZXhpc3RzCiAgICAvLyBhbGdvcG90YXRvLnB5OjQwNQogICAgLy8gYXNzZXJ0IGdhbWVfYm94LnZyZl9yb3VuZCAhPSAwCiAgICBkdXAKICAgIGV4dHJhY3QgODAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZnJhbWVfYnVyeSA2CiAgICBieXRlY18yIC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgYiE9CiAgICBhc3NlcnQKICAgIC8vIGFsZ29wb3RhdG8ucHk6Mjg4CiAgICAvLyBpZiBHbG9iYWwucm91bmQgLSB2cmZfcm91bmQubmF0aXZlID4gMTUxMjoKICAgIGdsb2JhbCBSb3VuZAogICAgc3dhcAogICAgLy8gYWxnb3BvdGF0by5weToyODYKICAgIC8vIHZyZl9yb3VuZCA9IGdhbWVfYm94LnZyZl9yb3VuZAogICAgcHVzaGludCA4MCAvLyA4MAogICAgLy8gYWxnb3BvdGF0by5weToyODgKICAgIC8vIGlmIEdsb2JhbC5yb3VuZCAtIHZyZl9yb3VuZC5uYXRpdmUgPiAxNTEyOgogICAgZXh0cmFjdF91aW50NjQKICAgIC0KICAgIHB1c2hpbnQgMTUxMiAvLyAxNTEyCiAgICA+CiAgICBieiBwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUAzNgogICAgLy8gYWxnb3BvdGF0by5weToyODkKICAgIC8vIHJldHVybiBVSW50NjQoMCksIEZhbHNlCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDE0CiAgICBmcmFtZV9idXJ5IDExCgpwbGF5X2dhbWVfYWZ0ZXJfaW5saW5lZF9hbGdvcG90YXRvLkFsZ29Qb3RhdG8uZ2V0X3ZyZl9vdXRwdXRfbW9kdWxvQDM3OgogICAgLy8gYWxnb3BvdGF0by5weTozNjkKICAgIC8vIHBsYXllcl8xID0gZ2FtZV9ib3gucGxheWVyXzEubmF0aXZlCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBleHRyYWN0IDAgMzIgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzcwCiAgICAvLyBwbGF5ZXJfMiA9IGdhbWVfYm94LnBsYXllcl8yLm5hdGl2ZQogICAgZHVwCiAgICBleHRyYWN0IDMyIDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBhbGdvcG90YXRvLnB5OjM3MgogICAgLy8gYXNzZXQgPSBnYW1lX2JveC5hc3NldC5uYXRpdmUKICAgIGR1cAogICAgcHVzaGludCA4OCAvLyA4OAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgY292ZXIgMgogICAgZnJhbWVfYnVyeSA3CiAgICAvLyBhbGdvcG90YXRvLnB5OjM3MwogICAgLy8gYXNzZXRfYW1vdW50ID0gZ2FtZV9ib3guYXNzZXRfYW1vdW50Lm5hdGl2ZSAqIDIKICAgIHB1c2hpbnQgOTYgLy8gOTYKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzMgLy8gMgogICAgKgogICAgZnJhbWVfYnVyeSA4CiAgICAvLyBhbGdvcG90YXRvLnB5OjM3NQogICAgLy8gaWYgYXNzZXQgPT0gMDoKICAgIGJueiBwbGF5X2dhbWVfZWxzZV9ib2R5QDQwCiAgICAvLyBhbGdvcG90YXRvLnB5OjM3NgogICAgLy8gcmV0dXJuIFRydWUsIFN0cmluZygnJykKICAgIGludGNfMSAvLyAxCiAgICBieXRlY18zIC8vICIiCiAgICBmcmFtZV9idXJ5IDUKICAgIGZyYW1lX2J1cnkgOQoKcGxheV9nYW1lX2FmdGVyX2lubGluZWRfYWxnb3BvdGF0by5BbGdvUG90YXRvLnZlcmlmeV9ib3RoX3VzZXJzX29wdGVkX2luQDQ1OgogICAgLy8gYWxnb3BvdGF0by5weTo0MzkKICAgIC8vIGlmIHZhbGlkX3ZyZl9yb3VuZCA9PSBGYWxzZToKICAgIGZyYW1lX2RpZyAxNAogICAgYm56IHBsYXlfZ2FtZV9lbHNlX2JvZHlAMgogICAgLy8gYWxnb3BvdGF0by5weTo0NDAKICAgIC8vIGdhbWVfYm94LnZyZl9yb3VuZCA9IGFyYzQuVUludDY0KEdsb2JhbC5yb3VuZCArIDkpCiAgICBnbG9iYWwgUm91bmQKICAgIHB1c2hpbnQgOSAvLyA5CiAgICArCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgcmVwbGFjZTIgODAKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDQxCiAgICAvLyBzZWxmLmdhbWVfYm94W2dhbWVfYm94X25hbWVdID0gZ2FtZV9ib3guY29weSgpCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDQyCiAgICAvLyByZXR1cm4gU3RyaW5nKCJWUkYgUm91bmQgZXhwaXJlZCIpCiAgICBwdXNoYnl0ZXMgIlZSRiBSb3VuZCBleHBpcmVkIgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnBsYXlfZ2FtZV9lbHNlX2JvZHlAMjoKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDQ0CiAgICAvLyBlbGlmIG5vdCBib3RoX3VzZXJzX29wdGVkX2ludG9fYXNzZXQ6CiAgICBmcmFtZV9kaWcgOQogICAgYm56IHBsYXlfZ2FtZV9lbHNlX2JvZHlANAogICAgLy8gYWxnb3BvdGF0by5weTo0NDYKICAgIC8vIGRlbCBzZWxmLmdhbWVfYm94W2dhbWVfYm94X25hbWVdCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gYWxnb3BvdGF0by5weTo0NDgKICAgIC8vIHNlbGYuZ2FtZXNfcGxheWVkICs9IDEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnYW1lc19wbGF5ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2FtZXNfcGxheWVkIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ5dGVjXzAgLy8gImdhbWVzX3BsYXllZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBhbGdvcG90YXRvLnB5OjQ1MAogICAgLy8gcmV0dXJuIHJldHVybl9tZXNzYWdlCiAgICBmcmFtZV9kaWcgNQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnBsYXlfZ2FtZV9lbHNlX2JvZHlANDoKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzIxCiAgICAvLyBwb3RhdG9faG9sZGVyID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzIzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UobW9kdWxvXzI0MF92cmZfYnl0ZXNfYXNfaW50ICsgMSk6CiAgICBmcmFtZV9kaWcgMTEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAxMAoKcGxheV9nYW1lX2Zvcl9oZWFkZXJAODoKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzIzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UobW9kdWxvXzI0MF92cmZfYnl0ZXNfYXNfaW50ICsgMSk6CiAgICBmcmFtZV9kaWcgMTAKICAgIGZyYW1lX2RpZyAxMgogICAgPAogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2J1cnkgNAogICAgYnogcGxheV9nYW1lX2FmdGVyX2ZvckAyMgogICAgLy8gYWxnb3BvdGF0by5weTozMjQKICAgIC8vIGlmIGkgJSAyID09IDA6CiAgICBmcmFtZV9kaWcgMTAKICAgIGludGNfMyAvLyAyCiAgICAlCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMTMKICAgIGJueiBwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUAxMQogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2J1cnkgMwoKcGxheV9nYW1lX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBhbGdvcG90YXRvLnB5OjMyNwogICAgLy8gaWYgaSAlIDIgIT0gMDoKICAgIGZyYW1lX2RpZyAxMwogICAgYnogcGxheV9nYW1lX2FmdGVyX2lmX2Vsc2VAMTMKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDMKCnBsYXlfZ2FtZV9hZnRlcl9pZl9lbHNlQDEzOgogICAgLy8gYWxnb3BvdGF0by5weTozMzAKICAgIC8vIGlmIGkgPT0gbW9kdWxvXzI0MF92cmZfYnl0ZXNfYXNfaW50OgogICAgZnJhbWVfZGlnIDEwCiAgICBmcmFtZV9kaWcgMTEKICAgID09CiAgICBieiBwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUAxOAogICAgLy8gYWxnb3BvdGF0by5weTozMzEKICAgIC8vIGlmIGFzc2V0X2lkID09IDA6CiAgICBmcmFtZV9kaWcgNwogICAgYm56IHBsYXlfZ2FtZV9lbHNlX2JvZHlAMTYKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzMyLTMzNQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXBvdGF0b19ob2xkZXIsCiAgICAvLyAgICAgYW1vdW50PWFzc2V0X2Ftb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyA4CiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgZnJhbWVfZGlnIDMKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzMyCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzMyLTMzNQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXBvdGF0b19ob2xkZXIsCiAgICAvLyAgICAgYW1vdW50PWFzc2V0X2Ftb3VudCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgpwbGF5X2dhbWVfYWZ0ZXJfaWZfZWxzZUAxNzoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9idXJ5IDQKCnBsYXlfZ2FtZV9hZnRlcl9mb3JAMjI6CiAgICBmcmFtZV9kaWcgNAogICAgLy8gYWxnb3BvdGF0by5weTo0NTcKICAgIC8vIGRlbCBzZWxmLmdhbWVfYm94W2dhbWVfYm94X25hbWVdCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gYWxnb3BvdGF0by5weTo0NTkKICAgIC8vIHNlbGYuZ2FtZXNfcGxheWVkICs9IDEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJnYW1lc19wbGF5ZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2FtZXNfcGxheWVkIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ5dGVjXzAgLy8gImdhbWVzX3BsYXllZCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBhbGdvcG90YXRvLnB5OjQ2MQogICAgLy8gaWYgcG90YXRvX2hvbGRlciA9PSBwbGF5ZXJfMToKICAgIGZyYW1lX2RpZyAxCiAgICA9PQogICAgYnogcGxheV9nYW1lX2Vsc2VfYm9keUA2CiAgICAvLyBhbGdvcG90YXRvLnB5OjQ2MgogICAgLy8gcmV0dXJuIFN0cmluZygiUGxheWVyIDEgV2lucyEiKQogICAgcHVzaGJ5dGVzICJQbGF5ZXIgMSBXaW5zISIKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbGF5X2dhbWVfZWxzZV9ib2R5QDY6CiAgICAvLyBhbGdvcG90YXRvLnB5OjQ2NAogICAgLy8gcmV0dXJuIFN0cmluZygiUGxheWVyIDIgV2lucyEiKQogICAgcHVzaGJ5dGVzICJQbGF5ZXIgMiBXaW5zISIKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbGF5X2dhbWVfZWxzZV9ib2R5QDE2OgogICAgLy8gYWxnb3BvdGF0by5weTozMzctMzQxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1wb3RhdG9faG9sZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hc3NldF9hbW91bnQsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgOAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIDMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDcKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBhbGdvcG90YXRvLnB5OjMzNwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18yIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzM3LTM0MQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9cG90YXRvX2hvbGRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YXNzZXRfYW1vdW50LAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGIgcGxheV9nYW1lX2FmdGVyX2lmX2Vsc2VAMTcKCnBsYXlfZ2FtZV9hZnRlcl9pZl9lbHNlQDE4OgogICAgLy8gYWxnb3BvdGF0by5weTozNDQKICAgIC8vIGlmIGFzc2V0X2lkID09IDA6CiAgICBmcmFtZV9kaWcgNwogICAgYm56IHBsYXlfZ2FtZV9lbHNlX2JvZHlAMjAKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzQ1LTM0OAogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXBvdGF0b19ob2xkZXIsCiAgICAvLyAgICAgYW1vdW50PTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBhbGdvcG90YXRvLnB5OjM0NwogICAgLy8gYW1vdW50PTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGZyYW1lX2RpZyAzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBhbGdvcG90YXRvLnB5OjM0NQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBhbGdvcG90YXRvLnB5OjM0NS0zNDgKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1wb3RhdG9faG9sZGVyLAogICAgLy8gICAgIGFtb3VudD0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCnBsYXlfZ2FtZV9hZnRlcl9pZl9lbHNlQDIxOgogICAgLy8gYWxnb3BvdGF0by5weTozMjMKICAgIC8vIGZvciBpIGluIHVyYW5nZShtb2R1bG9fMjQwX3ZyZl9ieXRlc19hc19pbnQgKyAxKToKICAgIGZyYW1lX2RpZyAxMAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMTAKICAgIGIgcGxheV9nYW1lX2Zvcl9oZWFkZXJAOAoKcGxheV9nYW1lX2Vsc2VfYm9keUAyMDoKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzUwLTM1NAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9cG90YXRvX2hvbGRlciwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIGFsZ29wb3RhdG8ucHk6MzUzCiAgICAvLyBhc3NldF9hbW91bnQ9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgMwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgNwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIGFsZ29wb3RhdG8ucHk6MzUwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzIgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gYWxnb3BvdGF0by5weTozNTAtMzU0CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1wb3RhdG9faG9sZGVyLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGIgcGxheV9nYW1lX2FmdGVyX2lmX2Vsc2VAMjEKCnBsYXlfZ2FtZV9lbHNlX2JvZHlANDA6CiAgICAvLyBhbGdvcG90YXRvLnB5OjM3OAogICAgLy8gZWxpZiBwbGF5ZXJfMS5pc19vcHRlZF9pbihBc3NldChhc3NldCkpID09IEZhbHNlOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyA3CiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYm56IHBsYXlfZ2FtZV9lbHNlX2JvZHlANDIKICAgIC8vIGFsZ29wb3RhdG8ucHk6Mzc5LTM4MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9cGxheWVyXzIsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFzc2V0X2Ftb3VudAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIDgKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA3CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gYWxnb3BvdGF0by5weTozNzkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMiAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBhbGdvcG90YXRvLnB5OjM3OS0zODMKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXBsYXllcl8yLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hc3NldF9hbW91bnQKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBhbGdvcG90YXRvLnB5OjM4NQogICAgLy8gcmV0dXJuIEZhbHNlLCBTdHJpbmcoIlBsYXllciAxIEZvcmZlaXQgYnkgb3B0aW5nIG91dCIpCiAgICBpbnRjXzAgLy8gMAogICAgcHVzaGJ5dGVzICJQbGF5ZXIgMSBGb3JmZWl0IGJ5IG9wdGluZyBvdXQiCiAgICBmcmFtZV9idXJ5IDUKICAgIGZyYW1lX2J1cnkgOQogICAgLy8gYWxnb3BvdGF0by5weTo0MzcKICAgIC8vIGJvdGhfdXNlcnNfb3B0ZWRfaW50b19hc3NldCwgcmV0dXJuX21lc3NhZ2UgPSBzZWxmLnZlcmlmeV9ib3RoX3VzZXJzX29wdGVkX2luKGdhbWVfYm94LmNvcHkoKSkKICAgIGIgcGxheV9nYW1lX2FmdGVyX2lubGluZWRfYWxnb3BvdGF0by5BbGdvUG90YXRvLnZlcmlmeV9ib3RoX3VzZXJzX29wdGVkX2luQDQ1CgpwbGF5X2dhbWVfZWxzZV9ib2R5QDQyOgogICAgLy8gYWxnb3BvdGF0by5weTozODcKICAgIC8vIGVsaWYgcGxheWVyXzIuaXNfb3B0ZWRfaW4oQXNzZXQoYXNzZXQpKSA9PSBGYWxzZToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgNwogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIGJueiBwbGF5X2dhbWVfZWxzZV9ib2R5QDQ0CiAgICAvLyBhbGdvcG90YXRvLnB5OjM4OC0zOTIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXBsYXllcl8xLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hc3NldF9hbW91bnQKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyA4CiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgMQogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgNwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIGFsZ29wb3RhdG8ucHk6Mzg4CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzIgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gYWxnb3BvdGF0by5weTozODgtMzkyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1wbGF5ZXJfMSwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YXNzZXRfYW1vdW50CiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gYWxnb3BvdGF0by5weTozOTQKICAgIC8vIHJldHVybiBGYWxzZSwgU3RyaW5nKCJQbGF5ZXIgMiBGb3JmZWl0IGJ5IG9wdGluZyBvdXQiKQogICAgaW50Y18wIC8vIDAKICAgIHB1c2hieXRlcyAiUGxheWVyIDIgRm9yZmVpdCBieSBvcHRpbmcgb3V0IgogICAgZnJhbWVfYnVyeSA1CiAgICBmcmFtZV9idXJ5IDkKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDM3CiAgICAvLyBib3RoX3VzZXJzX29wdGVkX2ludG9fYXNzZXQsIHJldHVybl9tZXNzYWdlID0gc2VsZi52ZXJpZnlfYm90aF91c2Vyc19vcHRlZF9pbihnYW1lX2JveC5jb3B5KCkpCiAgICBiIHBsYXlfZ2FtZV9hZnRlcl9pbmxpbmVkX2FsZ29wb3RhdG8uQWxnb1BvdGF0by52ZXJpZnlfYm90aF91c2Vyc19vcHRlZF9pbkA0NQoKcGxheV9nYW1lX2Vsc2VfYm9keUA0NDoKICAgIC8vIGFsZ29wb3RhdG8ucHk6Mzk3CiAgICAvLyByZXR1cm4gVHJ1ZSwgU3RyaW5nKCcnKQogICAgaW50Y18xIC8vIDEKICAgIGJ5dGVjXzMgLy8gIiIKICAgIGZyYW1lX2J1cnkgNQogICAgZnJhbWVfYnVyeSA5CiAgICAvLyBhbGdvcG90YXRvLnB5OjQzNwogICAgLy8gYm90aF91c2Vyc19vcHRlZF9pbnRvX2Fzc2V0LCByZXR1cm5fbWVzc2FnZSA9IHNlbGYudmVyaWZ5X2JvdGhfdXNlcnNfb3B0ZWRfaW4oZ2FtZV9ib3guY29weSgpKQogICAgYiBwbGF5X2dhbWVfYWZ0ZXJfaW5saW5lZF9hbGdvcG90YXRvLkFsZ29Qb3RhdG8udmVyaWZ5X2JvdGhfdXNlcnNfb3B0ZWRfaW5ANDUKCnBsYXlfZ2FtZV9hZnRlcl9pZl9lbHNlQDM2OgogICAgLy8gYWxnb3BvdGF0by5weToyOTMtMjk4CiAgICAvLyByZXN1bHQsIHR4biA9IGFiaV9jYWxsW0J5dGVzXSgKICAgIC8vICAgICAnbXVzdF9nZXQodWludDY0LGJ5dGVbXSlieXRlW10nLAogICAgLy8gICAgIHZyZl9yb3VuZCwKICAgIC8vICAgICBnYW1lX2JveF9hc19ieXRlcywKICAgIC8vICAgICBhcHBfaWQ9NjAwMDExODg3LAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gYWxnb3BvdGF0by5weToyOTYKICAgIC8vIGdhbWVfYm94X2FzX2J5dGVzLAogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBhbGdvcG90YXRvLnB5OjI5NwogICAgLy8gYXBwX2lkPTYwMDAxMTg4NywKICAgIGludGMgNCAvLyA2MDAwMTE4ODcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gYWxnb3BvdGF0by5weToyOTMtMjk4CiAgICAvLyByZXN1bHQsIHR4biA9IGFiaV9jYWxsW0J5dGVzXSgKICAgIC8vICAgICAnbXVzdF9nZXQodWludDY0LGJ5dGVbXSlieXRlW10nLAogICAgLy8gICAgIHZyZl9yb3VuZCwKICAgIC8vICAgICBnYW1lX2JveF9hc19ieXRlcywKICAgIC8vICAgICBhcHBfaWQ9NjAwMDExODg3LAogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4NDdjMjBjMjMgLy8gbWV0aG9kICJtdXN0X2dldCh1aW50NjQsYnl0ZVtdKWJ5dGVbXSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgNgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGV4dHJhY3QgNiAwCiAgICAvLyBhbGdvcG90YXRvLnB5OjMwMQogICAgLy8gbW9kdWxvXzI0MF92cmZfYnl0ZXNfYXNfaW50ID0gb3AuYnRvaSgodnJmX2J5dGVzX2FzX2ludGVnZXIubmF0aXZlICUgMjQwKS5ieXRlcykKICAgIHB1c2hieXRlcyAweGYwCiAgICBiJQogICAgYnRvaQogICAgZnJhbWVfYnVyeSAxMQogICAgLy8gYWxnb3BvdGF0by5weTozMDMKICAgIC8vIHJldHVybiBtb2R1bG9fMjQwX3ZyZl9ieXRlc19hc19pbnQsIFRydWUKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9idXJ5IDE0CiAgICAvLyBhbGdvcG90YXRvLnB5OjQzNQogICAgLy8gbW9kdWxvXzI0MF92cmZfYnl0ZXNfYXNfaW50LCB2YWxpZF92cmZfcm91bmQgPSBzZWxmLmdldF92cmZfb3V0cHV0X21vZHVsbyhnYW1lX2JveC5jb3B5KCkpCiAgICBiIHBsYXlfZ2FtZV9hZnRlcl9pbmxpbmVkX2FsZ29wb3RhdG8uQWxnb1BvdGF0by5nZXRfdnJmX291dHB1dF9tb2R1bG9AMzcKCgovLyBhbGdvcG90YXRvLkFsZ29Qb3RhdG8uY2FuY2VsX2dhbWUoZ2FtZV9ib3hfbmFtZTogYnl0ZXMpIC0+IHZvaWQ6CmNhbmNlbF9nYW1lOgogICAgLy8gYWxnb3BvdGF0by5weTo0NjgtNDcyCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgY2FuY2VsX2dhbWUoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICBnYW1lX2JveF9uYW1lOiBHYW1lQm94TmFtZQogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBhbGdvcG90YXRvLnB5OjQ3NwogICAgLy8gZ2FtZV9ib3ggPSBzZWxmLmdhbWVfYm94W2dhbWVfYm94X25hbWVdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nYW1lX2JveCBlbnRyeSBleGlzdHMKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDc5CiAgICAvLyBwbGF5ZXJfMSA9IGdhbWVfYm94LnBsYXllcl8xLm5hdGl2ZQogICAgZHVwCiAgICBleHRyYWN0IDAgMzIgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICAvLyBhbGdvcG90YXRvLnB5OjQ4MAogICAgLy8gcGxheWVyXzIgPSBnYW1lX2JveC5wbGF5ZXJfMi5uYXRpdmUKICAgIGR1cAogICAgZXh0cmFjdCAzMiAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDgzCiAgICAvLyBhc3NldCA9IGdhbWVfYm94LmFzc2V0Lm5hdGl2ZQogICAgZGlnIDEKICAgIHB1c2hpbnQgODggLy8gODgKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGNvdmVyIDQKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDg0CiAgICAvLyBhc3NldF9hbW91bnQgPSBnYW1lX2JveC5hc3NldF9hbW91bnQubmF0aXZlCiAgICBzd2FwCiAgICBwdXNoaW50IDk2IC8vIDk2CiAgICBleHRyYWN0X3VpbnQ2NAogICAgY292ZXIgMwogICAgLy8gYWxnb3BvdGF0by5weTo0ODYKICAgIC8vIGFzc2VydCBwbGF5ZXJfMiA9PSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDg4CiAgICAvLyBpZiBhc3NldCA9PSAwOgogICAgYm56IGNhbmNlbF9nYW1lX2Vsc2VfYm9keUAzCiAgICAvLyBhbGdvcG90YXRvLnB5OjQ4OS00OTIKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1wbGF5ZXJfMSwKICAgIC8vICAgICBhbW91bnQ9YXNzZXRfYW1vdW50CiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gYWxnb3BvdGF0by5weTo0ODkKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gYWxnb3BvdGF0by5weTo0ODktNDkyCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9cGxheWVyXzEsCiAgICAvLyAgICAgYW1vdW50PWFzc2V0X2Ftb3VudAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmNhbmNlbF9nYW1lX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIGFsZ29wb3RhdG8ucHk6NTAxCiAgICAvLyBkZWwgc2VsZi5nYW1lX2JveFtnYW1lX2JveF9uYW1lXQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKY2FuY2VsX2dhbWVfZWxzZV9ib2R5QDM6CiAgICAvLyBhbGdvcG90YXRvLnB5OjQ5NS00OTkKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1wbGF5ZXJfMSwKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hc3NldF9hbW91bnQKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBhbGdvcG90YXRvLnB5OjQ5NQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18yIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIGFsZ29wb3RhdG8ucHk6NDk1LTQ5OQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXBsYXllcl8xLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFzc2V0X2Ftb3VudAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGIgY2FuY2VsX2dhbWVfYWZ0ZXJfaWZfZWxzZUA1Cg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CiAFAAEEAu/ojZ4CJgYMZ2FtZXNfcGxheWVkB2NvdW50ZXIIAAAAAAAAAAAABBUffHUDBoEBMRhAABUoImcpImeACnZyZl9hcHBfaWQhBGcxG0EAlIIFBCjFvuoEA+IL6gSpwiWGBC85JNcEg1HatzYaAI4FAFQAQAAtABEAAiJDMRkURDEYRDYaAYgEHiNDMRkURDEYRDYaAYgBqUkVFlcGAkxQJwRMULAjQzEZFEQxGEQ2GgExFiMJiAESI0MxGRREMRhEMRYlCTEWIwmIAH4jQzEZFEQxGEQ2GgEXwDAxFiMJiAAzI0MxGUD/kTEYFEQjQ4oBAIv/OBBJIxJBAAmL/zgHMgoSRImLACQSQf/4i/84FDIKEkSJigIAi/+I/9IyCov+cABFAUAAG4v/OAiBoI0GEkSxMgqyFIv+shEkshAisgGziYv/OAgURImKAgCL/oj/nYv/iP+YIkmL/jgQSSMSSUAAB4sCJBJBAFsjRIsDQQA+IowAi/44CIwBiwFJRCIpZUQjCClMZzEAIillRBZQMQAyAzIGFosAFk8FFk8ETwRQTwNQKlAqUE8CUExQv4mLAiQSQf/Ei/44EYwAi/44EowBQv+1IkL/oooCAIv/iP8di/6+RIv/OBBJJBJAAAeLASMSQQBWI0SLASMSQQAziwBJV1gIKqhEV2AIi/84CBaoRIsASVcgIDIDEkQxAFwgMgYWXEgyBoEJCBZcUIv+TL+JiwBJV1gIi/84ERaoRFdgCIv/OBIWqERC/8YiQv+nigEBIkcGK0cHgZpOMgwNQQAYsYEGshCBBbIZJwWyHicFsh8isgGzQv/fi/++TElOAowARElXUAhJjAYqqUQyBkyBUFsJgegLDUEB2yJJjA6MC4sASVcAIIwBSVcgIIwCSYFYW0lOAowHgWBbJQuMCEABHSMrjAWMCYsOQAAlMgaBCQgWiwBMXFCL/0y/gBFWUkYgUm91bmQgZXhwaXJlZIwAiYsJQAASi/+8SCIoZUQjCChMZ4sFjACJMgOMA4sLIwiMDCKMCosKiwwMiwOMBEEAOIsKJRhJjA1AAASLAYwDiw1BAASLAowDiwqLCxJBAGuLB0AAT7GLCLIIiwOyByOyECKyAbOLA4wEiwSL/7xIIihlRCMIKExniwESQQATgA5QbGF5ZXIgMSBXaW5zIYwAiYAOUGxheWVyIDIgV2lucyGMAImxiwiyEosDshSLB7IRJLIQIrIBs0L/qosHQAAYsSKyCIsDsgcjshAisgGziwojCIwKQv9NsSKyEosDshSLB7IRJLIQIrIBs0L/4YsBiwdwAEUBQAA8sYsIshKLArIUiweyESSyECKyAbMigB5QbGF5ZXIgMSBGb3JmZWl0IGJ5IG9wdGluZyBvdXSMBYwJQv6iiwKLB3AARQFAADyxiwiyEosBshSLB7IRJLIQIrIBsyKAHlBsYXllciAyIEZvcmZlaXQgYnkgb3B0aW5nIG91dIwFjAlC/lsjK4wFjAlC/lKxiwBJFRZXBgJMUCEEshiABEfCDCOyGosGshqyGoEGshAisgGztD5JVwAEJwQSRFcGAIAB8KoXjAsjjA5C/eyKAQCL/75ESVcAIExJVyAgSwGBWFtJTgNOBEyBYFtOAzIDEkRAABGxsgeyCCOyECKyAbOL/7xIibFMshKLALIRshQkshAisgGzQv/n", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, "minor": 4, "patch": 2 } }, "events": [], "templateVariables": {} }