{ "name": "EscrowFactory", "structs": {}, "methods": [ { "name": "createApplication", "args": [ { "type": "address", "name": "treasury", "desc": "- AlgoEscrow fee wallet (receives platform fees)" }, { "type": "uint64", "name": "feeBps", "desc": "- Platform fee in basis points (50 = 0.5%)" }, { "type": "address", "name": "arbiter", "desc": "- Address authorized to resolve disputes" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "desc": "Initialize the platform with treasury address, fee, and arbiter.", "events": [], "recommendations": {} }, { "name": "createEscrow", "args": [ { "type": "address", "name": "seller" }, { "type": "byte[]", "name": "itemName" }, { "type": "uint64", "name": "escrowType" }, { "type": "uint64", "name": "deadlineRounds" }, { "type": "byte[]", "name": "requirementsHash" }, { "type": "uint64", "name": "escrowContractApp" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getPlatformConfig", "args": [], "returns": { "type": "(address,uint64,uint64,address)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "updateFee", "args": [ { "type": "uint64", "name": "newFeeBps" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "updateArbiter", "args": [ { "type": "address", "name": "newArbiter" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 4, "bytes": 2 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "platform_treasury": { "keyType": "AVMString", "valueType": "address", "key": "cGxhdGZvcm1fdHJlYXN1cnk=" }, "platform_fee_bps": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cGxhdGZvcm1fZmVlX2Jwcw==" }, "total_escrows": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfZXNjcm93cw==" }, "arbiter_address": { "keyType": "AVMString", "valueType": "address", "key": "YXJiaXRlcl9hZGRyZXNz" }, "escrow_contract_approval_len": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZXNjcm93X2NvbnRyYWN0X2FwcHJvdmFsX2xlbg==" }, "escrow_contract_app_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZXNjcm93X2NvbnRyYWN0X2FwcF9pZA==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 534 ], "errorMessage": "Arbiter address must be valid" }, { "pc": [ 334 ], "errorMessage": "Deadline rounds must be greater than 0" }, { "pc": [ 510 ], "errorMessage": "Fee cannot exceed 1000 basis points (10%)" }, { "pc": [ 331 ], "errorMessage": "Invalid escrow type (must be 0, 1, or 2)" }, { "pc": [ 160 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 529 ], "errorMessage": "Only the creator can update the arbiter" }, { "pc": [ 504 ], "errorMessage": "Only the creator can update the platform fee" }, { "pc": [ 340 ], "errorMessage": "Seller address must be provided" }, { "pc": [ 351, 356 ], "errorMessage": "application exists" }, { "pc": [ 366, 371, 375, 440, 457, 461, 465, 469 ], "errorMessage": "check GlobalState exists" }, { "pc": [ 270, 305 ], "errorMessage": "invalid array length header" }, { "pc": [ 278, 313 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 223, 240, 264, 523 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 231, 289, 298, 324, 497 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA4IDEgMzIKICAgIGJ5dGVjYmxvY2sgInBsYXRmb3JtX2ZlZV9icHMiICJ0b3RhbF9lc2Nyb3dzIiAiYXJiaXRlcl9hZGRyZXNzIiAicGxhdGZvcm1fdHJlYXN1cnkiIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjMzCiAgICAvLyBwbGF0Zm9ybV90cmVhc3VyeSA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsgaW5pdGlhbFZhbHVlOiBBY2NvdW50KCkgfSkKICAgIGJ5dGVjXzMgLy8gInBsYXRmb3JtX3RyZWFzdXJ5IgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MzQKICAgIC8vIHBsYXRmb3JtX2ZlZV9icHMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiA1MCBhcyB1aW50NjQgfSkgLy8gZGVmYXVsdCAwLjUlCiAgICBieXRlY18wIC8vICJwbGF0Zm9ybV9mZWVfYnBzIgogICAgcHVzaGludCA1MCAvLyA1MAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjM1CiAgICAvLyB0b3RhbF9lc2Nyb3dzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCBhcyB1aW50NjQgfSkKICAgIGJ5dGVjXzEgLy8gInRvdGFsX2VzY3Jvd3MiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjM2CiAgICAvLyBhcmJpdGVyX2FkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGluaXRpYWxWYWx1ZTogQWNjb3VudCgpIH0pCiAgICBieXRlY18yIC8vICJhcmJpdGVyX2FkZHJlc3MiCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo0MQogICAgLy8gZXNjcm93X2NvbnRyYWN0X2FwcHJvdmFsX2xlbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgYXMgdWludDY0IH0pCiAgICBwdXNoYnl0ZXMgImVzY3Jvd19jb250cmFjdF9hcHByb3ZhbF9sZW4iCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjQyCiAgICAvLyBlc2Nyb3dfY29udHJhY3RfYXBwX2lkID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsgaW5pdGlhbFZhbHVlOiBBcHBsaWNhdGlvbigpIH0pCiAgICBwdXNoYnl0ZXMgImVzY3Jvd19jb250cmFjdF9hcHBfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MzEKICAgIC8vIGV4cG9ydCBjbGFzcyBFc2Nyb3dGYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDEwCiAgICBwdXNoYnl0ZXNzIDB4ZmNhZTAzMTQgMHg0MjQzZmEzMyAweDY3Zjg4ZDIyIDB4NjAwYjkzZDAgLy8gbWV0aG9kICJjcmVhdGVFc2Nyb3coYWRkcmVzcyxieXRlW10sdWludDY0LHVpbnQ2NCxieXRlW10sdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiZ2V0UGxhdGZvcm1Db25maWcoKShhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYWRkcmVzcykiLCBtZXRob2QgInVwZGF0ZUZlZSh1aW50NjQpdm9pZCIsIG1ldGhvZCAidXBkYXRlQXJiaXRlcihhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVFc2Nyb3cgZ2V0UGxhdGZvcm1Db25maWcgdXBkYXRlRmVlIHVwZGF0ZUFyYml0ZXIKICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEAxMDoKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjMxCiAgICAvLyBleHBvcnQgY2xhc3MgRXNjcm93RmFjdG9yeSBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hieXRlcyAweGY5MTJlYmQxIC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyx1aW50NjQsYWRkcmVzcyl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlQXBwbGljYXRpb24KICAgIGVycgoKCi8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo1NgogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnLCBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MzMKICAgIC8vIHBsYXRmb3JtX3RyZWFzdXJ5ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBpbml0aWFsVmFsdWU6IEFjY291bnQoKSB9KQogICAgYnl0ZWNfMyAvLyAicGxhdGZvcm1fdHJlYXN1cnkiCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo1OAogICAgLy8gdGhpcy5wbGF0Zm9ybV90cmVhc3VyeS52YWx1ZSA9IHRyZWFzdXJ5CiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czozNAogICAgLy8gcGxhdGZvcm1fZmVlX2JwcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDUwIGFzIHVpbnQ2NCB9KSAvLyBkZWZhdWx0IDAuNSUKICAgIGJ5dGVjXzAgLy8gInBsYXRmb3JtX2ZlZV9icHMiCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo1OQogICAgLy8gdGhpcy5wbGF0Zm9ybV9mZWVfYnBzLnZhbHVlID0gZmVlQnBzCiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czozNgogICAgLy8gYXJiaXRlcl9hZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBpbml0aWFsVmFsdWU6IEFjY291bnQoKSB9KQogICAgYnl0ZWNfMiAvLyAiYXJiaXRlcl9hZGRyZXNzIgogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6NjAKICAgIC8vIHRoaXMuYXJiaXRlcl9hZGRyZXNzLnZhbHVlID0gYXJiaXRlcgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjM1CiAgICAvLyB0b3RhbF9lc2Nyb3dzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCBhcyB1aW50NjQgfSkKICAgIGJ5dGVjXzEgLy8gInRvdGFsX2VzY3Jvd3MiCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo2MQogICAgLy8gdGhpcy50b3RhbF9lc2Nyb3dzLnZhbHVlID0gMCBhcyB1aW50NjQKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6NTYKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJywgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmNyZWF0ZUVzY3Jvd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUVzY3JvdzoKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjc4CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnTm9PcCcgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo4OAogICAgLy8gYXNzZXJ0KGVzY3Jvd1R5cGUgPD0gKDIgYXMgdWludDY0KSwgJ0ludmFsaWQgZXNjcm93IHR5cGUgKG11c3QgYmUgMCwgMSwgb3IgMiknKQogICAgZGlnIDMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICA8PQogICAgYXNzZXJ0IC8vIEludmFsaWQgZXNjcm93IHR5cGUgKG11c3QgYmUgMCwgMSwgb3IgMikKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjkxCiAgICAvLyBhc3NlcnQoZGVhZGxpbmVSb3VuZHMgPiAoMCBhcyB1aW50NjQpLCAnRGVhZGxpbmUgcm91bmRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKQogICAgZGlnIDIKICAgIGFzc2VydCAvLyBEZWFkbGluZSByb3VuZHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6OTQKICAgIC8vIGFzc2VydChzZWxsZXIgIT09IEFjY291bnQoKSwgJ1NlbGxlciBhZGRyZXNzIG11c3QgYmUgcHJvdmlkZWQnKQogICAgZGlnIDUKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGFzc2VydCAvLyBTZWxsZXIgYWRkcmVzcyBtdXN0IGJlIHByb3ZpZGVkCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo5NwogICAgLy8gY29uc3QgZGVhZGxpbmVSb3VuZDogdWludDY0ID0gR2xvYmFsLnJvdW5kICsgZGVhZGxpbmVSb3VuZHMKICAgIGdsb2JhbCBSb3VuZAogICAgdW5jb3ZlciAzCiAgICArCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMDEtMTIzCiAgICAvLyBjb25zdCBuZXdFc2Nyb3cgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogZXNjcm93Q29udHJhY3RBcHAuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBlc2Nyb3dDb250cmFjdEFwcC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1VaW50OiAxMiBhcyB1aW50NjQsICAgLy8gbnVtYmVyIG9mIHVpbnQ2NCBnbG9iYWwgc3RhdGUgc2xvdHMKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogOCBhcyB1aW50NjQsIC8vIG51bWJlciBvZiBieXRlcyBnbG9iYWwgc3RhdGUgc2xvdHMKICAgIC8vICAgICBsb2NhbE51bVVpbnQ6IDAgYXMgdWludDY0LAogICAgLy8gICAgIGxvY2FsTnVtQnl0ZXM6IDAgYXMgdWludDY0LAogICAgLy8gICAgIGZlZTogMCBhcyB1aW50NjQsCiAgICAvLyAgICAgYXBwQXJnczogWwogICAgLy8gICAgICAgLy8gY3JlYXRlQXBwbGljYXRpb24gYXJncyBwYWNrZWQgZm9yIHRoZSBjaGlsZCBjb250cmFjdAogICAgLy8gICAgICAgc2VsbGVyLmJ5dGVzLAogICAgLy8gICAgICAgaXRlbU5hbWUsCiAgICAvLyAgICAgICBvcC5pdG9iKGVzY3Jvd1R5cGUpLAogICAgLy8gICAgICAgb3AuaXRvYihkZWFkbGluZVJvdW5kKSwKICAgIC8vICAgICAgIHJlcXVpcmVtZW50c0hhc2gsCiAgICAvLyAgICAgICBvcC5pdG9iKHRoaXMucGxhdGZvcm1fZmVlX2Jwcy52YWx1ZSksCiAgICAvLyAgICAgICB0aGlzLnBsYXRmb3JtX3RyZWFzdXJ5LnZhbHVlLmJ5dGVzLAogICAgLy8gICAgICAgdGhpcy5hcmJpdGVyX2FkZHJlc3MudmFsdWUuYnl0ZXMsCiAgICAvLyAgICAgXSwKICAgIC8vICAgICBhY2NvdW50czogW3NlbGxlciwgdGhpcy5wbGF0Zm9ybV90cmVhc3VyeS52YWx1ZSwgdGhpcy5hcmJpdGVyX2FkZHJlc3MudmFsdWVdLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjEwMwogICAgLy8gYXBwcm92YWxQcm9ncmFtOiBlc2Nyb3dDb250cmFjdEFwcC5hcHByb3ZhbFByb2dyYW0sCiAgICBkaWcgMQogICAgYXBwX3BhcmFtc19nZXQgQXBwQXBwcm92YWxQcm9ncmFtCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMDQKICAgIC8vIGNsZWFyU3RhdGVQcm9ncmFtOiBlc2Nyb3dDb250cmFjdEFwcC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIHVuY292ZXIgMgogICAgYXBwX3BhcmFtc19nZXQgQXBwQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjExNAogICAgLy8gb3AuaXRvYihlc2Nyb3dUeXBlKSwKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTE1CiAgICAvLyBvcC5pdG9iKGRlYWRsaW5lUm91bmQpLAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMTcKICAgIC8vIG9wLml0b2IodGhpcy5wbGF0Zm9ybV9mZWVfYnBzLnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czozNAogICAgLy8gcGxhdGZvcm1fZmVlX2JwcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDUwIGFzIHVpbnQ2NCB9KSAvLyBkZWZhdWx0IDAuNSUKICAgIGJ5dGVjXzAgLy8gInBsYXRmb3JtX2ZlZV9icHMiCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMTcKICAgIC8vIG9wLml0b2IodGhpcy5wbGF0Zm9ybV9mZWVfYnBzLnZhbHVlKSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMTgKICAgIC8vIHRoaXMucGxhdGZvcm1fdHJlYXN1cnkudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MzMKICAgIC8vIHBsYXRmb3JtX3RyZWFzdXJ5ID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBpbml0aWFsVmFsdWU6IEFjY291bnQoKSB9KQogICAgYnl0ZWNfMyAvLyAicGxhdGZvcm1fdHJlYXN1cnkiCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMTgKICAgIC8vIHRoaXMucGxhdGZvcm1fdHJlYXN1cnkudmFsdWUuYnl0ZXMsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLmFyYml0ZXJfYWRkcmVzcy52YWx1ZS5ieXRlcywKICAgIGludGNfMCAvLyAwCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czozNgogICAgLy8gYXJiaXRlcl9hZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBpbml0aWFsVmFsdWU6IEFjY291bnQoKSB9KQogICAgYnl0ZWNfMiAvLyAiYXJiaXRlcl9hZGRyZXNzIgogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLmFyYml0ZXJfYWRkcmVzcy52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgOQogICAgaXR4bl9maWVsZCBBY2NvdW50cwogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQWNjb3VudHMKICAgIGR1cAogICAgaXR4bl9maWVsZCBBY2NvdW50cwogICAgdW5jb3ZlciA5CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciA4CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciA0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciA1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMDYKICAgIC8vIGdsb2JhbE51bUJ5dGVzOiA4IGFzIHVpbnQ2NCwgLy8gbnVtYmVyIG9mIGJ5dGVzIGdsb2JhbCBzdGF0ZSBzbG90cwogICAgaW50Y18xIC8vIDgKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMDUKICAgIC8vIGdsb2JhbE51bVVpbnQ6IDEyIGFzIHVpbnQ2NCwgICAvLyBudW1iZXIgb2YgdWludDY0IGdsb2JhbCBzdGF0ZSBzbG90cwogICAgcHVzaGludCAxMiAvLyAxMgogICAgaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjEwMS0xMjIKICAgIC8vIGNvbnN0IG5ld0VzY3JvdyA9IGl0eG4KICAgIC8vICAgLmFwcGxpY2F0aW9uQ2FsbCh7CiAgICAvLyAgICAgYXBwcm92YWxQcm9ncmFtOiBlc2Nyb3dDb250cmFjdEFwcC5hcHByb3ZhbFByb2dyYW0sCiAgICAvLyAgICAgY2xlYXJTdGF0ZVByb2dyYW06IGVzY3Jvd0NvbnRyYWN0QXBwLmNsZWFyU3RhdGVQcm9ncmFtLAogICAgLy8gICAgIGdsb2JhbE51bVVpbnQ6IDEyIGFzIHVpbnQ2NCwgICAvLyBudW1iZXIgb2YgdWludDY0IGdsb2JhbCBzdGF0ZSBzbG90cwogICAgLy8gICAgIGdsb2JhbE51bUJ5dGVzOiA4IGFzIHVpbnQ2NCwgLy8gbnVtYmVyIG9mIGJ5dGVzIGdsb2JhbCBzdGF0ZSBzbG90cwogICAgLy8gICAgIGxvY2FsTnVtVWludDogMCBhcyB1aW50NjQsCiAgICAvLyAgICAgbG9jYWxOdW1CeXRlczogMCBhcyB1aW50NjQsCiAgICAvLyAgICAgZmVlOiAwIGFzIHVpbnQ2NCwKICAgIC8vICAgICBhcHBBcmdzOiBbCiAgICAvLyAgICAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbiBhcmdzIHBhY2tlZCBmb3IgdGhlIGNoaWxkIGNvbnRyYWN0CiAgICAvLyAgICAgICBzZWxsZXIuYnl0ZXMsCiAgICAvLyAgICAgICBpdGVtTmFtZSwKICAgIC8vICAgICAgIG9wLml0b2IoZXNjcm93VHlwZSksCiAgICAvLyAgICAgICBvcC5pdG9iKGRlYWRsaW5lUm91bmQpLAogICAgLy8gICAgICAgcmVxdWlyZW1lbnRzSGFzaCwKICAgIC8vICAgICAgIG9wLml0b2IodGhpcy5wbGF0Zm9ybV9mZWVfYnBzLnZhbHVlKSwKICAgIC8vICAgICAgIHRoaXMucGxhdGZvcm1fdHJlYXN1cnkudmFsdWUuYnl0ZXMsCiAgICAvLyAgICAgICB0aGlzLmFyYml0ZXJfYWRkcmVzcy52YWx1ZS5ieXRlcywKICAgIC8vICAgICBdLAogICAgLy8gICAgIGFjY291bnRzOiBbc2VsbGVyLCB0aGlzLnBsYXRmb3JtX3RyZWFzdXJ5LnZhbHVlLCB0aGlzLmFyYml0ZXJfYWRkcmVzcy52YWx1ZV0sCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDYgLy8gNgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTA5CiAgICAvLyBmZWU6IDAgYXMgdWludDY0LAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMDEtMTIzCiAgICAvLyBjb25zdCBuZXdFc2Nyb3cgPSBpdHhuCiAgICAvLyAgIC5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICAgIGFwcHJvdmFsUHJvZ3JhbTogZXNjcm93Q29udHJhY3RBcHAuYXBwcm92YWxQcm9ncmFtLAogICAgLy8gICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBlc2Nyb3dDb250cmFjdEFwcC5jbGVhclN0YXRlUHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxOdW1VaW50OiAxMiBhcyB1aW50NjQsICAgLy8gbnVtYmVyIG9mIHVpbnQ2NCBnbG9iYWwgc3RhdGUgc2xvdHMKICAgIC8vICAgICBnbG9iYWxOdW1CeXRlczogOCBhcyB1aW50NjQsIC8vIG51bWJlciBvZiBieXRlcyBnbG9iYWwgc3RhdGUgc2xvdHMKICAgIC8vICAgICBsb2NhbE51bVVpbnQ6IDAgYXMgdWludDY0LAogICAgLy8gICAgIGxvY2FsTnVtQnl0ZXM6IDAgYXMgdWludDY0LAogICAgLy8gICAgIGZlZTogMCBhcyB1aW50NjQsCiAgICAvLyAgICAgYXBwQXJnczogWwogICAgLy8gICAgICAgLy8gY3JlYXRlQXBwbGljYXRpb24gYXJncyBwYWNrZWQgZm9yIHRoZSBjaGlsZCBjb250cmFjdAogICAgLy8gICAgICAgc2VsbGVyLmJ5dGVzLAogICAgLy8gICAgICAgaXRlbU5hbWUsCiAgICAvLyAgICAgICBvcC5pdG9iKGVzY3Jvd1R5cGUpLAogICAgLy8gICAgICAgb3AuaXRvYihkZWFkbGluZVJvdW5kKSwKICAgIC8vICAgICAgIHJlcXVpcmVtZW50c0hhc2gsCiAgICAvLyAgICAgICBvcC5pdG9iKHRoaXMucGxhdGZvcm1fZmVlX2Jwcy52YWx1ZSksCiAgICAvLyAgICAgICB0aGlzLnBsYXRmb3JtX3RyZWFzdXJ5LnZhbHVlLmJ5dGVzLAogICAgLy8gICAgICAgdGhpcy5hcmJpdGVyX2FkZHJlc3MudmFsdWUuYnl0ZXMsCiAgICAvLyAgICAgXSwKICAgIC8vICAgICBhY2NvdW50czogW3NlbGxlciwgdGhpcy5wbGF0Zm9ybV90cmVhc3VyeS52YWx1ZSwgdGhpcy5hcmJpdGVyX2FkZHJlc3MudmFsdWVdLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMjYKICAgIC8vIHRoaXMudG90YWxfZXNjcm93cy52YWx1ZSA9IHRoaXMudG90YWxfZXNjcm93cy52YWx1ZSArICgxIGFzIHVpbnQ2NCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czozNQogICAgLy8gdG90YWxfZXNjcm93cyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgYXMgdWludDY0IH0pCiAgICBieXRlY18xIC8vICJ0b3RhbF9lc2Nyb3dzIgogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTI2CiAgICAvLyB0aGlzLnRvdGFsX2VzY3Jvd3MudmFsdWUgPSB0aGlzLnRvdGFsX2VzY3Jvd3MudmFsdWUgKyAoMSBhcyB1aW50NjQpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaW50Y18yIC8vIDEKICAgICsKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjM1CiAgICAvLyB0b3RhbF9lc2Nyb3dzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCBhcyB1aW50NjQgfSkKICAgIGJ5dGVjXzEgLy8gInRvdGFsX2VzY3Jvd3MiCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMjYKICAgIC8vIHRoaXMudG90YWxfZXNjcm93cy52YWx1ZSA9IHRoaXMudG90YWxfZXNjcm93cy52YWx1ZSArICgxIGFzIHVpbnQ2NCkKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo3OAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICBpdG9iCiAgICBieXRlYyA0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6OkVzY3Jvd0ZhY3RvcnkuZ2V0UGxhdGZvcm1Db25maWdbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRQbGF0Zm9ybUNvbmZpZzoKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjE0MAogICAgLy8gdGhpcy5wbGF0Zm9ybV90cmVhc3VyeS52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czozMwogICAgLy8gcGxhdGZvcm1fdHJlYXN1cnkgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGluaXRpYWxWYWx1ZTogQWNjb3VudCgpIH0pCiAgICBieXRlY18zIC8vICJwbGF0Zm9ybV90cmVhc3VyeSIKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjE0MAogICAgLy8gdGhpcy5wbGF0Zm9ybV90cmVhc3VyeS52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxNDEKICAgIC8vIHRoaXMucGxhdGZvcm1fZmVlX2Jwcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czozNAogICAgLy8gcGxhdGZvcm1fZmVlX2JwcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDUwIGFzIHVpbnQ2NCB9KSAvLyBkZWZhdWx0IDAuNSUKICAgIGJ5dGVjXzAgLy8gInBsYXRmb3JtX2ZlZV9icHMiCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxNDEKICAgIC8vIHRoaXMucGxhdGZvcm1fZmVlX2Jwcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxNDIKICAgIC8vIHRoaXMudG90YWxfZXNjcm93cy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czozNQogICAgLy8gdG90YWxfZXNjcm93cyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgYXMgdWludDY0IH0pCiAgICBieXRlY18xIC8vICJ0b3RhbF9lc2Nyb3dzIgogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLnRvdGFsX2VzY3Jvd3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTQzCiAgICAvLyB0aGlzLmFyYml0ZXJfYWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czozNgogICAgLy8gYXJiaXRlcl9hZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBpbml0aWFsVmFsdWU6IEFjY291bnQoKSB9KQogICAgYnl0ZWNfMiAvLyAiYXJiaXRlcl9hZGRyZXNzIgogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTQzCiAgICAvLyB0aGlzLmFyYml0ZXJfYWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxMzcKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJywgcmVhZG9ubHk6IHRydWUgfSkKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDQgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS51cGRhdGVGZWVbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVGZWU6CiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxNTMKICAgIC8vIEBhYmltZXRob2QoeyBhbGxvd0FjdGlvbnM6ICdOb09wJyB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTU2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gR2xvYmFsLmNyZWF0b3JBZGRyZXNzLCAnT25seSB0aGUgY3JlYXRvciBjYW4gdXBkYXRlIHRoZSBwbGF0Zm9ybSBmZWUnKQogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgdGhlIGNyZWF0b3IgY2FuIHVwZGF0ZSB0aGUgcGxhdGZvcm0gZmVlCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxNTkKICAgIC8vIGFzc2VydChuZXdGZWVCcHMgPD0gKDEwMDAgYXMgdWludDY0KSwgJ0ZlZSBjYW5ub3QgZXhjZWVkIDEwMDAgYmFzaXMgcG9pbnRzICgxMCUpJykKICAgIGR1cAogICAgcHVzaGludCAxMDAwIC8vIDEwMDAKICAgIDw9CiAgICBhc3NlcnQgLy8gRmVlIGNhbm5vdCBleGNlZWQgMTAwMCBiYXNpcyBwb2ludHMgKDEwJSkKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjM0CiAgICAvLyBwbGF0Zm9ybV9mZWVfYnBzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogNTAgYXMgdWludDY0IH0pIC8vIGRlZmF1bHQgMC41JQogICAgYnl0ZWNfMCAvLyAicGxhdGZvcm1fZmVlX2JwcyIKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy5wbGF0Zm9ybV9mZWVfYnBzLnZhbHVlID0gbmV3RmVlQnBzCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTUzCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnTm9PcCcgfSkKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS51cGRhdGVBcmJpdGVyW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlQXJiaXRlcjoKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjE2OQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ05vT3AnIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjE3MgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcywgJ09ubHkgdGhlIGNyZWF0b3IgY2FuIHVwZGF0ZSB0aGUgYXJiaXRlcicpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgY3JlYXRvciBjYW4gdXBkYXRlIHRoZSBhcmJpdGVyCiAgICAvLyBzcmMvZXNjcm93X2ZhY3RvcnkuYWxnby50czoxNzQKICAgIC8vIGFzc2VydChuZXdBcmJpdGVyICE9PSBBY2NvdW50KCksICdBcmJpdGVyIGFkZHJlc3MgbXVzdCBiZSB2YWxpZCcpCiAgICBkdXAKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGFzc2VydCAvLyBBcmJpdGVyIGFkZHJlc3MgbXVzdCBiZSB2YWxpZAogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MzYKICAgIC8vIGFyYml0ZXJfYWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsgaW5pdGlhbFZhbHVlOiBBY2NvdW50KCkgfSkKICAgIGJ5dGVjXzIgLy8gImFyYml0ZXJfYWRkcmVzcyIKICAgIC8vIHNyYy9lc2Nyb3dfZmFjdG9yeS5hbGdvLnRzOjE3NgogICAgLy8gdGhpcy5hcmJpdGVyX2FkZHJlc3MudmFsdWUgPSBuZXdBcmJpdGVyCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc3JjL2VzY3Jvd19mYWN0b3J5LmFsZ28udHM6MTY5CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnTm9PcCcgfSkKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAgBICYFEHBsYXRmb3JtX2ZlZV9icHMNdG90YWxfZXNjcm93cw9hcmJpdGVyX2FkZHJlc3MRcGxhdGZvcm1fdHJlYXN1cnkEFR98dTEYQABJKzIDZyiBMmcpImcqMgNngBxlc2Nyb3dfY29udHJhY3RfYXBwcm92YWxfbGVuImeAFmVzY3Jvd19jb250cmFjdF9hcHBfaWQiZzEZFEQxGEEAJIIEBPyuAxQEQkP6MwRn+I0iBGALk9A2GgCOBAA4AP0BIQE7AIAE+RLr0TYaAI4BAAEANhoBSRUlEkQ2GgJJFSMSRBc2GgNJFSUSRCtPA2coTwJnKkxnKSJnJEM2GgFJFSUSRDYaAkkiWYECCEsBFRJEVwIANhoDSRUjEkQXNhoESRUjEkQXNhoFSSJZgQIISwEVEkRXAgA2GgZJFSMSRBdLA4ECDkRLAkRLBTIDE0QyBk8DCLFLAXIARE8CcgFETwQWTwMWIihlRBYiK2VEIiplREsJshxLAbIcSbIcTwmyGk8IshpPBLIaTwOyGk8FshpPArIaTLIashojsjWBDLI0skKyQIEGshAisgGztD0iKWVEJAgpTGcWJwRMULAkQyIrZUQiKGVEIillRCIqZURPAhZPA0xQTwIWUExQJwRMULAkQzYaAUkVIxJEFzEAMgkSREmB6AcORChMZyRDNhoBSRUlEkQxADIJEkRJMgMTRCpMZyRD", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }