{ "name": "SplitBill", "structs": {}, "methods": [ { "name": "createBill", "args": [ { "type": "string", "name": "billIdHash" }, { "type": "string", "name": "payerAddress" }, { "type": "uint64", "name": "assetId" }, { "type": "uint64", "name": "totalAtomic" }, { "type": "uint64", "name": "deadline" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "registerParticipant", "args": [ { "type": "string", "name": "participantAddress" }, { "type": "uint64", "name": "shareBps" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "lockBill", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "submitPayment", "args": [ { "type": "string", "name": "participantAddress" }, { "type": "uint64", "name": "amountAtomic" }, { "type": "string", "name": "paymentTxIdHash" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "markSettled", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getStatus", "args": [], "returns": { "type": "(bool,bool,uint64,uint64,uint64)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 62, "bytes": 2 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "billIdHash": { "keyType": "AVMString", "valueType": "AVMString", "key": "YmlsbElkSGFzaA==" }, "payerAddress": { "keyType": "AVMString", "valueType": "AVMString", "key": "cGF5ZXJBZGRyZXNz" }, "assetId": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRJZA==" }, "totalAtomic": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxBdG9taWM=" }, "deadline": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGVhZGxpbmU=" }, "totalShareBps": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxTaGFyZUJwcw==" }, "participantCount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGFydGljaXBhbnRDb3VudA==" }, "totalPaidAtomic": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxQYWlkQXRvbWlj" }, "isLocked": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "aXNMb2NrZWQ=" }, "isSettled": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "aXNTZXR0bGVk" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 272 ], "errorMessage": "Bill already initialized" }, { "pc": [ 352, 406 ], "errorMessage": "Bill already locked" }, { "pc": [ 472 ], "errorMessage": "Bill already settled" }, { "pc": [ 466 ], "errorMessage": "Bill must be locked first" }, { "pc": [ 534 ], "errorMessage": "Cannot settle before full payment" }, { "pc": [ 498 ], "errorMessage": "Duplicate payment proof" }, { "pc": [ 142 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 203 ], "errorMessage": "OnCompletion must be NoOp && can only call when creating" }, { "pc": [ 376 ], "errorMessage": "Participant already registered" }, { "pc": [ 363 ], "errorMessage": "Participant cap reached" }, { "pc": [ 483 ], "errorMessage": "Participant is not registered" }, { "pc": [ 354 ], "errorMessage": "Share must be positive" }, { "pc": [ 275 ], "errorMessage": "Total amount must be > 0" }, { "pc": [ 415 ], "errorMessage": "Total shares must equal 10000 bps" }, { "pc": [ 350, 359, 383, 392, 404, 410, 465, 470, 504, 514, 527, 532, 543, 547, 552, 556, 560 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 211, 227, 327, 426, 451 ], "errorMessage": "invalid array length header" }, { "pc": [ 218, 234, 334, 433, 458 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 245, 254, 263, 345, 444 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOAogICAgYnl0ZWNibG9jayAiaXNMb2NrZWQiICJ0b3RhbFNoYXJlQnBzIiAidG90YWxQYWlkQXRvbWljIiAiaXNTZXR0bGVkIiAicGFydGljaXBhbnRDb3VudCIgInRvdGFsQXRvbWljIiAiYXNzZXRJZCIgImJpbGxJZEhhc2giICJwXyIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gYXNzZXRJZCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDYgLy8gImFzc2V0SWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIHRvdGFsU2hhcmVCcHMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18xIC8vICJ0b3RhbFNoYXJlQnBzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjEyCiAgICAvLyBwYXJ0aWNpcGFudENvdW50ID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWMgNCAvLyAicGFydGljaXBhbnRDb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxMwogICAgLy8gdG90YWxQYWlkQXRvbWljID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMiAvLyAidG90YWxQYWlkQXRvbWljIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBpc0xvY2tlZCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBmYWxzZSB9KQogICAgYnl0ZWNfMCAvLyAiaXNMb2NrZWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIGlzU2V0dGxlZCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBmYWxzZSB9KQogICAgYnl0ZWNfMyAvLyAiaXNTZXR0bGVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NC01CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNjIsIGdsb2JhbEJ5dGVzOiAyIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTcGxpdEJpbGwgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTUKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ZmU5MDIwMjMgMHgzODE0NzEwMCAweDMyM2M2MmY3IDB4OWViZWRjMzEgMHhlY2E5ZmNkZiAweGI3NjY5MjFjIC8vIG1ldGhvZCAiY3JlYXRlQmlsbChzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgInJlZ2lzdGVyUGFydGljaXBhbnQoc3RyaW5nLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJsb2NrQmlsbCgpdm9pZCIsIG1ldGhvZCAic3VibWl0UGF5bWVudChzdHJpbmcsdWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJtYXJrU2V0dGxlZCgpdm9pZCIsIG1ldGhvZCAiZ2V0U3RhdHVzKCkoYm9vbCxib29sLHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUJpbGwgcmVnaXN0ZXJQYXJ0aWNpcGFudCBsb2NrQmlsbCBzdWJtaXRQYXltZW50IG1hcmtTZXR0bGVkIGdldFN0YXR1cwogICAgZXJyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NC01CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBnbG9iYWxVaW50czogNjIsIGdsb2JhbEJ5dGVzOiAyIH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBTcGxpdEJpbGwgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6OlNwbGl0QmlsbC5jcmVhdGVCaWxsW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQmlsbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIHB1YmxpYyBjcmVhdGVCaWxsKGJpbGxJZEhhc2g6IHN0cmluZywgcGF5ZXJBZGRyZXNzOiBzdHJpbmcsIGFzc2V0SWQ6IHVpbnQ2NCwgdG90YWxBdG9taWM6IHVpbnQ2NCwgZGVhZGxpbmU6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBhc3NlcnQoIXRoaXMuYmlsbElkSGFzaC5oYXNWYWx1ZSwgJ0JpbGwgYWxyZWFkeSBpbml0aWFsaXplZCcpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBiaWxsSWRIYXNoID0gR2xvYmFsU3RhdGU8c3RyaW5nPigpCiAgICBieXRlYyA3IC8vICJiaWxsSWRIYXNoIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gYXNzZXJ0KCF0aGlzLmJpbGxJZEhhc2guaGFzVmFsdWUsICdCaWxsIGFscmVhZHkgaW5pdGlhbGl6ZWQnKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJpbGwgYWxyZWFkeSBpbml0aWFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxOQogICAgLy8gYXNzZXJ0KHRvdGFsQXRvbWljID4gMCwgJ1RvdGFsIGFtb3VudCBtdXN0IGJlID4gMCcpCiAgICBkaWcgMQogICAgYXNzZXJ0IC8vIFRvdGFsIGFtb3VudCBtdXN0IGJlID4gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBiaWxsSWRIYXNoID0gR2xvYmFsU3RhdGU8c3RyaW5nPigpCiAgICBieXRlYyA3IC8vICJiaWxsSWRIYXNoIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gdGhpcy5iaWxsSWRIYXNoLnZhbHVlID0gYmlsbElkSGFzaAogICAgdW5jb3ZlciA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBwYXllckFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxzdHJpbmc+KCkKICAgIHB1c2hieXRlcyAicGF5ZXJBZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gdGhpcy5wYXllckFkZHJlc3MudmFsdWUgPSBwYXllckFkZHJlc3MKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gYXNzZXRJZCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDYgLy8gImFzc2V0SWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjIzCiAgICAvLyB0aGlzLmFzc2V0SWQudmFsdWUgPSBhc3NldElkCiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjkKICAgIC8vIHRvdGFsQXRvbWljID0gR2xvYmFsU3RhdGU8dWludDY0PigpCiAgICBieXRlYyA1IC8vICJ0b3RhbEF0b21pYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIHRoaXMudG90YWxBdG9taWMudmFsdWUgPSB0b3RhbEF0b21pYwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gZGVhZGxpbmUgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIHB1c2hieXRlcyAiZGVhZGxpbmUiCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjI1CiAgICAvLyB0aGlzLmRlYWRsaW5lLnZhbHVlID0gZGVhZGxpbmUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBwdWJsaWMgY3JlYXRlQmlsbChiaWxsSWRIYXNoOiBzdHJpbmcsIHBheWVyQWRkcmVzczogc3RyaW5nLCBhc3NldElkOiB1aW50NjQsIHRvdGFsQXRvbWljOiB1aW50NjQsIGRlYWRsaW5lOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjpTcGxpdEJpbGwucmVnaXN0ZXJQYXJ0aWNpcGFudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlZ2lzdGVyUGFydGljaXBhbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBwdWJsaWMgcmVnaXN0ZXJQYXJ0aWNpcGFudChwYXJ0aWNpcGFudEFkZHJlc3M6IHN0cmluZywgc2hhcmVCcHM6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydCghdGhpcy5pc0xvY2tlZC52YWx1ZSwgJ0JpbGwgYWxyZWFkeSBsb2NrZWQnKQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MTQKICAgIC8vIGlzTG9ja2VkID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IGZhbHNlIH0pCiAgICBieXRlY18wIC8vICJpc0xvY2tlZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydCghdGhpcy5pc0xvY2tlZC52YWx1ZSwgJ0JpbGwgYWxyZWFkeSBsb2NrZWQnKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBCaWxsIGFscmVhZHkgbG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBhc3NlcnQoc2hhcmVCcHMgPiAwLCAnU2hhcmUgbXVzdCBiZSBwb3NpdGl2ZScpCiAgICBkdXAKICAgIGFzc2VydCAvLyBTaGFyZSBtdXN0IGJlIHBvc2l0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQodGhpcy5wYXJ0aWNpcGFudENvdW50LnZhbHVlIDwgMjAsICdQYXJ0aWNpcGFudCBjYXAgcmVhY2hlZCcpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gcGFydGljaXBhbnRDb3VudCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDQgLy8gInBhcnRpY2lwYW50Q291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyBhc3NlcnQodGhpcy5wYXJ0aWNpcGFudENvdW50LnZhbHVlIDwgMjAsICdQYXJ0aWNpcGFudCBjYXAgcmVhY2hlZCcpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcHVzaGludCAyMCAvLyAyMAogICAgPAogICAgYXNzZXJ0IC8vIFBhcnRpY2lwYW50IGNhcCByZWFjaGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBjb25zdCBwYXJ0aWNpcGFudFNoYXJlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogYHBfJHtwYXJ0aWNpcGFudEFkZHJlc3N9YCB9KQogICAgYnl0ZWMgOCAvLyAicF8iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czozNAogICAgLy8gYXNzZXJ0KCFwYXJ0aWNpcGFudFNoYXJlLmhhc1ZhbHVlLCAnUGFydGljaXBhbnQgYWxyZWFkeSByZWdpc3RlcmVkJykKICAgIGludGNfMCAvLyAwCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIFBhcnRpY2lwYW50IGFscmVhZHkgcmVnaXN0ZXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czozNgogICAgLy8gcGFydGljaXBhbnRTaGFyZS52YWx1ZSA9IHNoYXJlQnBzCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIHRoaXMudG90YWxTaGFyZUJwcy52YWx1ZSA9IHRoaXMudG90YWxTaGFyZUJwcy52YWx1ZSArIHNoYXJlQnBzCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxMQogICAgLy8gdG90YWxTaGFyZUJwcyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjXzEgLy8gInRvdGFsU2hhcmVCcHMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjM3CiAgICAvLyB0aGlzLnRvdGFsU2hhcmVCcHMudmFsdWUgPSB0aGlzLnRvdGFsU2hhcmVCcHMudmFsdWUgKyBzaGFyZUJwcwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIHRvdGFsU2hhcmVCcHMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18xIC8vICJ0b3RhbFNoYXJlQnBzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czozNwogICAgLy8gdGhpcy50b3RhbFNoYXJlQnBzLnZhbHVlID0gdGhpcy50b3RhbFNoYXJlQnBzLnZhbHVlICsgc2hhcmVCcHMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyB0aGlzLnBhcnRpY2lwYW50Q291bnQudmFsdWUgPSB0aGlzLnBhcnRpY2lwYW50Q291bnQudmFsdWUgKyAxCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxMgogICAgLy8gcGFydGljaXBhbnRDb3VudCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjIDQgLy8gInBhcnRpY2lwYW50Q291bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyB0aGlzLnBhcnRpY2lwYW50Q291bnQudmFsdWUgPSB0aGlzLnBhcnRpY2lwYW50Q291bnQudmFsdWUgKyAxCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIHBhcnRpY2lwYW50Q291bnQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlYyA0IC8vICJwYXJ0aWNpcGFudENvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czozOAogICAgLy8gdGhpcy5wYXJ0aWNpcGFudENvdW50LnZhbHVlID0gdGhpcy5wYXJ0aWNpcGFudENvdW50LnZhbHVlICsgMQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIHB1YmxpYyByZWdpc3RlclBhcnRpY2lwYW50KHBhcnRpY2lwYW50QWRkcmVzczogc3RyaW5nLCBzaGFyZUJwczogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo6U3BsaXRCaWxsLmxvY2tCaWxsW3JvdXRpbmddKCkgLT4gdm9pZDoKbG9ja0JpbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBhc3NlcnQoIXRoaXMuaXNMb2NrZWQudmFsdWUsICdCaWxsIGFscmVhZHkgbG9ja2VkJykKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjE0CiAgICAvLyBpc0xvY2tlZCA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBmYWxzZSB9KQogICAgYnl0ZWNfMCAvLyAiaXNMb2NrZWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyBhc3NlcnQoIXRoaXMuaXNMb2NrZWQudmFsdWUsICdCaWxsIGFscmVhZHkgbG9ja2VkJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gQmlsbCBhbHJlYWR5IGxvY2tlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo0MwogICAgLy8gYXNzZXJ0KHRoaXMudG90YWxTaGFyZUJwcy52YWx1ZSA9PT0gMTBfMDAwLCAnVG90YWwgc2hhcmVzIG11c3QgZXF1YWwgMTAwMDAgYnBzJykKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjExCiAgICAvLyB0b3RhbFNoYXJlQnBzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMSAvLyAidG90YWxTaGFyZUJwcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIGFzc2VydCh0aGlzLnRvdGFsU2hhcmVCcHMudmFsdWUgPT09IDEwXzAwMCwgJ1RvdGFsIHNoYXJlcyBtdXN0IGVxdWFsIDEwMDAwIGJwcycpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgcHVzaGludCAxMDAwMCAvLyAxMDAwMAogICAgPT0KICAgIGFzc2VydCAvLyBUb3RhbCBzaGFyZXMgbXVzdCBlcXVhbCAxMDAwMCBicHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MTQKICAgIC8vIGlzTG9ja2VkID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IGZhbHNlIH0pCiAgICBieXRlY18wIC8vICJpc0xvY2tlZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHRoaXMuaXNMb2NrZWQudmFsdWUgPSB0cnVlCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHB1YmxpYyBsb2NrQmlsbCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjpTcGxpdEJpbGwuc3VibWl0UGF5bWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN1Ym1pdFBheW1lbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBwdWJsaWMgc3VibWl0UGF5bWVudChwYXJ0aWNpcGFudEFkZHJlc3M6IHN0cmluZywgYW1vdW50QXRvbWljOiB1aW50NjQsIHBheW1lbnRUeElkSGFzaDogc3RyaW5nKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIGFzc2VydCh0aGlzLmlzTG9ja2VkLnZhbHVlLCAnQmlsbCBtdXN0IGJlIGxvY2tlZCBmaXJzdCcpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxNAogICAgLy8gaXNMb2NrZWQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogZmFsc2UgfSkKICAgIGJ5dGVjXzAgLy8gImlzTG9ja2VkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gYXNzZXJ0KHRoaXMuaXNMb2NrZWQudmFsdWUsICdCaWxsIG11c3QgYmUgbG9ja2VkIGZpcnN0JykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gQmlsbCBtdXN0IGJlIGxvY2tlZCBmaXJzdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYXNzZXJ0KCF0aGlzLmlzU2V0dGxlZC52YWx1ZSwgJ0JpbGwgYWxyZWFkeSBzZXR0bGVkJykKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBpc1NldHRsZWQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogZmFsc2UgfSkKICAgIGJ5dGVjXzMgLy8gImlzU2V0dGxlZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGFzc2VydCghdGhpcy5pc1NldHRsZWQudmFsdWUsICdCaWxsIGFscmVhZHkgc2V0dGxlZCcpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIEJpbGwgYWxyZWFkeSBzZXR0bGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCBwYXJ0aWNpcGFudFNoYXJlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogYHBfJHtwYXJ0aWNpcGFudEFkZHJlc3N9YCB9KQogICAgYnl0ZWMgOCAvLyAicF8iCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gYXNzZXJ0KHBhcnRpY2lwYW50U2hhcmUuaGFzVmFsdWUsICdQYXJ0aWNpcGFudCBpcyBub3QgcmVnaXN0ZXJlZCcpCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIFBhcnRpY2lwYW50IGlzIG5vdCByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBjb25zdCBwYXltZW50UHJvb2YgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBgdHhfJHtwYXltZW50VHhJZEhhc2h9YCB9KQogICAgcHVzaGJ5dGVzICJ0eF8iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIGFzc2VydCghcGF5bWVudFByb29mLmhhc1ZhbHVlLCAnRHVwbGljYXRlIHBheW1lbnQgcHJvb2YnKQogICAgaW50Y18wIC8vIDAKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gRHVwbGljYXRlIHBheW1lbnQgcHJvb2YKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIHBheW1lbnRQcm9vZi52YWx1ZSA9IDEKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gdGhpcy50b3RhbFBhaWRBdG9taWMudmFsdWUgPSB0aGlzLnRvdGFsUGFpZEF0b21pYy52YWx1ZSArIGFtb3VudEF0b21pYwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MTMKICAgIC8vIHRvdGFsUGFpZEF0b21pYyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjXzIgLy8gInRvdGFsUGFpZEF0b21pYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIHRoaXMudG90YWxQYWlkQXRvbWljLnZhbHVlID0gdGhpcy50b3RhbFBhaWRBdG9taWMudmFsdWUgKyBhbW91bnRBdG9taWMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyB0b3RhbFBhaWRBdG9taWMgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogVWludDY0KDApIH0pCiAgICBieXRlY18yIC8vICJ0b3RhbFBhaWRBdG9taWMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyB0aGlzLnRvdGFsUGFpZEF0b21pYy52YWx1ZSA9IHRoaXMudG90YWxQYWlkQXRvbWljLnZhbHVlICsgYW1vdW50QXRvbWljCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIGlmICh0aGlzLnRvdGFsUGFpZEF0b21pYy52YWx1ZSA9PT0gdGhpcy50b3RhbEF0b21pYy52YWx1ZSkgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6OQogICAgLy8gdG90YWxBdG9taWMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCkKICAgIGJ5dGVjIDUgLy8gInRvdGFsQXRvbWljIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gaWYgKHRoaXMudG90YWxQYWlkQXRvbWljLnZhbHVlID09PSB0aGlzLnRvdGFsQXRvbWljLnZhbHVlKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGJ6IHN1Ym1pdFBheW1lbnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBpc1NldHRsZWQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogZmFsc2UgfSkKICAgIGJ5dGVjXzMgLy8gImlzU2V0dGxlZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NjIKICAgIC8vIHRoaXMuaXNTZXR0bGVkLnZhbHVlID0gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgpzdWJtaXRQYXltZW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHB1YmxpYyBzdWJtaXRQYXltZW50KHBhcnRpY2lwYW50QWRkcmVzczogc3RyaW5nLCBhbW91bnRBdG9taWM6IHVpbnQ2NCwgcGF5bWVudFR4SWRIYXNoOiBzdHJpbmcpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjpTcGxpdEJpbGwubWFya1NldHRsZWRbcm91dGluZ10oKSAtPiB2b2lkOgptYXJrU2V0dGxlZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIGFzc2VydCh0aGlzLnRvdGFsUGFpZEF0b21pYy52YWx1ZSA9PT0gdGhpcy50b3RhbEF0b21pYy52YWx1ZSwgJ0Nhbm5vdCBzZXR0bGUgYmVmb3JlIGZ1bGwgcGF5bWVudCcpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxMwogICAgLy8gdG90YWxQYWlkQXRvbWljID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMiAvLyAidG90YWxQYWlkQXRvbWljIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo2NwogICAgLy8gYXNzZXJ0KHRoaXMudG90YWxQYWlkQXRvbWljLnZhbHVlID09PSB0aGlzLnRvdGFsQXRvbWljLnZhbHVlLCAnQ2Fubm90IHNldHRsZSBiZWZvcmUgZnVsbCBwYXltZW50JykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo5CiAgICAvLyB0b3RhbEF0b21pYyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWMgNSAvLyAidG90YWxBdG9taWMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBhc3NlcnQodGhpcy50b3RhbFBhaWRBdG9taWMudmFsdWUgPT09IHRoaXMudG90YWxBdG9taWMudmFsdWUsICdDYW5ub3Qgc2V0dGxlIGJlZm9yZSBmdWxsIHBheW1lbnQnKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gQ2Fubm90IHNldHRsZSBiZWZvcmUgZnVsbCBwYXltZW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBpc1NldHRsZWQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogZmFsc2UgfSkKICAgIGJ5dGVjXzMgLy8gImlzU2V0dGxlZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIHRoaXMuaXNTZXR0bGVkLnZhbHVlID0gdHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBwdWJsaWMgbWFya1NldHRsZWQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo6U3BsaXRCaWxsLmdldFN0YXR1c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldFN0YXR1czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NzMKICAgIC8vIHRoaXMuaXNMb2NrZWQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czoxNAogICAgLy8gaXNMb2NrZWQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogZmFsc2UgfSkKICAgIGJ5dGVjXzAgLy8gImlzTG9ja2VkIgogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gdGhpcy5pc0xvY2tlZC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyB0aGlzLmlzU2V0dGxlZC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjE1CiAgICAvLyBpc1NldHRsZWQgPSBHbG9iYWxTdGF0ZSh7IGluaXRpYWxWYWx1ZTogZmFsc2UgfSkKICAgIGJ5dGVjXzMgLy8gImlzU2V0dGxlZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIHRoaXMuaXNTZXR0bGVkLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHRoaXMudG90YWxBdG9taWMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3NwbGl0X2JpbGwvY29udHJhY3QuYWxnby50czo5CiAgICAvLyB0b3RhbEF0b21pYyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKQogICAgYnl0ZWMgNSAvLyAidG90YWxBdG9taWMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyB0aGlzLnRvdGFsQXRvbWljLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NzYKICAgIC8vIHRoaXMudG90YWxQYWlkQXRvbWljLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6MTMKICAgIC8vIHRvdGFsUGFpZEF0b21pYyA9IEdsb2JhbFN0YXRlKHsgaW5pdGlhbFZhbHVlOiBVaW50NjQoMCkgfSkKICAgIGJ5dGVjXzIgLy8gInRvdGFsUGFpZEF0b21pYyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NzYKICAgIC8vIHRoaXMudG90YWxQYWlkQXRvbWljLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NzcKICAgIC8vIHRoaXMudG90YWxTaGFyZUJwcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjExCiAgICAvLyB0b3RhbFNoYXJlQnBzID0gR2xvYmFsU3RhdGUoeyBpbml0aWFsVmFsdWU6IFVpbnQ2NCgwKSB9KQogICAgYnl0ZWNfMSAvLyAidG90YWxTaGFyZUJwcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NzcKICAgIC8vIHRoaXMudG90YWxTaGFyZUJwcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3BsaXRfYmlsbC9jb250cmFjdC5hbGdvLnRzOjcyLTc4CiAgICAvLyByZXR1cm4gWwogICAgLy8gICB0aGlzLmlzTG9ja2VkLnZhbHVlLAogICAgLy8gICB0aGlzLmlzU2V0dGxlZC52YWx1ZSwKICAgIC8vICAgdGhpcy50b3RhbEF0b21pYy52YWx1ZSwKICAgIC8vICAgdGhpcy50b3RhbFBhaWRBdG9taWMudmFsdWUsCiAgICAvLyAgIHRoaXMudG90YWxTaGFyZUJwcy52YWx1ZSwKICAgIC8vIF0KICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA2CiAgICBzZXRiaXQKICAgIGludGNfMSAvLyAxCiAgICB1bmNvdmVyIDUKICAgIHNldGJpdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zcGxpdF9iaWxsL2NvbnRyYWN0LmFsZ28udHM6NzEKICAgIC8vIHB1YmxpYyBnZXRTdGF0dXMoKTogW2Jvb2xlYW4sIGJvb2xlYW4sIHVpbnQ2NCwgdWludDY0LCB1aW50NjRdIHsKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAECCCYJCGlzTG9ja2VkDXRvdGFsU2hhcmVCcHMPdG90YWxQYWlkQXRvbWljCWlzU2V0dGxlZBBwYXJ0aWNpcGFudENvdW50C3RvdGFsQXRvbWljB2Fzc2V0SWQKYmlsbElkSGFzaAJwXzEYQAAUJwYiZykiZycEImcqImcoImcrImcxG0EAOTEZFEQxGESCBgT+kCAjBDgUcQAEMjxi9wSevtwxBOyp/N8Et2aSHDYaAI4GAAsAfwDOAOIBSQFZADEZFDEYFBBEI0M2GgFJIlkkCEsBFRJEVwIANhoCSSJZJAhLARUSRFcCADYaA0kVJRJEFzYaBEkVJRJEFzYaBUkVJRJEFyInB2VFARRESwFEJwdPBWeADHBheWVyQWRkcmVzc08EZycGTwNnJwVPAmeACGRlYWRsaW5lTGcjQzYaAUkiWSQISwEVEkRXAgA2GgJJFSUSRBciKGVEFERJRCInBGVEgRQMRCcITwJQIksBZUUBFERLAWciKWVECClMZyInBGVEIwgnBExnI0MiKGVEFEQiKWVEgZBOEkQoI2cjQzYaAUkiWSQISwEVEkRXAgA2GgJJFSUSRBc2GgNJIlkkCEsBFRJEVwIAIihlREQiK2VEFEQnCE8DUCJMZUUBRIADdHhfTFAiSwFlRQEURCNnIiplRAgqSwFnIicFZUQSQQADKyNnI0MiKmVEIicFZUQSRCsjZyNDIihlRCIrZUQiJwVlRCIqZUQiKWVEgAEAIk8GVCNPBVRPAxZQTwIWUEwWUIAEFR98dUxQsCND", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }