From 07ede6af272460736d11dc9ac058b8d6a2d98173 Mon Sep 17 00:00:00 2001 From: "Chris Kim (Hyunggun)" Date: Mon, 30 Sep 2024 14:11:13 -0700 Subject: [PATCH 1/3] chore: added another method to inner txn example --- CONTRIBUTING.md | 2 +- .../snapshots/InnerTransactions.approval.json | 6890 +++++++++-------- .../InnerTransactions.approval.teal | 52 +- .../InnerTransactions.arc32.json | 19 +- .../inner_transactions_client.py | 78 +- .../inner_transactions/contract.py | 23 +- 6 files changed, 3870 insertions(+), 3194 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3950291..49ad5da 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,10 +50,10 @@ Ensure the following acceptance criteria are met before submitting a PR: - Ensure there are no typos in the content - Ensure `algokit project run audit` passes -- Ensure `algokit project run test` passes - Ensure `algokit project run lint` passes - Ensure `algokit project run build` passes - Ensure `algokit project run audit-teal` passes +- Ensure `algokit project run test` passes. Make sure to have the localnet running with `algokit localnet start` ## Code example guidelines diff --git a/projects/python-contract-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json b/projects/python-contract-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json index 6c074a8..3e56eb4 100644 --- a/projects/python-contract-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json +++ b/projects/python-contract-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json @@ -4,7 +4,7 @@ "result": [ { "type": "ExecutionPaths", - "count": 13, + "count": 14, "description": "\nCheck: \"unprotected-deletable\", Impact: High, Confidence: High\nDescription: Unprotected Deletable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#unprotected-deletable-application\n", "check": "unprotected-deletable", "impact": "High", @@ -25,7 +25,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -38,13 +38,14 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "26: int 0", - "27: retsub" + "27: int 0", + "28: retsub" ], [ "5: return" @@ -52,7 +53,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 31 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -65,7 +66,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -78,43 +79,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "29: __puya_arc4_router___payment_route@2:", - "30: txn OnCompletion", - "31: !", - "32: assert", - "33: txn ApplicationID", - "34: assert", - "35: callsub payment" - ], - [ - "234: payment:", - "235: proto 0 1", - "236: itxn_begin", - "237: txn Sender", - "238: itxn_field Receiver", - "239: int 5000", - "240: itxn_field Amount", - "241: int pay", - "242: itxn_field TypeEnum", - "243: int 0", - "244: itxn_field Fee", - "245: itxn_submit", - "246: itxn Amount", - "247: retsub" - ], - [ - "36: itob", - "37: byte 0x151f7c75", - "38: swap", - "39: concat", - "40: log", - "41: int 1", - "42: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "30: __puya_arc4_router___payment_route@2:", + "31: txn OnCompletion", + "32: !", + "33: assert", + "34: txn ApplicationID", + "35: assert", + "36: callsub payment" + ], + [ + "256: payment:", + "257: proto 0 1", + "258: itxn_begin", + "259: txn Sender", + "260: itxn_field Receiver", + "261: int 5000", + "262: itxn_field Amount", + "263: int pay", + "264: itxn_field TypeEnum", + "265: int 0", + "266: itxn_field Fee", + "267: itxn_submit", + "268: itxn Amount", + "269: retsub" + ], + [ + "37: itob", + "38: byte 0x151f7c75", + "39: swap", + "40: concat", + "41: log", + "42: int 1", + "43: retsub" ], [ "5: return" @@ -122,7 +124,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 32 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -135,7 +137,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -148,55 +150,56 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "44: __puya_arc4_router___asset_create_route@3:", - "45: txn OnCompletion", - "46: !", - "47: assert", - "48: txn ApplicationID", - "49: assert", - "50: callsub asset_create" - ], - [ - "251: asset_create:", - "252: proto 0 1", - "253: itxn_begin", - "254: global CurrentApplicationAddress", - "255: dupn 3", - "256: itxn_field ConfigAssetClawback", - "257: itxn_field ConfigAssetFreeze", - "258: itxn_field ConfigAssetReserve", - "259: itxn_field ConfigAssetManager", - "260: byte \"https://link_to_ipfs/Mona_Lisa\"", - "261: itxn_field ConfigAssetURL", - "262: byte \"Mona Lisa\"", - "263: itxn_field ConfigAssetName", - "264: byte \"ML\"", - "265: itxn_field ConfigAssetUnitName", - "266: int 2", - "267: itxn_field ConfigAssetDecimals", - "268: int 100", - "269: itxn_field ConfigAssetTotal", - "270: int acfg", - "271: itxn_field TypeEnum", - "272: int 0", - "273: itxn_field Fee", - "274: itxn_submit", - "275: itxn CreatedAssetID", - "276: retsub" - ], - [ - "51: itob", - "52: byte 0x151f7c75", - "53: swap", - "54: concat", - "55: log", - "56: int 1", - "57: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "45: __puya_arc4_router___asset_create_route@3:", + "46: txn OnCompletion", + "47: !", + "48: assert", + "49: txn ApplicationID", + "50: assert", + "51: callsub asset_create" + ], + [ + "273: asset_create:", + "274: proto 0 1", + "275: itxn_begin", + "276: global CurrentApplicationAddress", + "277: dupn 3", + "278: itxn_field ConfigAssetClawback", + "279: itxn_field ConfigAssetFreeze", + "280: itxn_field ConfigAssetReserve", + "281: itxn_field ConfigAssetManager", + "282: byte \"https://link_to_ipfs/Mona_Lisa\"", + "283: itxn_field ConfigAssetURL", + "284: byte \"Mona Lisa\"", + "285: itxn_field ConfigAssetName", + "286: byte \"ML\"", + "287: itxn_field ConfigAssetUnitName", + "288: int 2", + "289: itxn_field ConfigAssetDecimals", + "290: int 100", + "291: itxn_field ConfigAssetTotal", + "292: int acfg", + "293: itxn_field TypeEnum", + "294: int 0", + "295: itxn_field Fee", + "296: itxn_submit", + "297: itxn CreatedAssetID", + "298: retsub" + ], + [ + "52: itob", + "53: byte 0x151f7c75", + "54: swap", + "55: concat", + "56: log", + "57: int 1", + "58: retsub" ], [ "5: return" @@ -204,7 +207,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 33 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -217,7 +220,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -230,42 +233,43 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "59: __puya_arc4_router___asset_opt_in_route@4:", - "60: txn OnCompletion", - "61: !", - "62: assert", - "63: txn ApplicationID", - "64: assert", - "65: txna ApplicationArgs 1", - "66: btoi", - "67: txnas Assets", - "68: callsub asset_opt_in" - ], - [ - "280: asset_opt_in:", - "281: proto 1 0", - "282: itxn_begin", - "283: global CurrentApplicationAddress", - "284: int 0", - "285: itxn_field AssetAmount", - "286: frame_dig -1", - "287: itxn_field XferAsset", - "288: itxn_field AssetReceiver", - "289: int axfer", - "290: itxn_field TypeEnum", - "291: int 0", - "292: itxn_field Fee", - "293: itxn_submit", - "294: retsub" - ], - [ - "69: int 1", - "70: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "60: __puya_arc4_router___asset_opt_in_route@4:", + "61: txn OnCompletion", + "62: !", + "63: assert", + "64: txn ApplicationID", + "65: assert", + "66: txna ApplicationArgs 1", + "67: btoi", + "68: txnas Assets", + "69: callsub asset_opt_in" + ], + [ + "302: asset_opt_in:", + "303: proto 1 0", + "304: itxn_begin", + "305: global CurrentApplicationAddress", + "306: int 0", + "307: itxn_field AssetAmount", + "308: frame_dig -1", + "309: itxn_field XferAsset", + "310: itxn_field AssetReceiver", + "311: int axfer", + "312: itxn_field TypeEnum", + "313: int 0", + "314: itxn_field Fee", + "315: itxn_submit", + "316: retsub" + ], + [ + "70: int 1", + "71: retsub" ], [ "5: return" @@ -273,7 +277,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 34 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -286,7 +290,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -299,47 +303,48 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "72: __puya_arc4_router___asset_transfer_route@5:", - "73: txn OnCompletion", - "74: !", - "75: assert", - "76: txn ApplicationID", - "77: assert", - "78: txna ApplicationArgs 1", - "79: btoi", - "80: txnas Assets", - "81: txna ApplicationArgs 2", - "82: btoi", - "83: txnas Accounts", - "84: txna ApplicationArgs 3", - "85: btoi", - "86: callsub asset_transfer" - ], - [ - "298: asset_transfer:", - "299: proto 3 0", - "300: itxn_begin", - "301: frame_dig -1", - "302: itxn_field AssetAmount", - "303: frame_dig -3", - "304: itxn_field XferAsset", - "305: frame_dig -2", - "306: itxn_field AssetReceiver", - "307: int axfer", - "308: itxn_field TypeEnum", - "309: int 0", - "310: itxn_field Fee", - "311: itxn_submit", - "312: retsub" - ], - [ - "87: int 1", - "88: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "73: __puya_arc4_router___asset_transfer_route@5:", + "74: txn OnCompletion", + "75: !", + "76: assert", + "77: txn ApplicationID", + "78: assert", + "79: txna ApplicationArgs 1", + "80: btoi", + "81: txnas Assets", + "82: txna ApplicationArgs 2", + "83: btoi", + "84: txnas Accounts", + "85: txna ApplicationArgs 3", + "86: btoi", + "87: callsub asset_transfer" + ], + [ + "320: asset_transfer:", + "321: proto 3 0", + "322: itxn_begin", + "323: frame_dig -1", + "324: itxn_field AssetAmount", + "325: frame_dig -3", + "326: itxn_field XferAsset", + "327: frame_dig -2", + "328: itxn_field AssetReceiver", + "329: int axfer", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: retsub" + ], + [ + "88: int 1", + "89: retsub" ], [ "5: return" @@ -347,7 +352,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 35 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -360,7 +365,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -373,45 +378,46 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "90: __puya_arc4_router___asset_freeze_route@6:", - "91: txn OnCompletion", - "92: !", - "93: assert", - "94: txn ApplicationID", - "95: assert", - "96: txna ApplicationArgs 1", - "97: btoi", - "98: txnas Accounts", - "99: txna ApplicationArgs 2", - "100: btoi", - "101: txnas Assets", - "102: callsub asset_freeze" - ], - [ - "316: asset_freeze:", - "317: proto 2 0", - "318: itxn_begin", - "319: int 1", - "320: itxn_field FreezeAssetFrozen", - "321: frame_dig -1", - "322: itxn_field FreezeAsset", - "323: frame_dig -2", - "324: itxn_field FreezeAssetAccount", - "325: int afrz", - "326: itxn_field TypeEnum", - "327: int 0", - "328: itxn_field Fee", - "329: itxn_submit", - "330: retsub" - ], - [ - "103: int 1", - "104: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "91: __puya_arc4_router___asset_freeze_route@6:", + "92: txn OnCompletion", + "93: !", + "94: assert", + "95: txn ApplicationID", + "96: assert", + "97: txna ApplicationArgs 1", + "98: btoi", + "99: txnas Accounts", + "100: txna ApplicationArgs 2", + "101: btoi", + "102: txnas Assets", + "103: callsub asset_freeze" + ], + [ + "338: asset_freeze:", + "339: proto 2 0", + "340: itxn_begin", + "341: int 1", + "342: itxn_field FreezeAssetFrozen", + "343: frame_dig -1", + "344: itxn_field FreezeAsset", + "345: frame_dig -2", + "346: itxn_field FreezeAssetAccount", + "347: int afrz", + "348: itxn_field TypeEnum", + "349: int 0", + "350: itxn_field Fee", + "351: itxn_submit", + "352: retsub" + ], + [ + "104: int 1", + "105: retsub" ], [ "5: return" @@ -419,7 +425,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 36 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -432,7 +438,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -445,49 +451,50 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "106: __puya_arc4_router___asset_revoke_route@7:", - "107: txn OnCompletion", - "108: !", - "109: assert", - "110: txn ApplicationID", - "111: assert", - "112: txna ApplicationArgs 1", - "113: btoi", - "114: txnas Assets", - "115: txna ApplicationArgs 2", - "116: btoi", - "117: txnas Accounts", - "118: txna ApplicationArgs 3", - "119: btoi", - "120: callsub asset_revoke" - ], - [ - "334: asset_revoke:", - "335: proto 3 0", - "336: itxn_begin", - "337: global CurrentApplicationAddress", - "338: frame_dig -1", - "339: itxn_field AssetAmount", - "340: frame_dig -2", - "341: itxn_field AssetSender", - "342: frame_dig -3", - "343: itxn_field XferAsset", - "344: itxn_field AssetReceiver", - "345: int axfer", - "346: itxn_field TypeEnum", - "347: int 0", - "348: itxn_field Fee", - "349: itxn_submit", - "350: retsub" - ], - [ - "121: int 1", - "122: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "107: __puya_arc4_router___asset_revoke_route@7:", + "108: txn OnCompletion", + "109: !", + "110: assert", + "111: txn ApplicationID", + "112: assert", + "113: txna ApplicationArgs 1", + "114: btoi", + "115: txnas Assets", + "116: txna ApplicationArgs 2", + "117: btoi", + "118: txnas Accounts", + "119: txna ApplicationArgs 3", + "120: btoi", + "121: callsub asset_revoke" + ], + [ + "356: asset_revoke:", + "357: proto 3 0", + "358: itxn_begin", + "359: global CurrentApplicationAddress", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -2", + "363: itxn_field AssetSender", + "364: frame_dig -3", + "365: itxn_field XferAsset", + "366: itxn_field AssetReceiver", + "367: int axfer", + "368: itxn_field TypeEnum", + "369: int 0", + "370: itxn_field Fee", + "371: itxn_submit", + "372: retsub" + ], + [ + "122: int 1", + "123: retsub" ], [ "5: return" @@ -495,7 +502,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 37 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -508,7 +515,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -521,46 +528,47 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "124: __puya_arc4_router___asset_config_route@8:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "130: txna ApplicationArgs 1", - "131: btoi", - "132: txnas Assets", - "133: callsub asset_config" - ], - [ - "354: asset_config:", - "355: proto 1 0", - "356: itxn_begin", - "357: global CurrentApplicationAddress", - "358: dup", - "359: txn Sender", - "360: dup", - "361: itxn_field ConfigAssetClawback", - "362: itxn_field ConfigAssetFreeze", - "363: itxn_field ConfigAssetReserve", - "364: itxn_field ConfigAssetManager", - "365: frame_dig -1", - "366: itxn_field ConfigAsset", - "367: int acfg", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "134: int 1", - "135: retsub" + "125: __puya_arc4_router___asset_config_route@8:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "131: txna ApplicationArgs 1", + "132: btoi", + "133: txnas Assets", + "134: callsub asset_config" + ], + [ + "376: asset_config:", + "377: proto 1 0", + "378: itxn_begin", + "379: global CurrentApplicationAddress", + "380: dup", + "381: txn Sender", + "382: dup", + "383: itxn_field ConfigAssetClawback", + "384: itxn_field ConfigAssetFreeze", + "385: itxn_field ConfigAssetReserve", + "386: itxn_field ConfigAssetManager", + "387: frame_dig -1", + "388: itxn_field ConfigAsset", + "389: int acfg", + "390: itxn_field TypeEnum", + "391: int 0", + "392: itxn_field Fee", + "393: itxn_submit", + "394: retsub" + ], + [ + "135: int 1", + "136: retsub" ], [ "5: return" @@ -568,7 +576,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 38 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -581,7 +589,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -594,38 +602,39 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "137: __puya_arc4_router___asset_delete_route@9:", - "138: txn OnCompletion", - "139: !", - "140: assert", - "141: txn ApplicationID", - "142: assert", - "143: txna ApplicationArgs 1", - "144: btoi", - "145: txnas Assets", - "146: callsub asset_delete" + "138: __puya_arc4_router___asset_delete_route@9:", + "139: txn OnCompletion", + "140: !", + "141: assert", + "142: txn ApplicationID", + "143: assert", + "144: txna ApplicationArgs 1", + "145: btoi", + "146: txnas Assets", + "147: callsub asset_delete" ], [ - "376: asset_delete:", - "377: proto 1 0", - "378: itxn_begin", - "379: frame_dig -1", - "380: itxn_field ConfigAsset", - "381: int acfg", - "382: itxn_field TypeEnum", - "383: int 0", - "384: itxn_field Fee", - "385: itxn_submit", - "386: retsub" + "398: asset_delete:", + "399: proto 1 0", + "400: itxn_begin", + "401: frame_dig -1", + "402: itxn_field ConfigAsset", + "403: int acfg", + "404: itxn_field TypeEnum", + "405: int 0", + "406: itxn_field Fee", + "407: itxn_submit", + "408: retsub" ], [ - "147: int 1", - "148: retsub" + "148: int 1", + "149: retsub" ], [ "5: return" @@ -633,7 +642,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 39 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -646,7 +655,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -659,70 +668,71 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "150: __puya_arc4_router___multi_inner_txns_route@10:", - "151: txn OnCompletion", - "152: !", - "153: assert", - "154: txn ApplicationID", - "155: assert", - "156: txna ApplicationArgs 1", - "157: btoi", - "158: txnas Applications", - "159: callsub multi_inner_txns" - ], - [ - "390: multi_inner_txns:", - "391: proto 1 2", - "392: txn Sender", - "393: itxn_begin", - "394: itxn_field Receiver", - "395: int 5000", - "396: itxn_field Amount", - "397: int pay", - "398: itxn_field TypeEnum", - "399: int 0", - "400: itxn_field Fee", - "401: itxn_next", - "402: method hello(string)string", - "403: itxn_field ApplicationArgs", - "404: byte 0x0005576f726c64", - "405: itxn_field ApplicationArgs", - "406: frame_dig -1", - "407: itxn_field ApplicationID", - "408: int appl", - "409: itxn_field TypeEnum", - "410: int 0", - "411: itxn_field Fee", - "412: itxn_submit", - "413: gitxn 0 Amount", - "414: itxn LastLog", - "415: dup", - "416: extract 4 0", - "417: swap", - "418: extract 0 4", - "419: byte 0x151f7c75", - "420: ==", - "421: assert", - "422: retsub" - ], - [ - "160: swap", - "161: itob", - "162: byte 0x000a", - "163: concat", - "164: swap", - "165: concat", - "166: byte 0x151f7c75", - "167: swap", - "168: concat", - "169: log", - "170: int 1", - "171: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "151: __puya_arc4_router___multi_inner_txns_route@10:", + "152: txn OnCompletion", + "153: !", + "154: assert", + "155: txn ApplicationID", + "156: assert", + "157: txna ApplicationArgs 1", + "158: btoi", + "159: txnas Applications", + "160: callsub multi_inner_txns" + ], + [ + "412: multi_inner_txns:", + "413: proto 1 2", + "414: txn Sender", + "415: itxn_begin", + "416: itxn_field Receiver", + "417: int 5000", + "418: itxn_field Amount", + "419: int pay", + "420: itxn_field TypeEnum", + "421: int 0", + "422: itxn_field Fee", + "423: itxn_next", + "424: method hello(string)string", + "425: itxn_field ApplicationArgs", + "426: byte 0x0005576f726c64", + "427: itxn_field ApplicationArgs", + "428: frame_dig -1", + "429: itxn_field ApplicationID", + "430: int appl", + "431: itxn_field TypeEnum", + "432: int 0", + "433: itxn_field Fee", + "434: itxn_submit", + "435: gitxn 0 Amount", + "436: itxn LastLog", + "437: dup", + "438: extract 4 0", + "439: swap", + "440: extract 0 4", + "441: byte 0x151f7c75", + "442: ==", + "443: assert", + "444: retsub" + ], + [ + "161: swap", + "162: itob", + "163: byte 0x000a", + "164: concat", + "165: swap", + "166: concat", + "167: byte 0x151f7c75", + "168: swap", + "169: concat", + "170: log", + "171: int 1", + "172: retsub" ], [ "5: return" @@ -730,7 +740,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 40 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -743,7 +753,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -756,43 +766,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "173: __puya_arc4_router___deploy_app_route@11:", - "174: txn OnCompletion", - "175: !", - "176: assert", - "177: txn ApplicationID", - "178: assert", - "179: callsub deploy_app" - ], - [ - "426: deploy_app:", - "427: proto 0 1", - "428: itxn_begin", - "429: byte 0x0a810143", - "430: itxn_field ClearStateProgramPages", - "431: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "432: itxn_field ApprovalProgramPages", - "433: int appl", - "434: itxn_field TypeEnum", - "435: int 0", - "436: itxn_field Fee", - "437: itxn_submit", - "438: itxn CreatedApplicationID", - "439: retsub" - ], - [ - "180: itob", - "181: byte 0x151f7c75", - "182: swap", - "183: concat", - "184: log", - "185: int 1", - "186: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "174: __puya_arc4_router___deploy_app_route@11:", + "175: txn OnCompletion", + "176: !", + "177: assert", + "178: txn ApplicationID", + "179: assert", + "180: callsub deploy_app" + ], + [ + "448: deploy_app:", + "449: proto 0 1", + "450: itxn_begin", + "451: byte 0x0a810143", + "452: itxn_field ClearStateProgramPages", + "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "454: itxn_field ApprovalProgramPages", + "455: int appl", + "456: itxn_field TypeEnum", + "457: int 0", + "458: itxn_field Fee", + "459: itxn_submit", + "460: itxn CreatedApplicationID", + "461: retsub" + ], + [ + "181: itob", + "182: byte 0x151f7c75", + "183: swap", + "184: concat", + "185: log", + "186: int 1", + "187: retsub" ], [ "5: return" @@ -800,7 +811,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 41 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -813,7 +824,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -826,88 +837,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "188: __puya_arc4_router___noop_app_call_route@12:", - "189: txn OnCompletion", - "190: !", - "191: assert", - "192: txn ApplicationID", - "193: assert", - "194: txna ApplicationArgs 1", - "195: btoi", - "196: txnas Applications", - "197: callsub noop_app_call" - ], - [ - "443: noop_app_call:", - "444: proto 1 2", - "445: itxn_begin", - "446: method hello(string)string", - "447: itxn_field ApplicationArgs", - "448: byte 0x0005576f726c64", - "449: itxn_field ApplicationArgs", - "450: frame_dig -1", - "451: itxn_field ApplicationID", - "452: int appl", - "453: itxn_field TypeEnum", - "454: int 0", - "455: itxn_field Fee", - "456: itxn_submit", - "457: itxn LastLog", - "458: dup", - "459: extract 4 0", - "460: swap", - "461: extract 0 4", - "462: byte 0x151f7c75", - "463: ==", - "464: assert", - "465: itxn_begin", - "466: frame_dig -1", - "467: itxn_field ApplicationID", - "468: method hello(string)string", - "469: itxn_field ApplicationArgs", - "470: byte 0x0005616761696e", - "471: itxn_field ApplicationArgs", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "189: __puya_arc4_router___arc4_deploy_app_route@12:", + "190: txn OnCompletion", + "191: !", + "192: assert", + "193: txn ApplicationID", + "194: assert", + "195: callsub arc4_deploy_app" + ], + [ + "465: arc4_deploy_app:", + "466: proto 0 1", + "467: itxn_begin", + "468: byte 0x0a810143", + "469: itxn_field ClearStateProgramPages", + "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "471: itxn_field ApprovalProgramPages", "472: int appl", "473: itxn_field TypeEnum", "474: int 0", "475: itxn_field Fee", "476: itxn_submit", - "477: itxn LastLog", - "478: dup", - "479: extract 4 0", - "480: swap", - "481: extract 0 4", - "482: byte 0x151f7c75", - "483: ==", - "484: assert", - "485: retsub" + "477: itxn CreatedApplicationID", + "478: retsub" ], [ + "196: itob", + "197: byte 0x151f7c75", "198: swap", - "199: dup", - "200: len", - "201: int 4", - "202: +", - "203: itob", - "204: extract 6 2", - "205: byte 0x0004", - "206: swap", - "207: concat", - "208: swap", - "209: concat", - "210: swap", - "211: concat", - "212: byte 0x151f7c75", - "213: swap", - "214: concat", - "215: log", - "216: int 1", - "217: retsub" + "199: concat", + "200: log", + "201: int 1", + "202: retsub" ], [ "5: return" @@ -915,7 +882,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 30 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -928,17 +895,140 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "13: method payment()uint64", + "14: method asset_create()uint64", + "15: method asset_opt_in(asset)void", + "16: method asset_transfer(asset,account,uint64)void", + "17: method asset_freeze(account,asset)void", + "18: method asset_revoke(asset,account,uint64)void", + "19: method asset_config(asset)void", + "20: method asset_delete(asset)void", + "21: method multi_inner_txns(application)(uint64,string)", + "22: method deploy_app()uint64", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "204: __puya_arc4_router___noop_app_call_route@13:", + "205: txn OnCompletion", + "206: !", + "207: assert", + "208: txn ApplicationID", + "209: assert", + "210: txna ApplicationArgs 1", + "211: btoi", + "212: txnas Applications", + "213: callsub noop_app_call" + ], + [ + "482: noop_app_call:", + "483: proto 1 2", + "484: itxn_begin", + "485: method hello(string)string", + "486: itxn_field ApplicationArgs", + "487: byte 0x0005576f726c64", + "488: itxn_field ApplicationArgs", + "489: frame_dig -1", + "490: itxn_field ApplicationID", + "491: int appl", + "492: itxn_field TypeEnum", + "493: int 0", + "494: itxn_field Fee", + "495: itxn_submit", + "496: itxn LastLog", + "497: dup", + "498: extract 4 0", + "499: swap", + "500: extract 0 4", + "501: byte 0x151f7c75", + "502: ==", + "503: assert", + "504: itxn_begin", + "505: frame_dig -1", + "506: itxn_field ApplicationID", + "507: method hello(string)string", + "508: itxn_field ApplicationArgs", + "509: byte 0x0005616761696e", + "510: itxn_field ApplicationArgs", + "511: int appl", + "512: itxn_field TypeEnum", + "513: int 0", + "514: itxn_field Fee", + "515: itxn_submit", + "516: itxn LastLog", + "517: dup", + "518: extract 4 0", + "519: swap", + "520: extract 0 4", + "521: byte 0x151f7c75", + "522: ==", + "523: assert", + "524: extract 2 0", + "525: retsub" + ], + [ + "214: dup", + "215: len", + "216: itob", + "217: extract 6 2", + "218: swap", + "219: concat", + "220: swap", + "221: dup", + "222: len", + "223: int 4", + "224: +", + "225: itob", + "226: extract 6 2", + "227: byte 0x0004", + "228: swap", + "229: concat", + "230: swap", + "231: concat", + "232: swap", + "233: concat", + "234: byte 0x151f7c75", + "235: swap", + "236: concat", + "237: log", + "238: int 1", + "239: retsub" ], [ - "228: __puya_arc4_router___after_if_else@19:", - "229: int 0", - "230: retsub" + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@16" + ], + [ + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" + ], + [ + "250: __puya_arc4_router___after_if_else@20:", + "251: int 0", + "252: retsub" ], [ "5: return" @@ -949,7 +1039,7 @@ }, { "type": "ExecutionPaths", - "count": 13, + "count": 14, "description": "\nCheck: \"unprotected-updatable\", Impact: High, Confidence: High\nDescription: Unprotected Upgradable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#unprotected-updatable-application\n", "check": "unprotected-updatable", "impact": "High", @@ -970,7 +1060,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -983,13 +1073,14 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "26: int 0", - "27: retsub" + "27: int 0", + "28: retsub" ], [ "5: return" @@ -997,7 +1088,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 31 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1010,7 +1101,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1023,43 +1114,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "29: __puya_arc4_router___payment_route@2:", - "30: txn OnCompletion", - "31: !", - "32: assert", - "33: txn ApplicationID", - "34: assert", - "35: callsub payment" - ], - [ - "234: payment:", - "235: proto 0 1", - "236: itxn_begin", - "237: txn Sender", - "238: itxn_field Receiver", - "239: int 5000", - "240: itxn_field Amount", - "241: int pay", - "242: itxn_field TypeEnum", - "243: int 0", - "244: itxn_field Fee", - "245: itxn_submit", - "246: itxn Amount", - "247: retsub" - ], - [ - "36: itob", - "37: byte 0x151f7c75", - "38: swap", - "39: concat", - "40: log", - "41: int 1", - "42: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "30: __puya_arc4_router___payment_route@2:", + "31: txn OnCompletion", + "32: !", + "33: assert", + "34: txn ApplicationID", + "35: assert", + "36: callsub payment" + ], + [ + "256: payment:", + "257: proto 0 1", + "258: itxn_begin", + "259: txn Sender", + "260: itxn_field Receiver", + "261: int 5000", + "262: itxn_field Amount", + "263: int pay", + "264: itxn_field TypeEnum", + "265: int 0", + "266: itxn_field Fee", + "267: itxn_submit", + "268: itxn Amount", + "269: retsub" + ], + [ + "37: itob", + "38: byte 0x151f7c75", + "39: swap", + "40: concat", + "41: log", + "42: int 1", + "43: retsub" ], [ "5: return" @@ -1067,7 +1159,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 32 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1080,7 +1172,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1093,55 +1185,56 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "44: __puya_arc4_router___asset_create_route@3:", - "45: txn OnCompletion", - "46: !", - "47: assert", - "48: txn ApplicationID", - "49: assert", - "50: callsub asset_create" - ], - [ - "251: asset_create:", - "252: proto 0 1", - "253: itxn_begin", - "254: global CurrentApplicationAddress", - "255: dupn 3", - "256: itxn_field ConfigAssetClawback", - "257: itxn_field ConfigAssetFreeze", - "258: itxn_field ConfigAssetReserve", - "259: itxn_field ConfigAssetManager", - "260: byte \"https://link_to_ipfs/Mona_Lisa\"", - "261: itxn_field ConfigAssetURL", - "262: byte \"Mona Lisa\"", - "263: itxn_field ConfigAssetName", - "264: byte \"ML\"", - "265: itxn_field ConfigAssetUnitName", - "266: int 2", - "267: itxn_field ConfigAssetDecimals", - "268: int 100", - "269: itxn_field ConfigAssetTotal", - "270: int acfg", - "271: itxn_field TypeEnum", - "272: int 0", - "273: itxn_field Fee", - "274: itxn_submit", - "275: itxn CreatedAssetID", - "276: retsub" - ], - [ - "51: itob", - "52: byte 0x151f7c75", - "53: swap", - "54: concat", - "55: log", - "56: int 1", - "57: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "45: __puya_arc4_router___asset_create_route@3:", + "46: txn OnCompletion", + "47: !", + "48: assert", + "49: txn ApplicationID", + "50: assert", + "51: callsub asset_create" + ], + [ + "273: asset_create:", + "274: proto 0 1", + "275: itxn_begin", + "276: global CurrentApplicationAddress", + "277: dupn 3", + "278: itxn_field ConfigAssetClawback", + "279: itxn_field ConfigAssetFreeze", + "280: itxn_field ConfigAssetReserve", + "281: itxn_field ConfigAssetManager", + "282: byte \"https://link_to_ipfs/Mona_Lisa\"", + "283: itxn_field ConfigAssetURL", + "284: byte \"Mona Lisa\"", + "285: itxn_field ConfigAssetName", + "286: byte \"ML\"", + "287: itxn_field ConfigAssetUnitName", + "288: int 2", + "289: itxn_field ConfigAssetDecimals", + "290: int 100", + "291: itxn_field ConfigAssetTotal", + "292: int acfg", + "293: itxn_field TypeEnum", + "294: int 0", + "295: itxn_field Fee", + "296: itxn_submit", + "297: itxn CreatedAssetID", + "298: retsub" + ], + [ + "52: itob", + "53: byte 0x151f7c75", + "54: swap", + "55: concat", + "56: log", + "57: int 1", + "58: retsub" ], [ "5: return" @@ -1149,7 +1242,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 33 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1162,7 +1255,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1175,42 +1268,43 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "59: __puya_arc4_router___asset_opt_in_route@4:", - "60: txn OnCompletion", - "61: !", - "62: assert", - "63: txn ApplicationID", - "64: assert", - "65: txna ApplicationArgs 1", - "66: btoi", - "67: txnas Assets", - "68: callsub asset_opt_in" - ], - [ - "280: asset_opt_in:", - "281: proto 1 0", - "282: itxn_begin", - "283: global CurrentApplicationAddress", - "284: int 0", - "285: itxn_field AssetAmount", - "286: frame_dig -1", - "287: itxn_field XferAsset", - "288: itxn_field AssetReceiver", - "289: int axfer", - "290: itxn_field TypeEnum", - "291: int 0", - "292: itxn_field Fee", - "293: itxn_submit", - "294: retsub" - ], - [ - "69: int 1", - "70: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "60: __puya_arc4_router___asset_opt_in_route@4:", + "61: txn OnCompletion", + "62: !", + "63: assert", + "64: txn ApplicationID", + "65: assert", + "66: txna ApplicationArgs 1", + "67: btoi", + "68: txnas Assets", + "69: callsub asset_opt_in" + ], + [ + "302: asset_opt_in:", + "303: proto 1 0", + "304: itxn_begin", + "305: global CurrentApplicationAddress", + "306: int 0", + "307: itxn_field AssetAmount", + "308: frame_dig -1", + "309: itxn_field XferAsset", + "310: itxn_field AssetReceiver", + "311: int axfer", + "312: itxn_field TypeEnum", + "313: int 0", + "314: itxn_field Fee", + "315: itxn_submit", + "316: retsub" + ], + [ + "70: int 1", + "71: retsub" ], [ "5: return" @@ -1218,7 +1312,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 34 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1231,7 +1325,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1244,47 +1338,48 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "72: __puya_arc4_router___asset_transfer_route@5:", - "73: txn OnCompletion", - "74: !", - "75: assert", - "76: txn ApplicationID", - "77: assert", - "78: txna ApplicationArgs 1", - "79: btoi", - "80: txnas Assets", - "81: txna ApplicationArgs 2", - "82: btoi", - "83: txnas Accounts", - "84: txna ApplicationArgs 3", - "85: btoi", - "86: callsub asset_transfer" - ], - [ - "298: asset_transfer:", - "299: proto 3 0", - "300: itxn_begin", - "301: frame_dig -1", - "302: itxn_field AssetAmount", - "303: frame_dig -3", - "304: itxn_field XferAsset", - "305: frame_dig -2", - "306: itxn_field AssetReceiver", - "307: int axfer", - "308: itxn_field TypeEnum", - "309: int 0", - "310: itxn_field Fee", - "311: itxn_submit", - "312: retsub" - ], - [ - "87: int 1", - "88: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "73: __puya_arc4_router___asset_transfer_route@5:", + "74: txn OnCompletion", + "75: !", + "76: assert", + "77: txn ApplicationID", + "78: assert", + "79: txna ApplicationArgs 1", + "80: btoi", + "81: txnas Assets", + "82: txna ApplicationArgs 2", + "83: btoi", + "84: txnas Accounts", + "85: txna ApplicationArgs 3", + "86: btoi", + "87: callsub asset_transfer" + ], + [ + "320: asset_transfer:", + "321: proto 3 0", + "322: itxn_begin", + "323: frame_dig -1", + "324: itxn_field AssetAmount", + "325: frame_dig -3", + "326: itxn_field XferAsset", + "327: frame_dig -2", + "328: itxn_field AssetReceiver", + "329: int axfer", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: retsub" + ], + [ + "88: int 1", + "89: retsub" ], [ "5: return" @@ -1292,7 +1387,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 35 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1305,7 +1400,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1318,45 +1413,46 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "90: __puya_arc4_router___asset_freeze_route@6:", - "91: txn OnCompletion", - "92: !", - "93: assert", - "94: txn ApplicationID", - "95: assert", - "96: txna ApplicationArgs 1", - "97: btoi", - "98: txnas Accounts", - "99: txna ApplicationArgs 2", - "100: btoi", - "101: txnas Assets", - "102: callsub asset_freeze" - ], - [ - "316: asset_freeze:", - "317: proto 2 0", - "318: itxn_begin", - "319: int 1", - "320: itxn_field FreezeAssetFrozen", - "321: frame_dig -1", - "322: itxn_field FreezeAsset", - "323: frame_dig -2", - "324: itxn_field FreezeAssetAccount", - "325: int afrz", - "326: itxn_field TypeEnum", - "327: int 0", - "328: itxn_field Fee", - "329: itxn_submit", - "330: retsub" - ], - [ - "103: int 1", - "104: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "91: __puya_arc4_router___asset_freeze_route@6:", + "92: txn OnCompletion", + "93: !", + "94: assert", + "95: txn ApplicationID", + "96: assert", + "97: txna ApplicationArgs 1", + "98: btoi", + "99: txnas Accounts", + "100: txna ApplicationArgs 2", + "101: btoi", + "102: txnas Assets", + "103: callsub asset_freeze" + ], + [ + "338: asset_freeze:", + "339: proto 2 0", + "340: itxn_begin", + "341: int 1", + "342: itxn_field FreezeAssetFrozen", + "343: frame_dig -1", + "344: itxn_field FreezeAsset", + "345: frame_dig -2", + "346: itxn_field FreezeAssetAccount", + "347: int afrz", + "348: itxn_field TypeEnum", + "349: int 0", + "350: itxn_field Fee", + "351: itxn_submit", + "352: retsub" + ], + [ + "104: int 1", + "105: retsub" ], [ "5: return" @@ -1364,7 +1460,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 36 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1377,7 +1473,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1390,49 +1486,50 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "106: __puya_arc4_router___asset_revoke_route@7:", - "107: txn OnCompletion", - "108: !", - "109: assert", - "110: txn ApplicationID", - "111: assert", - "112: txna ApplicationArgs 1", - "113: btoi", - "114: txnas Assets", - "115: txna ApplicationArgs 2", - "116: btoi", - "117: txnas Accounts", - "118: txna ApplicationArgs 3", - "119: btoi", - "120: callsub asset_revoke" - ], - [ - "334: asset_revoke:", - "335: proto 3 0", - "336: itxn_begin", - "337: global CurrentApplicationAddress", - "338: frame_dig -1", - "339: itxn_field AssetAmount", - "340: frame_dig -2", - "341: itxn_field AssetSender", - "342: frame_dig -3", - "343: itxn_field XferAsset", - "344: itxn_field AssetReceiver", - "345: int axfer", - "346: itxn_field TypeEnum", - "347: int 0", - "348: itxn_field Fee", - "349: itxn_submit", - "350: retsub" - ], - [ - "121: int 1", - "122: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "107: __puya_arc4_router___asset_revoke_route@7:", + "108: txn OnCompletion", + "109: !", + "110: assert", + "111: txn ApplicationID", + "112: assert", + "113: txna ApplicationArgs 1", + "114: btoi", + "115: txnas Assets", + "116: txna ApplicationArgs 2", + "117: btoi", + "118: txnas Accounts", + "119: txna ApplicationArgs 3", + "120: btoi", + "121: callsub asset_revoke" + ], + [ + "356: asset_revoke:", + "357: proto 3 0", + "358: itxn_begin", + "359: global CurrentApplicationAddress", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -2", + "363: itxn_field AssetSender", + "364: frame_dig -3", + "365: itxn_field XferAsset", + "366: itxn_field AssetReceiver", + "367: int axfer", + "368: itxn_field TypeEnum", + "369: int 0", + "370: itxn_field Fee", + "371: itxn_submit", + "372: retsub" + ], + [ + "122: int 1", + "123: retsub" ], [ "5: return" @@ -1440,7 +1537,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 37 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1453,7 +1550,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1466,46 +1563,47 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "124: __puya_arc4_router___asset_config_route@8:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "130: txna ApplicationArgs 1", - "131: btoi", - "132: txnas Assets", - "133: callsub asset_config" - ], - [ - "354: asset_config:", - "355: proto 1 0", - "356: itxn_begin", - "357: global CurrentApplicationAddress", - "358: dup", - "359: txn Sender", - "360: dup", - "361: itxn_field ConfigAssetClawback", - "362: itxn_field ConfigAssetFreeze", - "363: itxn_field ConfigAssetReserve", - "364: itxn_field ConfigAssetManager", - "365: frame_dig -1", - "366: itxn_field ConfigAsset", - "367: int acfg", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "125: __puya_arc4_router___asset_config_route@8:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "131: txna ApplicationArgs 1", + "132: btoi", + "133: txnas Assets", + "134: callsub asset_config" ], [ - "134: int 1", - "135: retsub" + "376: asset_config:", + "377: proto 1 0", + "378: itxn_begin", + "379: global CurrentApplicationAddress", + "380: dup", + "381: txn Sender", + "382: dup", + "383: itxn_field ConfigAssetClawback", + "384: itxn_field ConfigAssetFreeze", + "385: itxn_field ConfigAssetReserve", + "386: itxn_field ConfigAssetManager", + "387: frame_dig -1", + "388: itxn_field ConfigAsset", + "389: int acfg", + "390: itxn_field TypeEnum", + "391: int 0", + "392: itxn_field Fee", + "393: itxn_submit", + "394: retsub" + ], + [ + "135: int 1", + "136: retsub" ], [ "5: return" @@ -1513,7 +1611,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 38 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1526,7 +1624,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1539,38 +1637,39 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "137: __puya_arc4_router___asset_delete_route@9:", - "138: txn OnCompletion", - "139: !", - "140: assert", - "141: txn ApplicationID", - "142: assert", - "143: txna ApplicationArgs 1", - "144: btoi", - "145: txnas Assets", - "146: callsub asset_delete" + "138: __puya_arc4_router___asset_delete_route@9:", + "139: txn OnCompletion", + "140: !", + "141: assert", + "142: txn ApplicationID", + "143: assert", + "144: txna ApplicationArgs 1", + "145: btoi", + "146: txnas Assets", + "147: callsub asset_delete" ], [ - "376: asset_delete:", - "377: proto 1 0", - "378: itxn_begin", - "379: frame_dig -1", - "380: itxn_field ConfigAsset", - "381: int acfg", - "382: itxn_field TypeEnum", - "383: int 0", - "384: itxn_field Fee", - "385: itxn_submit", - "386: retsub" + "398: asset_delete:", + "399: proto 1 0", + "400: itxn_begin", + "401: frame_dig -1", + "402: itxn_field ConfigAsset", + "403: int acfg", + "404: itxn_field TypeEnum", + "405: int 0", + "406: itxn_field Fee", + "407: itxn_submit", + "408: retsub" ], [ - "147: int 1", - "148: retsub" + "148: int 1", + "149: retsub" ], [ "5: return" @@ -1578,7 +1677,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 39 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1591,7 +1690,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1604,70 +1703,71 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "150: __puya_arc4_router___multi_inner_txns_route@10:", - "151: txn OnCompletion", - "152: !", - "153: assert", - "154: txn ApplicationID", - "155: assert", - "156: txna ApplicationArgs 1", - "157: btoi", - "158: txnas Applications", - "159: callsub multi_inner_txns" - ], - [ - "390: multi_inner_txns:", - "391: proto 1 2", - "392: txn Sender", - "393: itxn_begin", - "394: itxn_field Receiver", - "395: int 5000", - "396: itxn_field Amount", - "397: int pay", - "398: itxn_field TypeEnum", - "399: int 0", - "400: itxn_field Fee", - "401: itxn_next", - "402: method hello(string)string", - "403: itxn_field ApplicationArgs", - "404: byte 0x0005576f726c64", - "405: itxn_field ApplicationArgs", - "406: frame_dig -1", - "407: itxn_field ApplicationID", - "408: int appl", - "409: itxn_field TypeEnum", - "410: int 0", - "411: itxn_field Fee", - "412: itxn_submit", - "413: gitxn 0 Amount", - "414: itxn LastLog", - "415: dup", - "416: extract 4 0", - "417: swap", - "418: extract 0 4", - "419: byte 0x151f7c75", - "420: ==", - "421: assert", - "422: retsub" - ], - [ - "160: swap", - "161: itob", - "162: byte 0x000a", - "163: concat", - "164: swap", - "165: concat", - "166: byte 0x151f7c75", - "167: swap", - "168: concat", - "169: log", - "170: int 1", - "171: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "151: __puya_arc4_router___multi_inner_txns_route@10:", + "152: txn OnCompletion", + "153: !", + "154: assert", + "155: txn ApplicationID", + "156: assert", + "157: txna ApplicationArgs 1", + "158: btoi", + "159: txnas Applications", + "160: callsub multi_inner_txns" + ], + [ + "412: multi_inner_txns:", + "413: proto 1 2", + "414: txn Sender", + "415: itxn_begin", + "416: itxn_field Receiver", + "417: int 5000", + "418: itxn_field Amount", + "419: int pay", + "420: itxn_field TypeEnum", + "421: int 0", + "422: itxn_field Fee", + "423: itxn_next", + "424: method hello(string)string", + "425: itxn_field ApplicationArgs", + "426: byte 0x0005576f726c64", + "427: itxn_field ApplicationArgs", + "428: frame_dig -1", + "429: itxn_field ApplicationID", + "430: int appl", + "431: itxn_field TypeEnum", + "432: int 0", + "433: itxn_field Fee", + "434: itxn_submit", + "435: gitxn 0 Amount", + "436: itxn LastLog", + "437: dup", + "438: extract 4 0", + "439: swap", + "440: extract 0 4", + "441: byte 0x151f7c75", + "442: ==", + "443: assert", + "444: retsub" + ], + [ + "161: swap", + "162: itob", + "163: byte 0x000a", + "164: concat", + "165: swap", + "166: concat", + "167: byte 0x151f7c75", + "168: swap", + "169: concat", + "170: log", + "171: int 1", + "172: retsub" ], [ "5: return" @@ -1675,7 +1775,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 40 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1688,7 +1788,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1701,43 +1801,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "173: __puya_arc4_router___deploy_app_route@11:", - "174: txn OnCompletion", - "175: !", - "176: assert", - "177: txn ApplicationID", - "178: assert", - "179: callsub deploy_app" - ], - [ - "426: deploy_app:", - "427: proto 0 1", - "428: itxn_begin", - "429: byte 0x0a810143", - "430: itxn_field ClearStateProgramPages", - "431: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "432: itxn_field ApprovalProgramPages", - "433: int appl", - "434: itxn_field TypeEnum", - "435: int 0", - "436: itxn_field Fee", - "437: itxn_submit", - "438: itxn CreatedApplicationID", - "439: retsub" - ], - [ - "180: itob", - "181: byte 0x151f7c75", - "182: swap", - "183: concat", - "184: log", - "185: int 1", - "186: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "174: __puya_arc4_router___deploy_app_route@11:", + "175: txn OnCompletion", + "176: !", + "177: assert", + "178: txn ApplicationID", + "179: assert", + "180: callsub deploy_app" + ], + [ + "448: deploy_app:", + "449: proto 0 1", + "450: itxn_begin", + "451: byte 0x0a810143", + "452: itxn_field ClearStateProgramPages", + "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "454: itxn_field ApprovalProgramPages", + "455: int appl", + "456: itxn_field TypeEnum", + "457: int 0", + "458: itxn_field Fee", + "459: itxn_submit", + "460: itxn CreatedApplicationID", + "461: retsub" + ], + [ + "181: itob", + "182: byte 0x151f7c75", + "183: swap", + "184: concat", + "185: log", + "186: int 1", + "187: retsub" ], [ "5: return" @@ -1745,7 +1846,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 41 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1758,7 +1859,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1771,88 +1872,167 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "188: __puya_arc4_router___noop_app_call_route@12:", - "189: txn OnCompletion", - "190: !", - "191: assert", - "192: txn ApplicationID", - "193: assert", - "194: txna ApplicationArgs 1", - "195: btoi", - "196: txnas Applications", - "197: callsub noop_app_call" - ], - [ - "443: noop_app_call:", - "444: proto 1 2", - "445: itxn_begin", - "446: method hello(string)string", - "447: itxn_field ApplicationArgs", - "448: byte 0x0005576f726c64", - "449: itxn_field ApplicationArgs", - "450: frame_dig -1", - "451: itxn_field ApplicationID", - "452: int appl", - "453: itxn_field TypeEnum", - "454: int 0", - "455: itxn_field Fee", - "456: itxn_submit", - "457: itxn LastLog", - "458: dup", - "459: extract 4 0", - "460: swap", - "461: extract 0 4", - "462: byte 0x151f7c75", - "463: ==", - "464: assert", - "465: itxn_begin", - "466: frame_dig -1", - "467: itxn_field ApplicationID", - "468: method hello(string)string", - "469: itxn_field ApplicationArgs", - "470: byte 0x0005616761696e", - "471: itxn_field ApplicationArgs", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "189: __puya_arc4_router___arc4_deploy_app_route@12:", + "190: txn OnCompletion", + "191: !", + "192: assert", + "193: txn ApplicationID", + "194: assert", + "195: callsub arc4_deploy_app" + ], + [ + "465: arc4_deploy_app:", + "466: proto 0 1", + "467: itxn_begin", + "468: byte 0x0a810143", + "469: itxn_field ClearStateProgramPages", + "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "471: itxn_field ApprovalProgramPages", "472: int appl", "473: itxn_field TypeEnum", "474: int 0", "475: itxn_field Fee", "476: itxn_submit", - "477: itxn LastLog", - "478: dup", - "479: extract 4 0", - "480: swap", - "481: extract 0 4", - "482: byte 0x151f7c75", - "483: ==", - "484: assert", - "485: retsub" + "477: itxn CreatedApplicationID", + "478: retsub" ], [ + "196: itob", + "197: byte 0x151f7c75", "198: swap", - "199: dup", - "200: len", - "201: int 4", - "202: +", - "203: itob", - "204: extract 6 2", - "205: byte 0x0004", - "206: swap", - "207: concat", - "208: swap", - "209: concat", - "210: swap", - "211: concat", - "212: byte 0x151f7c75", - "213: swap", - "214: concat", - "215: log", - "216: int 1", - "217: retsub" + "199: concat", + "200: log", + "201: int 1", + "202: retsub" + ], + [ + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@16" + ], + [ + "13: method payment()uint64", + "14: method asset_create()uint64", + "15: method asset_opt_in(asset)void", + "16: method asset_transfer(asset,account,uint64)void", + "17: method asset_freeze(account,asset)void", + "18: method asset_revoke(asset,account,uint64)void", + "19: method asset_config(asset)void", + "20: method asset_delete(asset)void", + "21: method multi_inner_txns(application)(uint64,string)", + "22: method deploy_app()uint64", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "204: __puya_arc4_router___noop_app_call_route@13:", + "205: txn OnCompletion", + "206: !", + "207: assert", + "208: txn ApplicationID", + "209: assert", + "210: txna ApplicationArgs 1", + "211: btoi", + "212: txnas Applications", + "213: callsub noop_app_call" + ], + [ + "482: noop_app_call:", + "483: proto 1 2", + "484: itxn_begin", + "485: method hello(string)string", + "486: itxn_field ApplicationArgs", + "487: byte 0x0005576f726c64", + "488: itxn_field ApplicationArgs", + "489: frame_dig -1", + "490: itxn_field ApplicationID", + "491: int appl", + "492: itxn_field TypeEnum", + "493: int 0", + "494: itxn_field Fee", + "495: itxn_submit", + "496: itxn LastLog", + "497: dup", + "498: extract 4 0", + "499: swap", + "500: extract 0 4", + "501: byte 0x151f7c75", + "502: ==", + "503: assert", + "504: itxn_begin", + "505: frame_dig -1", + "506: itxn_field ApplicationID", + "507: method hello(string)string", + "508: itxn_field ApplicationArgs", + "509: byte 0x0005616761696e", + "510: itxn_field ApplicationArgs", + "511: int appl", + "512: itxn_field TypeEnum", + "513: int 0", + "514: itxn_field Fee", + "515: itxn_submit", + "516: itxn LastLog", + "517: dup", + "518: extract 4 0", + "519: swap", + "520: extract 0 4", + "521: byte 0x151f7c75", + "522: ==", + "523: assert", + "524: extract 2 0", + "525: retsub" + ], + [ + "214: dup", + "215: len", + "216: itob", + "217: extract 6 2", + "218: swap", + "219: concat", + "220: swap", + "221: dup", + "222: len", + "223: int 4", + "224: +", + "225: itob", + "226: extract 6 2", + "227: byte 0x0004", + "228: swap", + "229: concat", + "230: swap", + "231: concat", + "232: swap", + "233: concat", + "234: byte 0x151f7c75", + "235: swap", + "236: concat", + "237: log", + "238: int 1", + "239: retsub" ], [ "5: return" @@ -1860,7 +2040,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 30 -> 2", + "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1873,17 +2053,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" ], [ - "228: __puya_arc4_router___after_if_else@19:", - "229: int 0", - "230: retsub" + "250: __puya_arc4_router___after_if_else@20:", + "251: int 0", + "252: retsub" ], [ "5: return" @@ -1915,7 +2095,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -1928,13 +2108,14 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "26: int 0", - "27: retsub" + "27: int 0", + "28: retsub" ], [ "5: return" @@ -1942,7 +2123,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 30 -> 2", + "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1955,17 +2136,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" ], [ - "228: __puya_arc4_router___after_if_else@19:", - "229: int 0", - "230: retsub" + "250: __puya_arc4_router___after_if_else@20:", + "251: int 0", + "252: retsub" ], [ "5: return" @@ -1997,7 +2178,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2010,13 +2191,14 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "26: int 0", - "27: retsub" + "27: int 0", + "28: retsub" ], [ "5: return" @@ -2024,7 +2206,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 30 -> 2", + "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2037,17 +2219,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" ], [ - "228: __puya_arc4_router___after_if_else@19:", - "229: int 0", - "230: retsub" + "250: __puya_arc4_router___after_if_else@20:", + "251: int 0", + "252: retsub" ], [ "5: return" @@ -2058,7 +2240,7 @@ }, { "type": "ExecutionPaths", - "count": 13, + "count": 14, "description": "\nCheck: \"is-deletable\", Impact: High, Confidence: High\nDescription: Deletable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#deletable-application\n", "check": "is-deletable", "impact": "High", @@ -2079,7 +2261,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2092,13 +2274,14 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "26: int 0", - "27: retsub" + "27: int 0", + "28: retsub" ], [ "5: return" @@ -2106,7 +2289,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 31 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2119,7 +2302,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2132,43 +2315,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "29: __puya_arc4_router___payment_route@2:", - "30: txn OnCompletion", - "31: !", - "32: assert", - "33: txn ApplicationID", - "34: assert", - "35: callsub payment" - ], - [ - "234: payment:", - "235: proto 0 1", - "236: itxn_begin", - "237: txn Sender", - "238: itxn_field Receiver", - "239: int 5000", - "240: itxn_field Amount", - "241: int pay", - "242: itxn_field TypeEnum", - "243: int 0", - "244: itxn_field Fee", - "245: itxn_submit", - "246: itxn Amount", - "247: retsub" - ], - [ - "36: itob", - "37: byte 0x151f7c75", - "38: swap", - "39: concat", - "40: log", - "41: int 1", - "42: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "30: __puya_arc4_router___payment_route@2:", + "31: txn OnCompletion", + "32: !", + "33: assert", + "34: txn ApplicationID", + "35: assert", + "36: callsub payment" + ], + [ + "256: payment:", + "257: proto 0 1", + "258: itxn_begin", + "259: txn Sender", + "260: itxn_field Receiver", + "261: int 5000", + "262: itxn_field Amount", + "263: int pay", + "264: itxn_field TypeEnum", + "265: int 0", + "266: itxn_field Fee", + "267: itxn_submit", + "268: itxn Amount", + "269: retsub" + ], + [ + "37: itob", + "38: byte 0x151f7c75", + "39: swap", + "40: concat", + "41: log", + "42: int 1", + "43: retsub" ], [ "5: return" @@ -2176,7 +2360,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 32 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2189,7 +2373,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2202,55 +2386,56 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "44: __puya_arc4_router___asset_create_route@3:", - "45: txn OnCompletion", - "46: !", - "47: assert", - "48: txn ApplicationID", - "49: assert", - "50: callsub asset_create" - ], - [ - "251: asset_create:", - "252: proto 0 1", - "253: itxn_begin", - "254: global CurrentApplicationAddress", - "255: dupn 3", - "256: itxn_field ConfigAssetClawback", - "257: itxn_field ConfigAssetFreeze", - "258: itxn_field ConfigAssetReserve", - "259: itxn_field ConfigAssetManager", - "260: byte \"https://link_to_ipfs/Mona_Lisa\"", - "261: itxn_field ConfigAssetURL", - "262: byte \"Mona Lisa\"", - "263: itxn_field ConfigAssetName", - "264: byte \"ML\"", - "265: itxn_field ConfigAssetUnitName", - "266: int 2", - "267: itxn_field ConfigAssetDecimals", - "268: int 100", - "269: itxn_field ConfigAssetTotal", - "270: int acfg", - "271: itxn_field TypeEnum", - "272: int 0", - "273: itxn_field Fee", - "274: itxn_submit", - "275: itxn CreatedAssetID", - "276: retsub" - ], - [ - "51: itob", - "52: byte 0x151f7c75", - "53: swap", - "54: concat", - "55: log", - "56: int 1", - "57: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "45: __puya_arc4_router___asset_create_route@3:", + "46: txn OnCompletion", + "47: !", + "48: assert", + "49: txn ApplicationID", + "50: assert", + "51: callsub asset_create" + ], + [ + "273: asset_create:", + "274: proto 0 1", + "275: itxn_begin", + "276: global CurrentApplicationAddress", + "277: dupn 3", + "278: itxn_field ConfigAssetClawback", + "279: itxn_field ConfigAssetFreeze", + "280: itxn_field ConfigAssetReserve", + "281: itxn_field ConfigAssetManager", + "282: byte \"https://link_to_ipfs/Mona_Lisa\"", + "283: itxn_field ConfigAssetURL", + "284: byte \"Mona Lisa\"", + "285: itxn_field ConfigAssetName", + "286: byte \"ML\"", + "287: itxn_field ConfigAssetUnitName", + "288: int 2", + "289: itxn_field ConfigAssetDecimals", + "290: int 100", + "291: itxn_field ConfigAssetTotal", + "292: int acfg", + "293: itxn_field TypeEnum", + "294: int 0", + "295: itxn_field Fee", + "296: itxn_submit", + "297: itxn CreatedAssetID", + "298: retsub" + ], + [ + "52: itob", + "53: byte 0x151f7c75", + "54: swap", + "55: concat", + "56: log", + "57: int 1", + "58: retsub" ], [ "5: return" @@ -2258,7 +2443,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 33 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2271,7 +2456,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2284,42 +2469,43 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "59: __puya_arc4_router___asset_opt_in_route@4:", - "60: txn OnCompletion", - "61: !", - "62: assert", - "63: txn ApplicationID", - "64: assert", - "65: txna ApplicationArgs 1", - "66: btoi", - "67: txnas Assets", - "68: callsub asset_opt_in" - ], - [ - "280: asset_opt_in:", - "281: proto 1 0", - "282: itxn_begin", - "283: global CurrentApplicationAddress", - "284: int 0", - "285: itxn_field AssetAmount", - "286: frame_dig -1", - "287: itxn_field XferAsset", - "288: itxn_field AssetReceiver", - "289: int axfer", - "290: itxn_field TypeEnum", - "291: int 0", - "292: itxn_field Fee", - "293: itxn_submit", - "294: retsub" - ], - [ - "69: int 1", - "70: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "60: __puya_arc4_router___asset_opt_in_route@4:", + "61: txn OnCompletion", + "62: !", + "63: assert", + "64: txn ApplicationID", + "65: assert", + "66: txna ApplicationArgs 1", + "67: btoi", + "68: txnas Assets", + "69: callsub asset_opt_in" + ], + [ + "302: asset_opt_in:", + "303: proto 1 0", + "304: itxn_begin", + "305: global CurrentApplicationAddress", + "306: int 0", + "307: itxn_field AssetAmount", + "308: frame_dig -1", + "309: itxn_field XferAsset", + "310: itxn_field AssetReceiver", + "311: int axfer", + "312: itxn_field TypeEnum", + "313: int 0", + "314: itxn_field Fee", + "315: itxn_submit", + "316: retsub" + ], + [ + "70: int 1", + "71: retsub" ], [ "5: return" @@ -2327,7 +2513,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 34 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2340,7 +2526,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2353,47 +2539,48 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "72: __puya_arc4_router___asset_transfer_route@5:", - "73: txn OnCompletion", - "74: !", - "75: assert", - "76: txn ApplicationID", - "77: assert", - "78: txna ApplicationArgs 1", - "79: btoi", - "80: txnas Assets", - "81: txna ApplicationArgs 2", - "82: btoi", - "83: txnas Accounts", - "84: txna ApplicationArgs 3", - "85: btoi", - "86: callsub asset_transfer" - ], - [ - "298: asset_transfer:", - "299: proto 3 0", - "300: itxn_begin", - "301: frame_dig -1", - "302: itxn_field AssetAmount", - "303: frame_dig -3", - "304: itxn_field XferAsset", - "305: frame_dig -2", - "306: itxn_field AssetReceiver", - "307: int axfer", - "308: itxn_field TypeEnum", - "309: int 0", - "310: itxn_field Fee", - "311: itxn_submit", - "312: retsub" - ], - [ - "87: int 1", - "88: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "73: __puya_arc4_router___asset_transfer_route@5:", + "74: txn OnCompletion", + "75: !", + "76: assert", + "77: txn ApplicationID", + "78: assert", + "79: txna ApplicationArgs 1", + "80: btoi", + "81: txnas Assets", + "82: txna ApplicationArgs 2", + "83: btoi", + "84: txnas Accounts", + "85: txna ApplicationArgs 3", + "86: btoi", + "87: callsub asset_transfer" + ], + [ + "320: asset_transfer:", + "321: proto 3 0", + "322: itxn_begin", + "323: frame_dig -1", + "324: itxn_field AssetAmount", + "325: frame_dig -3", + "326: itxn_field XferAsset", + "327: frame_dig -2", + "328: itxn_field AssetReceiver", + "329: int axfer", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: retsub" + ], + [ + "88: int 1", + "89: retsub" ], [ "5: return" @@ -2401,7 +2588,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 35 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2414,7 +2601,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2427,45 +2614,46 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "90: __puya_arc4_router___asset_freeze_route@6:", - "91: txn OnCompletion", - "92: !", - "93: assert", - "94: txn ApplicationID", - "95: assert", - "96: txna ApplicationArgs 1", - "97: btoi", - "98: txnas Accounts", - "99: txna ApplicationArgs 2", - "100: btoi", - "101: txnas Assets", - "102: callsub asset_freeze" - ], - [ - "316: asset_freeze:", - "317: proto 2 0", - "318: itxn_begin", - "319: int 1", - "320: itxn_field FreezeAssetFrozen", - "321: frame_dig -1", - "322: itxn_field FreezeAsset", - "323: frame_dig -2", - "324: itxn_field FreezeAssetAccount", - "325: int afrz", - "326: itxn_field TypeEnum", - "327: int 0", - "328: itxn_field Fee", - "329: itxn_submit", - "330: retsub" - ], - [ - "103: int 1", - "104: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "91: __puya_arc4_router___asset_freeze_route@6:", + "92: txn OnCompletion", + "93: !", + "94: assert", + "95: txn ApplicationID", + "96: assert", + "97: txna ApplicationArgs 1", + "98: btoi", + "99: txnas Accounts", + "100: txna ApplicationArgs 2", + "101: btoi", + "102: txnas Assets", + "103: callsub asset_freeze" + ], + [ + "338: asset_freeze:", + "339: proto 2 0", + "340: itxn_begin", + "341: int 1", + "342: itxn_field FreezeAssetFrozen", + "343: frame_dig -1", + "344: itxn_field FreezeAsset", + "345: frame_dig -2", + "346: itxn_field FreezeAssetAccount", + "347: int afrz", + "348: itxn_field TypeEnum", + "349: int 0", + "350: itxn_field Fee", + "351: itxn_submit", + "352: retsub" + ], + [ + "104: int 1", + "105: retsub" ], [ "5: return" @@ -2473,7 +2661,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 36 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2486,7 +2674,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2499,49 +2687,50 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "106: __puya_arc4_router___asset_revoke_route@7:", - "107: txn OnCompletion", - "108: !", - "109: assert", - "110: txn ApplicationID", - "111: assert", - "112: txna ApplicationArgs 1", - "113: btoi", - "114: txnas Assets", - "115: txna ApplicationArgs 2", - "116: btoi", - "117: txnas Accounts", - "118: txna ApplicationArgs 3", - "119: btoi", - "120: callsub asset_revoke" - ], - [ - "334: asset_revoke:", - "335: proto 3 0", - "336: itxn_begin", - "337: global CurrentApplicationAddress", - "338: frame_dig -1", - "339: itxn_field AssetAmount", - "340: frame_dig -2", - "341: itxn_field AssetSender", - "342: frame_dig -3", - "343: itxn_field XferAsset", - "344: itxn_field AssetReceiver", - "345: int axfer", - "346: itxn_field TypeEnum", - "347: int 0", - "348: itxn_field Fee", - "349: itxn_submit", - "350: retsub" - ], - [ - "121: int 1", - "122: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "107: __puya_arc4_router___asset_revoke_route@7:", + "108: txn OnCompletion", + "109: !", + "110: assert", + "111: txn ApplicationID", + "112: assert", + "113: txna ApplicationArgs 1", + "114: btoi", + "115: txnas Assets", + "116: txna ApplicationArgs 2", + "117: btoi", + "118: txnas Accounts", + "119: txna ApplicationArgs 3", + "120: btoi", + "121: callsub asset_revoke" + ], + [ + "356: asset_revoke:", + "357: proto 3 0", + "358: itxn_begin", + "359: global CurrentApplicationAddress", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -2", + "363: itxn_field AssetSender", + "364: frame_dig -3", + "365: itxn_field XferAsset", + "366: itxn_field AssetReceiver", + "367: int axfer", + "368: itxn_field TypeEnum", + "369: int 0", + "370: itxn_field Fee", + "371: itxn_submit", + "372: retsub" + ], + [ + "122: int 1", + "123: retsub" ], [ "5: return" @@ -2549,7 +2738,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 37 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2562,7 +2751,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2575,46 +2764,47 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "124: __puya_arc4_router___asset_config_route@8:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "130: txna ApplicationArgs 1", - "131: btoi", - "132: txnas Assets", - "133: callsub asset_config" - ], - [ - "354: asset_config:", - "355: proto 1 0", - "356: itxn_begin", - "357: global CurrentApplicationAddress", - "358: dup", - "359: txn Sender", - "360: dup", - "361: itxn_field ConfigAssetClawback", - "362: itxn_field ConfigAssetFreeze", - "363: itxn_field ConfigAssetReserve", - "364: itxn_field ConfigAssetManager", - "365: frame_dig -1", - "366: itxn_field ConfigAsset", - "367: int acfg", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "134: int 1", - "135: retsub" + "125: __puya_arc4_router___asset_config_route@8:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "131: txna ApplicationArgs 1", + "132: btoi", + "133: txnas Assets", + "134: callsub asset_config" + ], + [ + "376: asset_config:", + "377: proto 1 0", + "378: itxn_begin", + "379: global CurrentApplicationAddress", + "380: dup", + "381: txn Sender", + "382: dup", + "383: itxn_field ConfigAssetClawback", + "384: itxn_field ConfigAssetFreeze", + "385: itxn_field ConfigAssetReserve", + "386: itxn_field ConfigAssetManager", + "387: frame_dig -1", + "388: itxn_field ConfigAsset", + "389: int acfg", + "390: itxn_field TypeEnum", + "391: int 0", + "392: itxn_field Fee", + "393: itxn_submit", + "394: retsub" + ], + [ + "135: int 1", + "136: retsub" ], [ "5: return" @@ -2622,7 +2812,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 38 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2635,7 +2825,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2648,38 +2838,39 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "137: __puya_arc4_router___asset_delete_route@9:", - "138: txn OnCompletion", - "139: !", - "140: assert", - "141: txn ApplicationID", - "142: assert", - "143: txna ApplicationArgs 1", - "144: btoi", - "145: txnas Assets", - "146: callsub asset_delete" + "138: __puya_arc4_router___asset_delete_route@9:", + "139: txn OnCompletion", + "140: !", + "141: assert", + "142: txn ApplicationID", + "143: assert", + "144: txna ApplicationArgs 1", + "145: btoi", + "146: txnas Assets", + "147: callsub asset_delete" ], [ - "376: asset_delete:", - "377: proto 1 0", - "378: itxn_begin", - "379: frame_dig -1", - "380: itxn_field ConfigAsset", - "381: int acfg", - "382: itxn_field TypeEnum", - "383: int 0", - "384: itxn_field Fee", - "385: itxn_submit", - "386: retsub" + "398: asset_delete:", + "399: proto 1 0", + "400: itxn_begin", + "401: frame_dig -1", + "402: itxn_field ConfigAsset", + "403: int acfg", + "404: itxn_field TypeEnum", + "405: int 0", + "406: itxn_field Fee", + "407: itxn_submit", + "408: retsub" ], [ - "147: int 1", - "148: retsub" + "148: int 1", + "149: retsub" ], [ "5: return" @@ -2687,7 +2878,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 39 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2700,7 +2891,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2713,70 +2904,71 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "150: __puya_arc4_router___multi_inner_txns_route@10:", - "151: txn OnCompletion", - "152: !", - "153: assert", - "154: txn ApplicationID", - "155: assert", - "156: txna ApplicationArgs 1", - "157: btoi", - "158: txnas Applications", - "159: callsub multi_inner_txns" - ], - [ - "390: multi_inner_txns:", - "391: proto 1 2", - "392: txn Sender", - "393: itxn_begin", - "394: itxn_field Receiver", - "395: int 5000", - "396: itxn_field Amount", - "397: int pay", - "398: itxn_field TypeEnum", - "399: int 0", - "400: itxn_field Fee", - "401: itxn_next", - "402: method hello(string)string", - "403: itxn_field ApplicationArgs", - "404: byte 0x0005576f726c64", - "405: itxn_field ApplicationArgs", - "406: frame_dig -1", - "407: itxn_field ApplicationID", - "408: int appl", - "409: itxn_field TypeEnum", - "410: int 0", - "411: itxn_field Fee", - "412: itxn_submit", - "413: gitxn 0 Amount", - "414: itxn LastLog", - "415: dup", - "416: extract 4 0", - "417: swap", - "418: extract 0 4", - "419: byte 0x151f7c75", - "420: ==", - "421: assert", - "422: retsub" - ], - [ - "160: swap", - "161: itob", - "162: byte 0x000a", - "163: concat", - "164: swap", - "165: concat", - "166: byte 0x151f7c75", - "167: swap", - "168: concat", - "169: log", - "170: int 1", - "171: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "151: __puya_arc4_router___multi_inner_txns_route@10:", + "152: txn OnCompletion", + "153: !", + "154: assert", + "155: txn ApplicationID", + "156: assert", + "157: txna ApplicationArgs 1", + "158: btoi", + "159: txnas Applications", + "160: callsub multi_inner_txns" + ], + [ + "412: multi_inner_txns:", + "413: proto 1 2", + "414: txn Sender", + "415: itxn_begin", + "416: itxn_field Receiver", + "417: int 5000", + "418: itxn_field Amount", + "419: int pay", + "420: itxn_field TypeEnum", + "421: int 0", + "422: itxn_field Fee", + "423: itxn_next", + "424: method hello(string)string", + "425: itxn_field ApplicationArgs", + "426: byte 0x0005576f726c64", + "427: itxn_field ApplicationArgs", + "428: frame_dig -1", + "429: itxn_field ApplicationID", + "430: int appl", + "431: itxn_field TypeEnum", + "432: int 0", + "433: itxn_field Fee", + "434: itxn_submit", + "435: gitxn 0 Amount", + "436: itxn LastLog", + "437: dup", + "438: extract 4 0", + "439: swap", + "440: extract 0 4", + "441: byte 0x151f7c75", + "442: ==", + "443: assert", + "444: retsub" + ], + [ + "161: swap", + "162: itob", + "163: byte 0x000a", + "164: concat", + "165: swap", + "166: concat", + "167: byte 0x151f7c75", + "168: swap", + "169: concat", + "170: log", + "171: int 1", + "172: retsub" ], [ "5: return" @@ -2784,7 +2976,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 40 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2797,7 +2989,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2810,43 +3002,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "173: __puya_arc4_router___deploy_app_route@11:", - "174: txn OnCompletion", - "175: !", - "176: assert", - "177: txn ApplicationID", - "178: assert", - "179: callsub deploy_app" - ], - [ - "426: deploy_app:", - "427: proto 0 1", - "428: itxn_begin", - "429: byte 0x0a810143", - "430: itxn_field ClearStateProgramPages", - "431: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "432: itxn_field ApprovalProgramPages", - "433: int appl", - "434: itxn_field TypeEnum", - "435: int 0", - "436: itxn_field Fee", - "437: itxn_submit", - "438: itxn CreatedApplicationID", - "439: retsub" - ], - [ - "180: itob", - "181: byte 0x151f7c75", - "182: swap", - "183: concat", - "184: log", - "185: int 1", - "186: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "174: __puya_arc4_router___deploy_app_route@11:", + "175: txn OnCompletion", + "176: !", + "177: assert", + "178: txn ApplicationID", + "179: assert", + "180: callsub deploy_app" + ], + [ + "448: deploy_app:", + "449: proto 0 1", + "450: itxn_begin", + "451: byte 0x0a810143", + "452: itxn_field ClearStateProgramPages", + "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "454: itxn_field ApprovalProgramPages", + "455: int appl", + "456: itxn_field TypeEnum", + "457: int 0", + "458: itxn_field Fee", + "459: itxn_submit", + "460: itxn CreatedApplicationID", + "461: retsub" + ], + [ + "181: itob", + "182: byte 0x151f7c75", + "183: swap", + "184: concat", + "185: log", + "186: int 1", + "187: retsub" ], [ "5: return" @@ -2854,7 +3047,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 41 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2867,7 +3060,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -2880,88 +3073,167 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "188: __puya_arc4_router___noop_app_call_route@12:", - "189: txn OnCompletion", - "190: !", - "191: assert", - "192: txn ApplicationID", - "193: assert", - "194: txna ApplicationArgs 1", - "195: btoi", - "196: txnas Applications", - "197: callsub noop_app_call" - ], - [ - "443: noop_app_call:", - "444: proto 1 2", - "445: itxn_begin", - "446: method hello(string)string", - "447: itxn_field ApplicationArgs", - "448: byte 0x0005576f726c64", - "449: itxn_field ApplicationArgs", - "450: frame_dig -1", - "451: itxn_field ApplicationID", - "452: int appl", - "453: itxn_field TypeEnum", - "454: int 0", - "455: itxn_field Fee", - "456: itxn_submit", - "457: itxn LastLog", - "458: dup", - "459: extract 4 0", - "460: swap", - "461: extract 0 4", - "462: byte 0x151f7c75", - "463: ==", - "464: assert", - "465: itxn_begin", - "466: frame_dig -1", - "467: itxn_field ApplicationID", - "468: method hello(string)string", - "469: itxn_field ApplicationArgs", - "470: byte 0x0005616761696e", - "471: itxn_field ApplicationArgs", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "189: __puya_arc4_router___arc4_deploy_app_route@12:", + "190: txn OnCompletion", + "191: !", + "192: assert", + "193: txn ApplicationID", + "194: assert", + "195: callsub arc4_deploy_app" + ], + [ + "465: arc4_deploy_app:", + "466: proto 0 1", + "467: itxn_begin", + "468: byte 0x0a810143", + "469: itxn_field ClearStateProgramPages", + "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "471: itxn_field ApprovalProgramPages", "472: int appl", "473: itxn_field TypeEnum", "474: int 0", "475: itxn_field Fee", "476: itxn_submit", - "477: itxn LastLog", - "478: dup", - "479: extract 4 0", - "480: swap", - "481: extract 0 4", - "482: byte 0x151f7c75", - "483: ==", - "484: assert", - "485: retsub" + "477: itxn CreatedApplicationID", + "478: retsub" ], [ + "196: itob", + "197: byte 0x151f7c75", "198: swap", - "199: dup", - "200: len", - "201: int 4", - "202: +", - "203: itob", - "204: extract 6 2", - "205: byte 0x0004", - "206: swap", - "207: concat", - "208: swap", - "209: concat", - "210: swap", - "211: concat", - "212: byte 0x151f7c75", - "213: swap", - "214: concat", - "215: log", - "216: int 1", - "217: retsub" + "199: concat", + "200: log", + "201: int 1", + "202: retsub" + ], + [ + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@16" + ], + [ + "13: method payment()uint64", + "14: method asset_create()uint64", + "15: method asset_opt_in(asset)void", + "16: method asset_transfer(asset,account,uint64)void", + "17: method asset_freeze(account,asset)void", + "18: method asset_revoke(asset,account,uint64)void", + "19: method asset_config(asset)void", + "20: method asset_delete(asset)void", + "21: method multi_inner_txns(application)(uint64,string)", + "22: method deploy_app()uint64", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "204: __puya_arc4_router___noop_app_call_route@13:", + "205: txn OnCompletion", + "206: !", + "207: assert", + "208: txn ApplicationID", + "209: assert", + "210: txna ApplicationArgs 1", + "211: btoi", + "212: txnas Applications", + "213: callsub noop_app_call" + ], + [ + "482: noop_app_call:", + "483: proto 1 2", + "484: itxn_begin", + "485: method hello(string)string", + "486: itxn_field ApplicationArgs", + "487: byte 0x0005576f726c64", + "488: itxn_field ApplicationArgs", + "489: frame_dig -1", + "490: itxn_field ApplicationID", + "491: int appl", + "492: itxn_field TypeEnum", + "493: int 0", + "494: itxn_field Fee", + "495: itxn_submit", + "496: itxn LastLog", + "497: dup", + "498: extract 4 0", + "499: swap", + "500: extract 0 4", + "501: byte 0x151f7c75", + "502: ==", + "503: assert", + "504: itxn_begin", + "505: frame_dig -1", + "506: itxn_field ApplicationID", + "507: method hello(string)string", + "508: itxn_field ApplicationArgs", + "509: byte 0x0005616761696e", + "510: itxn_field ApplicationArgs", + "511: int appl", + "512: itxn_field TypeEnum", + "513: int 0", + "514: itxn_field Fee", + "515: itxn_submit", + "516: itxn LastLog", + "517: dup", + "518: extract 4 0", + "519: swap", + "520: extract 0 4", + "521: byte 0x151f7c75", + "522: ==", + "523: assert", + "524: extract 2 0", + "525: retsub" + ], + [ + "214: dup", + "215: len", + "216: itob", + "217: extract 6 2", + "218: swap", + "219: concat", + "220: swap", + "221: dup", + "222: len", + "223: int 4", + "224: +", + "225: itob", + "226: extract 6 2", + "227: byte 0x0004", + "228: swap", + "229: concat", + "230: swap", + "231: concat", + "232: swap", + "233: concat", + "234: byte 0x151f7c75", + "235: swap", + "236: concat", + "237: log", + "238: int 1", + "239: retsub" ], [ "5: return" @@ -2969,7 +3241,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 30 -> 2", + "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2982,17 +3254,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" ], [ - "228: __puya_arc4_router___after_if_else@19:", - "229: int 0", - "230: retsub" + "250: __puya_arc4_router___after_if_else@20:", + "251: int 0", + "252: retsub" ], [ "5: return" @@ -3003,7 +3275,7 @@ }, { "type": "ExecutionPaths", - "count": 13, + "count": 14, "description": "\nCheck: \"is-updatable\", Impact: High, Confidence: High\nDescription: Upgradable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#upgradable-application\n", "check": "is-updatable", "impact": "High", @@ -3024,7 +3296,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3037,13 +3309,14 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "26: int 0", - "27: retsub" + "27: int 0", + "28: retsub" ], [ "5: return" @@ -3051,7 +3324,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 31 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3064,7 +3337,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3077,43 +3350,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "29: __puya_arc4_router___payment_route@2:", - "30: txn OnCompletion", - "31: !", - "32: assert", - "33: txn ApplicationID", - "34: assert", - "35: callsub payment" - ], - [ - "234: payment:", - "235: proto 0 1", - "236: itxn_begin", - "237: txn Sender", - "238: itxn_field Receiver", - "239: int 5000", - "240: itxn_field Amount", - "241: int pay", - "242: itxn_field TypeEnum", - "243: int 0", - "244: itxn_field Fee", - "245: itxn_submit", - "246: itxn Amount", - "247: retsub" - ], - [ - "36: itob", - "37: byte 0x151f7c75", - "38: swap", - "39: concat", - "40: log", - "41: int 1", - "42: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "30: __puya_arc4_router___payment_route@2:", + "31: txn OnCompletion", + "32: !", + "33: assert", + "34: txn ApplicationID", + "35: assert", + "36: callsub payment" + ], + [ + "256: payment:", + "257: proto 0 1", + "258: itxn_begin", + "259: txn Sender", + "260: itxn_field Receiver", + "261: int 5000", + "262: itxn_field Amount", + "263: int pay", + "264: itxn_field TypeEnum", + "265: int 0", + "266: itxn_field Fee", + "267: itxn_submit", + "268: itxn Amount", + "269: retsub" + ], + [ + "37: itob", + "38: byte 0x151f7c75", + "39: swap", + "40: concat", + "41: log", + "42: int 1", + "43: retsub" ], [ "5: return" @@ -3121,7 +3395,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 32 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3134,7 +3408,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3147,55 +3421,56 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "44: __puya_arc4_router___asset_create_route@3:", - "45: txn OnCompletion", - "46: !", - "47: assert", - "48: txn ApplicationID", - "49: assert", - "50: callsub asset_create" - ], - [ - "251: asset_create:", - "252: proto 0 1", - "253: itxn_begin", - "254: global CurrentApplicationAddress", - "255: dupn 3", - "256: itxn_field ConfigAssetClawback", - "257: itxn_field ConfigAssetFreeze", - "258: itxn_field ConfigAssetReserve", - "259: itxn_field ConfigAssetManager", - "260: byte \"https://link_to_ipfs/Mona_Lisa\"", - "261: itxn_field ConfigAssetURL", - "262: byte \"Mona Lisa\"", - "263: itxn_field ConfigAssetName", - "264: byte \"ML\"", - "265: itxn_field ConfigAssetUnitName", - "266: int 2", - "267: itxn_field ConfigAssetDecimals", - "268: int 100", - "269: itxn_field ConfigAssetTotal", - "270: int acfg", - "271: itxn_field TypeEnum", - "272: int 0", - "273: itxn_field Fee", - "274: itxn_submit", - "275: itxn CreatedAssetID", - "276: retsub" - ], - [ - "51: itob", - "52: byte 0x151f7c75", - "53: swap", - "54: concat", - "55: log", - "56: int 1", - "57: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "45: __puya_arc4_router___asset_create_route@3:", + "46: txn OnCompletion", + "47: !", + "48: assert", + "49: txn ApplicationID", + "50: assert", + "51: callsub asset_create" + ], + [ + "273: asset_create:", + "274: proto 0 1", + "275: itxn_begin", + "276: global CurrentApplicationAddress", + "277: dupn 3", + "278: itxn_field ConfigAssetClawback", + "279: itxn_field ConfigAssetFreeze", + "280: itxn_field ConfigAssetReserve", + "281: itxn_field ConfigAssetManager", + "282: byte \"https://link_to_ipfs/Mona_Lisa\"", + "283: itxn_field ConfigAssetURL", + "284: byte \"Mona Lisa\"", + "285: itxn_field ConfigAssetName", + "286: byte \"ML\"", + "287: itxn_field ConfigAssetUnitName", + "288: int 2", + "289: itxn_field ConfigAssetDecimals", + "290: int 100", + "291: itxn_field ConfigAssetTotal", + "292: int acfg", + "293: itxn_field TypeEnum", + "294: int 0", + "295: itxn_field Fee", + "296: itxn_submit", + "297: itxn CreatedAssetID", + "298: retsub" + ], + [ + "52: itob", + "53: byte 0x151f7c75", + "54: swap", + "55: concat", + "56: log", + "57: int 1", + "58: retsub" ], [ "5: return" @@ -3203,7 +3478,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 33 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3216,7 +3491,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3229,42 +3504,43 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "59: __puya_arc4_router___asset_opt_in_route@4:", - "60: txn OnCompletion", - "61: !", - "62: assert", - "63: txn ApplicationID", - "64: assert", - "65: txna ApplicationArgs 1", - "66: btoi", - "67: txnas Assets", - "68: callsub asset_opt_in" - ], - [ - "280: asset_opt_in:", - "281: proto 1 0", - "282: itxn_begin", - "283: global CurrentApplicationAddress", - "284: int 0", - "285: itxn_field AssetAmount", - "286: frame_dig -1", - "287: itxn_field XferAsset", - "288: itxn_field AssetReceiver", - "289: int axfer", - "290: itxn_field TypeEnum", - "291: int 0", - "292: itxn_field Fee", - "293: itxn_submit", - "294: retsub" - ], - [ - "69: int 1", - "70: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "60: __puya_arc4_router___asset_opt_in_route@4:", + "61: txn OnCompletion", + "62: !", + "63: assert", + "64: txn ApplicationID", + "65: assert", + "66: txna ApplicationArgs 1", + "67: btoi", + "68: txnas Assets", + "69: callsub asset_opt_in" + ], + [ + "302: asset_opt_in:", + "303: proto 1 0", + "304: itxn_begin", + "305: global CurrentApplicationAddress", + "306: int 0", + "307: itxn_field AssetAmount", + "308: frame_dig -1", + "309: itxn_field XferAsset", + "310: itxn_field AssetReceiver", + "311: int axfer", + "312: itxn_field TypeEnum", + "313: int 0", + "314: itxn_field Fee", + "315: itxn_submit", + "316: retsub" + ], + [ + "70: int 1", + "71: retsub" ], [ "5: return" @@ -3272,7 +3548,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 34 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3285,7 +3561,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3298,47 +3574,48 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "72: __puya_arc4_router___asset_transfer_route@5:", - "73: txn OnCompletion", - "74: !", - "75: assert", - "76: txn ApplicationID", - "77: assert", - "78: txna ApplicationArgs 1", - "79: btoi", - "80: txnas Assets", - "81: txna ApplicationArgs 2", - "82: btoi", - "83: txnas Accounts", - "84: txna ApplicationArgs 3", - "85: btoi", - "86: callsub asset_transfer" - ], - [ - "298: asset_transfer:", - "299: proto 3 0", - "300: itxn_begin", - "301: frame_dig -1", - "302: itxn_field AssetAmount", - "303: frame_dig -3", - "304: itxn_field XferAsset", - "305: frame_dig -2", - "306: itxn_field AssetReceiver", - "307: int axfer", - "308: itxn_field TypeEnum", - "309: int 0", - "310: itxn_field Fee", - "311: itxn_submit", - "312: retsub" - ], - [ - "87: int 1", - "88: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "73: __puya_arc4_router___asset_transfer_route@5:", + "74: txn OnCompletion", + "75: !", + "76: assert", + "77: txn ApplicationID", + "78: assert", + "79: txna ApplicationArgs 1", + "80: btoi", + "81: txnas Assets", + "82: txna ApplicationArgs 2", + "83: btoi", + "84: txnas Accounts", + "85: txna ApplicationArgs 3", + "86: btoi", + "87: callsub asset_transfer" + ], + [ + "320: asset_transfer:", + "321: proto 3 0", + "322: itxn_begin", + "323: frame_dig -1", + "324: itxn_field AssetAmount", + "325: frame_dig -3", + "326: itxn_field XferAsset", + "327: frame_dig -2", + "328: itxn_field AssetReceiver", + "329: int axfer", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: retsub" + ], + [ + "88: int 1", + "89: retsub" ], [ "5: return" @@ -3346,7 +3623,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 35 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3359,7 +3636,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3372,45 +3649,46 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "90: __puya_arc4_router___asset_freeze_route@6:", - "91: txn OnCompletion", - "92: !", - "93: assert", - "94: txn ApplicationID", - "95: assert", - "96: txna ApplicationArgs 1", - "97: btoi", - "98: txnas Accounts", - "99: txna ApplicationArgs 2", - "100: btoi", - "101: txnas Assets", - "102: callsub asset_freeze" - ], - [ - "316: asset_freeze:", - "317: proto 2 0", - "318: itxn_begin", - "319: int 1", - "320: itxn_field FreezeAssetFrozen", - "321: frame_dig -1", - "322: itxn_field FreezeAsset", - "323: frame_dig -2", - "324: itxn_field FreezeAssetAccount", - "325: int afrz", - "326: itxn_field TypeEnum", - "327: int 0", - "328: itxn_field Fee", - "329: itxn_submit", - "330: retsub" - ], - [ - "103: int 1", - "104: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "91: __puya_arc4_router___asset_freeze_route@6:", + "92: txn OnCompletion", + "93: !", + "94: assert", + "95: txn ApplicationID", + "96: assert", + "97: txna ApplicationArgs 1", + "98: btoi", + "99: txnas Accounts", + "100: txna ApplicationArgs 2", + "101: btoi", + "102: txnas Assets", + "103: callsub asset_freeze" + ], + [ + "338: asset_freeze:", + "339: proto 2 0", + "340: itxn_begin", + "341: int 1", + "342: itxn_field FreezeAssetFrozen", + "343: frame_dig -1", + "344: itxn_field FreezeAsset", + "345: frame_dig -2", + "346: itxn_field FreezeAssetAccount", + "347: int afrz", + "348: itxn_field TypeEnum", + "349: int 0", + "350: itxn_field Fee", + "351: itxn_submit", + "352: retsub" + ], + [ + "104: int 1", + "105: retsub" ], [ "5: return" @@ -3418,7 +3696,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 36 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3431,7 +3709,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3444,49 +3722,50 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "106: __puya_arc4_router___asset_revoke_route@7:", - "107: txn OnCompletion", - "108: !", - "109: assert", - "110: txn ApplicationID", - "111: assert", - "112: txna ApplicationArgs 1", - "113: btoi", - "114: txnas Assets", - "115: txna ApplicationArgs 2", - "116: btoi", - "117: txnas Accounts", - "118: txna ApplicationArgs 3", - "119: btoi", - "120: callsub asset_revoke" - ], - [ - "334: asset_revoke:", - "335: proto 3 0", - "336: itxn_begin", - "337: global CurrentApplicationAddress", - "338: frame_dig -1", - "339: itxn_field AssetAmount", - "340: frame_dig -2", - "341: itxn_field AssetSender", - "342: frame_dig -3", - "343: itxn_field XferAsset", - "344: itxn_field AssetReceiver", - "345: int axfer", - "346: itxn_field TypeEnum", - "347: int 0", - "348: itxn_field Fee", - "349: itxn_submit", - "350: retsub" - ], - [ - "121: int 1", - "122: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "107: __puya_arc4_router___asset_revoke_route@7:", + "108: txn OnCompletion", + "109: !", + "110: assert", + "111: txn ApplicationID", + "112: assert", + "113: txna ApplicationArgs 1", + "114: btoi", + "115: txnas Assets", + "116: txna ApplicationArgs 2", + "117: btoi", + "118: txnas Accounts", + "119: txna ApplicationArgs 3", + "120: btoi", + "121: callsub asset_revoke" + ], + [ + "356: asset_revoke:", + "357: proto 3 0", + "358: itxn_begin", + "359: global CurrentApplicationAddress", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -2", + "363: itxn_field AssetSender", + "364: frame_dig -3", + "365: itxn_field XferAsset", + "366: itxn_field AssetReceiver", + "367: int axfer", + "368: itxn_field TypeEnum", + "369: int 0", + "370: itxn_field Fee", + "371: itxn_submit", + "372: retsub" + ], + [ + "122: int 1", + "123: retsub" ], [ "5: return" @@ -3494,7 +3773,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 37 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3507,7 +3786,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3520,46 +3799,47 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "124: __puya_arc4_router___asset_config_route@8:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "130: txna ApplicationArgs 1", - "131: btoi", - "132: txnas Assets", - "133: callsub asset_config" - ], - [ - "354: asset_config:", - "355: proto 1 0", - "356: itxn_begin", - "357: global CurrentApplicationAddress", - "358: dup", - "359: txn Sender", - "360: dup", - "361: itxn_field ConfigAssetClawback", - "362: itxn_field ConfigAssetFreeze", - "363: itxn_field ConfigAssetReserve", - "364: itxn_field ConfigAssetManager", - "365: frame_dig -1", - "366: itxn_field ConfigAsset", - "367: int acfg", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "134: int 1", - "135: retsub" + "125: __puya_arc4_router___asset_config_route@8:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "131: txna ApplicationArgs 1", + "132: btoi", + "133: txnas Assets", + "134: callsub asset_config" + ], + [ + "376: asset_config:", + "377: proto 1 0", + "378: itxn_begin", + "379: global CurrentApplicationAddress", + "380: dup", + "381: txn Sender", + "382: dup", + "383: itxn_field ConfigAssetClawback", + "384: itxn_field ConfigAssetFreeze", + "385: itxn_field ConfigAssetReserve", + "386: itxn_field ConfigAssetManager", + "387: frame_dig -1", + "388: itxn_field ConfigAsset", + "389: int acfg", + "390: itxn_field TypeEnum", + "391: int 0", + "392: itxn_field Fee", + "393: itxn_submit", + "394: retsub" + ], + [ + "135: int 1", + "136: retsub" ], [ "5: return" @@ -3567,7 +3847,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 38 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3580,7 +3860,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3593,38 +3873,39 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "137: __puya_arc4_router___asset_delete_route@9:", - "138: txn OnCompletion", - "139: !", - "140: assert", - "141: txn ApplicationID", - "142: assert", - "143: txna ApplicationArgs 1", - "144: btoi", - "145: txnas Assets", - "146: callsub asset_delete" + "138: __puya_arc4_router___asset_delete_route@9:", + "139: txn OnCompletion", + "140: !", + "141: assert", + "142: txn ApplicationID", + "143: assert", + "144: txna ApplicationArgs 1", + "145: btoi", + "146: txnas Assets", + "147: callsub asset_delete" ], [ - "376: asset_delete:", - "377: proto 1 0", - "378: itxn_begin", - "379: frame_dig -1", - "380: itxn_field ConfigAsset", - "381: int acfg", - "382: itxn_field TypeEnum", - "383: int 0", - "384: itxn_field Fee", - "385: itxn_submit", - "386: retsub" + "398: asset_delete:", + "399: proto 1 0", + "400: itxn_begin", + "401: frame_dig -1", + "402: itxn_field ConfigAsset", + "403: int acfg", + "404: itxn_field TypeEnum", + "405: int 0", + "406: itxn_field Fee", + "407: itxn_submit", + "408: retsub" ], [ - "147: int 1", - "148: retsub" + "148: int 1", + "149: retsub" ], [ "5: return" @@ -3632,7 +3913,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 39 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3645,7 +3926,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3658,70 +3939,71 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "150: __puya_arc4_router___multi_inner_txns_route@10:", - "151: txn OnCompletion", - "152: !", - "153: assert", - "154: txn ApplicationID", - "155: assert", - "156: txna ApplicationArgs 1", - "157: btoi", - "158: txnas Applications", - "159: callsub multi_inner_txns" - ], - [ - "390: multi_inner_txns:", - "391: proto 1 2", - "392: txn Sender", - "393: itxn_begin", - "394: itxn_field Receiver", - "395: int 5000", - "396: itxn_field Amount", - "397: int pay", - "398: itxn_field TypeEnum", - "399: int 0", - "400: itxn_field Fee", - "401: itxn_next", - "402: method hello(string)string", - "403: itxn_field ApplicationArgs", - "404: byte 0x0005576f726c64", - "405: itxn_field ApplicationArgs", - "406: frame_dig -1", - "407: itxn_field ApplicationID", - "408: int appl", - "409: itxn_field TypeEnum", - "410: int 0", - "411: itxn_field Fee", - "412: itxn_submit", - "413: gitxn 0 Amount", - "414: itxn LastLog", - "415: dup", - "416: extract 4 0", - "417: swap", - "418: extract 0 4", - "419: byte 0x151f7c75", - "420: ==", - "421: assert", - "422: retsub" - ], - [ - "160: swap", - "161: itob", - "162: byte 0x000a", - "163: concat", - "164: swap", - "165: concat", - "166: byte 0x151f7c75", - "167: swap", - "168: concat", - "169: log", - "170: int 1", - "171: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "151: __puya_arc4_router___multi_inner_txns_route@10:", + "152: txn OnCompletion", + "153: !", + "154: assert", + "155: txn ApplicationID", + "156: assert", + "157: txna ApplicationArgs 1", + "158: btoi", + "159: txnas Applications", + "160: callsub multi_inner_txns" + ], + [ + "412: multi_inner_txns:", + "413: proto 1 2", + "414: txn Sender", + "415: itxn_begin", + "416: itxn_field Receiver", + "417: int 5000", + "418: itxn_field Amount", + "419: int pay", + "420: itxn_field TypeEnum", + "421: int 0", + "422: itxn_field Fee", + "423: itxn_next", + "424: method hello(string)string", + "425: itxn_field ApplicationArgs", + "426: byte 0x0005576f726c64", + "427: itxn_field ApplicationArgs", + "428: frame_dig -1", + "429: itxn_field ApplicationID", + "430: int appl", + "431: itxn_field TypeEnum", + "432: int 0", + "433: itxn_field Fee", + "434: itxn_submit", + "435: gitxn 0 Amount", + "436: itxn LastLog", + "437: dup", + "438: extract 4 0", + "439: swap", + "440: extract 0 4", + "441: byte 0x151f7c75", + "442: ==", + "443: assert", + "444: retsub" + ], + [ + "161: swap", + "162: itob", + "163: byte 0x000a", + "164: concat", + "165: swap", + "166: concat", + "167: byte 0x151f7c75", + "168: swap", + "169: concat", + "170: log", + "171: int 1", + "172: retsub" ], [ "5: return" @@ -3729,7 +4011,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 40 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3742,7 +4024,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3755,43 +4037,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "173: __puya_arc4_router___deploy_app_route@11:", - "174: txn OnCompletion", - "175: !", - "176: assert", - "177: txn ApplicationID", - "178: assert", - "179: callsub deploy_app" - ], - [ - "426: deploy_app:", - "427: proto 0 1", - "428: itxn_begin", - "429: byte 0x0a810143", - "430: itxn_field ClearStateProgramPages", - "431: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "432: itxn_field ApprovalProgramPages", - "433: int appl", - "434: itxn_field TypeEnum", - "435: int 0", - "436: itxn_field Fee", - "437: itxn_submit", - "438: itxn CreatedApplicationID", - "439: retsub" - ], - [ - "180: itob", - "181: byte 0x151f7c75", - "182: swap", - "183: concat", - "184: log", - "185: int 1", - "186: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "174: __puya_arc4_router___deploy_app_route@11:", + "175: txn OnCompletion", + "176: !", + "177: assert", + "178: txn ApplicationID", + "179: assert", + "180: callsub deploy_app" + ], + [ + "448: deploy_app:", + "449: proto 0 1", + "450: itxn_begin", + "451: byte 0x0a810143", + "452: itxn_field ClearStateProgramPages", + "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "454: itxn_field ApprovalProgramPages", + "455: int appl", + "456: itxn_field TypeEnum", + "457: int 0", + "458: itxn_field Fee", + "459: itxn_submit", + "460: itxn CreatedApplicationID", + "461: retsub" + ], + [ + "181: itob", + "182: byte 0x151f7c75", + "183: swap", + "184: concat", + "185: log", + "186: int 1", + "187: retsub" ], [ "5: return" @@ -3799,7 +4082,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 41 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3812,7 +4095,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3825,88 +4108,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "188: __puya_arc4_router___noop_app_call_route@12:", - "189: txn OnCompletion", - "190: !", - "191: assert", - "192: txn ApplicationID", - "193: assert", - "194: txna ApplicationArgs 1", - "195: btoi", - "196: txnas Applications", - "197: callsub noop_app_call" - ], - [ - "443: noop_app_call:", - "444: proto 1 2", - "445: itxn_begin", - "446: method hello(string)string", - "447: itxn_field ApplicationArgs", - "448: byte 0x0005576f726c64", - "449: itxn_field ApplicationArgs", - "450: frame_dig -1", - "451: itxn_field ApplicationID", - "452: int appl", - "453: itxn_field TypeEnum", - "454: int 0", - "455: itxn_field Fee", - "456: itxn_submit", - "457: itxn LastLog", - "458: dup", - "459: extract 4 0", - "460: swap", - "461: extract 0 4", - "462: byte 0x151f7c75", - "463: ==", - "464: assert", - "465: itxn_begin", - "466: frame_dig -1", - "467: itxn_field ApplicationID", - "468: method hello(string)string", - "469: itxn_field ApplicationArgs", - "470: byte 0x0005616761696e", - "471: itxn_field ApplicationArgs", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "189: __puya_arc4_router___arc4_deploy_app_route@12:", + "190: txn OnCompletion", + "191: !", + "192: assert", + "193: txn ApplicationID", + "194: assert", + "195: callsub arc4_deploy_app" + ], + [ + "465: arc4_deploy_app:", + "466: proto 0 1", + "467: itxn_begin", + "468: byte 0x0a810143", + "469: itxn_field ClearStateProgramPages", + "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "471: itxn_field ApprovalProgramPages", "472: int appl", "473: itxn_field TypeEnum", "474: int 0", "475: itxn_field Fee", "476: itxn_submit", - "477: itxn LastLog", - "478: dup", - "479: extract 4 0", - "480: swap", - "481: extract 0 4", - "482: byte 0x151f7c75", - "483: ==", - "484: assert", - "485: retsub" + "477: itxn CreatedApplicationID", + "478: retsub" ], [ + "196: itob", + "197: byte 0x151f7c75", "198: swap", - "199: dup", - "200: len", - "201: int 4", - "202: +", - "203: itob", - "204: extract 6 2", - "205: byte 0x0004", - "206: swap", - "207: concat", - "208: swap", - "209: concat", - "210: swap", - "211: concat", - "212: byte 0x151f7c75", - "213: swap", - "214: concat", - "215: log", - "216: int 1", - "217: retsub" + "199: concat", + "200: log", + "201: int 1", + "202: retsub" ], [ "5: return" @@ -3914,7 +4153,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 30 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3927,17 +4166,140 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "13: method payment()uint64", + "14: method asset_create()uint64", + "15: method asset_opt_in(asset)void", + "16: method asset_transfer(asset,account,uint64)void", + "17: method asset_freeze(account,asset)void", + "18: method asset_revoke(asset,account,uint64)void", + "19: method asset_config(asset)void", + "20: method asset_delete(asset)void", + "21: method multi_inner_txns(application)(uint64,string)", + "22: method deploy_app()uint64", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "204: __puya_arc4_router___noop_app_call_route@13:", + "205: txn OnCompletion", + "206: !", + "207: assert", + "208: txn ApplicationID", + "209: assert", + "210: txna ApplicationArgs 1", + "211: btoi", + "212: txnas Applications", + "213: callsub noop_app_call" + ], + [ + "482: noop_app_call:", + "483: proto 1 2", + "484: itxn_begin", + "485: method hello(string)string", + "486: itxn_field ApplicationArgs", + "487: byte 0x0005576f726c64", + "488: itxn_field ApplicationArgs", + "489: frame_dig -1", + "490: itxn_field ApplicationID", + "491: int appl", + "492: itxn_field TypeEnum", + "493: int 0", + "494: itxn_field Fee", + "495: itxn_submit", + "496: itxn LastLog", + "497: dup", + "498: extract 4 0", + "499: swap", + "500: extract 0 4", + "501: byte 0x151f7c75", + "502: ==", + "503: assert", + "504: itxn_begin", + "505: frame_dig -1", + "506: itxn_field ApplicationID", + "507: method hello(string)string", + "508: itxn_field ApplicationArgs", + "509: byte 0x0005616761696e", + "510: itxn_field ApplicationArgs", + "511: int appl", + "512: itxn_field TypeEnum", + "513: int 0", + "514: itxn_field Fee", + "515: itxn_submit", + "516: itxn LastLog", + "517: dup", + "518: extract 4 0", + "519: swap", + "520: extract 0 4", + "521: byte 0x151f7c75", + "522: ==", + "523: assert", + "524: extract 2 0", + "525: retsub" + ], + [ + "214: dup", + "215: len", + "216: itob", + "217: extract 6 2", + "218: swap", + "219: concat", + "220: swap", + "221: dup", + "222: len", + "223: int 4", + "224: +", + "225: itob", + "226: extract 6 2", + "227: byte 0x0004", + "228: swap", + "229: concat", + "230: swap", + "231: concat", + "232: swap", + "233: concat", + "234: byte 0x151f7c75", + "235: swap", + "236: concat", + "237: log", + "238: int 1", + "239: retsub" ], [ - "228: __puya_arc4_router___after_if_else@19:", - "229: int 0", - "230: retsub" + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@16" + ], + [ + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" + ], + [ + "250: __puya_arc4_router___after_if_else@20:", + "251: int 0", + "252: retsub" ], [ "5: return" @@ -3948,7 +4310,7 @@ }, { "type": "ExecutionPaths", - "count": 14, + "count": 15, "description": "\nCheck: \"missing-fee-check\", Impact: High, Confidence: High\nDescription: Missing Fee Field Validation\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#missing-fee-field-validation\n", "check": "missing-fee-check", "impact": "High", @@ -3969,7 +4331,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -3982,13 +4344,14 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "26: int 0", - "27: retsub" + "27: int 0", + "28: retsub" ], [ "5: return" @@ -3996,7 +4359,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 31 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4009,7 +4372,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4022,43 +4385,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "29: __puya_arc4_router___payment_route@2:", - "30: txn OnCompletion", - "31: !", - "32: assert", - "33: txn ApplicationID", - "34: assert", - "35: callsub payment" - ], - [ - "234: payment:", - "235: proto 0 1", - "236: itxn_begin", - "237: txn Sender", - "238: itxn_field Receiver", - "239: int 5000", - "240: itxn_field Amount", - "241: int pay", - "242: itxn_field TypeEnum", - "243: int 0", - "244: itxn_field Fee", - "245: itxn_submit", - "246: itxn Amount", - "247: retsub" - ], - [ - "36: itob", - "37: byte 0x151f7c75", - "38: swap", - "39: concat", - "40: log", - "41: int 1", - "42: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "30: __puya_arc4_router___payment_route@2:", + "31: txn OnCompletion", + "32: !", + "33: assert", + "34: txn ApplicationID", + "35: assert", + "36: callsub payment" + ], + [ + "256: payment:", + "257: proto 0 1", + "258: itxn_begin", + "259: txn Sender", + "260: itxn_field Receiver", + "261: int 5000", + "262: itxn_field Amount", + "263: int pay", + "264: itxn_field TypeEnum", + "265: int 0", + "266: itxn_field Fee", + "267: itxn_submit", + "268: itxn Amount", + "269: retsub" + ], + [ + "37: itob", + "38: byte 0x151f7c75", + "39: swap", + "40: concat", + "41: log", + "42: int 1", + "43: retsub" ], [ "5: return" @@ -4066,7 +4430,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 32 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4079,7 +4443,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4092,55 +4456,56 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "44: __puya_arc4_router___asset_create_route@3:", - "45: txn OnCompletion", - "46: !", - "47: assert", - "48: txn ApplicationID", - "49: assert", - "50: callsub asset_create" - ], - [ - "251: asset_create:", - "252: proto 0 1", - "253: itxn_begin", - "254: global CurrentApplicationAddress", - "255: dupn 3", - "256: itxn_field ConfigAssetClawback", - "257: itxn_field ConfigAssetFreeze", - "258: itxn_field ConfigAssetReserve", - "259: itxn_field ConfigAssetManager", - "260: byte \"https://link_to_ipfs/Mona_Lisa\"", - "261: itxn_field ConfigAssetURL", - "262: byte \"Mona Lisa\"", - "263: itxn_field ConfigAssetName", - "264: byte \"ML\"", - "265: itxn_field ConfigAssetUnitName", - "266: int 2", - "267: itxn_field ConfigAssetDecimals", - "268: int 100", - "269: itxn_field ConfigAssetTotal", - "270: int acfg", - "271: itxn_field TypeEnum", - "272: int 0", - "273: itxn_field Fee", - "274: itxn_submit", - "275: itxn CreatedAssetID", - "276: retsub" - ], - [ - "51: itob", - "52: byte 0x151f7c75", - "53: swap", - "54: concat", - "55: log", - "56: int 1", - "57: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "45: __puya_arc4_router___asset_create_route@3:", + "46: txn OnCompletion", + "47: !", + "48: assert", + "49: txn ApplicationID", + "50: assert", + "51: callsub asset_create" + ], + [ + "273: asset_create:", + "274: proto 0 1", + "275: itxn_begin", + "276: global CurrentApplicationAddress", + "277: dupn 3", + "278: itxn_field ConfigAssetClawback", + "279: itxn_field ConfigAssetFreeze", + "280: itxn_field ConfigAssetReserve", + "281: itxn_field ConfigAssetManager", + "282: byte \"https://link_to_ipfs/Mona_Lisa\"", + "283: itxn_field ConfigAssetURL", + "284: byte \"Mona Lisa\"", + "285: itxn_field ConfigAssetName", + "286: byte \"ML\"", + "287: itxn_field ConfigAssetUnitName", + "288: int 2", + "289: itxn_field ConfigAssetDecimals", + "290: int 100", + "291: itxn_field ConfigAssetTotal", + "292: int acfg", + "293: itxn_field TypeEnum", + "294: int 0", + "295: itxn_field Fee", + "296: itxn_submit", + "297: itxn CreatedAssetID", + "298: retsub" + ], + [ + "52: itob", + "53: byte 0x151f7c75", + "54: swap", + "55: concat", + "56: log", + "57: int 1", + "58: retsub" ], [ "5: return" @@ -4148,7 +4513,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 33 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4161,7 +4526,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4174,42 +4539,43 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "59: __puya_arc4_router___asset_opt_in_route@4:", - "60: txn OnCompletion", - "61: !", - "62: assert", - "63: txn ApplicationID", - "64: assert", - "65: txna ApplicationArgs 1", - "66: btoi", - "67: txnas Assets", - "68: callsub asset_opt_in" - ], - [ - "280: asset_opt_in:", - "281: proto 1 0", - "282: itxn_begin", - "283: global CurrentApplicationAddress", - "284: int 0", - "285: itxn_field AssetAmount", - "286: frame_dig -1", - "287: itxn_field XferAsset", - "288: itxn_field AssetReceiver", - "289: int axfer", - "290: itxn_field TypeEnum", - "291: int 0", - "292: itxn_field Fee", - "293: itxn_submit", - "294: retsub" - ], - [ - "69: int 1", - "70: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "60: __puya_arc4_router___asset_opt_in_route@4:", + "61: txn OnCompletion", + "62: !", + "63: assert", + "64: txn ApplicationID", + "65: assert", + "66: txna ApplicationArgs 1", + "67: btoi", + "68: txnas Assets", + "69: callsub asset_opt_in" + ], + [ + "302: asset_opt_in:", + "303: proto 1 0", + "304: itxn_begin", + "305: global CurrentApplicationAddress", + "306: int 0", + "307: itxn_field AssetAmount", + "308: frame_dig -1", + "309: itxn_field XferAsset", + "310: itxn_field AssetReceiver", + "311: int axfer", + "312: itxn_field TypeEnum", + "313: int 0", + "314: itxn_field Fee", + "315: itxn_submit", + "316: retsub" + ], + [ + "70: int 1", + "71: retsub" ], [ "5: return" @@ -4217,7 +4583,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 34 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4230,7 +4596,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4243,47 +4609,48 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "72: __puya_arc4_router___asset_transfer_route@5:", - "73: txn OnCompletion", - "74: !", - "75: assert", - "76: txn ApplicationID", - "77: assert", - "78: txna ApplicationArgs 1", - "79: btoi", - "80: txnas Assets", - "81: txna ApplicationArgs 2", - "82: btoi", - "83: txnas Accounts", - "84: txna ApplicationArgs 3", - "85: btoi", - "86: callsub asset_transfer" - ], - [ - "298: asset_transfer:", - "299: proto 3 0", - "300: itxn_begin", - "301: frame_dig -1", - "302: itxn_field AssetAmount", - "303: frame_dig -3", - "304: itxn_field XferAsset", - "305: frame_dig -2", - "306: itxn_field AssetReceiver", - "307: int axfer", - "308: itxn_field TypeEnum", - "309: int 0", - "310: itxn_field Fee", - "311: itxn_submit", - "312: retsub" - ], - [ - "87: int 1", - "88: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "73: __puya_arc4_router___asset_transfer_route@5:", + "74: txn OnCompletion", + "75: !", + "76: assert", + "77: txn ApplicationID", + "78: assert", + "79: txna ApplicationArgs 1", + "80: btoi", + "81: txnas Assets", + "82: txna ApplicationArgs 2", + "83: btoi", + "84: txnas Accounts", + "85: txna ApplicationArgs 3", + "86: btoi", + "87: callsub asset_transfer" + ], + [ + "320: asset_transfer:", + "321: proto 3 0", + "322: itxn_begin", + "323: frame_dig -1", + "324: itxn_field AssetAmount", + "325: frame_dig -3", + "326: itxn_field XferAsset", + "327: frame_dig -2", + "328: itxn_field AssetReceiver", + "329: int axfer", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: retsub" + ], + [ + "88: int 1", + "89: retsub" ], [ "5: return" @@ -4291,7 +4658,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 35 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4304,7 +4671,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4317,45 +4684,46 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "90: __puya_arc4_router___asset_freeze_route@6:", - "91: txn OnCompletion", - "92: !", - "93: assert", - "94: txn ApplicationID", - "95: assert", - "96: txna ApplicationArgs 1", - "97: btoi", - "98: txnas Accounts", - "99: txna ApplicationArgs 2", - "100: btoi", - "101: txnas Assets", - "102: callsub asset_freeze" - ], - [ - "316: asset_freeze:", - "317: proto 2 0", - "318: itxn_begin", - "319: int 1", - "320: itxn_field FreezeAssetFrozen", - "321: frame_dig -1", - "322: itxn_field FreezeAsset", - "323: frame_dig -2", - "324: itxn_field FreezeAssetAccount", - "325: int afrz", - "326: itxn_field TypeEnum", - "327: int 0", - "328: itxn_field Fee", - "329: itxn_submit", - "330: retsub" - ], - [ - "103: int 1", - "104: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "91: __puya_arc4_router___asset_freeze_route@6:", + "92: txn OnCompletion", + "93: !", + "94: assert", + "95: txn ApplicationID", + "96: assert", + "97: txna ApplicationArgs 1", + "98: btoi", + "99: txnas Accounts", + "100: txna ApplicationArgs 2", + "101: btoi", + "102: txnas Assets", + "103: callsub asset_freeze" + ], + [ + "338: asset_freeze:", + "339: proto 2 0", + "340: itxn_begin", + "341: int 1", + "342: itxn_field FreezeAssetFrozen", + "343: frame_dig -1", + "344: itxn_field FreezeAsset", + "345: frame_dig -2", + "346: itxn_field FreezeAssetAccount", + "347: int afrz", + "348: itxn_field TypeEnum", + "349: int 0", + "350: itxn_field Fee", + "351: itxn_submit", + "352: retsub" + ], + [ + "104: int 1", + "105: retsub" ], [ "5: return" @@ -4363,7 +4731,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 36 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4376,7 +4744,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4389,49 +4757,50 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "106: __puya_arc4_router___asset_revoke_route@7:", - "107: txn OnCompletion", - "108: !", - "109: assert", - "110: txn ApplicationID", - "111: assert", - "112: txna ApplicationArgs 1", - "113: btoi", - "114: txnas Assets", - "115: txna ApplicationArgs 2", - "116: btoi", - "117: txnas Accounts", - "118: txna ApplicationArgs 3", - "119: btoi", - "120: callsub asset_revoke" - ], - [ - "334: asset_revoke:", - "335: proto 3 0", - "336: itxn_begin", - "337: global CurrentApplicationAddress", - "338: frame_dig -1", - "339: itxn_field AssetAmount", - "340: frame_dig -2", - "341: itxn_field AssetSender", - "342: frame_dig -3", - "343: itxn_field XferAsset", - "344: itxn_field AssetReceiver", - "345: int axfer", - "346: itxn_field TypeEnum", - "347: int 0", - "348: itxn_field Fee", - "349: itxn_submit", - "350: retsub" - ], - [ - "121: int 1", - "122: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "107: __puya_arc4_router___asset_revoke_route@7:", + "108: txn OnCompletion", + "109: !", + "110: assert", + "111: txn ApplicationID", + "112: assert", + "113: txna ApplicationArgs 1", + "114: btoi", + "115: txnas Assets", + "116: txna ApplicationArgs 2", + "117: btoi", + "118: txnas Accounts", + "119: txna ApplicationArgs 3", + "120: btoi", + "121: callsub asset_revoke" + ], + [ + "356: asset_revoke:", + "357: proto 3 0", + "358: itxn_begin", + "359: global CurrentApplicationAddress", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -2", + "363: itxn_field AssetSender", + "364: frame_dig -3", + "365: itxn_field XferAsset", + "366: itxn_field AssetReceiver", + "367: int axfer", + "368: itxn_field TypeEnum", + "369: int 0", + "370: itxn_field Fee", + "371: itxn_submit", + "372: retsub" + ], + [ + "122: int 1", + "123: retsub" ], [ "5: return" @@ -4439,7 +4808,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 37 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4452,7 +4821,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4465,46 +4834,47 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "124: __puya_arc4_router___asset_config_route@8:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "130: txna ApplicationArgs 1", - "131: btoi", - "132: txnas Assets", - "133: callsub asset_config" - ], - [ - "354: asset_config:", - "355: proto 1 0", - "356: itxn_begin", - "357: global CurrentApplicationAddress", - "358: dup", - "359: txn Sender", - "360: dup", - "361: itxn_field ConfigAssetClawback", - "362: itxn_field ConfigAssetFreeze", - "363: itxn_field ConfigAssetReserve", - "364: itxn_field ConfigAssetManager", - "365: frame_dig -1", - "366: itxn_field ConfigAsset", - "367: int acfg", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "125: __puya_arc4_router___asset_config_route@8:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "131: txna ApplicationArgs 1", + "132: btoi", + "133: txnas Assets", + "134: callsub asset_config" ], [ - "134: int 1", - "135: retsub" + "376: asset_config:", + "377: proto 1 0", + "378: itxn_begin", + "379: global CurrentApplicationAddress", + "380: dup", + "381: txn Sender", + "382: dup", + "383: itxn_field ConfigAssetClawback", + "384: itxn_field ConfigAssetFreeze", + "385: itxn_field ConfigAssetReserve", + "386: itxn_field ConfigAssetManager", + "387: frame_dig -1", + "388: itxn_field ConfigAsset", + "389: int acfg", + "390: itxn_field TypeEnum", + "391: int 0", + "392: itxn_field Fee", + "393: itxn_submit", + "394: retsub" + ], + [ + "135: int 1", + "136: retsub" ], [ "5: return" @@ -4512,7 +4882,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 38 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4525,7 +4895,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4538,38 +4908,39 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "137: __puya_arc4_router___asset_delete_route@9:", - "138: txn OnCompletion", - "139: !", - "140: assert", - "141: txn ApplicationID", - "142: assert", - "143: txna ApplicationArgs 1", - "144: btoi", - "145: txnas Assets", - "146: callsub asset_delete" + "138: __puya_arc4_router___asset_delete_route@9:", + "139: txn OnCompletion", + "140: !", + "141: assert", + "142: txn ApplicationID", + "143: assert", + "144: txna ApplicationArgs 1", + "145: btoi", + "146: txnas Assets", + "147: callsub asset_delete" ], [ - "376: asset_delete:", - "377: proto 1 0", - "378: itxn_begin", - "379: frame_dig -1", - "380: itxn_field ConfigAsset", - "381: int acfg", - "382: itxn_field TypeEnum", - "383: int 0", - "384: itxn_field Fee", - "385: itxn_submit", - "386: retsub" + "398: asset_delete:", + "399: proto 1 0", + "400: itxn_begin", + "401: frame_dig -1", + "402: itxn_field ConfigAsset", + "403: int acfg", + "404: itxn_field TypeEnum", + "405: int 0", + "406: itxn_field Fee", + "407: itxn_submit", + "408: retsub" ], [ - "147: int 1", - "148: retsub" + "148: int 1", + "149: retsub" ], [ "5: return" @@ -4577,7 +4948,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 39 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4590,7 +4961,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4603,70 +4974,71 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "150: __puya_arc4_router___multi_inner_txns_route@10:", - "151: txn OnCompletion", - "152: !", - "153: assert", - "154: txn ApplicationID", - "155: assert", - "156: txna ApplicationArgs 1", - "157: btoi", - "158: txnas Applications", - "159: callsub multi_inner_txns" - ], - [ - "390: multi_inner_txns:", - "391: proto 1 2", - "392: txn Sender", - "393: itxn_begin", - "394: itxn_field Receiver", - "395: int 5000", - "396: itxn_field Amount", - "397: int pay", - "398: itxn_field TypeEnum", - "399: int 0", - "400: itxn_field Fee", - "401: itxn_next", - "402: method hello(string)string", - "403: itxn_field ApplicationArgs", - "404: byte 0x0005576f726c64", - "405: itxn_field ApplicationArgs", - "406: frame_dig -1", - "407: itxn_field ApplicationID", - "408: int appl", - "409: itxn_field TypeEnum", - "410: int 0", - "411: itxn_field Fee", - "412: itxn_submit", - "413: gitxn 0 Amount", - "414: itxn LastLog", - "415: dup", - "416: extract 4 0", - "417: swap", - "418: extract 0 4", - "419: byte 0x151f7c75", - "420: ==", - "421: assert", - "422: retsub" - ], - [ - "160: swap", - "161: itob", - "162: byte 0x000a", - "163: concat", - "164: swap", - "165: concat", - "166: byte 0x151f7c75", - "167: swap", - "168: concat", - "169: log", - "170: int 1", - "171: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "151: __puya_arc4_router___multi_inner_txns_route@10:", + "152: txn OnCompletion", + "153: !", + "154: assert", + "155: txn ApplicationID", + "156: assert", + "157: txna ApplicationArgs 1", + "158: btoi", + "159: txnas Applications", + "160: callsub multi_inner_txns" + ], + [ + "412: multi_inner_txns:", + "413: proto 1 2", + "414: txn Sender", + "415: itxn_begin", + "416: itxn_field Receiver", + "417: int 5000", + "418: itxn_field Amount", + "419: int pay", + "420: itxn_field TypeEnum", + "421: int 0", + "422: itxn_field Fee", + "423: itxn_next", + "424: method hello(string)string", + "425: itxn_field ApplicationArgs", + "426: byte 0x0005576f726c64", + "427: itxn_field ApplicationArgs", + "428: frame_dig -1", + "429: itxn_field ApplicationID", + "430: int appl", + "431: itxn_field TypeEnum", + "432: int 0", + "433: itxn_field Fee", + "434: itxn_submit", + "435: gitxn 0 Amount", + "436: itxn LastLog", + "437: dup", + "438: extract 4 0", + "439: swap", + "440: extract 0 4", + "441: byte 0x151f7c75", + "442: ==", + "443: assert", + "444: retsub" + ], + [ + "161: swap", + "162: itob", + "163: byte 0x000a", + "164: concat", + "165: swap", + "166: concat", + "167: byte 0x151f7c75", + "168: swap", + "169: concat", + "170: log", + "171: int 1", + "172: retsub" ], [ "5: return" @@ -4674,7 +5046,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 40 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4687,7 +5059,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4700,43 +5072,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "173: __puya_arc4_router___deploy_app_route@11:", - "174: txn OnCompletion", - "175: !", - "176: assert", - "177: txn ApplicationID", - "178: assert", - "179: callsub deploy_app" - ], - [ - "426: deploy_app:", - "427: proto 0 1", - "428: itxn_begin", - "429: byte 0x0a810143", - "430: itxn_field ClearStateProgramPages", - "431: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "432: itxn_field ApprovalProgramPages", - "433: int appl", - "434: itxn_field TypeEnum", - "435: int 0", - "436: itxn_field Fee", - "437: itxn_submit", - "438: itxn CreatedApplicationID", - "439: retsub" - ], - [ - "180: itob", - "181: byte 0x151f7c75", - "182: swap", - "183: concat", - "184: log", - "185: int 1", - "186: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "174: __puya_arc4_router___deploy_app_route@11:", + "175: txn OnCompletion", + "176: !", + "177: assert", + "178: txn ApplicationID", + "179: assert", + "180: callsub deploy_app" + ], + [ + "448: deploy_app:", + "449: proto 0 1", + "450: itxn_begin", + "451: byte 0x0a810143", + "452: itxn_field ClearStateProgramPages", + "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "454: itxn_field ApprovalProgramPages", + "455: int appl", + "456: itxn_field TypeEnum", + "457: int 0", + "458: itxn_field Fee", + "459: itxn_submit", + "460: itxn CreatedApplicationID", + "461: retsub" + ], + [ + "181: itob", + "182: byte 0x151f7c75", + "183: swap", + "184: concat", + "185: log", + "186: int 1", + "187: retsub" ], [ "5: return" @@ -4744,7 +5117,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 41 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4757,7 +5130,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4770,88 +5143,167 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "188: __puya_arc4_router___noop_app_call_route@12:", - "189: txn OnCompletion", - "190: !", - "191: assert", - "192: txn ApplicationID", - "193: assert", - "194: txna ApplicationArgs 1", - "195: btoi", - "196: txnas Applications", - "197: callsub noop_app_call" - ], - [ - "443: noop_app_call:", - "444: proto 1 2", - "445: itxn_begin", - "446: method hello(string)string", - "447: itxn_field ApplicationArgs", - "448: byte 0x0005576f726c64", - "449: itxn_field ApplicationArgs", - "450: frame_dig -1", - "451: itxn_field ApplicationID", - "452: int appl", - "453: itxn_field TypeEnum", - "454: int 0", - "455: itxn_field Fee", - "456: itxn_submit", - "457: itxn LastLog", - "458: dup", - "459: extract 4 0", - "460: swap", - "461: extract 0 4", - "462: byte 0x151f7c75", - "463: ==", - "464: assert", - "465: itxn_begin", - "466: frame_dig -1", - "467: itxn_field ApplicationID", - "468: method hello(string)string", - "469: itxn_field ApplicationArgs", - "470: byte 0x0005616761696e", - "471: itxn_field ApplicationArgs", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "189: __puya_arc4_router___arc4_deploy_app_route@12:", + "190: txn OnCompletion", + "191: !", + "192: assert", + "193: txn ApplicationID", + "194: assert", + "195: callsub arc4_deploy_app" + ], + [ + "465: arc4_deploy_app:", + "466: proto 0 1", + "467: itxn_begin", + "468: byte 0x0a810143", + "469: itxn_field ClearStateProgramPages", + "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "471: itxn_field ApprovalProgramPages", "472: int appl", "473: itxn_field TypeEnum", "474: int 0", "475: itxn_field Fee", "476: itxn_submit", - "477: itxn LastLog", - "478: dup", - "479: extract 4 0", - "480: swap", - "481: extract 0 4", - "482: byte 0x151f7c75", - "483: ==", - "484: assert", - "485: retsub" + "477: itxn CreatedApplicationID", + "478: retsub" ], [ + "196: itob", + "197: byte 0x151f7c75", "198: swap", - "199: dup", - "200: len", - "201: int 4", - "202: +", - "203: itob", - "204: extract 6 2", - "205: byte 0x0004", - "206: swap", - "207: concat", - "208: swap", - "209: concat", - "210: swap", - "211: concat", - "212: byte 0x151f7c75", - "213: swap", - "214: concat", - "215: log", - "216: int 1", - "217: retsub" + "199: concat", + "200: log", + "201: int 1", + "202: retsub" + ], + [ + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@16" + ], + [ + "13: method payment()uint64", + "14: method asset_create()uint64", + "15: method asset_opt_in(asset)void", + "16: method asset_transfer(asset,account,uint64)void", + "17: method asset_freeze(account,asset)void", + "18: method asset_revoke(asset,account,uint64)void", + "19: method asset_config(asset)void", + "20: method asset_delete(asset)void", + "21: method multi_inner_txns(application)(uint64,string)", + "22: method deploy_app()uint64", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "204: __puya_arc4_router___noop_app_call_route@13:", + "205: txn OnCompletion", + "206: !", + "207: assert", + "208: txn ApplicationID", + "209: assert", + "210: txna ApplicationArgs 1", + "211: btoi", + "212: txnas Applications", + "213: callsub noop_app_call" + ], + [ + "482: noop_app_call:", + "483: proto 1 2", + "484: itxn_begin", + "485: method hello(string)string", + "486: itxn_field ApplicationArgs", + "487: byte 0x0005576f726c64", + "488: itxn_field ApplicationArgs", + "489: frame_dig -1", + "490: itxn_field ApplicationID", + "491: int appl", + "492: itxn_field TypeEnum", + "493: int 0", + "494: itxn_field Fee", + "495: itxn_submit", + "496: itxn LastLog", + "497: dup", + "498: extract 4 0", + "499: swap", + "500: extract 0 4", + "501: byte 0x151f7c75", + "502: ==", + "503: assert", + "504: itxn_begin", + "505: frame_dig -1", + "506: itxn_field ApplicationID", + "507: method hello(string)string", + "508: itxn_field ApplicationArgs", + "509: byte 0x0005616761696e", + "510: itxn_field ApplicationArgs", + "511: int appl", + "512: itxn_field TypeEnum", + "513: int 0", + "514: itxn_field Fee", + "515: itxn_submit", + "516: itxn LastLog", + "517: dup", + "518: extract 4 0", + "519: swap", + "520: extract 0 4", + "521: byte 0x151f7c75", + "522: ==", + "523: assert", + "524: extract 2 0", + "525: retsub" + ], + [ + "214: dup", + "215: len", + "216: itob", + "217: extract 6 2", + "218: swap", + "219: concat", + "220: swap", + "221: dup", + "222: len", + "223: int 4", + "224: +", + "225: itob", + "226: extract 6 2", + "227: byte 0x0004", + "228: swap", + "229: concat", + "230: swap", + "231: concat", + "232: swap", + "233: concat", + "234: byte 0x151f7c75", + "235: swap", + "236: concat", + "237: log", + "238: int 1", + "239: retsub" ], [ "5: return" @@ -4859,7 +5311,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 29 -> 2", + "short": "0 -> 1 -> 3 -> 30 -> 31 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4872,19 +5324,19 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" ], [ - "222: txn ApplicationID", - "223: !", - "224: assert", - "225: int 1", - "226: retsub" + "244: txn ApplicationID", + "245: !", + "246: assert", + "247: int 1", + "248: retsub" ], [ "5: return" @@ -4892,7 +5344,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 30 -> 2", + "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4905,17 +5357,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" ], [ - "228: __puya_arc4_router___after_if_else@19:", - "229: int 0", - "230: retsub" + "250: __puya_arc4_router___after_if_else@20:", + "251: int 0", + "252: retsub" ], [ "5: return" @@ -4936,7 +5388,7 @@ }, { "type": "ExecutionPaths", - "count": 14, + "count": 15, "description": "\nCheck: \"rekey-to\", Impact: High, Confidence: High\nDescription: Rekeyable Logic Signatures\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#rekeyable-logicsig\n", "check": "rekey-to", "impact": "High", @@ -4957,7 +5409,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -4970,13 +5422,14 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "26: int 0", - "27: retsub" + "27: int 0", + "28: retsub" ], [ "5: return" @@ -4984,7 +5437,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 31 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4997,7 +5450,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5010,43 +5463,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "29: __puya_arc4_router___payment_route@2:", - "30: txn OnCompletion", - "31: !", - "32: assert", - "33: txn ApplicationID", - "34: assert", - "35: callsub payment" - ], - [ - "234: payment:", - "235: proto 0 1", - "236: itxn_begin", - "237: txn Sender", - "238: itxn_field Receiver", - "239: int 5000", - "240: itxn_field Amount", - "241: int pay", - "242: itxn_field TypeEnum", - "243: int 0", - "244: itxn_field Fee", - "245: itxn_submit", - "246: itxn Amount", - "247: retsub" - ], - [ - "36: itob", - "37: byte 0x151f7c75", - "38: swap", - "39: concat", - "40: log", - "41: int 1", - "42: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "30: __puya_arc4_router___payment_route@2:", + "31: txn OnCompletion", + "32: !", + "33: assert", + "34: txn ApplicationID", + "35: assert", + "36: callsub payment" + ], + [ + "256: payment:", + "257: proto 0 1", + "258: itxn_begin", + "259: txn Sender", + "260: itxn_field Receiver", + "261: int 5000", + "262: itxn_field Amount", + "263: int pay", + "264: itxn_field TypeEnum", + "265: int 0", + "266: itxn_field Fee", + "267: itxn_submit", + "268: itxn Amount", + "269: retsub" + ], + [ + "37: itob", + "38: byte 0x151f7c75", + "39: swap", + "40: concat", + "41: log", + "42: int 1", + "43: retsub" ], [ "5: return" @@ -5054,7 +5508,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 32 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5067,7 +5521,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5080,55 +5534,56 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "44: __puya_arc4_router___asset_create_route@3:", - "45: txn OnCompletion", - "46: !", - "47: assert", - "48: txn ApplicationID", - "49: assert", - "50: callsub asset_create" - ], - [ - "251: asset_create:", - "252: proto 0 1", - "253: itxn_begin", - "254: global CurrentApplicationAddress", - "255: dupn 3", - "256: itxn_field ConfigAssetClawback", - "257: itxn_field ConfigAssetFreeze", - "258: itxn_field ConfigAssetReserve", - "259: itxn_field ConfigAssetManager", - "260: byte \"https://link_to_ipfs/Mona_Lisa\"", - "261: itxn_field ConfigAssetURL", - "262: byte \"Mona Lisa\"", - "263: itxn_field ConfigAssetName", - "264: byte \"ML\"", - "265: itxn_field ConfigAssetUnitName", - "266: int 2", - "267: itxn_field ConfigAssetDecimals", - "268: int 100", - "269: itxn_field ConfigAssetTotal", - "270: int acfg", - "271: itxn_field TypeEnum", - "272: int 0", - "273: itxn_field Fee", - "274: itxn_submit", - "275: itxn CreatedAssetID", - "276: retsub" - ], - [ - "51: itob", - "52: byte 0x151f7c75", - "53: swap", - "54: concat", - "55: log", - "56: int 1", - "57: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "45: __puya_arc4_router___asset_create_route@3:", + "46: txn OnCompletion", + "47: !", + "48: assert", + "49: txn ApplicationID", + "50: assert", + "51: callsub asset_create" + ], + [ + "273: asset_create:", + "274: proto 0 1", + "275: itxn_begin", + "276: global CurrentApplicationAddress", + "277: dupn 3", + "278: itxn_field ConfigAssetClawback", + "279: itxn_field ConfigAssetFreeze", + "280: itxn_field ConfigAssetReserve", + "281: itxn_field ConfigAssetManager", + "282: byte \"https://link_to_ipfs/Mona_Lisa\"", + "283: itxn_field ConfigAssetURL", + "284: byte \"Mona Lisa\"", + "285: itxn_field ConfigAssetName", + "286: byte \"ML\"", + "287: itxn_field ConfigAssetUnitName", + "288: int 2", + "289: itxn_field ConfigAssetDecimals", + "290: int 100", + "291: itxn_field ConfigAssetTotal", + "292: int acfg", + "293: itxn_field TypeEnum", + "294: int 0", + "295: itxn_field Fee", + "296: itxn_submit", + "297: itxn CreatedAssetID", + "298: retsub" + ], + [ + "52: itob", + "53: byte 0x151f7c75", + "54: swap", + "55: concat", + "56: log", + "57: int 1", + "58: retsub" ], [ "5: return" @@ -5136,7 +5591,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 33 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5149,7 +5604,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5162,42 +5617,43 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "59: __puya_arc4_router___asset_opt_in_route@4:", - "60: txn OnCompletion", - "61: !", - "62: assert", - "63: txn ApplicationID", - "64: assert", - "65: txna ApplicationArgs 1", - "66: btoi", - "67: txnas Assets", - "68: callsub asset_opt_in" - ], - [ - "280: asset_opt_in:", - "281: proto 1 0", - "282: itxn_begin", - "283: global CurrentApplicationAddress", - "284: int 0", - "285: itxn_field AssetAmount", - "286: frame_dig -1", - "287: itxn_field XferAsset", - "288: itxn_field AssetReceiver", - "289: int axfer", - "290: itxn_field TypeEnum", - "291: int 0", - "292: itxn_field Fee", - "293: itxn_submit", - "294: retsub" - ], - [ - "69: int 1", - "70: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "60: __puya_arc4_router___asset_opt_in_route@4:", + "61: txn OnCompletion", + "62: !", + "63: assert", + "64: txn ApplicationID", + "65: assert", + "66: txna ApplicationArgs 1", + "67: btoi", + "68: txnas Assets", + "69: callsub asset_opt_in" + ], + [ + "302: asset_opt_in:", + "303: proto 1 0", + "304: itxn_begin", + "305: global CurrentApplicationAddress", + "306: int 0", + "307: itxn_field AssetAmount", + "308: frame_dig -1", + "309: itxn_field XferAsset", + "310: itxn_field AssetReceiver", + "311: int axfer", + "312: itxn_field TypeEnum", + "313: int 0", + "314: itxn_field Fee", + "315: itxn_submit", + "316: retsub" + ], + [ + "70: int 1", + "71: retsub" ], [ "5: return" @@ -5205,7 +5661,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 34 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5218,7 +5674,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5231,47 +5687,48 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "72: __puya_arc4_router___asset_transfer_route@5:", - "73: txn OnCompletion", - "74: !", - "75: assert", - "76: txn ApplicationID", - "77: assert", - "78: txna ApplicationArgs 1", - "79: btoi", - "80: txnas Assets", - "81: txna ApplicationArgs 2", - "82: btoi", - "83: txnas Accounts", - "84: txna ApplicationArgs 3", - "85: btoi", - "86: callsub asset_transfer" - ], - [ - "298: asset_transfer:", - "299: proto 3 0", - "300: itxn_begin", - "301: frame_dig -1", - "302: itxn_field AssetAmount", - "303: frame_dig -3", - "304: itxn_field XferAsset", - "305: frame_dig -2", - "306: itxn_field AssetReceiver", - "307: int axfer", - "308: itxn_field TypeEnum", - "309: int 0", - "310: itxn_field Fee", - "311: itxn_submit", - "312: retsub" - ], - [ - "87: int 1", - "88: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "73: __puya_arc4_router___asset_transfer_route@5:", + "74: txn OnCompletion", + "75: !", + "76: assert", + "77: txn ApplicationID", + "78: assert", + "79: txna ApplicationArgs 1", + "80: btoi", + "81: txnas Assets", + "82: txna ApplicationArgs 2", + "83: btoi", + "84: txnas Accounts", + "85: txna ApplicationArgs 3", + "86: btoi", + "87: callsub asset_transfer" + ], + [ + "320: asset_transfer:", + "321: proto 3 0", + "322: itxn_begin", + "323: frame_dig -1", + "324: itxn_field AssetAmount", + "325: frame_dig -3", + "326: itxn_field XferAsset", + "327: frame_dig -2", + "328: itxn_field AssetReceiver", + "329: int axfer", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: retsub" + ], + [ + "88: int 1", + "89: retsub" ], [ "5: return" @@ -5279,7 +5736,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 35 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5292,7 +5749,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5305,45 +5762,46 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "90: __puya_arc4_router___asset_freeze_route@6:", - "91: txn OnCompletion", - "92: !", - "93: assert", - "94: txn ApplicationID", - "95: assert", - "96: txna ApplicationArgs 1", - "97: btoi", - "98: txnas Accounts", - "99: txna ApplicationArgs 2", - "100: btoi", - "101: txnas Assets", - "102: callsub asset_freeze" - ], - [ - "316: asset_freeze:", - "317: proto 2 0", - "318: itxn_begin", - "319: int 1", - "320: itxn_field FreezeAssetFrozen", - "321: frame_dig -1", - "322: itxn_field FreezeAsset", - "323: frame_dig -2", - "324: itxn_field FreezeAssetAccount", - "325: int afrz", - "326: itxn_field TypeEnum", - "327: int 0", - "328: itxn_field Fee", - "329: itxn_submit", - "330: retsub" - ], - [ - "103: int 1", - "104: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "91: __puya_arc4_router___asset_freeze_route@6:", + "92: txn OnCompletion", + "93: !", + "94: assert", + "95: txn ApplicationID", + "96: assert", + "97: txna ApplicationArgs 1", + "98: btoi", + "99: txnas Accounts", + "100: txna ApplicationArgs 2", + "101: btoi", + "102: txnas Assets", + "103: callsub asset_freeze" + ], + [ + "338: asset_freeze:", + "339: proto 2 0", + "340: itxn_begin", + "341: int 1", + "342: itxn_field FreezeAssetFrozen", + "343: frame_dig -1", + "344: itxn_field FreezeAsset", + "345: frame_dig -2", + "346: itxn_field FreezeAssetAccount", + "347: int afrz", + "348: itxn_field TypeEnum", + "349: int 0", + "350: itxn_field Fee", + "351: itxn_submit", + "352: retsub" + ], + [ + "104: int 1", + "105: retsub" ], [ "5: return" @@ -5351,7 +5809,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 36 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5364,7 +5822,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5377,49 +5835,50 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "106: __puya_arc4_router___asset_revoke_route@7:", - "107: txn OnCompletion", - "108: !", - "109: assert", - "110: txn ApplicationID", - "111: assert", - "112: txna ApplicationArgs 1", - "113: btoi", - "114: txnas Assets", - "115: txna ApplicationArgs 2", - "116: btoi", - "117: txnas Accounts", - "118: txna ApplicationArgs 3", - "119: btoi", - "120: callsub asset_revoke" - ], - [ - "334: asset_revoke:", - "335: proto 3 0", - "336: itxn_begin", - "337: global CurrentApplicationAddress", - "338: frame_dig -1", - "339: itxn_field AssetAmount", - "340: frame_dig -2", - "341: itxn_field AssetSender", - "342: frame_dig -3", - "343: itxn_field XferAsset", - "344: itxn_field AssetReceiver", - "345: int axfer", - "346: itxn_field TypeEnum", - "347: int 0", - "348: itxn_field Fee", - "349: itxn_submit", - "350: retsub" - ], - [ - "121: int 1", - "122: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "107: __puya_arc4_router___asset_revoke_route@7:", + "108: txn OnCompletion", + "109: !", + "110: assert", + "111: txn ApplicationID", + "112: assert", + "113: txna ApplicationArgs 1", + "114: btoi", + "115: txnas Assets", + "116: txna ApplicationArgs 2", + "117: btoi", + "118: txnas Accounts", + "119: txna ApplicationArgs 3", + "120: btoi", + "121: callsub asset_revoke" + ], + [ + "356: asset_revoke:", + "357: proto 3 0", + "358: itxn_begin", + "359: global CurrentApplicationAddress", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -2", + "363: itxn_field AssetSender", + "364: frame_dig -3", + "365: itxn_field XferAsset", + "366: itxn_field AssetReceiver", + "367: int axfer", + "368: itxn_field TypeEnum", + "369: int 0", + "370: itxn_field Fee", + "371: itxn_submit", + "372: retsub" + ], + [ + "122: int 1", + "123: retsub" ], [ "5: return" @@ -5427,7 +5886,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 37 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5440,7 +5899,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5453,46 +5912,47 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "124: __puya_arc4_router___asset_config_route@8:", - "125: txn OnCompletion", - "126: !", - "127: assert", - "128: txn ApplicationID", - "129: assert", - "130: txna ApplicationArgs 1", - "131: btoi", - "132: txnas Assets", - "133: callsub asset_config" - ], - [ - "354: asset_config:", - "355: proto 1 0", - "356: itxn_begin", - "357: global CurrentApplicationAddress", - "358: dup", - "359: txn Sender", - "360: dup", - "361: itxn_field ConfigAssetClawback", - "362: itxn_field ConfigAssetFreeze", - "363: itxn_field ConfigAssetReserve", - "364: itxn_field ConfigAssetManager", - "365: frame_dig -1", - "366: itxn_field ConfigAsset", - "367: int acfg", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "134: int 1", - "135: retsub" + "125: __puya_arc4_router___asset_config_route@8:", + "126: txn OnCompletion", + "127: !", + "128: assert", + "129: txn ApplicationID", + "130: assert", + "131: txna ApplicationArgs 1", + "132: btoi", + "133: txnas Assets", + "134: callsub asset_config" + ], + [ + "376: asset_config:", + "377: proto 1 0", + "378: itxn_begin", + "379: global CurrentApplicationAddress", + "380: dup", + "381: txn Sender", + "382: dup", + "383: itxn_field ConfigAssetClawback", + "384: itxn_field ConfigAssetFreeze", + "385: itxn_field ConfigAssetReserve", + "386: itxn_field ConfigAssetManager", + "387: frame_dig -1", + "388: itxn_field ConfigAsset", + "389: int acfg", + "390: itxn_field TypeEnum", + "391: int 0", + "392: itxn_field Fee", + "393: itxn_submit", + "394: retsub" + ], + [ + "135: int 1", + "136: retsub" ], [ "5: return" @@ -5500,7 +5960,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 38 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5513,7 +5973,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5526,38 +5986,39 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" ], [ - "137: __puya_arc4_router___asset_delete_route@9:", - "138: txn OnCompletion", - "139: !", - "140: assert", - "141: txn ApplicationID", - "142: assert", - "143: txna ApplicationArgs 1", - "144: btoi", - "145: txnas Assets", - "146: callsub asset_delete" + "138: __puya_arc4_router___asset_delete_route@9:", + "139: txn OnCompletion", + "140: !", + "141: assert", + "142: txn ApplicationID", + "143: assert", + "144: txna ApplicationArgs 1", + "145: btoi", + "146: txnas Assets", + "147: callsub asset_delete" ], [ - "376: asset_delete:", - "377: proto 1 0", - "378: itxn_begin", - "379: frame_dig -1", - "380: itxn_field ConfigAsset", - "381: int acfg", - "382: itxn_field TypeEnum", - "383: int 0", - "384: itxn_field Fee", - "385: itxn_submit", - "386: retsub" + "398: asset_delete:", + "399: proto 1 0", + "400: itxn_begin", + "401: frame_dig -1", + "402: itxn_field ConfigAsset", + "403: int acfg", + "404: itxn_field TypeEnum", + "405: int 0", + "406: itxn_field Fee", + "407: itxn_submit", + "408: retsub" ], [ - "147: int 1", - "148: retsub" + "148: int 1", + "149: retsub" ], [ "5: return" @@ -5565,7 +6026,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 39 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5578,7 +6039,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5591,70 +6052,71 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "150: __puya_arc4_router___multi_inner_txns_route@10:", - "151: txn OnCompletion", - "152: !", - "153: assert", - "154: txn ApplicationID", - "155: assert", - "156: txna ApplicationArgs 1", - "157: btoi", - "158: txnas Applications", - "159: callsub multi_inner_txns" - ], - [ - "390: multi_inner_txns:", - "391: proto 1 2", - "392: txn Sender", - "393: itxn_begin", - "394: itxn_field Receiver", - "395: int 5000", - "396: itxn_field Amount", - "397: int pay", - "398: itxn_field TypeEnum", - "399: int 0", - "400: itxn_field Fee", - "401: itxn_next", - "402: method hello(string)string", - "403: itxn_field ApplicationArgs", - "404: byte 0x0005576f726c64", - "405: itxn_field ApplicationArgs", - "406: frame_dig -1", - "407: itxn_field ApplicationID", - "408: int appl", - "409: itxn_field TypeEnum", - "410: int 0", - "411: itxn_field Fee", - "412: itxn_submit", - "413: gitxn 0 Amount", - "414: itxn LastLog", - "415: dup", - "416: extract 4 0", - "417: swap", - "418: extract 0 4", - "419: byte 0x151f7c75", - "420: ==", - "421: assert", - "422: retsub" - ], - [ - "160: swap", - "161: itob", - "162: byte 0x000a", - "163: concat", - "164: swap", - "165: concat", - "166: byte 0x151f7c75", - "167: swap", - "168: concat", - "169: log", - "170: int 1", - "171: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "151: __puya_arc4_router___multi_inner_txns_route@10:", + "152: txn OnCompletion", + "153: !", + "154: assert", + "155: txn ApplicationID", + "156: assert", + "157: txna ApplicationArgs 1", + "158: btoi", + "159: txnas Applications", + "160: callsub multi_inner_txns" + ], + [ + "412: multi_inner_txns:", + "413: proto 1 2", + "414: txn Sender", + "415: itxn_begin", + "416: itxn_field Receiver", + "417: int 5000", + "418: itxn_field Amount", + "419: int pay", + "420: itxn_field TypeEnum", + "421: int 0", + "422: itxn_field Fee", + "423: itxn_next", + "424: method hello(string)string", + "425: itxn_field ApplicationArgs", + "426: byte 0x0005576f726c64", + "427: itxn_field ApplicationArgs", + "428: frame_dig -1", + "429: itxn_field ApplicationID", + "430: int appl", + "431: itxn_field TypeEnum", + "432: int 0", + "433: itxn_field Fee", + "434: itxn_submit", + "435: gitxn 0 Amount", + "436: itxn LastLog", + "437: dup", + "438: extract 4 0", + "439: swap", + "440: extract 0 4", + "441: byte 0x151f7c75", + "442: ==", + "443: assert", + "444: retsub" + ], + [ + "161: swap", + "162: itob", + "163: byte 0x000a", + "164: concat", + "165: swap", + "166: concat", + "167: byte 0x151f7c75", + "168: swap", + "169: concat", + "170: log", + "171: int 1", + "172: retsub" ], [ "5: return" @@ -5662,7 +6124,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 40 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5675,7 +6137,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5688,43 +6150,44 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "173: __puya_arc4_router___deploy_app_route@11:", - "174: txn OnCompletion", - "175: !", - "176: assert", - "177: txn ApplicationID", - "178: assert", - "179: callsub deploy_app" - ], - [ - "426: deploy_app:", - "427: proto 0 1", - "428: itxn_begin", - "429: byte 0x0a810143", - "430: itxn_field ClearStateProgramPages", - "431: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "432: itxn_field ApprovalProgramPages", - "433: int appl", - "434: itxn_field TypeEnum", - "435: int 0", - "436: itxn_field Fee", - "437: itxn_submit", - "438: itxn CreatedApplicationID", - "439: retsub" - ], - [ - "180: itob", - "181: byte 0x151f7c75", - "182: swap", - "183: concat", - "184: log", - "185: int 1", - "186: retsub" + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "174: __puya_arc4_router___deploy_app_route@11:", + "175: txn OnCompletion", + "176: !", + "177: assert", + "178: txn ApplicationID", + "179: assert", + "180: callsub deploy_app" + ], + [ + "448: deploy_app:", + "449: proto 0 1", + "450: itxn_begin", + "451: byte 0x0a810143", + "452: itxn_field ClearStateProgramPages", + "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "454: itxn_field ApprovalProgramPages", + "455: int appl", + "456: itxn_field TypeEnum", + "457: int 0", + "458: itxn_field Fee", + "459: itxn_submit", + "460: itxn CreatedApplicationID", + "461: retsub" + ], + [ + "181: itob", + "182: byte 0x151f7c75", + "183: swap", + "184: concat", + "185: log", + "186: int 1", + "187: retsub" ], [ "5: return" @@ -5732,7 +6195,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 41 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5745,7 +6208,7 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ "13: method payment()uint64", @@ -5758,88 +6221,167 @@ "20: method asset_delete(asset)void", "21: method multi_inner_txns(application)(uint64,string)", "22: method deploy_app()uint64", - "23: method noop_app_call(application)(string,string)", - "24: txna ApplicationArgs 0", - "25: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12" - ], - [ - "188: __puya_arc4_router___noop_app_call_route@12:", - "189: txn OnCompletion", - "190: !", - "191: assert", - "192: txn ApplicationID", - "193: assert", - "194: txna ApplicationArgs 1", - "195: btoi", - "196: txnas Applications", - "197: callsub noop_app_call" - ], - [ - "443: noop_app_call:", - "444: proto 1 2", - "445: itxn_begin", - "446: method hello(string)string", - "447: itxn_field ApplicationArgs", - "448: byte 0x0005576f726c64", - "449: itxn_field ApplicationArgs", - "450: frame_dig -1", - "451: itxn_field ApplicationID", - "452: int appl", - "453: itxn_field TypeEnum", - "454: int 0", - "455: itxn_field Fee", - "456: itxn_submit", - "457: itxn LastLog", - "458: dup", - "459: extract 4 0", - "460: swap", - "461: extract 0 4", - "462: byte 0x151f7c75", - "463: ==", - "464: assert", - "465: itxn_begin", - "466: frame_dig -1", - "467: itxn_field ApplicationID", - "468: method hello(string)string", - "469: itxn_field ApplicationArgs", - "470: byte 0x0005616761696e", - "471: itxn_field ApplicationArgs", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "189: __puya_arc4_router___arc4_deploy_app_route@12:", + "190: txn OnCompletion", + "191: !", + "192: assert", + "193: txn ApplicationID", + "194: assert", + "195: callsub arc4_deploy_app" + ], + [ + "465: arc4_deploy_app:", + "466: proto 0 1", + "467: itxn_begin", + "468: byte 0x0a810143", + "469: itxn_field ClearStateProgramPages", + "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "471: itxn_field ApprovalProgramPages", "472: int appl", "473: itxn_field TypeEnum", "474: int 0", "475: itxn_field Fee", "476: itxn_submit", - "477: itxn LastLog", - "478: dup", - "479: extract 4 0", - "480: swap", - "481: extract 0 4", - "482: byte 0x151f7c75", - "483: ==", - "484: assert", - "485: retsub" + "477: itxn CreatedApplicationID", + "478: retsub" ], [ + "196: itob", + "197: byte 0x151f7c75", "198: swap", - "199: dup", - "200: len", - "201: int 4", - "202: +", - "203: itob", - "204: extract 6 2", - "205: byte 0x0004", - "206: swap", - "207: concat", - "208: swap", - "209: concat", - "210: swap", - "211: concat", - "212: byte 0x151f7c75", - "213: swap", - "214: concat", - "215: log", - "216: int 1", - "217: retsub" + "199: concat", + "200: log", + "201: int 1", + "202: retsub" + ], + [ + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@16" + ], + [ + "13: method payment()uint64", + "14: method asset_create()uint64", + "15: method asset_opt_in(asset)void", + "16: method asset_transfer(asset,account,uint64)void", + "17: method asset_freeze(account,asset)void", + "18: method asset_revoke(asset,account,uint64)void", + "19: method asset_config(asset)void", + "20: method asset_delete(asset)void", + "21: method multi_inner_txns(application)(uint64,string)", + "22: method deploy_app()uint64", + "23: method arc4_deploy_app()uint64", + "24: method noop_app_call(application)(string,string)", + "25: txna ApplicationArgs 0", + "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" + ], + [ + "204: __puya_arc4_router___noop_app_call_route@13:", + "205: txn OnCompletion", + "206: !", + "207: assert", + "208: txn ApplicationID", + "209: assert", + "210: txna ApplicationArgs 1", + "211: btoi", + "212: txnas Applications", + "213: callsub noop_app_call" + ], + [ + "482: noop_app_call:", + "483: proto 1 2", + "484: itxn_begin", + "485: method hello(string)string", + "486: itxn_field ApplicationArgs", + "487: byte 0x0005576f726c64", + "488: itxn_field ApplicationArgs", + "489: frame_dig -1", + "490: itxn_field ApplicationID", + "491: int appl", + "492: itxn_field TypeEnum", + "493: int 0", + "494: itxn_field Fee", + "495: itxn_submit", + "496: itxn LastLog", + "497: dup", + "498: extract 4 0", + "499: swap", + "500: extract 0 4", + "501: byte 0x151f7c75", + "502: ==", + "503: assert", + "504: itxn_begin", + "505: frame_dig -1", + "506: itxn_field ApplicationID", + "507: method hello(string)string", + "508: itxn_field ApplicationArgs", + "509: byte 0x0005616761696e", + "510: itxn_field ApplicationArgs", + "511: int appl", + "512: itxn_field TypeEnum", + "513: int 0", + "514: itxn_field Fee", + "515: itxn_submit", + "516: itxn LastLog", + "517: dup", + "518: extract 4 0", + "519: swap", + "520: extract 0 4", + "521: byte 0x151f7c75", + "522: ==", + "523: assert", + "524: extract 2 0", + "525: retsub" + ], + [ + "214: dup", + "215: len", + "216: itob", + "217: extract 6 2", + "218: swap", + "219: concat", + "220: swap", + "221: dup", + "222: len", + "223: int 4", + "224: +", + "225: itob", + "226: extract 6 2", + "227: byte 0x0004", + "228: swap", + "229: concat", + "230: swap", + "231: concat", + "232: swap", + "233: concat", + "234: byte 0x151f7c75", + "235: swap", + "236: concat", + "237: log", + "238: int 1", + "239: retsub" ], [ "5: return" @@ -5847,7 +6389,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 29 -> 2", + "short": "0 -> 1 -> 3 -> 30 -> 31 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5860,19 +6402,19 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" ], [ - "222: txn ApplicationID", - "223: !", - "224: assert", - "225: int 1", - "226: retsub" + "244: txn ApplicationID", + "245: !", + "246: assert", + "247: int 1", + "248: retsub" ], [ "5: return" @@ -5880,7 +6422,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 28 -> 30 -> 2", + "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5893,17 +6435,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@15" + "12: bz __puya_arc4_router___bare_routing@16" ], [ - "219: __puya_arc4_router___bare_routing@15:", - "220: txn OnCompletion", - "221: bnz __puya_arc4_router___after_if_else@19" + "241: __puya_arc4_router___bare_routing@16:", + "242: txn OnCompletion", + "243: bnz __puya_arc4_router___after_if_else@20" ], [ - "228: __puya_arc4_router___after_if_else@19:", - "229: int 0", - "230: retsub" + "250: __puya_arc4_router___after_if_else@20:", + "251: int 0", + "252: retsub" ], [ "5: return" diff --git a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal index 37c4276..b90a916 100644 --- a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal +++ b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal @@ -9,7 +9,7 @@ smart_contracts.inner_transactions.contract.InnerTransactions.approval_program: __puya_arc4_router__: proto 0 1 txn NumAppArgs - bz __puya_arc4_router___bare_routing@15 + bz __puya_arc4_router___bare_routing@16 method "payment()uint64" method "asset_create()uint64" method "asset_opt_in(asset)void" @@ -20,9 +20,10 @@ __puya_arc4_router__: method "asset_delete(asset)void" method "multi_inner_txns(application)(uint64,string)" method "deploy_app()uint64" + method "arc4_deploy_app()uint64" method "noop_app_call(application)(string,string)" txna ApplicationArgs 0 - match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___noop_app_call_route@12 + match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13 int 0 retsub @@ -185,7 +186,22 @@ __puya_arc4_router___deploy_app_route@11: int 1 retsub -__puya_arc4_router___noop_app_call_route@12: +__puya_arc4_router___arc4_deploy_app_route@12: + txn OnCompletion + ! + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + callsub arc4_deploy_app + itob + byte 0x151f7c75 + swap + concat + log + int 1 + retsub + +__puya_arc4_router___noop_app_call_route@13: txn OnCompletion ! assert // OnCompletion is NoOp @@ -195,6 +211,12 @@ __puya_arc4_router___noop_app_call_route@12: btoi txnas Applications callsub noop_app_call + dup + len + itob + extract 6 2 + swap + concat swap dup len @@ -216,16 +238,16 @@ __puya_arc4_router___noop_app_call_route@12: int 1 retsub -__puya_arc4_router___bare_routing@15: +__puya_arc4_router___bare_routing@16: txn OnCompletion - bnz __puya_arc4_router___after_if_else@19 + bnz __puya_arc4_router___after_if_else@20 txn ApplicationID ! assert // is creating int 1 retsub -__puya_arc4_router___after_if_else@19: +__puya_arc4_router___after_if_else@20: int 0 retsub @@ -439,6 +461,23 @@ deploy_app: retsub +// smart_contracts.inner_transactions.contract.InnerTransactions.arc4_deploy_app() -> uint64: +arc4_deploy_app: + proto 0 1 + itxn_begin + byte base64 CoEBQw== + itxn_field ClearStateProgramPages + byte base64 CiACAAGIAAFDigABMRtBADKABAK+zhE2GgCOAQACIokxGRREMRhENhoBVwIAiAAgSRUWVwYCTFCABBUffHVMULAjiTEZQAAGMRgURCOJIomKAQGAB0hlbGxvLCCL/1CJ + itxn_field ApprovalProgramPages + int appl + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn CreatedApplicationID + retsub + + // smart_contracts.inner_transactions.contract.InnerTransactions.noop_app_call(app_id: uint64) -> bytes, bytes: noop_app_call: proto 1 2 @@ -482,4 +521,5 @@ noop_app_call: byte 0x151f7c75 == assert // ARC4 prefix is valid + extract 2 0 retsub diff --git a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json index d69c116..7f3dee0 100644 --- a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json +++ b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json @@ -50,6 +50,11 @@ "no_op": "CALL" } }, + "arc4_deploy_app()uint64": { + "call_config": { + "no_op": "CALL" + } + }, "noop_app_call(application)(string,string)": { "call_config": { "no_op": "CALL" @@ -57,7 +62,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNQogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiCiAgICBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAibm9vcF9hcHBfY2FsbChhcHBsaWNhdGlvbikoc3RyaW5nLHN0cmluZykiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY3JlYXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfb3B0X2luX3JvdXRlQDQgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANSBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9mcmVlemVfcm91dGVANiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9yZXZva2Vfcm91dGVANyBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9jb25maWdfcm91dGVAOCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9kZWxldGVfcm91dGVAOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX19tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEwIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTEgX19wdXlhX2FyYzRfcm91dGVyX19fbm9vcF9hcHBfY2FsbF9yb3V0ZUAxMgogICAgaW50IDAKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9jcmVhdGVfcm91dGVAMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXNzZXRfY3JlYXRlCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9vcHRfaW5fcm91dGVANDoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9vcHRfaW4KICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDU6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICBjYWxsc3ViIGFzc2V0X3RyYW5zZmVyCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9mcmVlemVfcm91dGVANjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIGNhbGxzdWIgYXNzZXRfZnJlZXplCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9yZXZva2Vfcm91dGVANzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfcmV2b2tlCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9jb25maWdfcm91dGVAODoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9jb25maWcKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2RlbGV0ZV9yb3V0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2RlbGV0ZQogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMDoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgY2FsbHN1YiBtdWx0aV9pbm5lcl90eG5zCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTE6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX25vb3BfYXBwX2NhbGxfcm91dGVAMTI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIGNhbGxzdWIgbm9vcF9hcHBfY2FsbAogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGludCA0CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZSAweDAwMDQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDE5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGlzIGNyZWF0aW5nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDE5OgogICAgaW50IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMucGF5bWVudCgpIC0+IHVpbnQ2NDoKcGF5bWVudDoKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50IDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnQgcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jcmVhdGUoKSAtPiB1aW50NjQ6CmFzc2V0X2NyZWF0ZToKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGJ5dGUgImh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIGJ5dGUgIk1vbmEgTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJNTCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgaW50IDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9vcHRfaW4oYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfb3B0X2luOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3RyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgcHJvdG8gMyAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZnJlZXplKGFjY3RfdG9fYmVfZnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZnJlZXplOgogICAgcHJvdG8gMiAwCiAgICBpdHhuX2JlZ2luCiAgICBpbnQgMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEZyb3plbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRBY2NvdW50CiAgICBpbnQgYWZyegogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9yZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudF90b19iZV9yZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3Jldm9rZToKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2RlbGV0ZShhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9kZWxldGU6CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubXVsdGlfaW5uZXJfdHhucyhhcHBfaWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlfaW5uZXJfdHhuczoKICAgIHByb3RvIDEgMgogICAgdHhuIFNlbmRlcgogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50IDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnQgcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fbmV4dAogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgZ2l0eG4gMCBBbW91bnQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5kZXBsb3lfYXBwKCkgLT4gdWludDY0OgpkZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9vcF9hcHBfY2FsbChhcHBfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXMsIGJ5dGVzOgpub29wX2FwcF9jYWxsOgogICAgcHJvdG8gMSAyCiAgICBpdHhuX2JlZ2luCiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU1NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU2MTY3NjE2OTZlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNgogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiCiAgICBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAiYXJjNF9kZXBsb3lfYXBwKCl1aW50NjQiCiAgICBtZXRob2QgIm5vb3BfYXBwX2NhbGwoYXBwbGljYXRpb24pKHN0cmluZyxzdHJpbmcpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NyZWF0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDUgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZXBsb3lfYXBwX3JvdXRlQDExIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDEzCiAgICBpbnQgMAogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHBheW1lbnQKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NyZWF0ZV9yb3V0ZUAzOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA2OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIGNhbGxzdWIgYXNzZXRfZGVsZXRlCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG11bHRpX2lubmVyX3R4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGUgMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwbG95X2FwcAogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXJjNF9kZXBsb3lfYXBwX3JvdXRlQDEyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X2RlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX25vb3BfYXBwX2NhbGxfcm91dGVAMTM6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIGNhbGxzdWIgbm9vcF9hcHBfY2FsbAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpbnQgNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGUgMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAMTY6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAyMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBpcyBjcmVhdGluZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAyMDoKICAgIGludCAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLnBheW1lbnQoKSAtPiB1aW50NjQ6CnBheW1lbnQ6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGludCA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50IHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY3JlYXRlKCkgLT4gdWludDY0Ogphc3NldF9jcmVhdGU6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkdXBuIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBieXRlICJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICBieXRlICJNb25hIExpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgYnl0ZSAiTUwiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGludCAyCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIGludCAxMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfb3B0X2luKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X29wdF9pbjoKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF90cmFuc2Zlcihhc3NldDogdWludDY0LCByZWNlaXZlcjogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF90cmFuc2ZlcjoKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2ZyZWV6ZShhY2N0X3RvX2JlX2Zyb3plbjogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2ZyZWV6ZToKICAgIHByb3RvIDIgMAogICAgaXR4bl9iZWdpbgogICAgaW50IDEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRGcm96ZW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0QWNjb3VudAogICAgaW50IGFmcnoKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfcmV2b2tlKGFzc2V0OiB1aW50NjQsIGFjY291bnRfdG9fYmVfcmV2b2tlZDogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF9yZXZva2U6CiAgICBwcm90byAzIDAKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY29uZmlnKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2NvbmZpZzoKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgdHhuIFNlbmRlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9kZWxldGUoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZGVsZXRlOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm11bHRpX2lubmVyX3R4bnMoYXBwX2lkOiB1aW50NjQpIC0+IHVpbnQ2NCwgYnl0ZXM6Cm11bHRpX2lubmVyX3R4bnM6CiAgICBwcm90byAxIDIKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGludCA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50IHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX25leHQKICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGdpdHhuIDAgQW1vdW50CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKZGVwbG95X2FwcDoKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgYnl0ZSBiYXNlNjQgQ29FQlF3PT0KICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZSBiYXNlNjQgQ2lBQ0FBR0lBQUZEaWdBQk1SdEJBREtBQkFLK3poRTJHZ0NPQVFBQ0lva3hHUlJFTVJoRU5ob0JWd0lBaUFBZ1NSVVdWd1lDVEZDQUJCVWZmSFZNVUxBamlURVpRQUFHTVJnVVJDT0pJb21LQVFHQUIwaGxiR3h2TENDTC8xQ0oKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFyYzRfZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKYXJjNF9kZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9vcF9hcHBfY2FsbChhcHBfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXMsIGJ5dGVzOgpub29wX2FwcF9jYWxsOgogICAgcHJvdG8gMSAyCiAgICBpdHhuX2JlZ2luCiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU1NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU2MTY3NjE2OTZlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCAyIDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { @@ -216,7 +221,17 @@ "readonly": false, "returns": { "type": "uint64" - } + }, + "desc": "This method uses the itxn.ApplicationCall to deploy the HelloWorld contract." + }, + { + "name": "arc4_deploy_app", + "args": [], + "readonly": false, + "returns": { + "type": "uint64" + }, + "desc": "This method uses the arc4.arc4_create to deploy the HelloWorld contract." }, { "name": "noop_app_call", diff --git a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py index 07229c8..89e3b8e 100644 --- a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py +++ b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py @@ -73,6 +73,11 @@ "no_op": "CALL" } }, + "arc4_deploy_app()uint64": { + "call_config": { + "no_op": "CALL" + } + }, "noop_app_call(application)(string,string)": { "call_config": { "no_op": "CALL" @@ -80,7 +85,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNQogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiCiAgICBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAibm9vcF9hcHBfY2FsbChhcHBsaWNhdGlvbikoc3RyaW5nLHN0cmluZykiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY3JlYXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfb3B0X2luX3JvdXRlQDQgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANSBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9mcmVlemVfcm91dGVANiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9yZXZva2Vfcm91dGVANyBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9jb25maWdfcm91dGVAOCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9kZWxldGVfcm91dGVAOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX19tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEwIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTEgX19wdXlhX2FyYzRfcm91dGVyX19fbm9vcF9hcHBfY2FsbF9yb3V0ZUAxMgogICAgaW50IDAKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9jcmVhdGVfcm91dGVAMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXNzZXRfY3JlYXRlCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9vcHRfaW5fcm91dGVANDoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9vcHRfaW4KICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDU6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICBjYWxsc3ViIGFzc2V0X3RyYW5zZmVyCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9mcmVlemVfcm91dGVANjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIGNhbGxzdWIgYXNzZXRfZnJlZXplCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9yZXZva2Vfcm91dGVANzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfcmV2b2tlCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hc3NldF9jb25maWdfcm91dGVAODoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9jb25maWcKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2RlbGV0ZV9yb3V0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2RlbGV0ZQogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMDoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgY2FsbHN1YiBtdWx0aV9pbm5lcl90eG5zCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTE6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX25vb3BfYXBwX2NhbGxfcm91dGVAMTI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIGNhbGxzdWIgbm9vcF9hcHBfY2FsbAogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGludCA0CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZSAweDAwMDQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDE5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGlzIGNyZWF0aW5nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDE5OgogICAgaW50IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMucGF5bWVudCgpIC0+IHVpbnQ2NDoKcGF5bWVudDoKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50IDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnQgcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jcmVhdGUoKSAtPiB1aW50NjQ6CmFzc2V0X2NyZWF0ZToKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGJ5dGUgImh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIGJ5dGUgIk1vbmEgTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJNTCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgaW50IDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9vcHRfaW4oYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfb3B0X2luOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3RyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgcHJvdG8gMyAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZnJlZXplKGFjY3RfdG9fYmVfZnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZnJlZXplOgogICAgcHJvdG8gMiAwCiAgICBpdHhuX2JlZ2luCiAgICBpbnQgMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEZyb3plbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRBY2NvdW50CiAgICBpbnQgYWZyegogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9yZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudF90b19iZV9yZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3Jldm9rZToKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2RlbGV0ZShhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9kZWxldGU6CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubXVsdGlfaW5uZXJfdHhucyhhcHBfaWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlfaW5uZXJfdHhuczoKICAgIHByb3RvIDEgMgogICAgdHhuIFNlbmRlcgogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50IDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnQgcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fbmV4dAogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgZ2l0eG4gMCBBbW91bnQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5kZXBsb3lfYXBwKCkgLT4gdWludDY0OgpkZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9vcF9hcHBfY2FsbChhcHBfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXMsIGJ5dGVzOgpub29wX2FwcF9jYWxsOgogICAgcHJvdG8gMSAyCiAgICBpdHhuX2JlZ2luCiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU1NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU2MTY3NjE2OTZlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNgogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiCiAgICBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAiYXJjNF9kZXBsb3lfYXBwKCl1aW50NjQiCiAgICBtZXRob2QgIm5vb3BfYXBwX2NhbGwoYXBwbGljYXRpb24pKHN0cmluZyxzdHJpbmcpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NyZWF0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDUgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZXBsb3lfYXBwX3JvdXRlQDExIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDEzCiAgICBpbnQgMAogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHBheW1lbnQKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NyZWF0ZV9yb3V0ZUAzOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA2OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIGNhbGxzdWIgYXNzZXRfZGVsZXRlCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG11bHRpX2lubmVyX3R4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGUgMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwbG95X2FwcAogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXJjNF9kZXBsb3lfYXBwX3JvdXRlQDEyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X2RlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX25vb3BfYXBwX2NhbGxfcm91dGVAMTM6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIGNhbGxzdWIgbm9vcF9hcHBfY2FsbAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpbnQgNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGUgMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAMTY6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAyMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBpcyBjcmVhdGluZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAyMDoKICAgIGludCAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLnBheW1lbnQoKSAtPiB1aW50NjQ6CnBheW1lbnQ6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGludCA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50IHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY3JlYXRlKCkgLT4gdWludDY0Ogphc3NldF9jcmVhdGU6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkdXBuIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBieXRlICJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICBieXRlICJNb25hIExpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgYnl0ZSAiTUwiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGludCAyCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIGludCAxMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfb3B0X2luKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X29wdF9pbjoKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF90cmFuc2Zlcihhc3NldDogdWludDY0LCByZWNlaXZlcjogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF90cmFuc2ZlcjoKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2ZyZWV6ZShhY2N0X3RvX2JlX2Zyb3plbjogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2ZyZWV6ZToKICAgIHByb3RvIDIgMAogICAgaXR4bl9iZWdpbgogICAgaW50IDEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRGcm96ZW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0QWNjb3VudAogICAgaW50IGFmcnoKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfcmV2b2tlKGFzc2V0OiB1aW50NjQsIGFjY291bnRfdG9fYmVfcmV2b2tlZDogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF9yZXZva2U6CiAgICBwcm90byAzIDAKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY29uZmlnKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2NvbmZpZzoKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgdHhuIFNlbmRlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9kZWxldGUoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZGVsZXRlOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm11bHRpX2lubmVyX3R4bnMoYXBwX2lkOiB1aW50NjQpIC0+IHVpbnQ2NCwgYnl0ZXM6Cm11bHRpX2lubmVyX3R4bnM6CiAgICBwcm90byAxIDIKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGludCA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50IHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX25leHQKICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGdpdHhuIDAgQW1vdW50CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKZGVwbG95X2FwcDoKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgYnl0ZSBiYXNlNjQgQ29FQlF3PT0KICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZSBiYXNlNjQgQ2lBQ0FBR0lBQUZEaWdBQk1SdEJBREtBQkFLK3poRTJHZ0NPQVFBQ0lva3hHUlJFTVJoRU5ob0JWd0lBaUFBZ1NSVVdWd1lDVEZDQUJCVWZmSFZNVUxBamlURVpRQUFHTVJnVVJDT0pJb21LQVFHQUIwaGxiR3h2TENDTC8xQ0oKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFyYzRfZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKYXJjNF9kZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9vcF9hcHBfY2FsbChhcHBfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXMsIGJ5dGVzOgpub29wX2FwcF9jYWxsOgogICAgcHJvdG8gMSAyCiAgICBpdHhuX2JlZ2luCiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU1NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU2MTY3NjE2OTZlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCAyIDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { @@ -229,7 +234,16 @@ "args": [], "returns": { "type": "uint64" - } + }, + "desc": "This method uses the itxn.ApplicationCall to deploy the HelloWorld contract." + }, + { + "name": "arc4_deploy_app", + "args": [], + "returns": { + "type": "uint64" + }, + "desc": "This method uses the arc4.arc4_create to deploy the HelloWorld contract." }, { "name": "noop_app_call", @@ -407,11 +421,22 @@ def method() -> str: @dataclasses.dataclass(kw_only=True) class DeployAppArgs(_ArgsBase[int]): + """This method uses the itxn.ApplicationCall to deploy the HelloWorld contract.""" + @staticmethod def method() -> str: return "deploy_app()uint64" +@dataclasses.dataclass(kw_only=True) +class Arc4DeployAppArgs(_ArgsBase[int]): + """This method uses the arc4.arc4_create to deploy the HelloWorld contract.""" + + @staticmethod + def method() -> str: + return "arc4_deploy_app()uint64" + + @dataclasses.dataclass(kw_only=True) class NoopAppCallArgs(_ArgsBase[tuple[str, str]]): app_id: int @@ -671,7 +696,9 @@ def deploy_app( *, transaction_parameters: algokit_utils.TransactionParameters | None = None, ) -> "Composer": - """Adds a call to `deploy_app()uint64` ABI method + """This method uses the itxn.ApplicationCall to deploy the HelloWorld contract. + + Adds a call to `deploy_app()uint64` ABI method :param algokit_utils.TransactionParameters transaction_parameters: (optional) Additional transaction parameters :returns Composer: This Composer instance""" @@ -685,6 +712,27 @@ def deploy_app( ) return self + def arc4_deploy_app( + self, + *, + transaction_parameters: algokit_utils.TransactionParameters | None = None, + ) -> "Composer": + """This method uses the arc4.arc4_create to deploy the HelloWorld contract. + + Adds a call to `arc4_deploy_app()uint64` ABI method + + :param algokit_utils.TransactionParameters transaction_parameters: (optional) Additional transaction parameters + :returns Composer: This Composer instance""" + + args = Arc4DeployAppArgs() + self.app_client.compose_call( + self.atc, + call_abi_method=args.method(), + transaction_parameters=_convert_call_transaction_parameters(transaction_parameters), + **_as_dict(args, convert_all=True), + ) + return self + def noop_app_call( self, *, @@ -1077,7 +1125,9 @@ def deploy_app( *, transaction_parameters: algokit_utils.TransactionParameters | None = None, ) -> algokit_utils.ABITransactionResponse[int]: - """Calls `deploy_app()uint64` ABI method + """This method uses the itxn.ApplicationCall to deploy the HelloWorld contract. + + Calls `deploy_app()uint64` ABI method :param algokit_utils.TransactionParameters transaction_parameters: (optional) Additional transaction parameters :returns algokit_utils.ABITransactionResponse[int]: The result of the transaction""" @@ -1090,6 +1140,26 @@ def deploy_app( ) return result + def arc4_deploy_app( + self, + *, + transaction_parameters: algokit_utils.TransactionParameters | None = None, + ) -> algokit_utils.ABITransactionResponse[int]: + """This method uses the arc4.arc4_create to deploy the HelloWorld contract. + + Calls `arc4_deploy_app()uint64` ABI method + + :param algokit_utils.TransactionParameters transaction_parameters: (optional) Additional transaction parameters + :returns algokit_utils.ABITransactionResponse[int]: The result of the transaction""" + + args = Arc4DeployAppArgs() + result = self.app_client.call( + call_abi_method=args.method(), + transaction_parameters=_convert_call_transaction_parameters(transaction_parameters), + **_as_dict(args, convert_all=True), + ) + return result + def noop_app_call( self, *, diff --git a/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py b/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py index e96a13a..3db4ced 100644 --- a/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py +++ b/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py @@ -4,6 +4,7 @@ ARC4Contract, Asset, Global, + String, Txn, UInt64, arc4, @@ -185,6 +186,9 @@ def multi_inner_txns(self, app_id: Application) -> tuple[UInt64, arc4.String]: @abimethod def deploy_app(self) -> UInt64: + """ + This method uses the itxn.ApplicationCall to deploy the HelloWorld contract. + """ compiled_contract = compile_contract(HelloWorld) app_txn = itxn.ApplicationCall( @@ -196,27 +200,32 @@ def deploy_app(self) -> UInt64: return app.id + @abimethod + def arc4_deploy_app(self) -> UInt64: + """ + This method uses the arc4.arc4_create to deploy the HelloWorld contract. + """ + app_txn = arc4.arc4_create(HelloWorld) + + return app_txn.created_app.id + # example: DEPLOY_APP # example: NOOP_APP_CALL @abimethod - def noop_app_call(self, app_id: Application) -> tuple[arc4.String, arc4.String]: + def noop_app_call(self, app_id: Application) -> tuple[arc4.String, String]: # invoke an ABI method call_txn = itxn.ApplicationCall( app_id=app_id, app_args=(arc4.arc4_signature("hello(string)string"), arc4.String("World")), - fee=0, ).submit() # extract result first_hello_world_result = arc4.String.from_log(call_txn.last_log) # OR, call it automatic ARC4 encoding, type validation and result handling - second_hello_world_result, call_txn = arc4.abi_call[ - arc4.String - ]( # declare return type - "hello(string)string", # method signature to call + second_hello_world_result, call_txn = arc4.abi_call( # declare return type + HelloWorld.hello, # method signature to call "again", # abi method arguments - fee=0, app_id=app_id, ) From d72a351639ec70effe8f9426bd6b881020411b1d Mon Sep 17 00:00:00 2001 From: "Chris Kim (Hyunggun)" Date: Mon, 30 Sep 2024 14:38:16 -0700 Subject: [PATCH 2/3] chore: added create_fungible_asset method --- .../InnerTransactions.approval.teal | 77 +++++++++++----- .../InnerTransactions.arc32.json | 20 ++++- .../inner_transactions_client.py | 88 ++++++++++++++++--- .../inner_transactions/contract.py | 19 +++- .../inner_transactions_integration_test.py | 35 ++++++-- 5 files changed, 198 insertions(+), 41 deletions(-) diff --git a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal index b90a916..f231141 100644 --- a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal +++ b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal @@ -9,9 +9,10 @@ smart_contracts.inner_transactions.contract.InnerTransactions.approval_program: __puya_arc4_router__: proto 0 1 txn NumAppArgs - bz __puya_arc4_router___bare_routing@16 + bz __puya_arc4_router___bare_routing@17 method "payment()uint64" - method "asset_create()uint64" + method "fungible_asset_create()uint64" + method "non_fungible_asset_create()uint64" method "asset_opt_in(asset)void" method "asset_transfer(asset,account,uint64)void" method "asset_freeze(account,asset)void" @@ -23,7 +24,7 @@ __puya_arc4_router__: method "arc4_deploy_app()uint64" method "noop_app_call(application)(string,string)" txna ApplicationArgs 0 - match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13 + match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14 int 0 retsub @@ -42,13 +43,13 @@ __puya_arc4_router___payment_route@2: int 1 retsub -__puya_arc4_router___asset_create_route@3: +__puya_arc4_router___fungible_asset_create_route@3: txn OnCompletion ! assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - callsub asset_create + callsub fungible_asset_create itob byte 0x151f7c75 swap @@ -57,7 +58,22 @@ __puya_arc4_router___asset_create_route@3: int 1 retsub -__puya_arc4_router___asset_opt_in_route@4: +__puya_arc4_router___non_fungible_asset_create_route@4: + txn OnCompletion + ! + assert // OnCompletion is NoOp + txn ApplicationID + assert // is not creating + callsub non_fungible_asset_create + itob + byte 0x151f7c75 + swap + concat + log + int 1 + retsub + +__puya_arc4_router___asset_opt_in_route@5: txn OnCompletion ! assert // OnCompletion is NoOp @@ -70,7 +86,7 @@ __puya_arc4_router___asset_opt_in_route@4: int 1 retsub -__puya_arc4_router___asset_transfer_route@5: +__puya_arc4_router___asset_transfer_route@6: txn OnCompletion ! assert // OnCompletion is NoOp @@ -88,7 +104,7 @@ __puya_arc4_router___asset_transfer_route@5: int 1 retsub -__puya_arc4_router___asset_freeze_route@6: +__puya_arc4_router___asset_freeze_route@7: txn OnCompletion ! assert // OnCompletion is NoOp @@ -104,7 +120,7 @@ __puya_arc4_router___asset_freeze_route@6: int 1 retsub -__puya_arc4_router___asset_revoke_route@7: +__puya_arc4_router___asset_revoke_route@8: txn OnCompletion ! assert // OnCompletion is NoOp @@ -122,7 +138,7 @@ __puya_arc4_router___asset_revoke_route@7: int 1 retsub -__puya_arc4_router___asset_config_route@8: +__puya_arc4_router___asset_config_route@9: txn OnCompletion ! assert // OnCompletion is NoOp @@ -135,7 +151,7 @@ __puya_arc4_router___asset_config_route@8: int 1 retsub -__puya_arc4_router___asset_delete_route@9: +__puya_arc4_router___asset_delete_route@10: txn OnCompletion ! assert // OnCompletion is NoOp @@ -148,7 +164,7 @@ __puya_arc4_router___asset_delete_route@9: int 1 retsub -__puya_arc4_router___multi_inner_txns_route@10: +__puya_arc4_router___multi_inner_txns_route@11: txn OnCompletion ! assert // OnCompletion is NoOp @@ -171,7 +187,7 @@ __puya_arc4_router___multi_inner_txns_route@10: int 1 retsub -__puya_arc4_router___deploy_app_route@11: +__puya_arc4_router___deploy_app_route@12: txn OnCompletion ! assert // OnCompletion is NoOp @@ -186,7 +202,7 @@ __puya_arc4_router___deploy_app_route@11: int 1 retsub -__puya_arc4_router___arc4_deploy_app_route@12: +__puya_arc4_router___arc4_deploy_app_route@13: txn OnCompletion ! assert // OnCompletion is NoOp @@ -201,7 +217,7 @@ __puya_arc4_router___arc4_deploy_app_route@12: int 1 retsub -__puya_arc4_router___noop_app_call_route@13: +__puya_arc4_router___noop_app_call_route@14: txn OnCompletion ! assert // OnCompletion is NoOp @@ -238,16 +254,16 @@ __puya_arc4_router___noop_app_call_route@13: int 1 retsub -__puya_arc4_router___bare_routing@16: +__puya_arc4_router___bare_routing@17: txn OnCompletion - bnz __puya_arc4_router___after_if_else@20 + bnz __puya_arc4_router___after_if_else@21 txn ApplicationID ! assert // is creating int 1 retsub -__puya_arc4_router___after_if_else@20: +__puya_arc4_router___after_if_else@21: int 0 retsub @@ -269,8 +285,29 @@ payment: retsub -// smart_contracts.inner_transactions.contract.InnerTransactions.asset_create() -> uint64: -asset_create: +// smart_contracts.inner_transactions.contract.InnerTransactions.fungible_asset_create() -> uint64: +fungible_asset_create: + proto 0 1 + itxn_begin + byte "Royalty Points" + itxn_field ConfigAssetName + byte "RP" + itxn_field ConfigAssetUnitName + int 10 + itxn_field ConfigAssetDecimals + int 100000000000 + itxn_field ConfigAssetTotal + int acfg + itxn_field TypeEnum + int 0 + itxn_field Fee + itxn_submit + itxn CreatedAssetID + retsub + + +// smart_contracts.inner_transactions.contract.InnerTransactions.non_fungible_asset_create() -> uint64: +non_fungible_asset_create: proto 0 1 itxn_begin global CurrentApplicationAddress diff --git a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json index 7f3dee0..050af61 100644 --- a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json +++ b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json @@ -5,7 +5,12 @@ "no_op": "CALL" } }, - "asset_create()uint64": { + "fungible_asset_create()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "non_fungible_asset_create()uint64": { "call_config": { "no_op": "CALL" } @@ -62,7 +67,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNgogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiCiAgICBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAiYXJjNF9kZXBsb3lfYXBwKCl1aW50NjQiCiAgICBtZXRob2QgIm5vb3BfYXBwX2NhbGwoYXBwbGljYXRpb24pKHN0cmluZyxzdHJpbmcpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NyZWF0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDUgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZXBsb3lfYXBwX3JvdXRlQDExIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDEzCiAgICBpbnQgMAogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHBheW1lbnQKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NyZWF0ZV9yb3V0ZUAzOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA2OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIGNhbGxzdWIgYXNzZXRfZGVsZXRlCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG11bHRpX2lubmVyX3R4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGUgMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwbG95X2FwcAogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXJjNF9kZXBsb3lfYXBwX3JvdXRlQDEyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X2RlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX25vb3BfYXBwX2NhbGxfcm91dGVAMTM6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIGNhbGxzdWIgbm9vcF9hcHBfY2FsbAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpbnQgNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGUgMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAMTY6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAyMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBpcyBjcmVhdGluZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAyMDoKICAgIGludCAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLnBheW1lbnQoKSAtPiB1aW50NjQ6CnBheW1lbnQ6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGludCA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50IHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY3JlYXRlKCkgLT4gdWludDY0Ogphc3NldF9jcmVhdGU6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkdXBuIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBieXRlICJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICBieXRlICJNb25hIExpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgYnl0ZSAiTUwiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGludCAyCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIGludCAxMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfb3B0X2luKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X29wdF9pbjoKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF90cmFuc2Zlcihhc3NldDogdWludDY0LCByZWNlaXZlcjogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF90cmFuc2ZlcjoKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2ZyZWV6ZShhY2N0X3RvX2JlX2Zyb3plbjogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2ZyZWV6ZToKICAgIHByb3RvIDIgMAogICAgaXR4bl9iZWdpbgogICAgaW50IDEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRGcm96ZW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0QWNjb3VudAogICAgaW50IGFmcnoKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfcmV2b2tlKGFzc2V0OiB1aW50NjQsIGFjY291bnRfdG9fYmVfcmV2b2tlZDogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF9yZXZva2U6CiAgICBwcm90byAzIDAKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY29uZmlnKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2NvbmZpZzoKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgdHhuIFNlbmRlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9kZWxldGUoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZGVsZXRlOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm11bHRpX2lubmVyX3R4bnMoYXBwX2lkOiB1aW50NjQpIC0+IHVpbnQ2NCwgYnl0ZXM6Cm11bHRpX2lubmVyX3R4bnM6CiAgICBwcm90byAxIDIKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGludCA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50IHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX25leHQKICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGdpdHhuIDAgQW1vdW50CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKZGVwbG95X2FwcDoKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgYnl0ZSBiYXNlNjQgQ29FQlF3PT0KICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZSBiYXNlNjQgQ2lBQ0FBR0lBQUZEaWdBQk1SdEJBREtBQkFLK3poRTJHZ0NPQVFBQ0lva3hHUlJFTVJoRU5ob0JWd0lBaUFBZ1NSVVdWd1lDVEZDQUJCVWZmSFZNVUxBamlURVpRQUFHTVJnVVJDT0pJb21LQVFHQUIwaGxiR3h2TENDTC8xQ0oKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFyYzRfZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKYXJjNF9kZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9vcF9hcHBfY2FsbChhcHBfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXMsIGJ5dGVzOgpub29wX2FwcF9jYWxsOgogICAgcHJvdG8gMSAyCiAgICBpdHhuX2JlZ2luCiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU1NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU2MTY3NjE2OTZlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCAyIDAKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNwogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X29wdF9pbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF90cmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9mcmVlemUoYWNjb3VudCxhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9yZXZva2UoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfY29uZmlnKGFzc2V0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2RlbGV0ZShhc3NldCl2b2lkIgogICAgbWV0aG9kICJtdWx0aV9pbm5lcl90eG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIKICAgIG1ldGhvZCAiZGVwbG95X2FwcCgpdWludDY0IgogICAgbWV0aG9kICJhcmM0X2RlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAibm9vcF9hcHBfY2FsbChhcHBsaWNhdGlvbikoc3RyaW5nLHN0cmluZykiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwIF9fcHV5YV9hcmM0X3JvdXRlcl9fX211bHRpX2lubmVyX3R4bnNfcm91dGVAMTEgX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hcmM0X2RlcGxveV9hcHBfcm91dGVAMTMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9vcF9hcHBfY2FsbF9yb3V0ZUAxNAogICAgaW50IDAKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVAMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZnVuZ2libGVfYXNzZXRfY3JlYXRlCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2RlbGV0ZQogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgY2FsbHN1YiBtdWx0aV9pbm5lcl90eG5zCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9kZXBsb3lfYXBwCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDE0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG5vb3BfYXBwX2NhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50IDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDE3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjE6CiAgICBpbnQgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnQgNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludCBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJSUCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDEwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIGludCAxMDAwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZToKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGJ5dGUgImh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIGJ5dGUgIk1vbmEgTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJNTCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgaW50IDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9vcHRfaW4oYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfb3B0X2luOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3RyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgcHJvdG8gMyAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZnJlZXplKGFjY3RfdG9fYmVfZnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZnJlZXplOgogICAgcHJvdG8gMiAwCiAgICBpdHhuX2JlZ2luCiAgICBpbnQgMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEZyb3plbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRBY2NvdW50CiAgICBpbnQgYWZyegogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9yZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudF90b19iZV9yZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3Jldm9rZToKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2RlbGV0ZShhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9kZWxldGU6CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubXVsdGlfaW5uZXJfdHhucyhhcHBfaWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlfaW5uZXJfdHhuczoKICAgIHByb3RvIDEgMgogICAgdHhuIFNlbmRlcgogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50IDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnQgcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fbmV4dAogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgZ2l0eG4gMCBBbW91bnQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5kZXBsb3lfYXBwKCkgLT4gdWludDY0OgpkZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXJjNF9kZXBsb3lfYXBwKCkgLT4gdWludDY0OgphcmM0X2RlcGxveV9hcHA6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGJ5dGUgYmFzZTY0IENvRUJRdz09CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGUgYmFzZTY0IENpQUNBQUdJQUFGRGlnQUJNUnRCQURLQUJBSyt6aEUyR2dDT0FRQUNJb2t4R1JSRU1SaEVOaG9CVndJQWlBQWdTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWppVEVaUUFBR01SZ1VSQ09KSW9tS0FRR0FCMGhsYkd4dkxDQ0wvMUNKCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub29wX2FwcF9jYWxsKGFwcF9pZDogdWludDY0KSAtPiBieXRlcywgYnl0ZXM6Cm5vb3BfYXBwX2NhbGw6CiAgICBwcm90byAxIDIKICAgIGl0eG5fYmVnaW4KICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTYxNjc2MTY5NmUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { @@ -97,13 +102,22 @@ } }, { - "name": "asset_create", + "name": "fungible_asset_create", "args": [], "readonly": false, "returns": { "type": "uint64" } }, + { + "name": "non_fungible_asset_create", + "args": [], + "readonly": false, + "returns": { + "type": "uint64" + }, + "desc": "Following the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1" + }, { "name": "asset_opt_in", "args": [ diff --git a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py index 89e3b8e..3168143 100644 --- a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py +++ b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py @@ -28,7 +28,12 @@ "no_op": "CALL" } }, - "asset_create()uint64": { + "fungible_asset_create()uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "non_fungible_asset_create()uint64": { "call_config": { "no_op": "CALL" } @@ -85,7 +90,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNgogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIKICAgIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiCiAgICBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAiYXJjNF9kZXBsb3lfYXBwKCl1aW50NjQiCiAgICBtZXRob2QgIm5vb3BfYXBwX2NhbGwoYXBwbGljYXRpb24pKHN0cmluZyxzdHJpbmcpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NyZWF0ZV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDUgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19kZXBsb3lfYXBwX3JvdXRlQDExIF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDEzCiAgICBpbnQgMAogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHBheW1lbnQKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NyZWF0ZV9yb3V0ZUAzOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA2OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIGNhbGxzdWIgYXNzZXRfZGVsZXRlCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG11bHRpX2lubmVyX3R4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGUgMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwbG95X2FwcAogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXJjNF9kZXBsb3lfYXBwX3JvdXRlQDEyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X2RlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX25vb3BfYXBwX2NhbGxfcm91dGVAMTM6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIGNhbGxzdWIgbm9vcF9hcHBfY2FsbAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGR1cAogICAgbGVuCiAgICBpbnQgNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGUgMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdAMTY6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAyMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBpcyBjcmVhdGluZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUAyMDoKICAgIGludCAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLnBheW1lbnQoKSAtPiB1aW50NjQ6CnBheW1lbnQ6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGludCA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50IHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY3JlYXRlKCkgLT4gdWludDY0Ogphc3NldF9jcmVhdGU6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkdXBuIDMKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBieXRlICJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICBieXRlICJNb25hIExpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgYnl0ZSAiTUwiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIGludCAyCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIGludCAxMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfb3B0X2luKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X29wdF9pbjoKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF90cmFuc2Zlcihhc3NldDogdWludDY0LCByZWNlaXZlcjogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF90cmFuc2ZlcjoKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2ZyZWV6ZShhY2N0X3RvX2JlX2Zyb3plbjogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2ZyZWV6ZToKICAgIHByb3RvIDIgMAogICAgaXR4bl9iZWdpbgogICAgaW50IDEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRGcm96ZW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0QWNjb3VudAogICAgaW50IGFmcnoKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfcmV2b2tlKGFzc2V0OiB1aW50NjQsIGFjY291bnRfdG9fYmVfcmV2b2tlZDogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF9yZXZva2U6CiAgICBwcm90byAzIDAKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY29uZmlnKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2NvbmZpZzoKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgdHhuIFNlbmRlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9kZWxldGUoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZGVsZXRlOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm11bHRpX2lubmVyX3R4bnMoYXBwX2lkOiB1aW50NjQpIC0+IHVpbnQ2NCwgYnl0ZXM6Cm11bHRpX2lubmVyX3R4bnM6CiAgICBwcm90byAxIDIKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGludCA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50IHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX25leHQKICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGdpdHhuIDAgQW1vdW50CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKZGVwbG95X2FwcDoKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgYnl0ZSBiYXNlNjQgQ29FQlF3PT0KICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZSBiYXNlNjQgQ2lBQ0FBR0lBQUZEaWdBQk1SdEJBREtBQkFLK3poRTJHZ0NPQVFBQ0lva3hHUlJFTVJoRU5ob0JWd0lBaUFBZ1NSVVdWd1lDVEZDQUJCVWZmSFZNVUxBamlURVpRQUFHTVJnVVJDT0pJb21LQVFHQUIwaGxiR3h2TENDTC8xQ0oKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFyYzRfZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKYXJjNF9kZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9vcF9hcHBfY2FsbChhcHBfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXMsIGJ5dGVzOgpub29wX2FwcF9jYWxsOgogICAgcHJvdG8gMSAyCiAgICBpdHhuX2JlZ2luCiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU1NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU2MTY3NjE2OTZlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgZXh0cmFjdCAyIDAKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNwogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X29wdF9pbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF90cmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9mcmVlemUoYWNjb3VudCxhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9yZXZva2UoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfY29uZmlnKGFzc2V0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2RlbGV0ZShhc3NldCl2b2lkIgogICAgbWV0aG9kICJtdWx0aV9pbm5lcl90eG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIKICAgIG1ldGhvZCAiZGVwbG95X2FwcCgpdWludDY0IgogICAgbWV0aG9kICJhcmM0X2RlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAibm9vcF9hcHBfY2FsbChhcHBsaWNhdGlvbikoc3RyaW5nLHN0cmluZykiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwIF9fcHV5YV9hcmM0X3JvdXRlcl9fX211bHRpX2lubmVyX3R4bnNfcm91dGVAMTEgX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hcmM0X2RlcGxveV9hcHBfcm91dGVAMTMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9vcF9hcHBfY2FsbF9yb3V0ZUAxNAogICAgaW50IDAKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVAMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZnVuZ2libGVfYXNzZXRfY3JlYXRlCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2RlbGV0ZQogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgY2FsbHN1YiBtdWx0aV9pbm5lcl90eG5zCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9kZXBsb3lfYXBwCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDE0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG5vb3BfYXBwX2NhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50IDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDE3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjE6CiAgICBpbnQgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnQgNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludCBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJSUCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDEwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIGludCAxMDAwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZToKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGJ5dGUgImh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIGJ5dGUgIk1vbmEgTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJNTCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgaW50IDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9vcHRfaW4oYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfb3B0X2luOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3RyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgcHJvdG8gMyAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZnJlZXplKGFjY3RfdG9fYmVfZnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZnJlZXplOgogICAgcHJvdG8gMiAwCiAgICBpdHhuX2JlZ2luCiAgICBpbnQgMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEZyb3plbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRBY2NvdW50CiAgICBpbnQgYWZyegogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9yZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudF90b19iZV9yZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3Jldm9rZToKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2RlbGV0ZShhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9kZWxldGU6CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubXVsdGlfaW5uZXJfdHhucyhhcHBfaWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlfaW5uZXJfdHhuczoKICAgIHByb3RvIDEgMgogICAgdHhuIFNlbmRlcgogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50IDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnQgcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fbmV4dAogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgZ2l0eG4gMCBBbW91bnQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5kZXBsb3lfYXBwKCkgLT4gdWludDY0OgpkZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXJjNF9kZXBsb3lfYXBwKCkgLT4gdWludDY0OgphcmM0X2RlcGxveV9hcHA6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGJ5dGUgYmFzZTY0IENvRUJRdz09CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGUgYmFzZTY0IENpQUNBQUdJQUFGRGlnQUJNUnRCQURLQUJBSyt6aEUyR2dDT0FRQUNJb2t4R1JSRU1SaEVOaG9CVndJQWlBQWdTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWppVEVaUUFBR01SZ1VSQ09KSW9tS0FRR0FCMGhsYkd4dkxDQ0wvMUNKCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub29wX2FwcF9jYWxsKGFwcF9pZDogdWludDY0KSAtPiBieXRlcywgYnl0ZXM6Cm5vb3BfYXBwX2NhbGw6CiAgICBwcm90byAxIDIKICAgIGl0eG5fYmVnaW4KICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTYxNjc2MTY5NmUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { @@ -119,12 +124,20 @@ } }, { - "name": "asset_create", + "name": "fungible_asset_create", "args": [], "returns": { "type": "uint64" } }, + { + "name": "non_fungible_asset_create", + "args": [], + "returns": { + "type": "uint64" + }, + "desc": "Following the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1" + }, { "name": "asset_opt_in", "args": [ @@ -345,10 +358,20 @@ def method() -> str: @dataclasses.dataclass(kw_only=True) -class AssetCreateArgs(_ArgsBase[int]): +class FungibleAssetCreateArgs(_ArgsBase[int]): @staticmethod def method() -> str: - return "asset_create()uint64" + return "fungible_asset_create()uint64" + + +@dataclasses.dataclass(kw_only=True) +class NonFungibleAssetCreateArgs(_ArgsBase[int]): + """Following the ARC3 standard, the total supply must be 1 for a non-fungible asset. + If you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1""" + + @staticmethod + def method() -> str: + return "non_fungible_asset_create()uint64" @dataclasses.dataclass(kw_only=True) @@ -496,17 +519,39 @@ def payment( ) return self - def asset_create( + def fungible_asset_create( self, *, transaction_parameters: algokit_utils.TransactionParameters | None = None, ) -> "Composer": - """Adds a call to `asset_create()uint64` ABI method + """Adds a call to `fungible_asset_create()uint64` ABI method :param algokit_utils.TransactionParameters transaction_parameters: (optional) Additional transaction parameters :returns Composer: This Composer instance""" - args = AssetCreateArgs() + args = FungibleAssetCreateArgs() + self.app_client.compose_call( + self.atc, + call_abi_method=args.method(), + transaction_parameters=_convert_call_transaction_parameters(transaction_parameters), + **_as_dict(args, convert_all=True), + ) + return self + + def non_fungible_asset_create( + self, + *, + transaction_parameters: algokit_utils.TransactionParameters | None = None, + ) -> "Composer": + """Following the ARC3 standard, the total supply must be 1 for a non-fungible asset. + If you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1 + + Adds a call to `non_fungible_asset_create()uint64` ABI method + + :param algokit_utils.TransactionParameters transaction_parameters: (optional) Additional transaction parameters + :returns Composer: This Composer instance""" + + args = NonFungibleAssetCreateArgs() self.app_client.compose_call( self.atc, call_abi_method=args.method(), @@ -933,17 +978,38 @@ def payment( ) return result - def asset_create( + def fungible_asset_create( + self, + *, + transaction_parameters: algokit_utils.TransactionParameters | None = None, + ) -> algokit_utils.ABITransactionResponse[int]: + """Calls `fungible_asset_create()uint64` ABI method + + :param algokit_utils.TransactionParameters transaction_parameters: (optional) Additional transaction parameters + :returns algokit_utils.ABITransactionResponse[int]: The result of the transaction""" + + args = FungibleAssetCreateArgs() + result = self.app_client.call( + call_abi_method=args.method(), + transaction_parameters=_convert_call_transaction_parameters(transaction_parameters), + **_as_dict(args, convert_all=True), + ) + return result + + def non_fungible_asset_create( self, *, transaction_parameters: algokit_utils.TransactionParameters | None = None, ) -> algokit_utils.ABITransactionResponse[int]: - """Calls `asset_create()uint64` ABI method + """Following the ARC3 standard, the total supply must be 1 for a non-fungible asset. + If you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1 + + Calls `non_fungible_asset_create()uint64` ABI method :param algokit_utils.TransactionParameters transaction_parameters: (optional) Additional transaction parameters :returns algokit_utils.ABITransactionResponse[int]: The result of the transaction""" - args = AssetCreateArgs() + args = NonFungibleAssetCreateArgs() result = self.app_client.call( call_abi_method=args.method(), transaction_parameters=_convert_call_transaction_parameters(transaction_parameters), diff --git a/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py b/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py index 3db4ced..0db95fb 100644 --- a/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py +++ b/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py @@ -34,7 +34,23 @@ def payment(self) -> UInt64: # example: ASSET_CREATE @abimethod - def asset_create(self) -> UInt64: + def fungible_asset_create(self) -> UInt64: + itxn_result = itxn.AssetConfig( + total=100_000_000_000, + decimals=10, + unit_name="RP", + asset_name="Royalty Points", + ).submit() + + return itxn_result.created_asset.id + + @abimethod + def non_fungible_asset_create(self) -> UInt64: + """ + Following the ARC3 standard, the total supply must be 1 for a non-fungible asset. + If you want to create fractional NFTs, `total` * `decimals` point must be 1. + ex) total=100, decimals=2, 100 * 0.01 = 1 + """ itxn_result = itxn.AssetConfig( total=100, decimals=2, @@ -45,7 +61,6 @@ def asset_create(self) -> UInt64: reserve=Global.current_application_address, freeze=Global.current_application_address, clawback=Global.current_application_address, - fee=0, ).submit() return itxn_result.created_asset.id diff --git a/projects/python-contract-examples/tests/inner_transactions_integration_test.py b/projects/python-contract-examples/tests/inner_transactions_integration_test.py index ad680fd..b50e9a3 100644 --- a/projects/python-contract-examples/tests/inner_transactions_integration_test.py +++ b/projects/python-contract-examples/tests/inner_transactions_integration_test.py @@ -140,21 +140,47 @@ def test_asset_create( sp.flat_fee = True sp.fee = 2000 - txn_result = creator_inner_txn_app_client.asset_create( + txn_result = creator_inner_txn_app_client.non_fungible_asset_create( transaction_parameters=TransactionParameters(suggested_params=sp) ) - print(f"Created Asset ID: {txn_result.return_value}") + print(f"Created Non Fungible Asset ID: {txn_result.return_value}") app_acct_info = algorand.account.get_information( creator_inner_txn_app_client.app_address ) asset_info: list = app_acct_info["assets"] + print("non fungible asset info", asset_info) assert len(asset_info) > 0 - assert asset_info[1]["asset-id"] == txn_result.return_value + for asset in asset_info: + if asset["asset-id"] == txn_result.return_value: + assert asset["asset-id"] == txn_result.return_value return txn_result.return_value +def test_fungible_asset_create( + algorand: AlgorandClient, + algod_client: AlgodClient, + creator_inner_txn_app_client: InnerTransactionsClient, +) -> None: + sp = algod_client.suggested_params() + sp.flat_fee = True + sp.fee = 2000 + + txn_result = creator_inner_txn_app_client.fungible_asset_create( + transaction_parameters=TransactionParameters(suggested_params=sp) + ) + print(f"Created Fungible Asset ID: {txn_result.return_value}") + + app_acct_info = algorand.account.get_information( + creator_inner_txn_app_client.app_address + ) + asset_info: list = app_acct_info["assets"] + print("asset info", asset_info) + assert len(asset_info) > 0 + assert any(asset["asset-id"] == txn_result.return_value for asset in asset_info) + + def test_payment( algod_client: AlgodClient, creator_inner_txn_app_client: InnerTransactionsClient, @@ -324,8 +350,7 @@ def test_asset_delete( creator_inner_txn_app_client.app_address ) asset_info: list = app_acct_info["assets"] - - assert len(asset_info) == 1 + assert not any(asset["asset-id"] == test_asset_create for asset in asset_info) def test_multi_inner_txns( From bee278001ca7ca2519318e3a1685e5bb295b111f Mon Sep 17 00:00:00 2001 From: "Chris Kim (Hyunggun)" Date: Tue, 15 Oct 2024 13:44:10 -0700 Subject: [PATCH 3/3] chore: changed decimals from 10 to 2 in the NFT example, minor edit to contributing guide --- CONTRIBUTING.md | 2 +- .../snapshots/InnerTransactions.approval.json | 8984 +++++++++-------- .../InnerTransactions.approval.teal | 2 +- .../InnerTransactions.arc32.json | 2 +- .../inner_transactions_client.py | 2 +- .../inner_transactions/contract.py | 2 +- 6 files changed, 4765 insertions(+), 4229 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 49ad5da..2bb782b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -49,9 +49,9 @@ Changes must be done via a Pull Request (PR). Ensure the following acceptance criteria are met before submitting a PR: - Ensure there are no typos in the content -- Ensure `algokit project run audit` passes - Ensure `algokit project run lint` passes - Ensure `algokit project run build` passes +- Ensure `algokit project run audit` passes - Ensure `algokit project run audit-teal` passes - Ensure `algokit project run test` passes. Make sure to have the localnet running with `algokit localnet start` diff --git a/projects/python-contract-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json b/projects/python-contract-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json index 3e56eb4..7f8414f 100644 --- a/projects/python-contract-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json +++ b/projects/python-contract-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json @@ -4,7 +4,7 @@ "result": [ { "type": "ExecutionPaths", - "count": 14, + "count": 15, "description": "\nCheck: \"unprotected-deletable\", Impact: High, Confidence: High\nDescription: Unprotected Deletable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#unprotected-deletable-application\n", "check": "unprotected-deletable", "impact": "High", @@ -25,27 +25,28 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "27: int 0", - "28: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "28: int 0", + "29: retsub" ], [ "5: return" @@ -53,7 +54,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 35 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -66,57 +67,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "30: __puya_arc4_router___payment_route@2:", - "31: txn OnCompletion", - "32: !", - "33: assert", - "34: txn ApplicationID", - "35: assert", - "36: callsub payment" - ], - [ - "256: payment:", - "257: proto 0 1", - "258: itxn_begin", - "259: txn Sender", - "260: itxn_field Receiver", - "261: int 5000", - "262: itxn_field Amount", - "263: int pay", - "264: itxn_field TypeEnum", - "265: int 0", - "266: itxn_field Fee", - "267: itxn_submit", - "268: itxn Amount", - "269: retsub" - ], - [ - "37: itob", - "38: byte 0x151f7c75", - "39: swap", - "40: concat", - "41: log", - "42: int 1", - "43: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "31: __puya_arc4_router___payment_route@2:", + "32: txn OnCompletion", + "33: !", + "34: assert", + "35: txn ApplicationID", + "36: assert", + "37: callsub payment" + ], + [ + "272: payment:", + "273: proto 0 1", + "274: itxn_begin", + "275: txn Sender", + "276: itxn_field Receiver", + "277: int 5000", + "278: itxn_field Amount", + "279: int pay", + "280: itxn_field TypeEnum", + "281: int 0", + "282: itxn_field Fee", + "283: itxn_submit", + "284: itxn Amount", + "285: retsub" + ], + [ + "38: itob", + "39: byte 0x151f7c75", + "40: swap", + "41: concat", + "42: log", + "43: int 1", + "44: retsub" ], [ "5: return" @@ -124,7 +126,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 36 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -137,69 +139,62 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "45: __puya_arc4_router___asset_create_route@3:", - "46: txn OnCompletion", - "47: !", - "48: assert", - "49: txn ApplicationID", - "50: assert", - "51: callsub asset_create" - ], - [ - "273: asset_create:", - "274: proto 0 1", - "275: itxn_begin", - "276: global CurrentApplicationAddress", - "277: dupn 3", - "278: itxn_field ConfigAssetClawback", - "279: itxn_field ConfigAssetFreeze", - "280: itxn_field ConfigAssetReserve", - "281: itxn_field ConfigAssetManager", - "282: byte \"https://link_to_ipfs/Mona_Lisa\"", - "283: itxn_field ConfigAssetURL", - "284: byte \"Mona Lisa\"", - "285: itxn_field ConfigAssetName", - "286: byte \"ML\"", - "287: itxn_field ConfigAssetUnitName", - "288: int 2", - "289: itxn_field ConfigAssetDecimals", - "290: int 100", - "291: itxn_field ConfigAssetTotal", - "292: int acfg", - "293: itxn_field TypeEnum", - "294: int 0", - "295: itxn_field Fee", - "296: itxn_submit", - "297: itxn CreatedAssetID", - "298: retsub" - ], - [ - "52: itob", - "53: byte 0x151f7c75", - "54: swap", - "55: concat", - "56: log", - "57: int 1", - "58: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "46: __puya_arc4_router___fungible_asset_create_route@3:", + "47: txn OnCompletion", + "48: !", + "49: assert", + "50: txn ApplicationID", + "51: assert", + "52: callsub fungible_asset_create" + ], + [ + "289: fungible_asset_create:", + "290: proto 0 1", + "291: itxn_begin", + "292: byte \"Royalty Points\"", + "293: itxn_field ConfigAssetName", + "294: byte \"RP\"", + "295: itxn_field ConfigAssetUnitName", + "296: int 2", + "297: itxn_field ConfigAssetDecimals", + "298: int 100000000000", + "299: itxn_field ConfigAssetTotal", + "300: int acfg", + "301: itxn_field TypeEnum", + "302: int 0", + "303: itxn_field Fee", + "304: itxn_submit", + "305: itxn CreatedAssetID", + "306: retsub" + ], + [ + "53: itob", + "54: byte 0x151f7c75", + "55: swap", + "56: concat", + "57: log", + "58: int 1", + "59: retsub" ], [ "5: return" @@ -207,7 +202,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 37 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -220,56 +215,70 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "60: __puya_arc4_router___asset_opt_in_route@4:", - "61: txn OnCompletion", - "62: !", - "63: assert", - "64: txn ApplicationID", - "65: assert", - "66: txna ApplicationArgs 1", - "67: btoi", - "68: txnas Assets", - "69: callsub asset_opt_in" - ], - [ - "302: asset_opt_in:", - "303: proto 1 0", - "304: itxn_begin", - "305: global CurrentApplicationAddress", - "306: int 0", - "307: itxn_field AssetAmount", - "308: frame_dig -1", - "309: itxn_field XferAsset", - "310: itxn_field AssetReceiver", - "311: int axfer", - "312: itxn_field TypeEnum", - "313: int 0", - "314: itxn_field Fee", - "315: itxn_submit", - "316: retsub" - ], - [ - "70: int 1", - "71: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "61: __puya_arc4_router___non_fungible_asset_create_route@4:", + "62: txn OnCompletion", + "63: !", + "64: assert", + "65: txn ApplicationID", + "66: assert", + "67: callsub non_fungible_asset_create" + ], + [ + "310: non_fungible_asset_create:", + "311: proto 0 1", + "312: itxn_begin", + "313: global CurrentApplicationAddress", + "314: dupn 3", + "315: itxn_field ConfigAssetClawback", + "316: itxn_field ConfigAssetFreeze", + "317: itxn_field ConfigAssetReserve", + "318: itxn_field ConfigAssetManager", + "319: byte \"https://link_to_ipfs/Mona_Lisa\"", + "320: itxn_field ConfigAssetURL", + "321: byte \"Mona Lisa\"", + "322: itxn_field ConfigAssetName", + "323: byte \"ML\"", + "324: itxn_field ConfigAssetUnitName", + "325: int 2", + "326: itxn_field ConfigAssetDecimals", + "327: int 100", + "328: itxn_field ConfigAssetTotal", + "329: int acfg", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: itxn CreatedAssetID", + "335: retsub" + ], + [ + "68: itob", + "69: byte 0x151f7c75", + "70: swap", + "71: concat", + "72: log", + "73: int 1", + "74: retsub" ], [ "5: return" @@ -277,7 +286,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 38 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -290,61 +299,57 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "73: __puya_arc4_router___asset_transfer_route@5:", - "74: txn OnCompletion", - "75: !", - "76: assert", - "77: txn ApplicationID", - "78: assert", - "79: txna ApplicationArgs 1", - "80: btoi", - "81: txnas Assets", - "82: txna ApplicationArgs 2", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "76: __puya_arc4_router___asset_opt_in_route@5:", + "77: txn OnCompletion", + "78: !", + "79: assert", + "80: txn ApplicationID", + "81: assert", + "82: txna ApplicationArgs 1", "83: btoi", - "84: txnas Accounts", - "85: txna ApplicationArgs 3", - "86: btoi", - "87: callsub asset_transfer" - ], - [ - "320: asset_transfer:", - "321: proto 3 0", - "322: itxn_begin", - "323: frame_dig -1", - "324: itxn_field AssetAmount", - "325: frame_dig -3", - "326: itxn_field XferAsset", - "327: frame_dig -2", - "328: itxn_field AssetReceiver", - "329: int axfer", - "330: itxn_field TypeEnum", - "331: int 0", - "332: itxn_field Fee", - "333: itxn_submit", - "334: retsub" + "84: txnas Assets", + "85: callsub asset_opt_in" ], [ - "88: int 1", - "89: retsub" + "339: asset_opt_in:", + "340: proto 1 0", + "341: itxn_begin", + "342: global CurrentApplicationAddress", + "343: int 0", + "344: itxn_field AssetAmount", + "345: frame_dig -1", + "346: itxn_field XferAsset", + "347: itxn_field AssetReceiver", + "348: int axfer", + "349: itxn_field TypeEnum", + "350: int 0", + "351: itxn_field Fee", + "352: itxn_submit", + "353: retsub" + ], + [ + "86: int 1", + "87: retsub" ], [ "5: return" @@ -352,7 +357,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 39 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -365,55 +370,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "91: __puya_arc4_router___asset_freeze_route@6:", - "92: txn OnCompletion", - "93: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "89: __puya_arc4_router___asset_transfer_route@6:", + "90: txn OnCompletion", + "91: !", + "92: assert", + "93: txn ApplicationID", "94: assert", - "95: txn ApplicationID", - "96: assert", - "97: txna ApplicationArgs 1", - "98: btoi", - "99: txnas Accounts", - "100: txna ApplicationArgs 2", - "101: btoi", - "102: txnas Assets", - "103: callsub asset_freeze" - ], - [ - "338: asset_freeze:", - "339: proto 2 0", - "340: itxn_begin", - "341: int 1", - "342: itxn_field FreezeAssetFrozen", - "343: frame_dig -1", - "344: itxn_field FreezeAsset", - "345: frame_dig -2", - "346: itxn_field FreezeAssetAccount", - "347: int afrz", - "348: itxn_field TypeEnum", - "349: int 0", - "350: itxn_field Fee", - "351: itxn_submit", - "352: retsub" + "95: txna ApplicationArgs 1", + "96: btoi", + "97: txnas Assets", + "98: txna ApplicationArgs 2", + "99: btoi", + "100: txnas Accounts", + "101: txna ApplicationArgs 3", + "102: btoi", + "103: callsub asset_transfer" + ], + [ + "357: asset_transfer:", + "358: proto 3 0", + "359: itxn_begin", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -3", + "363: itxn_field XferAsset", + "364: frame_dig -2", + "365: itxn_field AssetReceiver", + "366: int axfer", + "367: itxn_field TypeEnum", + "368: int 0", + "369: itxn_field Fee", + "370: itxn_submit", + "371: retsub" ], [ "104: int 1", @@ -425,7 +433,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 40 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -438,26 +446,27 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "107: __puya_arc4_router___asset_revoke_route@7:", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "107: __puya_arc4_router___asset_freeze_route@7:", "108: txn OnCompletion", "109: !", "110: assert", @@ -465,36 +474,32 @@ "112: assert", "113: txna ApplicationArgs 1", "114: btoi", - "115: txnas Assets", + "115: txnas Accounts", "116: txna ApplicationArgs 2", "117: btoi", - "118: txnas Accounts", - "119: txna ApplicationArgs 3", - "120: btoi", - "121: callsub asset_revoke" + "118: txnas Assets", + "119: callsub asset_freeze" ], [ - "356: asset_revoke:", - "357: proto 3 0", - "358: itxn_begin", - "359: global CurrentApplicationAddress", - "360: frame_dig -1", - "361: itxn_field AssetAmount", - "362: frame_dig -2", - "363: itxn_field AssetSender", - "364: frame_dig -3", - "365: itxn_field XferAsset", - "366: itxn_field AssetReceiver", - "367: int axfer", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "375: asset_freeze:", + "376: proto 2 0", + "377: itxn_begin", + "378: int 1", + "379: itxn_field FreezeAssetFrozen", + "380: frame_dig -1", + "381: itxn_field FreezeAsset", + "382: frame_dig -2", + "383: itxn_field FreezeAssetAccount", + "384: int afrz", + "385: itxn_field TypeEnum", + "386: int 0", + "387: itxn_field Fee", + "388: itxn_submit", + "389: retsub" ], [ - "122: int 1", - "123: retsub" + "120: int 1", + "121: retsub" ], [ "5: return" @@ -502,7 +507,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 41 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -515,60 +520,64 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "125: __puya_arc4_router___asset_config_route@8:", - "126: txn OnCompletion", - "127: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "123: __puya_arc4_router___asset_revoke_route@8:", + "124: txn OnCompletion", + "125: !", + "126: assert", + "127: txn ApplicationID", "128: assert", - "129: txn ApplicationID", - "130: assert", - "131: txna ApplicationArgs 1", - "132: btoi", - "133: txnas Assets", - "134: callsub asset_config" - ], - [ - "376: asset_config:", - "377: proto 1 0", - "378: itxn_begin", - "379: global CurrentApplicationAddress", - "380: dup", - "381: txn Sender", - "382: dup", - "383: itxn_field ConfigAssetClawback", - "384: itxn_field ConfigAssetFreeze", - "385: itxn_field ConfigAssetReserve", - "386: itxn_field ConfigAssetManager", - "387: frame_dig -1", - "388: itxn_field ConfigAsset", - "389: int acfg", - "390: itxn_field TypeEnum", - "391: int 0", - "392: itxn_field Fee", - "393: itxn_submit", - "394: retsub" - ], - [ - "135: int 1", - "136: retsub" + "129: txna ApplicationArgs 1", + "130: btoi", + "131: txnas Assets", + "132: txna ApplicationArgs 2", + "133: btoi", + "134: txnas Accounts", + "135: txna ApplicationArgs 3", + "136: btoi", + "137: callsub asset_revoke" + ], + [ + "393: asset_revoke:", + "394: proto 3 0", + "395: itxn_begin", + "396: global CurrentApplicationAddress", + "397: frame_dig -1", + "398: itxn_field AssetAmount", + "399: frame_dig -2", + "400: itxn_field AssetSender", + "401: frame_dig -3", + "402: itxn_field XferAsset", + "403: itxn_field AssetReceiver", + "404: int axfer", + "405: itxn_field TypeEnum", + "406: int 0", + "407: itxn_field Fee", + "408: itxn_submit", + "409: retsub" + ], + [ + "138: int 1", + "139: retsub" ], [ "5: return" @@ -576,7 +585,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 42 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -589,52 +598,61 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "138: __puya_arc4_router___asset_delete_route@9:", - "139: txn OnCompletion", - "140: !", - "141: assert", - "142: txn ApplicationID", - "143: assert", - "144: txna ApplicationArgs 1", - "145: btoi", - "146: txnas Assets", - "147: callsub asset_delete" - ], - [ - "398: asset_delete:", - "399: proto 1 0", - "400: itxn_begin", - "401: frame_dig -1", - "402: itxn_field ConfigAsset", - "403: int acfg", - "404: itxn_field TypeEnum", - "405: int 0", - "406: itxn_field Fee", - "407: itxn_submit", - "408: retsub" - ], - [ - "148: int 1", - "149: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "141: __puya_arc4_router___asset_config_route@9:", + "142: txn OnCompletion", + "143: !", + "144: assert", + "145: txn ApplicationID", + "146: assert", + "147: txna ApplicationArgs 1", + "148: btoi", + "149: txnas Assets", + "150: callsub asset_config" + ], + [ + "413: asset_config:", + "414: proto 1 0", + "415: itxn_begin", + "416: global CurrentApplicationAddress", + "417: dup", + "418: txn Sender", + "419: dup", + "420: itxn_field ConfigAssetClawback", + "421: itxn_field ConfigAssetFreeze", + "422: itxn_field ConfigAssetReserve", + "423: itxn_field ConfigAssetManager", + "424: frame_dig -1", + "425: itxn_field ConfigAsset", + "426: int acfg", + "427: itxn_field TypeEnum", + "428: int 0", + "429: itxn_field Fee", + "430: itxn_submit", + "431: retsub" + ], + [ + "151: int 1", + "152: retsub" ], [ "5: return" @@ -642,7 +660,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 43 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -655,84 +673,53 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "151: __puya_arc4_router___multi_inner_txns_route@10:", - "152: txn OnCompletion", - "153: !", - "154: assert", - "155: txn ApplicationID", - "156: assert", - "157: txna ApplicationArgs 1", - "158: btoi", - "159: txnas Applications", - "160: callsub multi_inner_txns" - ], - [ - "412: multi_inner_txns:", - "413: proto 1 2", - "414: txn Sender", - "415: itxn_begin", - "416: itxn_field Receiver", - "417: int 5000", - "418: itxn_field Amount", - "419: int pay", - "420: itxn_field TypeEnum", - "421: int 0", - "422: itxn_field Fee", - "423: itxn_next", - "424: method hello(string)string", - "425: itxn_field ApplicationArgs", - "426: byte 0x0005576f726c64", - "427: itxn_field ApplicationArgs", - "428: frame_dig -1", - "429: itxn_field ApplicationID", - "430: int appl", - "431: itxn_field TypeEnum", - "432: int 0", - "433: itxn_field Fee", - "434: itxn_submit", - "435: gitxn 0 Amount", - "436: itxn LastLog", - "437: dup", - "438: extract 4 0", - "439: swap", - "440: extract 0 4", - "441: byte 0x151f7c75", - "442: ==", - "443: assert", - "444: retsub" - ], - [ - "161: swap", - "162: itob", - "163: byte 0x000a", - "164: concat", - "165: swap", - "166: concat", - "167: byte 0x151f7c75", - "168: swap", - "169: concat", - "170: log", - "171: int 1", - "172: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "154: __puya_arc4_router___asset_delete_route@10:", + "155: txn OnCompletion", + "156: !", + "157: assert", + "158: txn ApplicationID", + "159: assert", + "160: txna ApplicationArgs 1", + "161: btoi", + "162: txnas Assets", + "163: callsub asset_delete" + ], + [ + "435: asset_delete:", + "436: proto 1 0", + "437: itxn_begin", + "438: frame_dig -1", + "439: itxn_field ConfigAsset", + "440: int acfg", + "441: itxn_field TypeEnum", + "442: int 0", + "443: itxn_field Fee", + "444: itxn_submit", + "445: retsub" + ], + [ + "164: int 1", + "165: retsub" ], [ "5: return" @@ -740,7 +727,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 44 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -753,57 +740,85 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "174: __puya_arc4_router___deploy_app_route@11:", - "175: txn OnCompletion", - "176: !", - "177: assert", - "178: txn ApplicationID", - "179: assert", - "180: callsub deploy_app" - ], - [ - "448: deploy_app:", - "449: proto 0 1", - "450: itxn_begin", - "451: byte 0x0a810143", - "452: itxn_field ClearStateProgramPages", - "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "454: itxn_field ApprovalProgramPages", - "455: int appl", - "456: itxn_field TypeEnum", - "457: int 0", - "458: itxn_field Fee", - "459: itxn_submit", - "460: itxn CreatedApplicationID", - "461: retsub" - ], - [ - "181: itob", - "182: byte 0x151f7c75", - "183: swap", - "184: concat", - "185: log", - "186: int 1", - "187: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "167: __puya_arc4_router___multi_inner_txns_route@11:", + "168: txn OnCompletion", + "169: !", + "170: assert", + "171: txn ApplicationID", + "172: assert", + "173: txna ApplicationArgs 1", + "174: btoi", + "175: txnas Applications", + "176: callsub multi_inner_txns" + ], + [ + "449: multi_inner_txns:", + "450: proto 1 2", + "451: txn Sender", + "452: itxn_begin", + "453: itxn_field Receiver", + "454: int 5000", + "455: itxn_field Amount", + "456: int pay", + "457: itxn_field TypeEnum", + "458: int 0", + "459: itxn_field Fee", + "460: itxn_next", + "461: method hello(string)string", + "462: itxn_field ApplicationArgs", + "463: byte 0x0005576f726c64", + "464: itxn_field ApplicationArgs", + "465: frame_dig -1", + "466: itxn_field ApplicationID", + "467: int appl", + "468: itxn_field TypeEnum", + "469: int 0", + "470: itxn_field Fee", + "471: itxn_submit", + "472: gitxn 0 Amount", + "473: itxn LastLog", + "474: dup", + "475: extract 4 0", + "476: swap", + "477: extract 0 4", + "478: byte 0x151f7c75", + "479: ==", + "480: assert", + "481: retsub" + ], + [ + "177: swap", + "178: itob", + "179: byte 0x000a", + "180: concat", + "181: swap", + "182: concat", + "183: byte 0x151f7c75", + "184: swap", + "185: concat", + "186: log", + "187: int 1", + "188: retsub" ], [ "5: return" @@ -811,7 +826,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 45 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -824,57 +839,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "189: __puya_arc4_router___arc4_deploy_app_route@12:", - "190: txn OnCompletion", - "191: !", - "192: assert", - "193: txn ApplicationID", - "194: assert", - "195: callsub arc4_deploy_app" - ], - [ - "465: arc4_deploy_app:", - "466: proto 0 1", - "467: itxn_begin", - "468: byte 0x0a810143", - "469: itxn_field ClearStateProgramPages", - "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "471: itxn_field ApprovalProgramPages", - "472: int appl", - "473: itxn_field TypeEnum", - "474: int 0", - "475: itxn_field Fee", - "476: itxn_submit", - "477: itxn CreatedApplicationID", - "478: retsub" - ], - [ - "196: itob", - "197: byte 0x151f7c75", - "198: swap", - "199: concat", - "200: log", - "201: int 1", - "202: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "190: __puya_arc4_router___deploy_app_route@12:", + "191: txn OnCompletion", + "192: !", + "193: assert", + "194: txn ApplicationID", + "195: assert", + "196: callsub deploy_app" + ], + [ + "485: deploy_app:", + "486: proto 0 1", + "487: itxn_begin", + "488: byte 0x0a810143", + "489: itxn_field ClearStateProgramPages", + "490: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "491: itxn_field ApprovalProgramPages", + "492: int appl", + "493: itxn_field TypeEnum", + "494: int 0", + "495: itxn_field Fee", + "496: itxn_submit", + "497: itxn CreatedApplicationID", + "498: retsub" + ], + [ + "197: itob", + "198: byte 0x151f7c75", + "199: swap", + "200: concat", + "201: log", + "202: int 1", + "203: retsub" ], [ "5: return" @@ -882,7 +898,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 46 -> 29 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -895,109 +911,182 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "204: __puya_arc4_router___noop_app_call_route@13:", - "205: txn OnCompletion", - "206: !", - "207: assert", - "208: txn ApplicationID", - "209: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "212: txnas Applications", - "213: callsub noop_app_call" - ], - [ - "482: noop_app_call:", - "483: proto 1 2", - "484: itxn_begin", - "485: method hello(string)string", - "486: itxn_field ApplicationArgs", - "487: byte 0x0005576f726c64", - "488: itxn_field ApplicationArgs", - "489: frame_dig -1", - "490: itxn_field ApplicationID", - "491: int appl", - "492: itxn_field TypeEnum", - "493: int 0", - "494: itxn_field Fee", - "495: itxn_submit", - "496: itxn LastLog", - "497: dup", - "498: extract 4 0", - "499: swap", - "500: extract 0 4", - "501: byte 0x151f7c75", - "502: ==", - "503: assert", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "205: __puya_arc4_router___arc4_deploy_app_route@13:", + "206: txn OnCompletion", + "207: !", + "208: assert", + "209: txn ApplicationID", + "210: assert", + "211: callsub arc4_deploy_app" + ], + [ + "502: arc4_deploy_app:", + "503: proto 0 1", "504: itxn_begin", - "505: frame_dig -1", - "506: itxn_field ApplicationID", - "507: method hello(string)string", - "508: itxn_field ApplicationArgs", - "509: byte 0x0005616761696e", - "510: itxn_field ApplicationArgs", - "511: int appl", - "512: itxn_field TypeEnum", - "513: int 0", - "514: itxn_field Fee", - "515: itxn_submit", - "516: itxn LastLog", - "517: dup", - "518: extract 4 0", - "519: swap", - "520: extract 0 4", - "521: byte 0x151f7c75", - "522: ==", - "523: assert", - "524: extract 2 0", - "525: retsub" - ], - [ - "214: dup", - "215: len", - "216: itob", - "217: extract 6 2", - "218: swap", - "219: concat", - "220: swap", - "221: dup", - "222: len", - "223: int 4", - "224: +", - "225: itob", - "226: extract 6 2", - "227: byte 0x0004", - "228: swap", - "229: concat", - "230: swap", - "231: concat", - "232: swap", - "233: concat", - "234: byte 0x151f7c75", - "235: swap", - "236: concat", - "237: log", - "238: int 1", - "239: retsub" + "505: byte 0x0a810143", + "506: itxn_field ClearStateProgramPages", + "507: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "508: itxn_field ApprovalProgramPages", + "509: int appl", + "510: itxn_field TypeEnum", + "511: int 0", + "512: itxn_field Fee", + "513: itxn_submit", + "514: itxn CreatedApplicationID", + "515: retsub" + ], + [ + "212: itob", + "213: byte 0x151f7c75", + "214: swap", + "215: concat", + "216: log", + "217: int 1", + "218: retsub" + ], + [ + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 30 -> 47 -> 31 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@17" + ], + [ + "13: method payment()uint64", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "220: __puya_arc4_router___noop_app_call_route@14:", + "221: txn OnCompletion", + "222: !", + "223: assert", + "224: txn ApplicationID", + "225: assert", + "226: txna ApplicationArgs 1", + "227: btoi", + "228: txnas Applications", + "229: callsub noop_app_call" + ], + [ + "519: noop_app_call:", + "520: proto 1 2", + "521: itxn_begin", + "522: method hello(string)string", + "523: itxn_field ApplicationArgs", + "524: byte 0x0005576f726c64", + "525: itxn_field ApplicationArgs", + "526: frame_dig -1", + "527: itxn_field ApplicationID", + "528: int appl", + "529: itxn_field TypeEnum", + "530: int 0", + "531: itxn_field Fee", + "532: itxn_submit", + "533: itxn LastLog", + "534: dup", + "535: extract 4 0", + "536: swap", + "537: extract 0 4", + "538: byte 0x151f7c75", + "539: ==", + "540: assert", + "541: itxn_begin", + "542: frame_dig -1", + "543: itxn_field ApplicationID", + "544: method hello(string)string", + "545: itxn_field ApplicationArgs", + "546: byte 0x0005616761696e", + "547: itxn_field ApplicationArgs", + "548: int appl", + "549: itxn_field TypeEnum", + "550: int 0", + "551: itxn_field Fee", + "552: itxn_submit", + "553: itxn LastLog", + "554: dup", + "555: extract 4 0", + "556: swap", + "557: extract 0 4", + "558: byte 0x151f7c75", + "559: ==", + "560: assert", + "561: extract 2 0", + "562: retsub" + ], + [ + "230: dup", + "231: len", + "232: itob", + "233: extract 6 2", + "234: swap", + "235: concat", + "236: swap", + "237: dup", + "238: len", + "239: int 4", + "240: +", + "241: itob", + "242: extract 6 2", + "243: byte 0x0004", + "244: swap", + "245: concat", + "246: swap", + "247: concat", + "248: swap", + "249: concat", + "250: byte 0x151f7c75", + "251: swap", + "252: concat", + "253: log", + "254: int 1", + "255: retsub" ], [ "5: return" @@ -1005,7 +1094,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "short": "0 -> 1 -> 3 -> 32 -> 34 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1018,17 +1107,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" ], [ - "250: __puya_arc4_router___after_if_else@20:", - "251: int 0", - "252: retsub" + "266: __puya_arc4_router___after_if_else@21:", + "267: int 0", + "268: retsub" ], [ "5: return" @@ -1039,7 +1128,7 @@ }, { "type": "ExecutionPaths", - "count": 14, + "count": 15, "description": "\nCheck: \"unprotected-updatable\", Impact: High, Confidence: High\nDescription: Unprotected Upgradable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#unprotected-updatable-application\n", "check": "unprotected-updatable", "impact": "High", @@ -1060,27 +1149,28 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "27: int 0", - "28: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "28: int 0", + "29: retsub" ], [ "5: return" @@ -1088,7 +1178,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 35 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1101,57 +1191,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "30: __puya_arc4_router___payment_route@2:", - "31: txn OnCompletion", - "32: !", - "33: assert", - "34: txn ApplicationID", - "35: assert", - "36: callsub payment" - ], - [ - "256: payment:", - "257: proto 0 1", - "258: itxn_begin", - "259: txn Sender", - "260: itxn_field Receiver", - "261: int 5000", - "262: itxn_field Amount", - "263: int pay", - "264: itxn_field TypeEnum", - "265: int 0", - "266: itxn_field Fee", - "267: itxn_submit", - "268: itxn Amount", - "269: retsub" - ], - [ - "37: itob", - "38: byte 0x151f7c75", - "39: swap", - "40: concat", - "41: log", - "42: int 1", - "43: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "31: __puya_arc4_router___payment_route@2:", + "32: txn OnCompletion", + "33: !", + "34: assert", + "35: txn ApplicationID", + "36: assert", + "37: callsub payment" + ], + [ + "272: payment:", + "273: proto 0 1", + "274: itxn_begin", + "275: txn Sender", + "276: itxn_field Receiver", + "277: int 5000", + "278: itxn_field Amount", + "279: int pay", + "280: itxn_field TypeEnum", + "281: int 0", + "282: itxn_field Fee", + "283: itxn_submit", + "284: itxn Amount", + "285: retsub" + ], + [ + "38: itob", + "39: byte 0x151f7c75", + "40: swap", + "41: concat", + "42: log", + "43: int 1", + "44: retsub" ], [ "5: return" @@ -1159,7 +1250,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 36 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1172,69 +1263,62 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "45: __puya_arc4_router___asset_create_route@3:", - "46: txn OnCompletion", - "47: !", - "48: assert", - "49: txn ApplicationID", - "50: assert", - "51: callsub asset_create" - ], - [ - "273: asset_create:", - "274: proto 0 1", - "275: itxn_begin", - "276: global CurrentApplicationAddress", - "277: dupn 3", - "278: itxn_field ConfigAssetClawback", - "279: itxn_field ConfigAssetFreeze", - "280: itxn_field ConfigAssetReserve", - "281: itxn_field ConfigAssetManager", - "282: byte \"https://link_to_ipfs/Mona_Lisa\"", - "283: itxn_field ConfigAssetURL", - "284: byte \"Mona Lisa\"", - "285: itxn_field ConfigAssetName", - "286: byte \"ML\"", - "287: itxn_field ConfigAssetUnitName", - "288: int 2", - "289: itxn_field ConfigAssetDecimals", - "290: int 100", - "291: itxn_field ConfigAssetTotal", - "292: int acfg", - "293: itxn_field TypeEnum", - "294: int 0", - "295: itxn_field Fee", - "296: itxn_submit", - "297: itxn CreatedAssetID", - "298: retsub" - ], - [ - "52: itob", - "53: byte 0x151f7c75", - "54: swap", - "55: concat", - "56: log", - "57: int 1", - "58: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "46: __puya_arc4_router___fungible_asset_create_route@3:", + "47: txn OnCompletion", + "48: !", + "49: assert", + "50: txn ApplicationID", + "51: assert", + "52: callsub fungible_asset_create" + ], + [ + "289: fungible_asset_create:", + "290: proto 0 1", + "291: itxn_begin", + "292: byte \"Royalty Points\"", + "293: itxn_field ConfigAssetName", + "294: byte \"RP\"", + "295: itxn_field ConfigAssetUnitName", + "296: int 2", + "297: itxn_field ConfigAssetDecimals", + "298: int 100000000000", + "299: itxn_field ConfigAssetTotal", + "300: int acfg", + "301: itxn_field TypeEnum", + "302: int 0", + "303: itxn_field Fee", + "304: itxn_submit", + "305: itxn CreatedAssetID", + "306: retsub" + ], + [ + "53: itob", + "54: byte 0x151f7c75", + "55: swap", + "56: concat", + "57: log", + "58: int 1", + "59: retsub" ], [ "5: return" @@ -1242,7 +1326,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 37 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1255,56 +1339,70 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "60: __puya_arc4_router___asset_opt_in_route@4:", - "61: txn OnCompletion", - "62: !", - "63: assert", - "64: txn ApplicationID", - "65: assert", - "66: txna ApplicationArgs 1", - "67: btoi", - "68: txnas Assets", - "69: callsub asset_opt_in" - ], - [ - "302: asset_opt_in:", - "303: proto 1 0", - "304: itxn_begin", - "305: global CurrentApplicationAddress", - "306: int 0", - "307: itxn_field AssetAmount", - "308: frame_dig -1", - "309: itxn_field XferAsset", - "310: itxn_field AssetReceiver", - "311: int axfer", - "312: itxn_field TypeEnum", - "313: int 0", - "314: itxn_field Fee", - "315: itxn_submit", - "316: retsub" - ], - [ - "70: int 1", - "71: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "61: __puya_arc4_router___non_fungible_asset_create_route@4:", + "62: txn OnCompletion", + "63: !", + "64: assert", + "65: txn ApplicationID", + "66: assert", + "67: callsub non_fungible_asset_create" + ], + [ + "310: non_fungible_asset_create:", + "311: proto 0 1", + "312: itxn_begin", + "313: global CurrentApplicationAddress", + "314: dupn 3", + "315: itxn_field ConfigAssetClawback", + "316: itxn_field ConfigAssetFreeze", + "317: itxn_field ConfigAssetReserve", + "318: itxn_field ConfigAssetManager", + "319: byte \"https://link_to_ipfs/Mona_Lisa\"", + "320: itxn_field ConfigAssetURL", + "321: byte \"Mona Lisa\"", + "322: itxn_field ConfigAssetName", + "323: byte \"ML\"", + "324: itxn_field ConfigAssetUnitName", + "325: int 2", + "326: itxn_field ConfigAssetDecimals", + "327: int 100", + "328: itxn_field ConfigAssetTotal", + "329: int acfg", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: itxn CreatedAssetID", + "335: retsub" + ], + [ + "68: itob", + "69: byte 0x151f7c75", + "70: swap", + "71: concat", + "72: log", + "73: int 1", + "74: retsub" ], [ "5: return" @@ -1312,7 +1410,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 38 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1325,61 +1423,57 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "73: __puya_arc4_router___asset_transfer_route@5:", - "74: txn OnCompletion", - "75: !", - "76: assert", - "77: txn ApplicationID", - "78: assert", - "79: txna ApplicationArgs 1", - "80: btoi", - "81: txnas Assets", - "82: txna ApplicationArgs 2", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "76: __puya_arc4_router___asset_opt_in_route@5:", + "77: txn OnCompletion", + "78: !", + "79: assert", + "80: txn ApplicationID", + "81: assert", + "82: txna ApplicationArgs 1", "83: btoi", - "84: txnas Accounts", - "85: txna ApplicationArgs 3", - "86: btoi", - "87: callsub asset_transfer" - ], - [ - "320: asset_transfer:", - "321: proto 3 0", - "322: itxn_begin", - "323: frame_dig -1", - "324: itxn_field AssetAmount", - "325: frame_dig -3", - "326: itxn_field XferAsset", - "327: frame_dig -2", - "328: itxn_field AssetReceiver", - "329: int axfer", - "330: itxn_field TypeEnum", - "331: int 0", - "332: itxn_field Fee", - "333: itxn_submit", - "334: retsub" + "84: txnas Assets", + "85: callsub asset_opt_in" + ], + [ + "339: asset_opt_in:", + "340: proto 1 0", + "341: itxn_begin", + "342: global CurrentApplicationAddress", + "343: int 0", + "344: itxn_field AssetAmount", + "345: frame_dig -1", + "346: itxn_field XferAsset", + "347: itxn_field AssetReceiver", + "348: int axfer", + "349: itxn_field TypeEnum", + "350: int 0", + "351: itxn_field Fee", + "352: itxn_submit", + "353: retsub" ], [ - "88: int 1", - "89: retsub" + "86: int 1", + "87: retsub" ], [ "5: return" @@ -1387,7 +1481,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 39 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1400,55 +1494,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "91: __puya_arc4_router___asset_freeze_route@6:", - "92: txn OnCompletion", - "93: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "89: __puya_arc4_router___asset_transfer_route@6:", + "90: txn OnCompletion", + "91: !", + "92: assert", + "93: txn ApplicationID", "94: assert", - "95: txn ApplicationID", - "96: assert", - "97: txna ApplicationArgs 1", - "98: btoi", - "99: txnas Accounts", - "100: txna ApplicationArgs 2", - "101: btoi", - "102: txnas Assets", - "103: callsub asset_freeze" - ], - [ - "338: asset_freeze:", - "339: proto 2 0", - "340: itxn_begin", - "341: int 1", - "342: itxn_field FreezeAssetFrozen", - "343: frame_dig -1", - "344: itxn_field FreezeAsset", - "345: frame_dig -2", - "346: itxn_field FreezeAssetAccount", - "347: int afrz", - "348: itxn_field TypeEnum", - "349: int 0", - "350: itxn_field Fee", - "351: itxn_submit", - "352: retsub" + "95: txna ApplicationArgs 1", + "96: btoi", + "97: txnas Assets", + "98: txna ApplicationArgs 2", + "99: btoi", + "100: txnas Accounts", + "101: txna ApplicationArgs 3", + "102: btoi", + "103: callsub asset_transfer" + ], + [ + "357: asset_transfer:", + "358: proto 3 0", + "359: itxn_begin", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -3", + "363: itxn_field XferAsset", + "364: frame_dig -2", + "365: itxn_field AssetReceiver", + "366: int axfer", + "367: itxn_field TypeEnum", + "368: int 0", + "369: itxn_field Fee", + "370: itxn_submit", + "371: retsub" ], [ "104: int 1", @@ -1460,7 +1557,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 40 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1473,26 +1570,27 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "107: __puya_arc4_router___asset_revoke_route@7:", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "107: __puya_arc4_router___asset_freeze_route@7:", "108: txn OnCompletion", "109: !", "110: assert", @@ -1500,36 +1598,32 @@ "112: assert", "113: txna ApplicationArgs 1", "114: btoi", - "115: txnas Assets", + "115: txnas Accounts", "116: txna ApplicationArgs 2", "117: btoi", - "118: txnas Accounts", - "119: txna ApplicationArgs 3", - "120: btoi", - "121: callsub asset_revoke" + "118: txnas Assets", + "119: callsub asset_freeze" ], [ - "356: asset_revoke:", - "357: proto 3 0", - "358: itxn_begin", - "359: global CurrentApplicationAddress", - "360: frame_dig -1", - "361: itxn_field AssetAmount", - "362: frame_dig -2", - "363: itxn_field AssetSender", - "364: frame_dig -3", - "365: itxn_field XferAsset", - "366: itxn_field AssetReceiver", - "367: int axfer", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "375: asset_freeze:", + "376: proto 2 0", + "377: itxn_begin", + "378: int 1", + "379: itxn_field FreezeAssetFrozen", + "380: frame_dig -1", + "381: itxn_field FreezeAsset", + "382: frame_dig -2", + "383: itxn_field FreezeAssetAccount", + "384: int afrz", + "385: itxn_field TypeEnum", + "386: int 0", + "387: itxn_field Fee", + "388: itxn_submit", + "389: retsub" ], [ - "122: int 1", - "123: retsub" + "120: int 1", + "121: retsub" ], [ "5: return" @@ -1537,7 +1631,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 41 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1550,60 +1644,64 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "125: __puya_arc4_router___asset_config_route@8:", - "126: txn OnCompletion", - "127: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "123: __puya_arc4_router___asset_revoke_route@8:", + "124: txn OnCompletion", + "125: !", + "126: assert", + "127: txn ApplicationID", "128: assert", - "129: txn ApplicationID", - "130: assert", - "131: txna ApplicationArgs 1", - "132: btoi", - "133: txnas Assets", - "134: callsub asset_config" - ], - [ - "376: asset_config:", - "377: proto 1 0", - "378: itxn_begin", - "379: global CurrentApplicationAddress", - "380: dup", - "381: txn Sender", - "382: dup", - "383: itxn_field ConfigAssetClawback", - "384: itxn_field ConfigAssetFreeze", - "385: itxn_field ConfigAssetReserve", - "386: itxn_field ConfigAssetManager", - "387: frame_dig -1", - "388: itxn_field ConfigAsset", - "389: int acfg", - "390: itxn_field TypeEnum", - "391: int 0", - "392: itxn_field Fee", - "393: itxn_submit", - "394: retsub" - ], - [ - "135: int 1", - "136: retsub" + "129: txna ApplicationArgs 1", + "130: btoi", + "131: txnas Assets", + "132: txna ApplicationArgs 2", + "133: btoi", + "134: txnas Accounts", + "135: txna ApplicationArgs 3", + "136: btoi", + "137: callsub asset_revoke" + ], + [ + "393: asset_revoke:", + "394: proto 3 0", + "395: itxn_begin", + "396: global CurrentApplicationAddress", + "397: frame_dig -1", + "398: itxn_field AssetAmount", + "399: frame_dig -2", + "400: itxn_field AssetSender", + "401: frame_dig -3", + "402: itxn_field XferAsset", + "403: itxn_field AssetReceiver", + "404: int axfer", + "405: itxn_field TypeEnum", + "406: int 0", + "407: itxn_field Fee", + "408: itxn_submit", + "409: retsub" + ], + [ + "138: int 1", + "139: retsub" ], [ "5: return" @@ -1611,7 +1709,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 42 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1624,52 +1722,61 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "138: __puya_arc4_router___asset_delete_route@9:", - "139: txn OnCompletion", - "140: !", - "141: assert", - "142: txn ApplicationID", - "143: assert", - "144: txna ApplicationArgs 1", - "145: btoi", - "146: txnas Assets", - "147: callsub asset_delete" - ], - [ - "398: asset_delete:", - "399: proto 1 0", - "400: itxn_begin", - "401: frame_dig -1", - "402: itxn_field ConfigAsset", - "403: int acfg", - "404: itxn_field TypeEnum", - "405: int 0", - "406: itxn_field Fee", - "407: itxn_submit", - "408: retsub" - ], - [ - "148: int 1", - "149: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "141: __puya_arc4_router___asset_config_route@9:", + "142: txn OnCompletion", + "143: !", + "144: assert", + "145: txn ApplicationID", + "146: assert", + "147: txna ApplicationArgs 1", + "148: btoi", + "149: txnas Assets", + "150: callsub asset_config" + ], + [ + "413: asset_config:", + "414: proto 1 0", + "415: itxn_begin", + "416: global CurrentApplicationAddress", + "417: dup", + "418: txn Sender", + "419: dup", + "420: itxn_field ConfigAssetClawback", + "421: itxn_field ConfigAssetFreeze", + "422: itxn_field ConfigAssetReserve", + "423: itxn_field ConfigAssetManager", + "424: frame_dig -1", + "425: itxn_field ConfigAsset", + "426: int acfg", + "427: itxn_field TypeEnum", + "428: int 0", + "429: itxn_field Fee", + "430: itxn_submit", + "431: retsub" + ], + [ + "151: int 1", + "152: retsub" ], [ "5: return" @@ -1677,7 +1784,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 43 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1690,84 +1797,53 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "151: __puya_arc4_router___multi_inner_txns_route@10:", - "152: txn OnCompletion", - "153: !", - "154: assert", - "155: txn ApplicationID", - "156: assert", - "157: txna ApplicationArgs 1", - "158: btoi", - "159: txnas Applications", - "160: callsub multi_inner_txns" - ], - [ - "412: multi_inner_txns:", - "413: proto 1 2", - "414: txn Sender", - "415: itxn_begin", - "416: itxn_field Receiver", - "417: int 5000", - "418: itxn_field Amount", - "419: int pay", - "420: itxn_field TypeEnum", - "421: int 0", - "422: itxn_field Fee", - "423: itxn_next", - "424: method hello(string)string", - "425: itxn_field ApplicationArgs", - "426: byte 0x0005576f726c64", - "427: itxn_field ApplicationArgs", - "428: frame_dig -1", - "429: itxn_field ApplicationID", - "430: int appl", - "431: itxn_field TypeEnum", - "432: int 0", - "433: itxn_field Fee", - "434: itxn_submit", - "435: gitxn 0 Amount", - "436: itxn LastLog", - "437: dup", - "438: extract 4 0", - "439: swap", - "440: extract 0 4", - "441: byte 0x151f7c75", - "442: ==", - "443: assert", - "444: retsub" - ], - [ - "161: swap", - "162: itob", - "163: byte 0x000a", - "164: concat", - "165: swap", - "166: concat", - "167: byte 0x151f7c75", - "168: swap", - "169: concat", - "170: log", - "171: int 1", - "172: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "154: __puya_arc4_router___asset_delete_route@10:", + "155: txn OnCompletion", + "156: !", + "157: assert", + "158: txn ApplicationID", + "159: assert", + "160: txna ApplicationArgs 1", + "161: btoi", + "162: txnas Assets", + "163: callsub asset_delete" + ], + [ + "435: asset_delete:", + "436: proto 1 0", + "437: itxn_begin", + "438: frame_dig -1", + "439: itxn_field ConfigAsset", + "440: int acfg", + "441: itxn_field TypeEnum", + "442: int 0", + "443: itxn_field Fee", + "444: itxn_submit", + "445: retsub" + ], + [ + "164: int 1", + "165: retsub" ], [ "5: return" @@ -1775,7 +1851,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 44 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1788,57 +1864,85 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "174: __puya_arc4_router___deploy_app_route@11:", - "175: txn OnCompletion", - "176: !", - "177: assert", - "178: txn ApplicationID", - "179: assert", - "180: callsub deploy_app" - ], - [ - "448: deploy_app:", - "449: proto 0 1", - "450: itxn_begin", - "451: byte 0x0a810143", - "452: itxn_field ClearStateProgramPages", - "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "454: itxn_field ApprovalProgramPages", - "455: int appl", - "456: itxn_field TypeEnum", - "457: int 0", - "458: itxn_field Fee", - "459: itxn_submit", - "460: itxn CreatedApplicationID", - "461: retsub" - ], - [ - "181: itob", - "182: byte 0x151f7c75", - "183: swap", - "184: concat", - "185: log", - "186: int 1", - "187: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "167: __puya_arc4_router___multi_inner_txns_route@11:", + "168: txn OnCompletion", + "169: !", + "170: assert", + "171: txn ApplicationID", + "172: assert", + "173: txna ApplicationArgs 1", + "174: btoi", + "175: txnas Applications", + "176: callsub multi_inner_txns" + ], + [ + "449: multi_inner_txns:", + "450: proto 1 2", + "451: txn Sender", + "452: itxn_begin", + "453: itxn_field Receiver", + "454: int 5000", + "455: itxn_field Amount", + "456: int pay", + "457: itxn_field TypeEnum", + "458: int 0", + "459: itxn_field Fee", + "460: itxn_next", + "461: method hello(string)string", + "462: itxn_field ApplicationArgs", + "463: byte 0x0005576f726c64", + "464: itxn_field ApplicationArgs", + "465: frame_dig -1", + "466: itxn_field ApplicationID", + "467: int appl", + "468: itxn_field TypeEnum", + "469: int 0", + "470: itxn_field Fee", + "471: itxn_submit", + "472: gitxn 0 Amount", + "473: itxn LastLog", + "474: dup", + "475: extract 4 0", + "476: swap", + "477: extract 0 4", + "478: byte 0x151f7c75", + "479: ==", + "480: assert", + "481: retsub" + ], + [ + "177: swap", + "178: itob", + "179: byte 0x000a", + "180: concat", + "181: swap", + "182: concat", + "183: byte 0x151f7c75", + "184: swap", + "185: concat", + "186: log", + "187: int 1", + "188: retsub" ], [ "5: return" @@ -1846,7 +1950,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 45 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1859,57 +1963,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "189: __puya_arc4_router___arc4_deploy_app_route@12:", - "190: txn OnCompletion", - "191: !", - "192: assert", - "193: txn ApplicationID", - "194: assert", - "195: callsub arc4_deploy_app" - ], - [ - "465: arc4_deploy_app:", - "466: proto 0 1", - "467: itxn_begin", - "468: byte 0x0a810143", - "469: itxn_field ClearStateProgramPages", - "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "471: itxn_field ApprovalProgramPages", - "472: int appl", - "473: itxn_field TypeEnum", - "474: int 0", - "475: itxn_field Fee", - "476: itxn_submit", - "477: itxn CreatedApplicationID", - "478: retsub" - ], - [ - "196: itob", - "197: byte 0x151f7c75", - "198: swap", - "199: concat", - "200: log", - "201: int 1", - "202: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "190: __puya_arc4_router___deploy_app_route@12:", + "191: txn OnCompletion", + "192: !", + "193: assert", + "194: txn ApplicationID", + "195: assert", + "196: callsub deploy_app" + ], + [ + "485: deploy_app:", + "486: proto 0 1", + "487: itxn_begin", + "488: byte 0x0a810143", + "489: itxn_field ClearStateProgramPages", + "490: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "491: itxn_field ApprovalProgramPages", + "492: int appl", + "493: itxn_field TypeEnum", + "494: int 0", + "495: itxn_field Fee", + "496: itxn_submit", + "497: itxn CreatedApplicationID", + "498: retsub" + ], + [ + "197: itob", + "198: byte 0x151f7c75", + "199: swap", + "200: concat", + "201: log", + "202: int 1", + "203: retsub" ], [ "5: return" @@ -1917,7 +2022,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 46 -> 29 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -1930,109 +2035,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "204: __puya_arc4_router___noop_app_call_route@13:", - "205: txn OnCompletion", - "206: !", - "207: assert", - "208: txn ApplicationID", - "209: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "212: txnas Applications", - "213: callsub noop_app_call" - ], - [ - "482: noop_app_call:", - "483: proto 1 2", - "484: itxn_begin", - "485: method hello(string)string", - "486: itxn_field ApplicationArgs", - "487: byte 0x0005576f726c64", - "488: itxn_field ApplicationArgs", - "489: frame_dig -1", - "490: itxn_field ApplicationID", - "491: int appl", - "492: itxn_field TypeEnum", - "493: int 0", - "494: itxn_field Fee", - "495: itxn_submit", - "496: itxn LastLog", - "497: dup", - "498: extract 4 0", - "499: swap", - "500: extract 0 4", - "501: byte 0x151f7c75", - "502: ==", - "503: assert", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "205: __puya_arc4_router___arc4_deploy_app_route@13:", + "206: txn OnCompletion", + "207: !", + "208: assert", + "209: txn ApplicationID", + "210: assert", + "211: callsub arc4_deploy_app" + ], + [ + "502: arc4_deploy_app:", + "503: proto 0 1", "504: itxn_begin", - "505: frame_dig -1", - "506: itxn_field ApplicationID", - "507: method hello(string)string", - "508: itxn_field ApplicationArgs", - "509: byte 0x0005616761696e", - "510: itxn_field ApplicationArgs", - "511: int appl", - "512: itxn_field TypeEnum", - "513: int 0", - "514: itxn_field Fee", - "515: itxn_submit", - "516: itxn LastLog", - "517: dup", - "518: extract 4 0", - "519: swap", - "520: extract 0 4", - "521: byte 0x151f7c75", - "522: ==", - "523: assert", - "524: extract 2 0", - "525: retsub" - ], - [ - "214: dup", - "215: len", - "216: itob", - "217: extract 6 2", - "218: swap", - "219: concat", - "220: swap", - "221: dup", - "222: len", - "223: int 4", - "224: +", - "225: itob", - "226: extract 6 2", - "227: byte 0x0004", - "228: swap", - "229: concat", - "230: swap", - "231: concat", - "232: swap", - "233: concat", - "234: byte 0x151f7c75", - "235: swap", - "236: concat", - "237: log", - "238: int 1", - "239: retsub" + "505: byte 0x0a810143", + "506: itxn_field ClearStateProgramPages", + "507: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "508: itxn_field ApprovalProgramPages", + "509: int appl", + "510: itxn_field TypeEnum", + "511: int 0", + "512: itxn_field Fee", + "513: itxn_submit", + "514: itxn CreatedApplicationID", + "515: retsub" + ], + [ + "212: itob", + "213: byte 0x151f7c75", + "214: swap", + "215: concat", + "216: log", + "217: int 1", + "218: retsub" ], [ "5: return" @@ -2040,7 +2094,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 30 -> 47 -> 31 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2053,17 +2107,141 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "13: method payment()uint64", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "220: __puya_arc4_router___noop_app_call_route@14:", + "221: txn OnCompletion", + "222: !", + "223: assert", + "224: txn ApplicationID", + "225: assert", + "226: txna ApplicationArgs 1", + "227: btoi", + "228: txnas Applications", + "229: callsub noop_app_call" + ], + [ + "519: noop_app_call:", + "520: proto 1 2", + "521: itxn_begin", + "522: method hello(string)string", + "523: itxn_field ApplicationArgs", + "524: byte 0x0005576f726c64", + "525: itxn_field ApplicationArgs", + "526: frame_dig -1", + "527: itxn_field ApplicationID", + "528: int appl", + "529: itxn_field TypeEnum", + "530: int 0", + "531: itxn_field Fee", + "532: itxn_submit", + "533: itxn LastLog", + "534: dup", + "535: extract 4 0", + "536: swap", + "537: extract 0 4", + "538: byte 0x151f7c75", + "539: ==", + "540: assert", + "541: itxn_begin", + "542: frame_dig -1", + "543: itxn_field ApplicationID", + "544: method hello(string)string", + "545: itxn_field ApplicationArgs", + "546: byte 0x0005616761696e", + "547: itxn_field ApplicationArgs", + "548: int appl", + "549: itxn_field TypeEnum", + "550: int 0", + "551: itxn_field Fee", + "552: itxn_submit", + "553: itxn LastLog", + "554: dup", + "555: extract 4 0", + "556: swap", + "557: extract 0 4", + "558: byte 0x151f7c75", + "559: ==", + "560: assert", + "561: extract 2 0", + "562: retsub" + ], + [ + "230: dup", + "231: len", + "232: itob", + "233: extract 6 2", + "234: swap", + "235: concat", + "236: swap", + "237: dup", + "238: len", + "239: int 4", + "240: +", + "241: itob", + "242: extract 6 2", + "243: byte 0x0004", + "244: swap", + "245: concat", + "246: swap", + "247: concat", + "248: swap", + "249: concat", + "250: byte 0x151f7c75", + "251: swap", + "252: concat", + "253: log", + "254: int 1", + "255: retsub" ], [ - "250: __puya_arc4_router___after_if_else@20:", - "251: int 0", - "252: retsub" + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 32 -> 34 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@17" + ], + [ + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" + ], + [ + "266: __puya_arc4_router___after_if_else@21:", + "267: int 0", + "268: retsub" ], [ "5: return" @@ -2095,27 +2273,28 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "27: int 0", - "28: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "28: int 0", + "29: retsub" ], [ "5: return" @@ -2123,7 +2302,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "short": "0 -> 1 -> 3 -> 32 -> 34 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2136,17 +2315,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" ], [ - "250: __puya_arc4_router___after_if_else@20:", - "251: int 0", - "252: retsub" + "266: __puya_arc4_router___after_if_else@21:", + "267: int 0", + "268: retsub" ], [ "5: return" @@ -2178,27 +2357,28 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "27: int 0", - "28: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "28: int 0", + "29: retsub" ], [ "5: return" @@ -2206,7 +2386,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "short": "0 -> 1 -> 3 -> 32 -> 34 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2219,17 +2399,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" ], [ - "250: __puya_arc4_router___after_if_else@20:", - "251: int 0", - "252: retsub" + "266: __puya_arc4_router___after_if_else@21:", + "267: int 0", + "268: retsub" ], [ "5: return" @@ -2240,7 +2420,7 @@ }, { "type": "ExecutionPaths", - "count": 14, + "count": 15, "description": "\nCheck: \"is-deletable\", Impact: High, Confidence: High\nDescription: Deletable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#deletable-application\n", "check": "is-deletable", "impact": "High", @@ -2261,27 +2441,28 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "27: int 0", - "28: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "28: int 0", + "29: retsub" ], [ "5: return" @@ -2289,7 +2470,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 35 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2302,57 +2483,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "30: __puya_arc4_router___payment_route@2:", - "31: txn OnCompletion", - "32: !", - "33: assert", - "34: txn ApplicationID", - "35: assert", - "36: callsub payment" - ], - [ - "256: payment:", - "257: proto 0 1", - "258: itxn_begin", - "259: txn Sender", - "260: itxn_field Receiver", - "261: int 5000", - "262: itxn_field Amount", - "263: int pay", - "264: itxn_field TypeEnum", - "265: int 0", - "266: itxn_field Fee", - "267: itxn_submit", - "268: itxn Amount", - "269: retsub" - ], - [ - "37: itob", - "38: byte 0x151f7c75", - "39: swap", - "40: concat", - "41: log", - "42: int 1", - "43: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "31: __puya_arc4_router___payment_route@2:", + "32: txn OnCompletion", + "33: !", + "34: assert", + "35: txn ApplicationID", + "36: assert", + "37: callsub payment" + ], + [ + "272: payment:", + "273: proto 0 1", + "274: itxn_begin", + "275: txn Sender", + "276: itxn_field Receiver", + "277: int 5000", + "278: itxn_field Amount", + "279: int pay", + "280: itxn_field TypeEnum", + "281: int 0", + "282: itxn_field Fee", + "283: itxn_submit", + "284: itxn Amount", + "285: retsub" + ], + [ + "38: itob", + "39: byte 0x151f7c75", + "40: swap", + "41: concat", + "42: log", + "43: int 1", + "44: retsub" ], [ "5: return" @@ -2360,7 +2542,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 36 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2373,69 +2555,62 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "45: __puya_arc4_router___asset_create_route@3:", - "46: txn OnCompletion", - "47: !", - "48: assert", - "49: txn ApplicationID", - "50: assert", - "51: callsub asset_create" - ], - [ - "273: asset_create:", - "274: proto 0 1", - "275: itxn_begin", - "276: global CurrentApplicationAddress", - "277: dupn 3", - "278: itxn_field ConfigAssetClawback", - "279: itxn_field ConfigAssetFreeze", - "280: itxn_field ConfigAssetReserve", - "281: itxn_field ConfigAssetManager", - "282: byte \"https://link_to_ipfs/Mona_Lisa\"", - "283: itxn_field ConfigAssetURL", - "284: byte \"Mona Lisa\"", - "285: itxn_field ConfigAssetName", - "286: byte \"ML\"", - "287: itxn_field ConfigAssetUnitName", - "288: int 2", - "289: itxn_field ConfigAssetDecimals", - "290: int 100", - "291: itxn_field ConfigAssetTotal", - "292: int acfg", - "293: itxn_field TypeEnum", - "294: int 0", - "295: itxn_field Fee", - "296: itxn_submit", - "297: itxn CreatedAssetID", - "298: retsub" - ], - [ - "52: itob", - "53: byte 0x151f7c75", - "54: swap", - "55: concat", - "56: log", - "57: int 1", - "58: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "46: __puya_arc4_router___fungible_asset_create_route@3:", + "47: txn OnCompletion", + "48: !", + "49: assert", + "50: txn ApplicationID", + "51: assert", + "52: callsub fungible_asset_create" + ], + [ + "289: fungible_asset_create:", + "290: proto 0 1", + "291: itxn_begin", + "292: byte \"Royalty Points\"", + "293: itxn_field ConfigAssetName", + "294: byte \"RP\"", + "295: itxn_field ConfigAssetUnitName", + "296: int 2", + "297: itxn_field ConfigAssetDecimals", + "298: int 100000000000", + "299: itxn_field ConfigAssetTotal", + "300: int acfg", + "301: itxn_field TypeEnum", + "302: int 0", + "303: itxn_field Fee", + "304: itxn_submit", + "305: itxn CreatedAssetID", + "306: retsub" + ], + [ + "53: itob", + "54: byte 0x151f7c75", + "55: swap", + "56: concat", + "57: log", + "58: int 1", + "59: retsub" ], [ "5: return" @@ -2443,7 +2618,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 37 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2456,56 +2631,70 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "60: __puya_arc4_router___asset_opt_in_route@4:", - "61: txn OnCompletion", - "62: !", - "63: assert", - "64: txn ApplicationID", - "65: assert", - "66: txna ApplicationArgs 1", - "67: btoi", - "68: txnas Assets", - "69: callsub asset_opt_in" - ], - [ - "302: asset_opt_in:", - "303: proto 1 0", - "304: itxn_begin", - "305: global CurrentApplicationAddress", - "306: int 0", - "307: itxn_field AssetAmount", - "308: frame_dig -1", - "309: itxn_field XferAsset", - "310: itxn_field AssetReceiver", - "311: int axfer", - "312: itxn_field TypeEnum", - "313: int 0", - "314: itxn_field Fee", - "315: itxn_submit", - "316: retsub" - ], - [ - "70: int 1", - "71: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "61: __puya_arc4_router___non_fungible_asset_create_route@4:", + "62: txn OnCompletion", + "63: !", + "64: assert", + "65: txn ApplicationID", + "66: assert", + "67: callsub non_fungible_asset_create" + ], + [ + "310: non_fungible_asset_create:", + "311: proto 0 1", + "312: itxn_begin", + "313: global CurrentApplicationAddress", + "314: dupn 3", + "315: itxn_field ConfigAssetClawback", + "316: itxn_field ConfigAssetFreeze", + "317: itxn_field ConfigAssetReserve", + "318: itxn_field ConfigAssetManager", + "319: byte \"https://link_to_ipfs/Mona_Lisa\"", + "320: itxn_field ConfigAssetURL", + "321: byte \"Mona Lisa\"", + "322: itxn_field ConfigAssetName", + "323: byte \"ML\"", + "324: itxn_field ConfigAssetUnitName", + "325: int 2", + "326: itxn_field ConfigAssetDecimals", + "327: int 100", + "328: itxn_field ConfigAssetTotal", + "329: int acfg", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: itxn CreatedAssetID", + "335: retsub" + ], + [ + "68: itob", + "69: byte 0x151f7c75", + "70: swap", + "71: concat", + "72: log", + "73: int 1", + "74: retsub" ], [ "5: return" @@ -2513,7 +2702,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 38 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2526,61 +2715,57 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "73: __puya_arc4_router___asset_transfer_route@5:", - "74: txn OnCompletion", - "75: !", - "76: assert", - "77: txn ApplicationID", - "78: assert", - "79: txna ApplicationArgs 1", - "80: btoi", - "81: txnas Assets", - "82: txna ApplicationArgs 2", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "76: __puya_arc4_router___asset_opt_in_route@5:", + "77: txn OnCompletion", + "78: !", + "79: assert", + "80: txn ApplicationID", + "81: assert", + "82: txna ApplicationArgs 1", "83: btoi", - "84: txnas Accounts", - "85: txna ApplicationArgs 3", - "86: btoi", - "87: callsub asset_transfer" - ], - [ - "320: asset_transfer:", - "321: proto 3 0", - "322: itxn_begin", - "323: frame_dig -1", - "324: itxn_field AssetAmount", - "325: frame_dig -3", - "326: itxn_field XferAsset", - "327: frame_dig -2", - "328: itxn_field AssetReceiver", - "329: int axfer", - "330: itxn_field TypeEnum", - "331: int 0", - "332: itxn_field Fee", - "333: itxn_submit", - "334: retsub" + "84: txnas Assets", + "85: callsub asset_opt_in" ], [ - "88: int 1", - "89: retsub" + "339: asset_opt_in:", + "340: proto 1 0", + "341: itxn_begin", + "342: global CurrentApplicationAddress", + "343: int 0", + "344: itxn_field AssetAmount", + "345: frame_dig -1", + "346: itxn_field XferAsset", + "347: itxn_field AssetReceiver", + "348: int axfer", + "349: itxn_field TypeEnum", + "350: int 0", + "351: itxn_field Fee", + "352: itxn_submit", + "353: retsub" + ], + [ + "86: int 1", + "87: retsub" ], [ "5: return" @@ -2588,7 +2773,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 39 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2601,55 +2786,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "91: __puya_arc4_router___asset_freeze_route@6:", - "92: txn OnCompletion", - "93: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "89: __puya_arc4_router___asset_transfer_route@6:", + "90: txn OnCompletion", + "91: !", + "92: assert", + "93: txn ApplicationID", "94: assert", - "95: txn ApplicationID", - "96: assert", - "97: txna ApplicationArgs 1", - "98: btoi", - "99: txnas Accounts", - "100: txna ApplicationArgs 2", - "101: btoi", - "102: txnas Assets", - "103: callsub asset_freeze" - ], - [ - "338: asset_freeze:", - "339: proto 2 0", - "340: itxn_begin", - "341: int 1", - "342: itxn_field FreezeAssetFrozen", - "343: frame_dig -1", - "344: itxn_field FreezeAsset", - "345: frame_dig -2", - "346: itxn_field FreezeAssetAccount", - "347: int afrz", - "348: itxn_field TypeEnum", - "349: int 0", - "350: itxn_field Fee", - "351: itxn_submit", - "352: retsub" + "95: txna ApplicationArgs 1", + "96: btoi", + "97: txnas Assets", + "98: txna ApplicationArgs 2", + "99: btoi", + "100: txnas Accounts", + "101: txna ApplicationArgs 3", + "102: btoi", + "103: callsub asset_transfer" + ], + [ + "357: asset_transfer:", + "358: proto 3 0", + "359: itxn_begin", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -3", + "363: itxn_field XferAsset", + "364: frame_dig -2", + "365: itxn_field AssetReceiver", + "366: int axfer", + "367: itxn_field TypeEnum", + "368: int 0", + "369: itxn_field Fee", + "370: itxn_submit", + "371: retsub" ], [ "104: int 1", @@ -2661,7 +2849,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 40 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2674,26 +2862,27 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "107: __puya_arc4_router___asset_revoke_route@7:", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "107: __puya_arc4_router___asset_freeze_route@7:", "108: txn OnCompletion", "109: !", "110: assert", @@ -2701,36 +2890,32 @@ "112: assert", "113: txna ApplicationArgs 1", "114: btoi", - "115: txnas Assets", + "115: txnas Accounts", "116: txna ApplicationArgs 2", "117: btoi", - "118: txnas Accounts", - "119: txna ApplicationArgs 3", - "120: btoi", - "121: callsub asset_revoke" + "118: txnas Assets", + "119: callsub asset_freeze" ], [ - "356: asset_revoke:", - "357: proto 3 0", - "358: itxn_begin", - "359: global CurrentApplicationAddress", - "360: frame_dig -1", - "361: itxn_field AssetAmount", - "362: frame_dig -2", - "363: itxn_field AssetSender", - "364: frame_dig -3", - "365: itxn_field XferAsset", - "366: itxn_field AssetReceiver", - "367: int axfer", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "375: asset_freeze:", + "376: proto 2 0", + "377: itxn_begin", + "378: int 1", + "379: itxn_field FreezeAssetFrozen", + "380: frame_dig -1", + "381: itxn_field FreezeAsset", + "382: frame_dig -2", + "383: itxn_field FreezeAssetAccount", + "384: int afrz", + "385: itxn_field TypeEnum", + "386: int 0", + "387: itxn_field Fee", + "388: itxn_submit", + "389: retsub" ], [ - "122: int 1", - "123: retsub" + "120: int 1", + "121: retsub" ], [ "5: return" @@ -2738,7 +2923,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 41 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2751,60 +2936,64 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "125: __puya_arc4_router___asset_config_route@8:", - "126: txn OnCompletion", - "127: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "123: __puya_arc4_router___asset_revoke_route@8:", + "124: txn OnCompletion", + "125: !", + "126: assert", + "127: txn ApplicationID", "128: assert", - "129: txn ApplicationID", - "130: assert", - "131: txna ApplicationArgs 1", - "132: btoi", - "133: txnas Assets", - "134: callsub asset_config" - ], - [ - "376: asset_config:", - "377: proto 1 0", - "378: itxn_begin", - "379: global CurrentApplicationAddress", - "380: dup", - "381: txn Sender", - "382: dup", - "383: itxn_field ConfigAssetClawback", - "384: itxn_field ConfigAssetFreeze", - "385: itxn_field ConfigAssetReserve", - "386: itxn_field ConfigAssetManager", - "387: frame_dig -1", - "388: itxn_field ConfigAsset", - "389: int acfg", - "390: itxn_field TypeEnum", - "391: int 0", - "392: itxn_field Fee", - "393: itxn_submit", - "394: retsub" - ], - [ - "135: int 1", - "136: retsub" + "129: txna ApplicationArgs 1", + "130: btoi", + "131: txnas Assets", + "132: txna ApplicationArgs 2", + "133: btoi", + "134: txnas Accounts", + "135: txna ApplicationArgs 3", + "136: btoi", + "137: callsub asset_revoke" + ], + [ + "393: asset_revoke:", + "394: proto 3 0", + "395: itxn_begin", + "396: global CurrentApplicationAddress", + "397: frame_dig -1", + "398: itxn_field AssetAmount", + "399: frame_dig -2", + "400: itxn_field AssetSender", + "401: frame_dig -3", + "402: itxn_field XferAsset", + "403: itxn_field AssetReceiver", + "404: int axfer", + "405: itxn_field TypeEnum", + "406: int 0", + "407: itxn_field Fee", + "408: itxn_submit", + "409: retsub" + ], + [ + "138: int 1", + "139: retsub" ], [ "5: return" @@ -2812,7 +3001,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 42 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2825,52 +3014,61 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "138: __puya_arc4_router___asset_delete_route@9:", - "139: txn OnCompletion", - "140: !", - "141: assert", - "142: txn ApplicationID", - "143: assert", - "144: txna ApplicationArgs 1", - "145: btoi", - "146: txnas Assets", - "147: callsub asset_delete" - ], - [ - "398: asset_delete:", - "399: proto 1 0", - "400: itxn_begin", - "401: frame_dig -1", - "402: itxn_field ConfigAsset", - "403: int acfg", - "404: itxn_field TypeEnum", - "405: int 0", - "406: itxn_field Fee", - "407: itxn_submit", - "408: retsub" - ], - [ - "148: int 1", - "149: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "141: __puya_arc4_router___asset_config_route@9:", + "142: txn OnCompletion", + "143: !", + "144: assert", + "145: txn ApplicationID", + "146: assert", + "147: txna ApplicationArgs 1", + "148: btoi", + "149: txnas Assets", + "150: callsub asset_config" + ], + [ + "413: asset_config:", + "414: proto 1 0", + "415: itxn_begin", + "416: global CurrentApplicationAddress", + "417: dup", + "418: txn Sender", + "419: dup", + "420: itxn_field ConfigAssetClawback", + "421: itxn_field ConfigAssetFreeze", + "422: itxn_field ConfigAssetReserve", + "423: itxn_field ConfigAssetManager", + "424: frame_dig -1", + "425: itxn_field ConfigAsset", + "426: int acfg", + "427: itxn_field TypeEnum", + "428: int 0", + "429: itxn_field Fee", + "430: itxn_submit", + "431: retsub" + ], + [ + "151: int 1", + "152: retsub" ], [ "5: return" @@ -2878,7 +3076,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 43 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2891,84 +3089,53 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "151: __puya_arc4_router___multi_inner_txns_route@10:", - "152: txn OnCompletion", - "153: !", - "154: assert", - "155: txn ApplicationID", - "156: assert", - "157: txna ApplicationArgs 1", - "158: btoi", - "159: txnas Applications", - "160: callsub multi_inner_txns" - ], - [ - "412: multi_inner_txns:", - "413: proto 1 2", - "414: txn Sender", - "415: itxn_begin", - "416: itxn_field Receiver", - "417: int 5000", - "418: itxn_field Amount", - "419: int pay", - "420: itxn_field TypeEnum", - "421: int 0", - "422: itxn_field Fee", - "423: itxn_next", - "424: method hello(string)string", - "425: itxn_field ApplicationArgs", - "426: byte 0x0005576f726c64", - "427: itxn_field ApplicationArgs", - "428: frame_dig -1", - "429: itxn_field ApplicationID", - "430: int appl", - "431: itxn_field TypeEnum", - "432: int 0", - "433: itxn_field Fee", - "434: itxn_submit", - "435: gitxn 0 Amount", - "436: itxn LastLog", - "437: dup", - "438: extract 4 0", - "439: swap", - "440: extract 0 4", - "441: byte 0x151f7c75", - "442: ==", - "443: assert", - "444: retsub" - ], - [ - "161: swap", - "162: itob", - "163: byte 0x000a", - "164: concat", - "165: swap", - "166: concat", - "167: byte 0x151f7c75", - "168: swap", - "169: concat", - "170: log", - "171: int 1", - "172: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "154: __puya_arc4_router___asset_delete_route@10:", + "155: txn OnCompletion", + "156: !", + "157: assert", + "158: txn ApplicationID", + "159: assert", + "160: txna ApplicationArgs 1", + "161: btoi", + "162: txnas Assets", + "163: callsub asset_delete" + ], + [ + "435: asset_delete:", + "436: proto 1 0", + "437: itxn_begin", + "438: frame_dig -1", + "439: itxn_field ConfigAsset", + "440: int acfg", + "441: itxn_field TypeEnum", + "442: int 0", + "443: itxn_field Fee", + "444: itxn_submit", + "445: retsub" + ], + [ + "164: int 1", + "165: retsub" ], [ "5: return" @@ -2976,7 +3143,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 44 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -2989,57 +3156,85 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "174: __puya_arc4_router___deploy_app_route@11:", - "175: txn OnCompletion", - "176: !", - "177: assert", - "178: txn ApplicationID", - "179: assert", - "180: callsub deploy_app" - ], - [ - "448: deploy_app:", - "449: proto 0 1", - "450: itxn_begin", - "451: byte 0x0a810143", - "452: itxn_field ClearStateProgramPages", - "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "454: itxn_field ApprovalProgramPages", - "455: int appl", - "456: itxn_field TypeEnum", - "457: int 0", - "458: itxn_field Fee", - "459: itxn_submit", - "460: itxn CreatedApplicationID", - "461: retsub" - ], - [ - "181: itob", - "182: byte 0x151f7c75", - "183: swap", - "184: concat", - "185: log", - "186: int 1", - "187: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "167: __puya_arc4_router___multi_inner_txns_route@11:", + "168: txn OnCompletion", + "169: !", + "170: assert", + "171: txn ApplicationID", + "172: assert", + "173: txna ApplicationArgs 1", + "174: btoi", + "175: txnas Applications", + "176: callsub multi_inner_txns" + ], + [ + "449: multi_inner_txns:", + "450: proto 1 2", + "451: txn Sender", + "452: itxn_begin", + "453: itxn_field Receiver", + "454: int 5000", + "455: itxn_field Amount", + "456: int pay", + "457: itxn_field TypeEnum", + "458: int 0", + "459: itxn_field Fee", + "460: itxn_next", + "461: method hello(string)string", + "462: itxn_field ApplicationArgs", + "463: byte 0x0005576f726c64", + "464: itxn_field ApplicationArgs", + "465: frame_dig -1", + "466: itxn_field ApplicationID", + "467: int appl", + "468: itxn_field TypeEnum", + "469: int 0", + "470: itxn_field Fee", + "471: itxn_submit", + "472: gitxn 0 Amount", + "473: itxn LastLog", + "474: dup", + "475: extract 4 0", + "476: swap", + "477: extract 0 4", + "478: byte 0x151f7c75", + "479: ==", + "480: assert", + "481: retsub" + ], + [ + "177: swap", + "178: itob", + "179: byte 0x000a", + "180: concat", + "181: swap", + "182: concat", + "183: byte 0x151f7c75", + "184: swap", + "185: concat", + "186: log", + "187: int 1", + "188: retsub" ], [ "5: return" @@ -3047,7 +3242,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 45 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3060,57 +3255,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "189: __puya_arc4_router___arc4_deploy_app_route@12:", - "190: txn OnCompletion", - "191: !", - "192: assert", - "193: txn ApplicationID", - "194: assert", - "195: callsub arc4_deploy_app" - ], - [ - "465: arc4_deploy_app:", - "466: proto 0 1", - "467: itxn_begin", - "468: byte 0x0a810143", - "469: itxn_field ClearStateProgramPages", - "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "471: itxn_field ApprovalProgramPages", - "472: int appl", - "473: itxn_field TypeEnum", - "474: int 0", - "475: itxn_field Fee", - "476: itxn_submit", - "477: itxn CreatedApplicationID", - "478: retsub" - ], - [ - "196: itob", - "197: byte 0x151f7c75", - "198: swap", - "199: concat", - "200: log", - "201: int 1", - "202: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "190: __puya_arc4_router___deploy_app_route@12:", + "191: txn OnCompletion", + "192: !", + "193: assert", + "194: txn ApplicationID", + "195: assert", + "196: callsub deploy_app" + ], + [ + "485: deploy_app:", + "486: proto 0 1", + "487: itxn_begin", + "488: byte 0x0a810143", + "489: itxn_field ClearStateProgramPages", + "490: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "491: itxn_field ApprovalProgramPages", + "492: int appl", + "493: itxn_field TypeEnum", + "494: int 0", + "495: itxn_field Fee", + "496: itxn_submit", + "497: itxn CreatedApplicationID", + "498: retsub" + ], + [ + "197: itob", + "198: byte 0x151f7c75", + "199: swap", + "200: concat", + "201: log", + "202: int 1", + "203: retsub" ], [ "5: return" @@ -3118,7 +3314,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 46 -> 29 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3131,109 +3327,182 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "204: __puya_arc4_router___noop_app_call_route@13:", - "205: txn OnCompletion", - "206: !", - "207: assert", - "208: txn ApplicationID", - "209: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "212: txnas Applications", - "213: callsub noop_app_call" - ], - [ - "482: noop_app_call:", - "483: proto 1 2", - "484: itxn_begin", - "485: method hello(string)string", - "486: itxn_field ApplicationArgs", - "487: byte 0x0005576f726c64", - "488: itxn_field ApplicationArgs", - "489: frame_dig -1", - "490: itxn_field ApplicationID", - "491: int appl", - "492: itxn_field TypeEnum", - "493: int 0", - "494: itxn_field Fee", - "495: itxn_submit", - "496: itxn LastLog", - "497: dup", - "498: extract 4 0", - "499: swap", - "500: extract 0 4", - "501: byte 0x151f7c75", - "502: ==", - "503: assert", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "205: __puya_arc4_router___arc4_deploy_app_route@13:", + "206: txn OnCompletion", + "207: !", + "208: assert", + "209: txn ApplicationID", + "210: assert", + "211: callsub arc4_deploy_app" + ], + [ + "502: arc4_deploy_app:", + "503: proto 0 1", "504: itxn_begin", - "505: frame_dig -1", - "506: itxn_field ApplicationID", - "507: method hello(string)string", - "508: itxn_field ApplicationArgs", - "509: byte 0x0005616761696e", - "510: itxn_field ApplicationArgs", - "511: int appl", - "512: itxn_field TypeEnum", - "513: int 0", - "514: itxn_field Fee", - "515: itxn_submit", - "516: itxn LastLog", - "517: dup", - "518: extract 4 0", - "519: swap", - "520: extract 0 4", - "521: byte 0x151f7c75", - "522: ==", - "523: assert", - "524: extract 2 0", - "525: retsub" - ], - [ - "214: dup", - "215: len", - "216: itob", - "217: extract 6 2", - "218: swap", - "219: concat", - "220: swap", - "221: dup", - "222: len", - "223: int 4", - "224: +", - "225: itob", - "226: extract 6 2", - "227: byte 0x0004", - "228: swap", - "229: concat", - "230: swap", - "231: concat", - "232: swap", - "233: concat", - "234: byte 0x151f7c75", - "235: swap", - "236: concat", - "237: log", - "238: int 1", - "239: retsub" + "505: byte 0x0a810143", + "506: itxn_field ClearStateProgramPages", + "507: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "508: itxn_field ApprovalProgramPages", + "509: int appl", + "510: itxn_field TypeEnum", + "511: int 0", + "512: itxn_field Fee", + "513: itxn_submit", + "514: itxn CreatedApplicationID", + "515: retsub" + ], + [ + "212: itob", + "213: byte 0x151f7c75", + "214: swap", + "215: concat", + "216: log", + "217: int 1", + "218: retsub" + ], + [ + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 30 -> 47 -> 31 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@17" + ], + [ + "13: method payment()uint64", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "220: __puya_arc4_router___noop_app_call_route@14:", + "221: txn OnCompletion", + "222: !", + "223: assert", + "224: txn ApplicationID", + "225: assert", + "226: txna ApplicationArgs 1", + "227: btoi", + "228: txnas Applications", + "229: callsub noop_app_call" + ], + [ + "519: noop_app_call:", + "520: proto 1 2", + "521: itxn_begin", + "522: method hello(string)string", + "523: itxn_field ApplicationArgs", + "524: byte 0x0005576f726c64", + "525: itxn_field ApplicationArgs", + "526: frame_dig -1", + "527: itxn_field ApplicationID", + "528: int appl", + "529: itxn_field TypeEnum", + "530: int 0", + "531: itxn_field Fee", + "532: itxn_submit", + "533: itxn LastLog", + "534: dup", + "535: extract 4 0", + "536: swap", + "537: extract 0 4", + "538: byte 0x151f7c75", + "539: ==", + "540: assert", + "541: itxn_begin", + "542: frame_dig -1", + "543: itxn_field ApplicationID", + "544: method hello(string)string", + "545: itxn_field ApplicationArgs", + "546: byte 0x0005616761696e", + "547: itxn_field ApplicationArgs", + "548: int appl", + "549: itxn_field TypeEnum", + "550: int 0", + "551: itxn_field Fee", + "552: itxn_submit", + "553: itxn LastLog", + "554: dup", + "555: extract 4 0", + "556: swap", + "557: extract 0 4", + "558: byte 0x151f7c75", + "559: ==", + "560: assert", + "561: extract 2 0", + "562: retsub" + ], + [ + "230: dup", + "231: len", + "232: itob", + "233: extract 6 2", + "234: swap", + "235: concat", + "236: swap", + "237: dup", + "238: len", + "239: int 4", + "240: +", + "241: itob", + "242: extract 6 2", + "243: byte 0x0004", + "244: swap", + "245: concat", + "246: swap", + "247: concat", + "248: swap", + "249: concat", + "250: byte 0x151f7c75", + "251: swap", + "252: concat", + "253: log", + "254: int 1", + "255: retsub" ], [ "5: return" @@ -3241,7 +3510,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "short": "0 -> 1 -> 3 -> 32 -> 34 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3254,17 +3523,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" ], [ - "250: __puya_arc4_router___after_if_else@20:", - "251: int 0", - "252: retsub" + "266: __puya_arc4_router___after_if_else@21:", + "267: int 0", + "268: retsub" ], [ "5: return" @@ -3275,7 +3544,7 @@ }, { "type": "ExecutionPaths", - "count": 14, + "count": 15, "description": "\nCheck: \"is-updatable\", Impact: High, Confidence: High\nDescription: Upgradable Applications\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#upgradable-application\n", "check": "is-updatable", "impact": "High", @@ -3296,27 +3565,28 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "27: int 0", - "28: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "28: int 0", + "29: retsub" ], [ "5: return" @@ -3324,7 +3594,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 35 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3337,57 +3607,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "30: __puya_arc4_router___payment_route@2:", - "31: txn OnCompletion", - "32: !", - "33: assert", - "34: txn ApplicationID", - "35: assert", - "36: callsub payment" - ], - [ - "256: payment:", - "257: proto 0 1", - "258: itxn_begin", - "259: txn Sender", - "260: itxn_field Receiver", - "261: int 5000", - "262: itxn_field Amount", - "263: int pay", - "264: itxn_field TypeEnum", - "265: int 0", - "266: itxn_field Fee", - "267: itxn_submit", - "268: itxn Amount", - "269: retsub" - ], - [ - "37: itob", - "38: byte 0x151f7c75", - "39: swap", - "40: concat", - "41: log", - "42: int 1", - "43: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "31: __puya_arc4_router___payment_route@2:", + "32: txn OnCompletion", + "33: !", + "34: assert", + "35: txn ApplicationID", + "36: assert", + "37: callsub payment" + ], + [ + "272: payment:", + "273: proto 0 1", + "274: itxn_begin", + "275: txn Sender", + "276: itxn_field Receiver", + "277: int 5000", + "278: itxn_field Amount", + "279: int pay", + "280: itxn_field TypeEnum", + "281: int 0", + "282: itxn_field Fee", + "283: itxn_submit", + "284: itxn Amount", + "285: retsub" + ], + [ + "38: itob", + "39: byte 0x151f7c75", + "40: swap", + "41: concat", + "42: log", + "43: int 1", + "44: retsub" ], [ "5: return" @@ -3395,7 +3666,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 36 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3408,69 +3679,62 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "45: __puya_arc4_router___asset_create_route@3:", - "46: txn OnCompletion", - "47: !", - "48: assert", - "49: txn ApplicationID", - "50: assert", - "51: callsub asset_create" - ], - [ - "273: asset_create:", - "274: proto 0 1", - "275: itxn_begin", - "276: global CurrentApplicationAddress", - "277: dupn 3", - "278: itxn_field ConfigAssetClawback", - "279: itxn_field ConfigAssetFreeze", - "280: itxn_field ConfigAssetReserve", - "281: itxn_field ConfigAssetManager", - "282: byte \"https://link_to_ipfs/Mona_Lisa\"", - "283: itxn_field ConfigAssetURL", - "284: byte \"Mona Lisa\"", - "285: itxn_field ConfigAssetName", - "286: byte \"ML\"", - "287: itxn_field ConfigAssetUnitName", - "288: int 2", - "289: itxn_field ConfigAssetDecimals", - "290: int 100", - "291: itxn_field ConfigAssetTotal", - "292: int acfg", - "293: itxn_field TypeEnum", - "294: int 0", - "295: itxn_field Fee", - "296: itxn_submit", - "297: itxn CreatedAssetID", - "298: retsub" - ], - [ - "52: itob", - "53: byte 0x151f7c75", - "54: swap", - "55: concat", - "56: log", - "57: int 1", - "58: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "46: __puya_arc4_router___fungible_asset_create_route@3:", + "47: txn OnCompletion", + "48: !", + "49: assert", + "50: txn ApplicationID", + "51: assert", + "52: callsub fungible_asset_create" + ], + [ + "289: fungible_asset_create:", + "290: proto 0 1", + "291: itxn_begin", + "292: byte \"Royalty Points\"", + "293: itxn_field ConfigAssetName", + "294: byte \"RP\"", + "295: itxn_field ConfigAssetUnitName", + "296: int 2", + "297: itxn_field ConfigAssetDecimals", + "298: int 100000000000", + "299: itxn_field ConfigAssetTotal", + "300: int acfg", + "301: itxn_field TypeEnum", + "302: int 0", + "303: itxn_field Fee", + "304: itxn_submit", + "305: itxn CreatedAssetID", + "306: retsub" + ], + [ + "53: itob", + "54: byte 0x151f7c75", + "55: swap", + "56: concat", + "57: log", + "58: int 1", + "59: retsub" ], [ "5: return" @@ -3478,7 +3742,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 37 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3491,56 +3755,70 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "60: __puya_arc4_router___asset_opt_in_route@4:", - "61: txn OnCompletion", - "62: !", - "63: assert", - "64: txn ApplicationID", - "65: assert", - "66: txna ApplicationArgs 1", - "67: btoi", - "68: txnas Assets", - "69: callsub asset_opt_in" - ], - [ - "302: asset_opt_in:", - "303: proto 1 0", - "304: itxn_begin", - "305: global CurrentApplicationAddress", - "306: int 0", - "307: itxn_field AssetAmount", - "308: frame_dig -1", - "309: itxn_field XferAsset", - "310: itxn_field AssetReceiver", - "311: int axfer", - "312: itxn_field TypeEnum", - "313: int 0", - "314: itxn_field Fee", - "315: itxn_submit", - "316: retsub" - ], - [ - "70: int 1", - "71: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "61: __puya_arc4_router___non_fungible_asset_create_route@4:", + "62: txn OnCompletion", + "63: !", + "64: assert", + "65: txn ApplicationID", + "66: assert", + "67: callsub non_fungible_asset_create" + ], + [ + "310: non_fungible_asset_create:", + "311: proto 0 1", + "312: itxn_begin", + "313: global CurrentApplicationAddress", + "314: dupn 3", + "315: itxn_field ConfigAssetClawback", + "316: itxn_field ConfigAssetFreeze", + "317: itxn_field ConfigAssetReserve", + "318: itxn_field ConfigAssetManager", + "319: byte \"https://link_to_ipfs/Mona_Lisa\"", + "320: itxn_field ConfigAssetURL", + "321: byte \"Mona Lisa\"", + "322: itxn_field ConfigAssetName", + "323: byte \"ML\"", + "324: itxn_field ConfigAssetUnitName", + "325: int 2", + "326: itxn_field ConfigAssetDecimals", + "327: int 100", + "328: itxn_field ConfigAssetTotal", + "329: int acfg", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: itxn CreatedAssetID", + "335: retsub" + ], + [ + "68: itob", + "69: byte 0x151f7c75", + "70: swap", + "71: concat", + "72: log", + "73: int 1", + "74: retsub" ], [ "5: return" @@ -3548,7 +3826,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 38 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3561,61 +3839,57 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "73: __puya_arc4_router___asset_transfer_route@5:", - "74: txn OnCompletion", - "75: !", - "76: assert", - "77: txn ApplicationID", - "78: assert", - "79: txna ApplicationArgs 1", - "80: btoi", - "81: txnas Assets", - "82: txna ApplicationArgs 2", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "76: __puya_arc4_router___asset_opt_in_route@5:", + "77: txn OnCompletion", + "78: !", + "79: assert", + "80: txn ApplicationID", + "81: assert", + "82: txna ApplicationArgs 1", "83: btoi", - "84: txnas Accounts", - "85: txna ApplicationArgs 3", - "86: btoi", - "87: callsub asset_transfer" - ], - [ - "320: asset_transfer:", - "321: proto 3 0", - "322: itxn_begin", - "323: frame_dig -1", - "324: itxn_field AssetAmount", - "325: frame_dig -3", - "326: itxn_field XferAsset", - "327: frame_dig -2", - "328: itxn_field AssetReceiver", - "329: int axfer", - "330: itxn_field TypeEnum", - "331: int 0", - "332: itxn_field Fee", - "333: itxn_submit", - "334: retsub" + "84: txnas Assets", + "85: callsub asset_opt_in" + ], + [ + "339: asset_opt_in:", + "340: proto 1 0", + "341: itxn_begin", + "342: global CurrentApplicationAddress", + "343: int 0", + "344: itxn_field AssetAmount", + "345: frame_dig -1", + "346: itxn_field XferAsset", + "347: itxn_field AssetReceiver", + "348: int axfer", + "349: itxn_field TypeEnum", + "350: int 0", + "351: itxn_field Fee", + "352: itxn_submit", + "353: retsub" ], [ - "88: int 1", - "89: retsub" + "86: int 1", + "87: retsub" ], [ "5: return" @@ -3623,7 +3897,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 39 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3636,55 +3910,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "91: __puya_arc4_router___asset_freeze_route@6:", - "92: txn OnCompletion", - "93: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "89: __puya_arc4_router___asset_transfer_route@6:", + "90: txn OnCompletion", + "91: !", + "92: assert", + "93: txn ApplicationID", "94: assert", - "95: txn ApplicationID", - "96: assert", - "97: txna ApplicationArgs 1", - "98: btoi", - "99: txnas Accounts", - "100: txna ApplicationArgs 2", - "101: btoi", - "102: txnas Assets", - "103: callsub asset_freeze" - ], - [ - "338: asset_freeze:", - "339: proto 2 0", - "340: itxn_begin", - "341: int 1", - "342: itxn_field FreezeAssetFrozen", - "343: frame_dig -1", - "344: itxn_field FreezeAsset", - "345: frame_dig -2", - "346: itxn_field FreezeAssetAccount", - "347: int afrz", - "348: itxn_field TypeEnum", - "349: int 0", - "350: itxn_field Fee", - "351: itxn_submit", - "352: retsub" + "95: txna ApplicationArgs 1", + "96: btoi", + "97: txnas Assets", + "98: txna ApplicationArgs 2", + "99: btoi", + "100: txnas Accounts", + "101: txna ApplicationArgs 3", + "102: btoi", + "103: callsub asset_transfer" + ], + [ + "357: asset_transfer:", + "358: proto 3 0", + "359: itxn_begin", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -3", + "363: itxn_field XferAsset", + "364: frame_dig -2", + "365: itxn_field AssetReceiver", + "366: int axfer", + "367: itxn_field TypeEnum", + "368: int 0", + "369: itxn_field Fee", + "370: itxn_submit", + "371: retsub" ], [ "104: int 1", @@ -3696,7 +3973,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 40 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3709,26 +3986,27 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "107: __puya_arc4_router___asset_revoke_route@7:", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "107: __puya_arc4_router___asset_freeze_route@7:", "108: txn OnCompletion", "109: !", "110: assert", @@ -3736,36 +4014,32 @@ "112: assert", "113: txna ApplicationArgs 1", "114: btoi", - "115: txnas Assets", + "115: txnas Accounts", "116: txna ApplicationArgs 2", "117: btoi", - "118: txnas Accounts", - "119: txna ApplicationArgs 3", - "120: btoi", - "121: callsub asset_revoke" + "118: txnas Assets", + "119: callsub asset_freeze" ], [ - "356: asset_revoke:", - "357: proto 3 0", - "358: itxn_begin", - "359: global CurrentApplicationAddress", - "360: frame_dig -1", - "361: itxn_field AssetAmount", - "362: frame_dig -2", - "363: itxn_field AssetSender", - "364: frame_dig -3", - "365: itxn_field XferAsset", - "366: itxn_field AssetReceiver", - "367: int axfer", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "375: asset_freeze:", + "376: proto 2 0", + "377: itxn_begin", + "378: int 1", + "379: itxn_field FreezeAssetFrozen", + "380: frame_dig -1", + "381: itxn_field FreezeAsset", + "382: frame_dig -2", + "383: itxn_field FreezeAssetAccount", + "384: int afrz", + "385: itxn_field TypeEnum", + "386: int 0", + "387: itxn_field Fee", + "388: itxn_submit", + "389: retsub" ], [ - "122: int 1", - "123: retsub" + "120: int 1", + "121: retsub" ], [ "5: return" @@ -3773,7 +4047,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 41 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3786,60 +4060,64 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "125: __puya_arc4_router___asset_config_route@8:", - "126: txn OnCompletion", - "127: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "123: __puya_arc4_router___asset_revoke_route@8:", + "124: txn OnCompletion", + "125: !", + "126: assert", + "127: txn ApplicationID", "128: assert", - "129: txn ApplicationID", - "130: assert", - "131: txna ApplicationArgs 1", - "132: btoi", - "133: txnas Assets", - "134: callsub asset_config" - ], - [ - "376: asset_config:", - "377: proto 1 0", - "378: itxn_begin", - "379: global CurrentApplicationAddress", - "380: dup", - "381: txn Sender", - "382: dup", - "383: itxn_field ConfigAssetClawback", - "384: itxn_field ConfigAssetFreeze", - "385: itxn_field ConfigAssetReserve", - "386: itxn_field ConfigAssetManager", - "387: frame_dig -1", - "388: itxn_field ConfigAsset", - "389: int acfg", - "390: itxn_field TypeEnum", - "391: int 0", - "392: itxn_field Fee", - "393: itxn_submit", - "394: retsub" - ], - [ - "135: int 1", - "136: retsub" + "129: txna ApplicationArgs 1", + "130: btoi", + "131: txnas Assets", + "132: txna ApplicationArgs 2", + "133: btoi", + "134: txnas Accounts", + "135: txna ApplicationArgs 3", + "136: btoi", + "137: callsub asset_revoke" + ], + [ + "393: asset_revoke:", + "394: proto 3 0", + "395: itxn_begin", + "396: global CurrentApplicationAddress", + "397: frame_dig -1", + "398: itxn_field AssetAmount", + "399: frame_dig -2", + "400: itxn_field AssetSender", + "401: frame_dig -3", + "402: itxn_field XferAsset", + "403: itxn_field AssetReceiver", + "404: int axfer", + "405: itxn_field TypeEnum", + "406: int 0", + "407: itxn_field Fee", + "408: itxn_submit", + "409: retsub" + ], + [ + "138: int 1", + "139: retsub" ], [ "5: return" @@ -3847,7 +4125,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 42 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3860,52 +4138,61 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "138: __puya_arc4_router___asset_delete_route@9:", - "139: txn OnCompletion", - "140: !", - "141: assert", - "142: txn ApplicationID", - "143: assert", - "144: txna ApplicationArgs 1", - "145: btoi", - "146: txnas Assets", - "147: callsub asset_delete" - ], - [ - "398: asset_delete:", - "399: proto 1 0", - "400: itxn_begin", - "401: frame_dig -1", - "402: itxn_field ConfigAsset", - "403: int acfg", - "404: itxn_field TypeEnum", - "405: int 0", - "406: itxn_field Fee", - "407: itxn_submit", - "408: retsub" - ], - [ - "148: int 1", - "149: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "141: __puya_arc4_router___asset_config_route@9:", + "142: txn OnCompletion", + "143: !", + "144: assert", + "145: txn ApplicationID", + "146: assert", + "147: txna ApplicationArgs 1", + "148: btoi", + "149: txnas Assets", + "150: callsub asset_config" + ], + [ + "413: asset_config:", + "414: proto 1 0", + "415: itxn_begin", + "416: global CurrentApplicationAddress", + "417: dup", + "418: txn Sender", + "419: dup", + "420: itxn_field ConfigAssetClawback", + "421: itxn_field ConfigAssetFreeze", + "422: itxn_field ConfigAssetReserve", + "423: itxn_field ConfigAssetManager", + "424: frame_dig -1", + "425: itxn_field ConfigAsset", + "426: int acfg", + "427: itxn_field TypeEnum", + "428: int 0", + "429: itxn_field Fee", + "430: itxn_submit", + "431: retsub" + ], + [ + "151: int 1", + "152: retsub" ], [ "5: return" @@ -3913,7 +4200,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 43 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -3926,84 +4213,53 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "151: __puya_arc4_router___multi_inner_txns_route@10:", - "152: txn OnCompletion", - "153: !", - "154: assert", - "155: txn ApplicationID", - "156: assert", - "157: txna ApplicationArgs 1", - "158: btoi", - "159: txnas Applications", - "160: callsub multi_inner_txns" - ], - [ - "412: multi_inner_txns:", - "413: proto 1 2", - "414: txn Sender", - "415: itxn_begin", - "416: itxn_field Receiver", - "417: int 5000", - "418: itxn_field Amount", - "419: int pay", - "420: itxn_field TypeEnum", - "421: int 0", - "422: itxn_field Fee", - "423: itxn_next", - "424: method hello(string)string", - "425: itxn_field ApplicationArgs", - "426: byte 0x0005576f726c64", - "427: itxn_field ApplicationArgs", - "428: frame_dig -1", - "429: itxn_field ApplicationID", - "430: int appl", - "431: itxn_field TypeEnum", - "432: int 0", - "433: itxn_field Fee", - "434: itxn_submit", - "435: gitxn 0 Amount", - "436: itxn LastLog", - "437: dup", - "438: extract 4 0", - "439: swap", - "440: extract 0 4", - "441: byte 0x151f7c75", - "442: ==", - "443: assert", - "444: retsub" - ], - [ - "161: swap", - "162: itob", - "163: byte 0x000a", - "164: concat", - "165: swap", - "166: concat", - "167: byte 0x151f7c75", - "168: swap", - "169: concat", - "170: log", - "171: int 1", - "172: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "154: __puya_arc4_router___asset_delete_route@10:", + "155: txn OnCompletion", + "156: !", + "157: assert", + "158: txn ApplicationID", + "159: assert", + "160: txna ApplicationArgs 1", + "161: btoi", + "162: txnas Assets", + "163: callsub asset_delete" + ], + [ + "435: asset_delete:", + "436: proto 1 0", + "437: itxn_begin", + "438: frame_dig -1", + "439: itxn_field ConfigAsset", + "440: int acfg", + "441: itxn_field TypeEnum", + "442: int 0", + "443: itxn_field Fee", + "444: itxn_submit", + "445: retsub" + ], + [ + "164: int 1", + "165: retsub" ], [ "5: return" @@ -4011,7 +4267,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 44 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4024,57 +4280,85 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "174: __puya_arc4_router___deploy_app_route@11:", - "175: txn OnCompletion", - "176: !", - "177: assert", - "178: txn ApplicationID", - "179: assert", - "180: callsub deploy_app" - ], - [ - "448: deploy_app:", - "449: proto 0 1", - "450: itxn_begin", - "451: byte 0x0a810143", - "452: itxn_field ClearStateProgramPages", - "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "454: itxn_field ApprovalProgramPages", - "455: int appl", - "456: itxn_field TypeEnum", - "457: int 0", - "458: itxn_field Fee", - "459: itxn_submit", - "460: itxn CreatedApplicationID", - "461: retsub" - ], - [ - "181: itob", - "182: byte 0x151f7c75", - "183: swap", - "184: concat", - "185: log", - "186: int 1", - "187: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "167: __puya_arc4_router___multi_inner_txns_route@11:", + "168: txn OnCompletion", + "169: !", + "170: assert", + "171: txn ApplicationID", + "172: assert", + "173: txna ApplicationArgs 1", + "174: btoi", + "175: txnas Applications", + "176: callsub multi_inner_txns" + ], + [ + "449: multi_inner_txns:", + "450: proto 1 2", + "451: txn Sender", + "452: itxn_begin", + "453: itxn_field Receiver", + "454: int 5000", + "455: itxn_field Amount", + "456: int pay", + "457: itxn_field TypeEnum", + "458: int 0", + "459: itxn_field Fee", + "460: itxn_next", + "461: method hello(string)string", + "462: itxn_field ApplicationArgs", + "463: byte 0x0005576f726c64", + "464: itxn_field ApplicationArgs", + "465: frame_dig -1", + "466: itxn_field ApplicationID", + "467: int appl", + "468: itxn_field TypeEnum", + "469: int 0", + "470: itxn_field Fee", + "471: itxn_submit", + "472: gitxn 0 Amount", + "473: itxn LastLog", + "474: dup", + "475: extract 4 0", + "476: swap", + "477: extract 0 4", + "478: byte 0x151f7c75", + "479: ==", + "480: assert", + "481: retsub" + ], + [ + "177: swap", + "178: itob", + "179: byte 0x000a", + "180: concat", + "181: swap", + "182: concat", + "183: byte 0x151f7c75", + "184: swap", + "185: concat", + "186: log", + "187: int 1", + "188: retsub" ], [ "5: return" @@ -4082,7 +4366,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 45 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4095,57 +4379,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "189: __puya_arc4_router___arc4_deploy_app_route@12:", - "190: txn OnCompletion", - "191: !", - "192: assert", - "193: txn ApplicationID", - "194: assert", - "195: callsub arc4_deploy_app" - ], - [ - "465: arc4_deploy_app:", - "466: proto 0 1", - "467: itxn_begin", - "468: byte 0x0a810143", - "469: itxn_field ClearStateProgramPages", - "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "471: itxn_field ApprovalProgramPages", - "472: int appl", - "473: itxn_field TypeEnum", - "474: int 0", - "475: itxn_field Fee", - "476: itxn_submit", - "477: itxn CreatedApplicationID", - "478: retsub" - ], - [ - "196: itob", - "197: byte 0x151f7c75", - "198: swap", - "199: concat", - "200: log", - "201: int 1", - "202: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "190: __puya_arc4_router___deploy_app_route@12:", + "191: txn OnCompletion", + "192: !", + "193: assert", + "194: txn ApplicationID", + "195: assert", + "196: callsub deploy_app" + ], + [ + "485: deploy_app:", + "486: proto 0 1", + "487: itxn_begin", + "488: byte 0x0a810143", + "489: itxn_field ClearStateProgramPages", + "490: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "491: itxn_field ApprovalProgramPages", + "492: int appl", + "493: itxn_field TypeEnum", + "494: int 0", + "495: itxn_field Fee", + "496: itxn_submit", + "497: itxn CreatedApplicationID", + "498: retsub" + ], + [ + "197: itob", + "198: byte 0x151f7c75", + "199: swap", + "200: concat", + "201: log", + "202: int 1", + "203: retsub" ], [ "5: return" @@ -4153,7 +4438,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 46 -> 29 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4166,109 +4451,182 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "204: __puya_arc4_router___noop_app_call_route@13:", - "205: txn OnCompletion", - "206: !", - "207: assert", - "208: txn ApplicationID", - "209: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "212: txnas Applications", - "213: callsub noop_app_call" - ], - [ - "482: noop_app_call:", - "483: proto 1 2", - "484: itxn_begin", - "485: method hello(string)string", - "486: itxn_field ApplicationArgs", - "487: byte 0x0005576f726c64", - "488: itxn_field ApplicationArgs", - "489: frame_dig -1", - "490: itxn_field ApplicationID", - "491: int appl", - "492: itxn_field TypeEnum", - "493: int 0", - "494: itxn_field Fee", - "495: itxn_submit", - "496: itxn LastLog", - "497: dup", - "498: extract 4 0", - "499: swap", - "500: extract 0 4", - "501: byte 0x151f7c75", - "502: ==", - "503: assert", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "205: __puya_arc4_router___arc4_deploy_app_route@13:", + "206: txn OnCompletion", + "207: !", + "208: assert", + "209: txn ApplicationID", + "210: assert", + "211: callsub arc4_deploy_app" + ], + [ + "502: arc4_deploy_app:", + "503: proto 0 1", "504: itxn_begin", - "505: frame_dig -1", - "506: itxn_field ApplicationID", - "507: method hello(string)string", - "508: itxn_field ApplicationArgs", - "509: byte 0x0005616761696e", - "510: itxn_field ApplicationArgs", - "511: int appl", - "512: itxn_field TypeEnum", - "513: int 0", - "514: itxn_field Fee", - "515: itxn_submit", - "516: itxn LastLog", - "517: dup", - "518: extract 4 0", - "519: swap", - "520: extract 0 4", - "521: byte 0x151f7c75", - "522: ==", - "523: assert", - "524: extract 2 0", - "525: retsub" - ], - [ - "214: dup", - "215: len", - "216: itob", - "217: extract 6 2", - "218: swap", - "219: concat", - "220: swap", - "221: dup", - "222: len", - "223: int 4", - "224: +", - "225: itob", - "226: extract 6 2", - "227: byte 0x0004", - "228: swap", - "229: concat", - "230: swap", - "231: concat", - "232: swap", - "233: concat", - "234: byte 0x151f7c75", - "235: swap", - "236: concat", - "237: log", - "238: int 1", - "239: retsub" + "505: byte 0x0a810143", + "506: itxn_field ClearStateProgramPages", + "507: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "508: itxn_field ApprovalProgramPages", + "509: int appl", + "510: itxn_field TypeEnum", + "511: int 0", + "512: itxn_field Fee", + "513: itxn_submit", + "514: itxn CreatedApplicationID", + "515: retsub" + ], + [ + "212: itob", + "213: byte 0x151f7c75", + "214: swap", + "215: concat", + "216: log", + "217: int 1", + "218: retsub" + ], + [ + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 30 -> 47 -> 31 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@17" + ], + [ + "13: method payment()uint64", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "220: __puya_arc4_router___noop_app_call_route@14:", + "221: txn OnCompletion", + "222: !", + "223: assert", + "224: txn ApplicationID", + "225: assert", + "226: txna ApplicationArgs 1", + "227: btoi", + "228: txnas Applications", + "229: callsub noop_app_call" + ], + [ + "519: noop_app_call:", + "520: proto 1 2", + "521: itxn_begin", + "522: method hello(string)string", + "523: itxn_field ApplicationArgs", + "524: byte 0x0005576f726c64", + "525: itxn_field ApplicationArgs", + "526: frame_dig -1", + "527: itxn_field ApplicationID", + "528: int appl", + "529: itxn_field TypeEnum", + "530: int 0", + "531: itxn_field Fee", + "532: itxn_submit", + "533: itxn LastLog", + "534: dup", + "535: extract 4 0", + "536: swap", + "537: extract 0 4", + "538: byte 0x151f7c75", + "539: ==", + "540: assert", + "541: itxn_begin", + "542: frame_dig -1", + "543: itxn_field ApplicationID", + "544: method hello(string)string", + "545: itxn_field ApplicationArgs", + "546: byte 0x0005616761696e", + "547: itxn_field ApplicationArgs", + "548: int appl", + "549: itxn_field TypeEnum", + "550: int 0", + "551: itxn_field Fee", + "552: itxn_submit", + "553: itxn LastLog", + "554: dup", + "555: extract 4 0", + "556: swap", + "557: extract 0 4", + "558: byte 0x151f7c75", + "559: ==", + "560: assert", + "561: extract 2 0", + "562: retsub" + ], + [ + "230: dup", + "231: len", + "232: itob", + "233: extract 6 2", + "234: swap", + "235: concat", + "236: swap", + "237: dup", + "238: len", + "239: int 4", + "240: +", + "241: itob", + "242: extract 6 2", + "243: byte 0x0004", + "244: swap", + "245: concat", + "246: swap", + "247: concat", + "248: swap", + "249: concat", + "250: byte 0x151f7c75", + "251: swap", + "252: concat", + "253: log", + "254: int 1", + "255: retsub" ], [ "5: return" @@ -4276,7 +4634,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "short": "0 -> 1 -> 3 -> 32 -> 34 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4289,17 +4647,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" ], [ - "250: __puya_arc4_router___after_if_else@20:", - "251: int 0", - "252: retsub" + "266: __puya_arc4_router___after_if_else@21:", + "267: int 0", + "268: retsub" ], [ "5: return" @@ -4310,7 +4668,7 @@ }, { "type": "ExecutionPaths", - "count": 15, + "count": 16, "description": "\nCheck: \"missing-fee-check\", Impact: High, Confidence: High\nDescription: Missing Fee Field Validation\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#missing-fee-field-validation\n", "check": "missing-fee-check", "impact": "High", @@ -4331,27 +4689,28 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "27: int 0", - "28: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "28: int 0", + "29: retsub" ], [ "5: return" @@ -4359,7 +4718,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 35 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4372,57 +4731,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "30: __puya_arc4_router___payment_route@2:", - "31: txn OnCompletion", - "32: !", - "33: assert", - "34: txn ApplicationID", - "35: assert", - "36: callsub payment" - ], - [ - "256: payment:", - "257: proto 0 1", - "258: itxn_begin", - "259: txn Sender", - "260: itxn_field Receiver", - "261: int 5000", - "262: itxn_field Amount", - "263: int pay", - "264: itxn_field TypeEnum", - "265: int 0", - "266: itxn_field Fee", - "267: itxn_submit", - "268: itxn Amount", - "269: retsub" - ], - [ - "37: itob", - "38: byte 0x151f7c75", - "39: swap", - "40: concat", - "41: log", - "42: int 1", - "43: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "31: __puya_arc4_router___payment_route@2:", + "32: txn OnCompletion", + "33: !", + "34: assert", + "35: txn ApplicationID", + "36: assert", + "37: callsub payment" + ], + [ + "272: payment:", + "273: proto 0 1", + "274: itxn_begin", + "275: txn Sender", + "276: itxn_field Receiver", + "277: int 5000", + "278: itxn_field Amount", + "279: int pay", + "280: itxn_field TypeEnum", + "281: int 0", + "282: itxn_field Fee", + "283: itxn_submit", + "284: itxn Amount", + "285: retsub" + ], + [ + "38: itob", + "39: byte 0x151f7c75", + "40: swap", + "41: concat", + "42: log", + "43: int 1", + "44: retsub" ], [ "5: return" @@ -4430,7 +4790,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 36 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4443,69 +4803,62 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "45: __puya_arc4_router___asset_create_route@3:", - "46: txn OnCompletion", - "47: !", - "48: assert", - "49: txn ApplicationID", - "50: assert", - "51: callsub asset_create" - ], - [ - "273: asset_create:", - "274: proto 0 1", - "275: itxn_begin", - "276: global CurrentApplicationAddress", - "277: dupn 3", - "278: itxn_field ConfigAssetClawback", - "279: itxn_field ConfigAssetFreeze", - "280: itxn_field ConfigAssetReserve", - "281: itxn_field ConfigAssetManager", - "282: byte \"https://link_to_ipfs/Mona_Lisa\"", - "283: itxn_field ConfigAssetURL", - "284: byte \"Mona Lisa\"", - "285: itxn_field ConfigAssetName", - "286: byte \"ML\"", - "287: itxn_field ConfigAssetUnitName", - "288: int 2", - "289: itxn_field ConfigAssetDecimals", - "290: int 100", - "291: itxn_field ConfigAssetTotal", - "292: int acfg", - "293: itxn_field TypeEnum", - "294: int 0", - "295: itxn_field Fee", - "296: itxn_submit", - "297: itxn CreatedAssetID", - "298: retsub" - ], - [ - "52: itob", - "53: byte 0x151f7c75", - "54: swap", - "55: concat", - "56: log", - "57: int 1", - "58: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "46: __puya_arc4_router___fungible_asset_create_route@3:", + "47: txn OnCompletion", + "48: !", + "49: assert", + "50: txn ApplicationID", + "51: assert", + "52: callsub fungible_asset_create" + ], + [ + "289: fungible_asset_create:", + "290: proto 0 1", + "291: itxn_begin", + "292: byte \"Royalty Points\"", + "293: itxn_field ConfigAssetName", + "294: byte \"RP\"", + "295: itxn_field ConfigAssetUnitName", + "296: int 2", + "297: itxn_field ConfigAssetDecimals", + "298: int 100000000000", + "299: itxn_field ConfigAssetTotal", + "300: int acfg", + "301: itxn_field TypeEnum", + "302: int 0", + "303: itxn_field Fee", + "304: itxn_submit", + "305: itxn CreatedAssetID", + "306: retsub" + ], + [ + "53: itob", + "54: byte 0x151f7c75", + "55: swap", + "56: concat", + "57: log", + "58: int 1", + "59: retsub" ], [ "5: return" @@ -4513,7 +4866,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 37 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4526,56 +4879,70 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "60: __puya_arc4_router___asset_opt_in_route@4:", - "61: txn OnCompletion", - "62: !", - "63: assert", - "64: txn ApplicationID", - "65: assert", - "66: txna ApplicationArgs 1", - "67: btoi", - "68: txnas Assets", - "69: callsub asset_opt_in" - ], - [ - "302: asset_opt_in:", - "303: proto 1 0", - "304: itxn_begin", - "305: global CurrentApplicationAddress", - "306: int 0", - "307: itxn_field AssetAmount", - "308: frame_dig -1", - "309: itxn_field XferAsset", - "310: itxn_field AssetReceiver", - "311: int axfer", - "312: itxn_field TypeEnum", - "313: int 0", - "314: itxn_field Fee", - "315: itxn_submit", - "316: retsub" - ], - [ - "70: int 1", - "71: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "61: __puya_arc4_router___non_fungible_asset_create_route@4:", + "62: txn OnCompletion", + "63: !", + "64: assert", + "65: txn ApplicationID", + "66: assert", + "67: callsub non_fungible_asset_create" + ], + [ + "310: non_fungible_asset_create:", + "311: proto 0 1", + "312: itxn_begin", + "313: global CurrentApplicationAddress", + "314: dupn 3", + "315: itxn_field ConfigAssetClawback", + "316: itxn_field ConfigAssetFreeze", + "317: itxn_field ConfigAssetReserve", + "318: itxn_field ConfigAssetManager", + "319: byte \"https://link_to_ipfs/Mona_Lisa\"", + "320: itxn_field ConfigAssetURL", + "321: byte \"Mona Lisa\"", + "322: itxn_field ConfigAssetName", + "323: byte \"ML\"", + "324: itxn_field ConfigAssetUnitName", + "325: int 2", + "326: itxn_field ConfigAssetDecimals", + "327: int 100", + "328: itxn_field ConfigAssetTotal", + "329: int acfg", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: itxn CreatedAssetID", + "335: retsub" + ], + [ + "68: itob", + "69: byte 0x151f7c75", + "70: swap", + "71: concat", + "72: log", + "73: int 1", + "74: retsub" ], [ "5: return" @@ -4583,7 +4950,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 38 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4596,61 +4963,57 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "73: __puya_arc4_router___asset_transfer_route@5:", - "74: txn OnCompletion", - "75: !", - "76: assert", - "77: txn ApplicationID", - "78: assert", - "79: txna ApplicationArgs 1", - "80: btoi", - "81: txnas Assets", - "82: txna ApplicationArgs 2", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "76: __puya_arc4_router___asset_opt_in_route@5:", + "77: txn OnCompletion", + "78: !", + "79: assert", + "80: txn ApplicationID", + "81: assert", + "82: txna ApplicationArgs 1", "83: btoi", - "84: txnas Accounts", - "85: txna ApplicationArgs 3", - "86: btoi", - "87: callsub asset_transfer" - ], - [ - "320: asset_transfer:", - "321: proto 3 0", - "322: itxn_begin", - "323: frame_dig -1", - "324: itxn_field AssetAmount", - "325: frame_dig -3", - "326: itxn_field XferAsset", - "327: frame_dig -2", - "328: itxn_field AssetReceiver", - "329: int axfer", - "330: itxn_field TypeEnum", - "331: int 0", - "332: itxn_field Fee", - "333: itxn_submit", - "334: retsub" + "84: txnas Assets", + "85: callsub asset_opt_in" ], [ - "88: int 1", - "89: retsub" + "339: asset_opt_in:", + "340: proto 1 0", + "341: itxn_begin", + "342: global CurrentApplicationAddress", + "343: int 0", + "344: itxn_field AssetAmount", + "345: frame_dig -1", + "346: itxn_field XferAsset", + "347: itxn_field AssetReceiver", + "348: int axfer", + "349: itxn_field TypeEnum", + "350: int 0", + "351: itxn_field Fee", + "352: itxn_submit", + "353: retsub" + ], + [ + "86: int 1", + "87: retsub" ], [ "5: return" @@ -4658,7 +5021,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 39 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4671,55 +5034,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "91: __puya_arc4_router___asset_freeze_route@6:", - "92: txn OnCompletion", - "93: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "89: __puya_arc4_router___asset_transfer_route@6:", + "90: txn OnCompletion", + "91: !", + "92: assert", + "93: txn ApplicationID", "94: assert", - "95: txn ApplicationID", - "96: assert", - "97: txna ApplicationArgs 1", - "98: btoi", - "99: txnas Accounts", - "100: txna ApplicationArgs 2", - "101: btoi", - "102: txnas Assets", - "103: callsub asset_freeze" - ], - [ - "338: asset_freeze:", - "339: proto 2 0", - "340: itxn_begin", - "341: int 1", - "342: itxn_field FreezeAssetFrozen", - "343: frame_dig -1", - "344: itxn_field FreezeAsset", - "345: frame_dig -2", - "346: itxn_field FreezeAssetAccount", - "347: int afrz", - "348: itxn_field TypeEnum", - "349: int 0", - "350: itxn_field Fee", - "351: itxn_submit", - "352: retsub" + "95: txna ApplicationArgs 1", + "96: btoi", + "97: txnas Assets", + "98: txna ApplicationArgs 2", + "99: btoi", + "100: txnas Accounts", + "101: txna ApplicationArgs 3", + "102: btoi", + "103: callsub asset_transfer" + ], + [ + "357: asset_transfer:", + "358: proto 3 0", + "359: itxn_begin", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -3", + "363: itxn_field XferAsset", + "364: frame_dig -2", + "365: itxn_field AssetReceiver", + "366: int axfer", + "367: itxn_field TypeEnum", + "368: int 0", + "369: itxn_field Fee", + "370: itxn_submit", + "371: retsub" ], [ "104: int 1", @@ -4731,7 +5097,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 40 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4744,26 +5110,27 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "107: __puya_arc4_router___asset_revoke_route@7:", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "107: __puya_arc4_router___asset_freeze_route@7:", "108: txn OnCompletion", "109: !", "110: assert", @@ -4771,36 +5138,32 @@ "112: assert", "113: txna ApplicationArgs 1", "114: btoi", - "115: txnas Assets", + "115: txnas Accounts", "116: txna ApplicationArgs 2", "117: btoi", - "118: txnas Accounts", - "119: txna ApplicationArgs 3", - "120: btoi", - "121: callsub asset_revoke" + "118: txnas Assets", + "119: callsub asset_freeze" ], [ - "356: asset_revoke:", - "357: proto 3 0", - "358: itxn_begin", - "359: global CurrentApplicationAddress", - "360: frame_dig -1", - "361: itxn_field AssetAmount", - "362: frame_dig -2", - "363: itxn_field AssetSender", - "364: frame_dig -3", - "365: itxn_field XferAsset", - "366: itxn_field AssetReceiver", - "367: int axfer", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "375: asset_freeze:", + "376: proto 2 0", + "377: itxn_begin", + "378: int 1", + "379: itxn_field FreezeAssetFrozen", + "380: frame_dig -1", + "381: itxn_field FreezeAsset", + "382: frame_dig -2", + "383: itxn_field FreezeAssetAccount", + "384: int afrz", + "385: itxn_field TypeEnum", + "386: int 0", + "387: itxn_field Fee", + "388: itxn_submit", + "389: retsub" ], [ - "122: int 1", - "123: retsub" + "120: int 1", + "121: retsub" ], [ "5: return" @@ -4808,7 +5171,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 41 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4821,60 +5184,64 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "125: __puya_arc4_router___asset_config_route@8:", - "126: txn OnCompletion", - "127: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "123: __puya_arc4_router___asset_revoke_route@8:", + "124: txn OnCompletion", + "125: !", + "126: assert", + "127: txn ApplicationID", "128: assert", - "129: txn ApplicationID", - "130: assert", - "131: txna ApplicationArgs 1", - "132: btoi", - "133: txnas Assets", - "134: callsub asset_config" - ], - [ - "376: asset_config:", - "377: proto 1 0", - "378: itxn_begin", - "379: global CurrentApplicationAddress", - "380: dup", - "381: txn Sender", - "382: dup", - "383: itxn_field ConfigAssetClawback", - "384: itxn_field ConfigAssetFreeze", - "385: itxn_field ConfigAssetReserve", - "386: itxn_field ConfigAssetManager", - "387: frame_dig -1", - "388: itxn_field ConfigAsset", - "389: int acfg", - "390: itxn_field TypeEnum", - "391: int 0", - "392: itxn_field Fee", - "393: itxn_submit", - "394: retsub" - ], - [ - "135: int 1", - "136: retsub" + "129: txna ApplicationArgs 1", + "130: btoi", + "131: txnas Assets", + "132: txna ApplicationArgs 2", + "133: btoi", + "134: txnas Accounts", + "135: txna ApplicationArgs 3", + "136: btoi", + "137: callsub asset_revoke" + ], + [ + "393: asset_revoke:", + "394: proto 3 0", + "395: itxn_begin", + "396: global CurrentApplicationAddress", + "397: frame_dig -1", + "398: itxn_field AssetAmount", + "399: frame_dig -2", + "400: itxn_field AssetSender", + "401: frame_dig -3", + "402: itxn_field XferAsset", + "403: itxn_field AssetReceiver", + "404: int axfer", + "405: itxn_field TypeEnum", + "406: int 0", + "407: itxn_field Fee", + "408: itxn_submit", + "409: retsub" + ], + [ + "138: int 1", + "139: retsub" ], [ "5: return" @@ -4882,7 +5249,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 42 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4895,52 +5262,61 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "138: __puya_arc4_router___asset_delete_route@9:", - "139: txn OnCompletion", - "140: !", - "141: assert", - "142: txn ApplicationID", - "143: assert", - "144: txna ApplicationArgs 1", - "145: btoi", - "146: txnas Assets", - "147: callsub asset_delete" - ], - [ - "398: asset_delete:", - "399: proto 1 0", - "400: itxn_begin", - "401: frame_dig -1", - "402: itxn_field ConfigAsset", - "403: int acfg", - "404: itxn_field TypeEnum", - "405: int 0", - "406: itxn_field Fee", - "407: itxn_submit", - "408: retsub" - ], - [ - "148: int 1", - "149: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "141: __puya_arc4_router___asset_config_route@9:", + "142: txn OnCompletion", + "143: !", + "144: assert", + "145: txn ApplicationID", + "146: assert", + "147: txna ApplicationArgs 1", + "148: btoi", + "149: txnas Assets", + "150: callsub asset_config" + ], + [ + "413: asset_config:", + "414: proto 1 0", + "415: itxn_begin", + "416: global CurrentApplicationAddress", + "417: dup", + "418: txn Sender", + "419: dup", + "420: itxn_field ConfigAssetClawback", + "421: itxn_field ConfigAssetFreeze", + "422: itxn_field ConfigAssetReserve", + "423: itxn_field ConfigAssetManager", + "424: frame_dig -1", + "425: itxn_field ConfigAsset", + "426: int acfg", + "427: itxn_field TypeEnum", + "428: int 0", + "429: itxn_field Fee", + "430: itxn_submit", + "431: retsub" + ], + [ + "151: int 1", + "152: retsub" ], [ "5: return" @@ -4948,7 +5324,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 43 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -4961,84 +5337,53 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "151: __puya_arc4_router___multi_inner_txns_route@10:", - "152: txn OnCompletion", - "153: !", - "154: assert", - "155: txn ApplicationID", - "156: assert", - "157: txna ApplicationArgs 1", - "158: btoi", - "159: txnas Applications", - "160: callsub multi_inner_txns" - ], - [ - "412: multi_inner_txns:", - "413: proto 1 2", - "414: txn Sender", - "415: itxn_begin", - "416: itxn_field Receiver", - "417: int 5000", - "418: itxn_field Amount", - "419: int pay", - "420: itxn_field TypeEnum", - "421: int 0", - "422: itxn_field Fee", - "423: itxn_next", - "424: method hello(string)string", - "425: itxn_field ApplicationArgs", - "426: byte 0x0005576f726c64", - "427: itxn_field ApplicationArgs", - "428: frame_dig -1", - "429: itxn_field ApplicationID", - "430: int appl", - "431: itxn_field TypeEnum", - "432: int 0", - "433: itxn_field Fee", - "434: itxn_submit", - "435: gitxn 0 Amount", - "436: itxn LastLog", - "437: dup", - "438: extract 4 0", - "439: swap", - "440: extract 0 4", - "441: byte 0x151f7c75", - "442: ==", - "443: assert", - "444: retsub" - ], - [ - "161: swap", - "162: itob", - "163: byte 0x000a", - "164: concat", - "165: swap", - "166: concat", - "167: byte 0x151f7c75", - "168: swap", - "169: concat", - "170: log", - "171: int 1", - "172: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "154: __puya_arc4_router___asset_delete_route@10:", + "155: txn OnCompletion", + "156: !", + "157: assert", + "158: txn ApplicationID", + "159: assert", + "160: txna ApplicationArgs 1", + "161: btoi", + "162: txnas Assets", + "163: callsub asset_delete" + ], + [ + "435: asset_delete:", + "436: proto 1 0", + "437: itxn_begin", + "438: frame_dig -1", + "439: itxn_field ConfigAsset", + "440: int acfg", + "441: itxn_field TypeEnum", + "442: int 0", + "443: itxn_field Fee", + "444: itxn_submit", + "445: retsub" + ], + [ + "164: int 1", + "165: retsub" ], [ "5: return" @@ -5046,7 +5391,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 44 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5059,57 +5404,85 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "174: __puya_arc4_router___deploy_app_route@11:", - "175: txn OnCompletion", - "176: !", - "177: assert", - "178: txn ApplicationID", - "179: assert", - "180: callsub deploy_app" - ], - [ - "448: deploy_app:", - "449: proto 0 1", - "450: itxn_begin", - "451: byte 0x0a810143", - "452: itxn_field ClearStateProgramPages", - "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "454: itxn_field ApprovalProgramPages", - "455: int appl", - "456: itxn_field TypeEnum", - "457: int 0", - "458: itxn_field Fee", - "459: itxn_submit", - "460: itxn CreatedApplicationID", - "461: retsub" - ], - [ - "181: itob", - "182: byte 0x151f7c75", - "183: swap", - "184: concat", - "185: log", - "186: int 1", - "187: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "167: __puya_arc4_router___multi_inner_txns_route@11:", + "168: txn OnCompletion", + "169: !", + "170: assert", + "171: txn ApplicationID", + "172: assert", + "173: txna ApplicationArgs 1", + "174: btoi", + "175: txnas Applications", + "176: callsub multi_inner_txns" + ], + [ + "449: multi_inner_txns:", + "450: proto 1 2", + "451: txn Sender", + "452: itxn_begin", + "453: itxn_field Receiver", + "454: int 5000", + "455: itxn_field Amount", + "456: int pay", + "457: itxn_field TypeEnum", + "458: int 0", + "459: itxn_field Fee", + "460: itxn_next", + "461: method hello(string)string", + "462: itxn_field ApplicationArgs", + "463: byte 0x0005576f726c64", + "464: itxn_field ApplicationArgs", + "465: frame_dig -1", + "466: itxn_field ApplicationID", + "467: int appl", + "468: itxn_field TypeEnum", + "469: int 0", + "470: itxn_field Fee", + "471: itxn_submit", + "472: gitxn 0 Amount", + "473: itxn LastLog", + "474: dup", + "475: extract 4 0", + "476: swap", + "477: extract 0 4", + "478: byte 0x151f7c75", + "479: ==", + "480: assert", + "481: retsub" + ], + [ + "177: swap", + "178: itob", + "179: byte 0x000a", + "180: concat", + "181: swap", + "182: concat", + "183: byte 0x151f7c75", + "184: swap", + "185: concat", + "186: log", + "187: int 1", + "188: retsub" ], [ "5: return" @@ -5117,7 +5490,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 45 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5130,57 +5503,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "189: __puya_arc4_router___arc4_deploy_app_route@12:", - "190: txn OnCompletion", - "191: !", - "192: assert", - "193: txn ApplicationID", - "194: assert", - "195: callsub arc4_deploy_app" - ], - [ - "465: arc4_deploy_app:", - "466: proto 0 1", - "467: itxn_begin", - "468: byte 0x0a810143", - "469: itxn_field ClearStateProgramPages", - "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "471: itxn_field ApprovalProgramPages", - "472: int appl", - "473: itxn_field TypeEnum", - "474: int 0", - "475: itxn_field Fee", - "476: itxn_submit", - "477: itxn CreatedApplicationID", - "478: retsub" - ], - [ - "196: itob", - "197: byte 0x151f7c75", - "198: swap", - "199: concat", - "200: log", - "201: int 1", - "202: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "190: __puya_arc4_router___deploy_app_route@12:", + "191: txn OnCompletion", + "192: !", + "193: assert", + "194: txn ApplicationID", + "195: assert", + "196: callsub deploy_app" + ], + [ + "485: deploy_app:", + "486: proto 0 1", + "487: itxn_begin", + "488: byte 0x0a810143", + "489: itxn_field ClearStateProgramPages", + "490: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "491: itxn_field ApprovalProgramPages", + "492: int appl", + "493: itxn_field TypeEnum", + "494: int 0", + "495: itxn_field Fee", + "496: itxn_submit", + "497: itxn CreatedApplicationID", + "498: retsub" + ], + [ + "197: itob", + "198: byte 0x151f7c75", + "199: swap", + "200: concat", + "201: log", + "202: int 1", + "203: retsub" ], [ "5: return" @@ -5188,7 +5562,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 46 -> 29 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5201,109 +5575,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "204: __puya_arc4_router___noop_app_call_route@13:", - "205: txn OnCompletion", - "206: !", - "207: assert", - "208: txn ApplicationID", - "209: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "212: txnas Applications", - "213: callsub noop_app_call" - ], - [ - "482: noop_app_call:", - "483: proto 1 2", - "484: itxn_begin", - "485: method hello(string)string", - "486: itxn_field ApplicationArgs", - "487: byte 0x0005576f726c64", - "488: itxn_field ApplicationArgs", - "489: frame_dig -1", - "490: itxn_field ApplicationID", - "491: int appl", - "492: itxn_field TypeEnum", - "493: int 0", - "494: itxn_field Fee", - "495: itxn_submit", - "496: itxn LastLog", - "497: dup", - "498: extract 4 0", - "499: swap", - "500: extract 0 4", - "501: byte 0x151f7c75", - "502: ==", - "503: assert", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "205: __puya_arc4_router___arc4_deploy_app_route@13:", + "206: txn OnCompletion", + "207: !", + "208: assert", + "209: txn ApplicationID", + "210: assert", + "211: callsub arc4_deploy_app" + ], + [ + "502: arc4_deploy_app:", + "503: proto 0 1", "504: itxn_begin", - "505: frame_dig -1", - "506: itxn_field ApplicationID", - "507: method hello(string)string", - "508: itxn_field ApplicationArgs", - "509: byte 0x0005616761696e", - "510: itxn_field ApplicationArgs", - "511: int appl", - "512: itxn_field TypeEnum", - "513: int 0", - "514: itxn_field Fee", - "515: itxn_submit", - "516: itxn LastLog", - "517: dup", - "518: extract 4 0", - "519: swap", - "520: extract 0 4", - "521: byte 0x151f7c75", - "522: ==", - "523: assert", - "524: extract 2 0", - "525: retsub" - ], - [ - "214: dup", - "215: len", - "216: itob", - "217: extract 6 2", - "218: swap", - "219: concat", - "220: swap", - "221: dup", - "222: len", - "223: int 4", - "224: +", - "225: itob", - "226: extract 6 2", - "227: byte 0x0004", - "228: swap", - "229: concat", - "230: swap", - "231: concat", - "232: swap", - "233: concat", - "234: byte 0x151f7c75", - "235: swap", - "236: concat", - "237: log", - "238: int 1", - "239: retsub" + "505: byte 0x0a810143", + "506: itxn_field ClearStateProgramPages", + "507: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "508: itxn_field ApprovalProgramPages", + "509: int appl", + "510: itxn_field TypeEnum", + "511: int 0", + "512: itxn_field Fee", + "513: itxn_submit", + "514: itxn CreatedApplicationID", + "515: retsub" + ], + [ + "212: itob", + "213: byte 0x151f7c75", + "214: swap", + "215: concat", + "216: log", + "217: int 1", + "218: retsub" ], [ "5: return" @@ -5311,7 +5634,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 31 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 30 -> 47 -> 31 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5324,19 +5647,143 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "13: method payment()uint64", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "220: __puya_arc4_router___noop_app_call_route@14:", + "221: txn OnCompletion", + "222: !", + "223: assert", + "224: txn ApplicationID", + "225: assert", + "226: txna ApplicationArgs 1", + "227: btoi", + "228: txnas Applications", + "229: callsub noop_app_call" + ], + [ + "519: noop_app_call:", + "520: proto 1 2", + "521: itxn_begin", + "522: method hello(string)string", + "523: itxn_field ApplicationArgs", + "524: byte 0x0005576f726c64", + "525: itxn_field ApplicationArgs", + "526: frame_dig -1", + "527: itxn_field ApplicationID", + "528: int appl", + "529: itxn_field TypeEnum", + "530: int 0", + "531: itxn_field Fee", + "532: itxn_submit", + "533: itxn LastLog", + "534: dup", + "535: extract 4 0", + "536: swap", + "537: extract 0 4", + "538: byte 0x151f7c75", + "539: ==", + "540: assert", + "541: itxn_begin", + "542: frame_dig -1", + "543: itxn_field ApplicationID", + "544: method hello(string)string", + "545: itxn_field ApplicationArgs", + "546: byte 0x0005616761696e", + "547: itxn_field ApplicationArgs", + "548: int appl", + "549: itxn_field TypeEnum", + "550: int 0", + "551: itxn_field Fee", + "552: itxn_submit", + "553: itxn LastLog", + "554: dup", + "555: extract 4 0", + "556: swap", + "557: extract 0 4", + "558: byte 0x151f7c75", + "559: ==", + "560: assert", + "561: extract 2 0", + "562: retsub" + ], + [ + "230: dup", + "231: len", + "232: itob", + "233: extract 6 2", + "234: swap", + "235: concat", + "236: swap", + "237: dup", + "238: len", + "239: int 4", + "240: +", + "241: itob", + "242: extract 6 2", + "243: byte 0x0004", + "244: swap", + "245: concat", + "246: swap", + "247: concat", + "248: swap", + "249: concat", + "250: byte 0x151f7c75", + "251: swap", + "252: concat", + "253: log", + "254: int 1", + "255: retsub" ], [ - "244: txn ApplicationID", - "245: !", - "246: assert", - "247: int 1", - "248: retsub" + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 32 -> 33 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@17" + ], + [ + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" + ], + [ + "260: txn ApplicationID", + "261: !", + "262: assert", + "263: int 1", + "264: retsub" ], [ "5: return" @@ -5344,7 +5791,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "short": "0 -> 1 -> 3 -> 32 -> 34 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5357,17 +5804,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" ], [ - "250: __puya_arc4_router___after_if_else@20:", - "251: int 0", - "252: retsub" + "266: __puya_arc4_router___after_if_else@21:", + "267: int 0", + "268: retsub" ], [ "5: return" @@ -5388,7 +5835,7 @@ }, { "type": "ExecutionPaths", - "count": 15, + "count": 16, "description": "\nCheck: \"rekey-to\", Impact: High, Confidence: High\nDescription: Rekeyable Logic Signatures\n\nWiki: https://github.com/crytic/tealer/wiki/Detector-Documentation#rekeyable-logicsig\n", "check": "rekey-to", "impact": "High", @@ -5409,27 +5856,28 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "27: int 0", - "28: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "28: int 0", + "29: retsub" ], [ "5: return" @@ -5437,7 +5885,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 6 -> 33 -> 7 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 6 -> 35 -> 7 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5450,57 +5898,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "30: __puya_arc4_router___payment_route@2:", - "31: txn OnCompletion", - "32: !", - "33: assert", - "34: txn ApplicationID", - "35: assert", - "36: callsub payment" - ], - [ - "256: payment:", - "257: proto 0 1", - "258: itxn_begin", - "259: txn Sender", - "260: itxn_field Receiver", - "261: int 5000", - "262: itxn_field Amount", - "263: int pay", - "264: itxn_field TypeEnum", - "265: int 0", - "266: itxn_field Fee", - "267: itxn_submit", - "268: itxn Amount", - "269: retsub" - ], - [ - "37: itob", - "38: byte 0x151f7c75", - "39: swap", - "40: concat", - "41: log", - "42: int 1", - "43: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "31: __puya_arc4_router___payment_route@2:", + "32: txn OnCompletion", + "33: !", + "34: assert", + "35: txn ApplicationID", + "36: assert", + "37: callsub payment" + ], + [ + "272: payment:", + "273: proto 0 1", + "274: itxn_begin", + "275: txn Sender", + "276: itxn_field Receiver", + "277: int 5000", + "278: itxn_field Amount", + "279: int pay", + "280: itxn_field TypeEnum", + "281: int 0", + "282: itxn_field Fee", + "283: itxn_submit", + "284: itxn Amount", + "285: retsub" + ], + [ + "38: itob", + "39: byte 0x151f7c75", + "40: swap", + "41: concat", + "42: log", + "43: int 1", + "44: retsub" ], [ "5: return" @@ -5508,7 +5957,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 8 -> 34 -> 9 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 8 -> 36 -> 9 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5521,69 +5970,62 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "45: __puya_arc4_router___asset_create_route@3:", - "46: txn OnCompletion", - "47: !", - "48: assert", - "49: txn ApplicationID", - "50: assert", - "51: callsub asset_create" - ], - [ - "273: asset_create:", - "274: proto 0 1", - "275: itxn_begin", - "276: global CurrentApplicationAddress", - "277: dupn 3", - "278: itxn_field ConfigAssetClawback", - "279: itxn_field ConfigAssetFreeze", - "280: itxn_field ConfigAssetReserve", - "281: itxn_field ConfigAssetManager", - "282: byte \"https://link_to_ipfs/Mona_Lisa\"", - "283: itxn_field ConfigAssetURL", - "284: byte \"Mona Lisa\"", - "285: itxn_field ConfigAssetName", - "286: byte \"ML\"", - "287: itxn_field ConfigAssetUnitName", - "288: int 2", - "289: itxn_field ConfigAssetDecimals", - "290: int 100", - "291: itxn_field ConfigAssetTotal", - "292: int acfg", - "293: itxn_field TypeEnum", - "294: int 0", - "295: itxn_field Fee", - "296: itxn_submit", - "297: itxn CreatedAssetID", - "298: retsub" - ], - [ - "52: itob", - "53: byte 0x151f7c75", - "54: swap", - "55: concat", - "56: log", - "57: int 1", - "58: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "46: __puya_arc4_router___fungible_asset_create_route@3:", + "47: txn OnCompletion", + "48: !", + "49: assert", + "50: txn ApplicationID", + "51: assert", + "52: callsub fungible_asset_create" + ], + [ + "289: fungible_asset_create:", + "290: proto 0 1", + "291: itxn_begin", + "292: byte \"Royalty Points\"", + "293: itxn_field ConfigAssetName", + "294: byte \"RP\"", + "295: itxn_field ConfigAssetUnitName", + "296: int 2", + "297: itxn_field ConfigAssetDecimals", + "298: int 100000000000", + "299: itxn_field ConfigAssetTotal", + "300: int acfg", + "301: itxn_field TypeEnum", + "302: int 0", + "303: itxn_field Fee", + "304: itxn_submit", + "305: itxn CreatedAssetID", + "306: retsub" + ], + [ + "53: itob", + "54: byte 0x151f7c75", + "55: swap", + "56: concat", + "57: log", + "58: int 1", + "59: retsub" ], [ "5: return" @@ -5591,7 +6033,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 10 -> 35 -> 11 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 10 -> 37 -> 11 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5604,56 +6046,70 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "60: __puya_arc4_router___asset_opt_in_route@4:", - "61: txn OnCompletion", - "62: !", - "63: assert", - "64: txn ApplicationID", - "65: assert", - "66: txna ApplicationArgs 1", - "67: btoi", - "68: txnas Assets", - "69: callsub asset_opt_in" - ], - [ - "302: asset_opt_in:", - "303: proto 1 0", - "304: itxn_begin", - "305: global CurrentApplicationAddress", - "306: int 0", - "307: itxn_field AssetAmount", - "308: frame_dig -1", - "309: itxn_field XferAsset", - "310: itxn_field AssetReceiver", - "311: int axfer", - "312: itxn_field TypeEnum", - "313: int 0", - "314: itxn_field Fee", - "315: itxn_submit", - "316: retsub" - ], - [ - "70: int 1", - "71: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "61: __puya_arc4_router___non_fungible_asset_create_route@4:", + "62: txn OnCompletion", + "63: !", + "64: assert", + "65: txn ApplicationID", + "66: assert", + "67: callsub non_fungible_asset_create" + ], + [ + "310: non_fungible_asset_create:", + "311: proto 0 1", + "312: itxn_begin", + "313: global CurrentApplicationAddress", + "314: dupn 3", + "315: itxn_field ConfigAssetClawback", + "316: itxn_field ConfigAssetFreeze", + "317: itxn_field ConfigAssetReserve", + "318: itxn_field ConfigAssetManager", + "319: byte \"https://link_to_ipfs/Mona_Lisa\"", + "320: itxn_field ConfigAssetURL", + "321: byte \"Mona Lisa\"", + "322: itxn_field ConfigAssetName", + "323: byte \"ML\"", + "324: itxn_field ConfigAssetUnitName", + "325: int 2", + "326: itxn_field ConfigAssetDecimals", + "327: int 100", + "328: itxn_field ConfigAssetTotal", + "329: int acfg", + "330: itxn_field TypeEnum", + "331: int 0", + "332: itxn_field Fee", + "333: itxn_submit", + "334: itxn CreatedAssetID", + "335: retsub" + ], + [ + "68: itob", + "69: byte 0x151f7c75", + "70: swap", + "71: concat", + "72: log", + "73: int 1", + "74: retsub" ], [ "5: return" @@ -5661,7 +6117,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 12 -> 36 -> 13 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 12 -> 38 -> 13 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5674,61 +6130,57 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "73: __puya_arc4_router___asset_transfer_route@5:", - "74: txn OnCompletion", - "75: !", - "76: assert", - "77: txn ApplicationID", - "78: assert", - "79: txna ApplicationArgs 1", - "80: btoi", - "81: txnas Assets", - "82: txna ApplicationArgs 2", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "76: __puya_arc4_router___asset_opt_in_route@5:", + "77: txn OnCompletion", + "78: !", + "79: assert", + "80: txn ApplicationID", + "81: assert", + "82: txna ApplicationArgs 1", "83: btoi", - "84: txnas Accounts", - "85: txna ApplicationArgs 3", - "86: btoi", - "87: callsub asset_transfer" - ], - [ - "320: asset_transfer:", - "321: proto 3 0", - "322: itxn_begin", - "323: frame_dig -1", - "324: itxn_field AssetAmount", - "325: frame_dig -3", - "326: itxn_field XferAsset", - "327: frame_dig -2", - "328: itxn_field AssetReceiver", - "329: int axfer", - "330: itxn_field TypeEnum", - "331: int 0", - "332: itxn_field Fee", - "333: itxn_submit", - "334: retsub" + "84: txnas Assets", + "85: callsub asset_opt_in" + ], + [ + "339: asset_opt_in:", + "340: proto 1 0", + "341: itxn_begin", + "342: global CurrentApplicationAddress", + "343: int 0", + "344: itxn_field AssetAmount", + "345: frame_dig -1", + "346: itxn_field XferAsset", + "347: itxn_field AssetReceiver", + "348: int axfer", + "349: itxn_field TypeEnum", + "350: int 0", + "351: itxn_field Fee", + "352: itxn_submit", + "353: retsub" ], [ - "88: int 1", - "89: retsub" + "86: int 1", + "87: retsub" ], [ "5: return" @@ -5736,7 +6188,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 14 -> 37 -> 15 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 14 -> 39 -> 15 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5749,55 +6201,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "91: __puya_arc4_router___asset_freeze_route@6:", - "92: txn OnCompletion", - "93: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "89: __puya_arc4_router___asset_transfer_route@6:", + "90: txn OnCompletion", + "91: !", + "92: assert", + "93: txn ApplicationID", "94: assert", - "95: txn ApplicationID", - "96: assert", - "97: txna ApplicationArgs 1", - "98: btoi", - "99: txnas Accounts", - "100: txna ApplicationArgs 2", - "101: btoi", - "102: txnas Assets", - "103: callsub asset_freeze" - ], - [ - "338: asset_freeze:", - "339: proto 2 0", - "340: itxn_begin", - "341: int 1", - "342: itxn_field FreezeAssetFrozen", - "343: frame_dig -1", - "344: itxn_field FreezeAsset", - "345: frame_dig -2", - "346: itxn_field FreezeAssetAccount", - "347: int afrz", - "348: itxn_field TypeEnum", - "349: int 0", - "350: itxn_field Fee", - "351: itxn_submit", - "352: retsub" + "95: txna ApplicationArgs 1", + "96: btoi", + "97: txnas Assets", + "98: txna ApplicationArgs 2", + "99: btoi", + "100: txnas Accounts", + "101: txna ApplicationArgs 3", + "102: btoi", + "103: callsub asset_transfer" + ], + [ + "357: asset_transfer:", + "358: proto 3 0", + "359: itxn_begin", + "360: frame_dig -1", + "361: itxn_field AssetAmount", + "362: frame_dig -3", + "363: itxn_field XferAsset", + "364: frame_dig -2", + "365: itxn_field AssetReceiver", + "366: int axfer", + "367: itxn_field TypeEnum", + "368: int 0", + "369: itxn_field Fee", + "370: itxn_submit", + "371: retsub" ], [ "104: int 1", @@ -5809,7 +6264,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 16 -> 38 -> 17 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 16 -> 40 -> 17 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5822,26 +6277,27 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "107: __puya_arc4_router___asset_revoke_route@7:", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "107: __puya_arc4_router___asset_freeze_route@7:", "108: txn OnCompletion", "109: !", "110: assert", @@ -5849,36 +6305,32 @@ "112: assert", "113: txna ApplicationArgs 1", "114: btoi", - "115: txnas Assets", + "115: txnas Accounts", "116: txna ApplicationArgs 2", "117: btoi", - "118: txnas Accounts", - "119: txna ApplicationArgs 3", - "120: btoi", - "121: callsub asset_revoke" + "118: txnas Assets", + "119: callsub asset_freeze" ], [ - "356: asset_revoke:", - "357: proto 3 0", - "358: itxn_begin", - "359: global CurrentApplicationAddress", - "360: frame_dig -1", - "361: itxn_field AssetAmount", - "362: frame_dig -2", - "363: itxn_field AssetSender", - "364: frame_dig -3", - "365: itxn_field XferAsset", - "366: itxn_field AssetReceiver", - "367: int axfer", - "368: itxn_field TypeEnum", - "369: int 0", - "370: itxn_field Fee", - "371: itxn_submit", - "372: retsub" + "375: asset_freeze:", + "376: proto 2 0", + "377: itxn_begin", + "378: int 1", + "379: itxn_field FreezeAssetFrozen", + "380: frame_dig -1", + "381: itxn_field FreezeAsset", + "382: frame_dig -2", + "383: itxn_field FreezeAssetAccount", + "384: int afrz", + "385: itxn_field TypeEnum", + "386: int 0", + "387: itxn_field Fee", + "388: itxn_submit", + "389: retsub" ], [ - "122: int 1", - "123: retsub" + "120: int 1", + "121: retsub" ], [ "5: return" @@ -5886,7 +6338,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 18 -> 39 -> 19 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 18 -> 41 -> 19 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5899,60 +6351,64 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "125: __puya_arc4_router___asset_config_route@8:", - "126: txn OnCompletion", - "127: !", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "123: __puya_arc4_router___asset_revoke_route@8:", + "124: txn OnCompletion", + "125: !", + "126: assert", + "127: txn ApplicationID", "128: assert", - "129: txn ApplicationID", - "130: assert", - "131: txna ApplicationArgs 1", - "132: btoi", - "133: txnas Assets", - "134: callsub asset_config" - ], - [ - "376: asset_config:", - "377: proto 1 0", - "378: itxn_begin", - "379: global CurrentApplicationAddress", - "380: dup", - "381: txn Sender", - "382: dup", - "383: itxn_field ConfigAssetClawback", - "384: itxn_field ConfigAssetFreeze", - "385: itxn_field ConfigAssetReserve", - "386: itxn_field ConfigAssetManager", - "387: frame_dig -1", - "388: itxn_field ConfigAsset", - "389: int acfg", - "390: itxn_field TypeEnum", - "391: int 0", - "392: itxn_field Fee", - "393: itxn_submit", - "394: retsub" - ], - [ - "135: int 1", - "136: retsub" + "129: txna ApplicationArgs 1", + "130: btoi", + "131: txnas Assets", + "132: txna ApplicationArgs 2", + "133: btoi", + "134: txnas Accounts", + "135: txna ApplicationArgs 3", + "136: btoi", + "137: callsub asset_revoke" + ], + [ + "393: asset_revoke:", + "394: proto 3 0", + "395: itxn_begin", + "396: global CurrentApplicationAddress", + "397: frame_dig -1", + "398: itxn_field AssetAmount", + "399: frame_dig -2", + "400: itxn_field AssetSender", + "401: frame_dig -3", + "402: itxn_field XferAsset", + "403: itxn_field AssetReceiver", + "404: int axfer", + "405: itxn_field TypeEnum", + "406: int 0", + "407: itxn_field Fee", + "408: itxn_submit", + "409: retsub" + ], + [ + "138: int 1", + "139: retsub" ], [ "5: return" @@ -5960,7 +6416,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 20 -> 40 -> 21 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 20 -> 42 -> 21 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -5973,52 +6429,61 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "138: __puya_arc4_router___asset_delete_route@9:", - "139: txn OnCompletion", - "140: !", - "141: assert", - "142: txn ApplicationID", - "143: assert", - "144: txna ApplicationArgs 1", - "145: btoi", - "146: txnas Assets", - "147: callsub asset_delete" - ], - [ - "398: asset_delete:", - "399: proto 1 0", - "400: itxn_begin", - "401: frame_dig -1", - "402: itxn_field ConfigAsset", - "403: int acfg", - "404: itxn_field TypeEnum", - "405: int 0", - "406: itxn_field Fee", - "407: itxn_submit", - "408: retsub" - ], - [ - "148: int 1", - "149: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "141: __puya_arc4_router___asset_config_route@9:", + "142: txn OnCompletion", + "143: !", + "144: assert", + "145: txn ApplicationID", + "146: assert", + "147: txna ApplicationArgs 1", + "148: btoi", + "149: txnas Assets", + "150: callsub asset_config" + ], + [ + "413: asset_config:", + "414: proto 1 0", + "415: itxn_begin", + "416: global CurrentApplicationAddress", + "417: dup", + "418: txn Sender", + "419: dup", + "420: itxn_field ConfigAssetClawback", + "421: itxn_field ConfigAssetFreeze", + "422: itxn_field ConfigAssetReserve", + "423: itxn_field ConfigAssetManager", + "424: frame_dig -1", + "425: itxn_field ConfigAsset", + "426: int acfg", + "427: itxn_field TypeEnum", + "428: int 0", + "429: itxn_field Fee", + "430: itxn_submit", + "431: retsub" + ], + [ + "151: int 1", + "152: retsub" ], [ "5: return" @@ -6026,7 +6491,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 22 -> 41 -> 23 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 22 -> 43 -> 23 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -6039,84 +6504,53 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "151: __puya_arc4_router___multi_inner_txns_route@10:", - "152: txn OnCompletion", - "153: !", - "154: assert", - "155: txn ApplicationID", - "156: assert", - "157: txna ApplicationArgs 1", - "158: btoi", - "159: txnas Applications", - "160: callsub multi_inner_txns" - ], - [ - "412: multi_inner_txns:", - "413: proto 1 2", - "414: txn Sender", - "415: itxn_begin", - "416: itxn_field Receiver", - "417: int 5000", - "418: itxn_field Amount", - "419: int pay", - "420: itxn_field TypeEnum", - "421: int 0", - "422: itxn_field Fee", - "423: itxn_next", - "424: method hello(string)string", - "425: itxn_field ApplicationArgs", - "426: byte 0x0005576f726c64", - "427: itxn_field ApplicationArgs", - "428: frame_dig -1", - "429: itxn_field ApplicationID", - "430: int appl", - "431: itxn_field TypeEnum", - "432: int 0", - "433: itxn_field Fee", - "434: itxn_submit", - "435: gitxn 0 Amount", - "436: itxn LastLog", - "437: dup", - "438: extract 4 0", - "439: swap", - "440: extract 0 4", - "441: byte 0x151f7c75", - "442: ==", - "443: assert", - "444: retsub" - ], - [ - "161: swap", - "162: itob", - "163: byte 0x000a", - "164: concat", - "165: swap", - "166: concat", - "167: byte 0x151f7c75", - "168: swap", - "169: concat", - "170: log", - "171: int 1", - "172: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "154: __puya_arc4_router___asset_delete_route@10:", + "155: txn OnCompletion", + "156: !", + "157: assert", + "158: txn ApplicationID", + "159: assert", + "160: txna ApplicationArgs 1", + "161: btoi", + "162: txnas Assets", + "163: callsub asset_delete" + ], + [ + "435: asset_delete:", + "436: proto 1 0", + "437: itxn_begin", + "438: frame_dig -1", + "439: itxn_field ConfigAsset", + "440: int acfg", + "441: itxn_field TypeEnum", + "442: int 0", + "443: itxn_field Fee", + "444: itxn_submit", + "445: retsub" + ], + [ + "164: int 1", + "165: retsub" ], [ "5: return" @@ -6124,7 +6558,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 24 -> 42 -> 25 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 24 -> 44 -> 25 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -6137,57 +6571,85 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "174: __puya_arc4_router___deploy_app_route@11:", - "175: txn OnCompletion", - "176: !", - "177: assert", - "178: txn ApplicationID", - "179: assert", - "180: callsub deploy_app" - ], - [ - "448: deploy_app:", - "449: proto 0 1", - "450: itxn_begin", - "451: byte 0x0a810143", - "452: itxn_field ClearStateProgramPages", - "453: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "454: itxn_field ApprovalProgramPages", - "455: int appl", - "456: itxn_field TypeEnum", - "457: int 0", - "458: itxn_field Fee", - "459: itxn_submit", - "460: itxn CreatedApplicationID", - "461: retsub" - ], - [ - "181: itob", - "182: byte 0x151f7c75", - "183: swap", - "184: concat", - "185: log", - "186: int 1", - "187: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "167: __puya_arc4_router___multi_inner_txns_route@11:", + "168: txn OnCompletion", + "169: !", + "170: assert", + "171: txn ApplicationID", + "172: assert", + "173: txna ApplicationArgs 1", + "174: btoi", + "175: txnas Applications", + "176: callsub multi_inner_txns" + ], + [ + "449: multi_inner_txns:", + "450: proto 1 2", + "451: txn Sender", + "452: itxn_begin", + "453: itxn_field Receiver", + "454: int 5000", + "455: itxn_field Amount", + "456: int pay", + "457: itxn_field TypeEnum", + "458: int 0", + "459: itxn_field Fee", + "460: itxn_next", + "461: method hello(string)string", + "462: itxn_field ApplicationArgs", + "463: byte 0x0005576f726c64", + "464: itxn_field ApplicationArgs", + "465: frame_dig -1", + "466: itxn_field ApplicationID", + "467: int appl", + "468: itxn_field TypeEnum", + "469: int 0", + "470: itxn_field Fee", + "471: itxn_submit", + "472: gitxn 0 Amount", + "473: itxn LastLog", + "474: dup", + "475: extract 4 0", + "476: swap", + "477: extract 0 4", + "478: byte 0x151f7c75", + "479: ==", + "480: assert", + "481: retsub" + ], + [ + "177: swap", + "178: itob", + "179: byte 0x000a", + "180: concat", + "181: swap", + "182: concat", + "183: byte 0x151f7c75", + "184: swap", + "185: concat", + "186: log", + "187: int 1", + "188: retsub" ], [ "5: return" @@ -6195,7 +6657,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 26 -> 43 -> 27 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 26 -> 45 -> 27 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -6208,57 +6670,58 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "189: __puya_arc4_router___arc4_deploy_app_route@12:", - "190: txn OnCompletion", - "191: !", - "192: assert", - "193: txn ApplicationID", - "194: assert", - "195: callsub arc4_deploy_app" - ], - [ - "465: arc4_deploy_app:", - "466: proto 0 1", - "467: itxn_begin", - "468: byte 0x0a810143", - "469: itxn_field ClearStateProgramPages", - "470: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", - "471: itxn_field ApprovalProgramPages", - "472: int appl", - "473: itxn_field TypeEnum", - "474: int 0", - "475: itxn_field Fee", - "476: itxn_submit", - "477: itxn CreatedApplicationID", - "478: retsub" - ], - [ - "196: itob", - "197: byte 0x151f7c75", - "198: swap", - "199: concat", - "200: log", - "201: int 1", - "202: retsub" + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "190: __puya_arc4_router___deploy_app_route@12:", + "191: txn OnCompletion", + "192: !", + "193: assert", + "194: txn ApplicationID", + "195: assert", + "196: callsub deploy_app" + ], + [ + "485: deploy_app:", + "486: proto 0 1", + "487: itxn_begin", + "488: byte 0x0a810143", + "489: itxn_field ClearStateProgramPages", + "490: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "491: itxn_field ApprovalProgramPages", + "492: int appl", + "493: itxn_field TypeEnum", + "494: int 0", + "495: itxn_field Fee", + "496: itxn_submit", + "497: itxn CreatedApplicationID", + "498: retsub" + ], + [ + "197: itob", + "198: byte 0x151f7c75", + "199: swap", + "200: concat", + "201: log", + "202: int 1", + "203: retsub" ], [ "5: return" @@ -6266,7 +6729,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 4 -> 28 -> 44 -> 29 -> 2", + "short": "0 -> 1 -> 3 -> 4 -> 28 -> 46 -> 29 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -6279,109 +6742,182 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ "13: method payment()uint64", - "14: method asset_create()uint64", - "15: method asset_opt_in(asset)void", - "16: method asset_transfer(asset,account,uint64)void", - "17: method asset_freeze(account,asset)void", - "18: method asset_revoke(asset,account,uint64)void", - "19: method asset_config(asset)void", - "20: method asset_delete(asset)void", - "21: method multi_inner_txns(application)(uint64,string)", - "22: method deploy_app()uint64", - "23: method arc4_deploy_app()uint64", - "24: method noop_app_call(application)(string,string)", - "25: txna ApplicationArgs 0", - "26: match __puya_arc4_router___payment_route@2 __puya_arc4_router___asset_create_route@3 __puya_arc4_router___asset_opt_in_route@4 __puya_arc4_router___asset_transfer_route@5 __puya_arc4_router___asset_freeze_route@6 __puya_arc4_router___asset_revoke_route@7 __puya_arc4_router___asset_config_route@8 __puya_arc4_router___asset_delete_route@9 __puya_arc4_router___multi_inner_txns_route@10 __puya_arc4_router___deploy_app_route@11 __puya_arc4_router___arc4_deploy_app_route@12 __puya_arc4_router___noop_app_call_route@13" - ], - [ - "204: __puya_arc4_router___noop_app_call_route@13:", - "205: txn OnCompletion", - "206: !", - "207: assert", - "208: txn ApplicationID", - "209: assert", - "210: txna ApplicationArgs 1", - "211: btoi", - "212: txnas Applications", - "213: callsub noop_app_call" - ], - [ - "482: noop_app_call:", - "483: proto 1 2", - "484: itxn_begin", - "485: method hello(string)string", - "486: itxn_field ApplicationArgs", - "487: byte 0x0005576f726c64", - "488: itxn_field ApplicationArgs", - "489: frame_dig -1", - "490: itxn_field ApplicationID", - "491: int appl", - "492: itxn_field TypeEnum", - "493: int 0", - "494: itxn_field Fee", - "495: itxn_submit", - "496: itxn LastLog", - "497: dup", - "498: extract 4 0", - "499: swap", - "500: extract 0 4", - "501: byte 0x151f7c75", - "502: ==", - "503: assert", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "205: __puya_arc4_router___arc4_deploy_app_route@13:", + "206: txn OnCompletion", + "207: !", + "208: assert", + "209: txn ApplicationID", + "210: assert", + "211: callsub arc4_deploy_app" + ], + [ + "502: arc4_deploy_app:", + "503: proto 0 1", "504: itxn_begin", - "505: frame_dig -1", - "506: itxn_field ApplicationID", - "507: method hello(string)string", - "508: itxn_field ApplicationArgs", - "509: byte 0x0005616761696e", - "510: itxn_field ApplicationArgs", - "511: int appl", - "512: itxn_field TypeEnum", - "513: int 0", - "514: itxn_field Fee", - "515: itxn_submit", - "516: itxn LastLog", - "517: dup", - "518: extract 4 0", - "519: swap", - "520: extract 0 4", - "521: byte 0x151f7c75", - "522: ==", - "523: assert", - "524: extract 2 0", - "525: retsub" - ], - [ - "214: dup", - "215: len", - "216: itob", - "217: extract 6 2", - "218: swap", - "219: concat", - "220: swap", - "221: dup", - "222: len", - "223: int 4", - "224: +", - "225: itob", - "226: extract 6 2", - "227: byte 0x0004", - "228: swap", - "229: concat", - "230: swap", - "231: concat", - "232: swap", - "233: concat", - "234: byte 0x151f7c75", - "235: swap", - "236: concat", - "237: log", - "238: int 1", - "239: retsub" + "505: byte 0x0a810143", + "506: itxn_field ClearStateProgramPages", + "507: byte 0x0a20020001880001438a0001311b410032800402bece11361a008e010002228931191444311844361a015702008800204915165706024c508004151f7c754c50b02389311940000631181444238922898a0101800748656c6c6f2c208bff5089", + "508: itxn_field ApprovalProgramPages", + "509: int appl", + "510: itxn_field TypeEnum", + "511: int 0", + "512: itxn_field Fee", + "513: itxn_submit", + "514: itxn CreatedApplicationID", + "515: retsub" + ], + [ + "212: itob", + "213: byte 0x151f7c75", + "214: swap", + "215: concat", + "216: log", + "217: int 1", + "218: retsub" + ], + [ + "5: return" + ] + ] + }, + { + "short": "0 -> 1 -> 3 -> 4 -> 30 -> 47 -> 31 -> 2", + "blocks": [ + [ + "1: #pragma version 10" + ], + [ + "3: smart_contracts.inner_transactions.contract.InnerTransactions.approval_program:", + "4: callsub __puya_arc4_router__" + ], + [ + "9: __puya_arc4_router__:", + "10: proto 0 1", + "11: txn NumAppArgs", + "12: bz __puya_arc4_router___bare_routing@17" + ], + [ + "13: method payment()uint64", + "14: method fungible_asset_create()uint64", + "15: method non_fungible_asset_create()uint64", + "16: method asset_opt_in(asset)void", + "17: method asset_transfer(asset,account,uint64)void", + "18: method asset_freeze(account,asset)void", + "19: method asset_revoke(asset,account,uint64)void", + "20: method asset_config(asset)void", + "21: method asset_delete(asset)void", + "22: method multi_inner_txns(application)(uint64,string)", + "23: method deploy_app()uint64", + "24: method arc4_deploy_app()uint64", + "25: method noop_app_call(application)(string,string)", + "26: txna ApplicationArgs 0", + "27: match __puya_arc4_router___payment_route@2 __puya_arc4_router___fungible_asset_create_route@3 __puya_arc4_router___non_fungible_asset_create_route@4 __puya_arc4_router___asset_opt_in_route@5 __puya_arc4_router___asset_transfer_route@6 __puya_arc4_router___asset_freeze_route@7 __puya_arc4_router___asset_revoke_route@8 __puya_arc4_router___asset_config_route@9 __puya_arc4_router___asset_delete_route@10 __puya_arc4_router___multi_inner_txns_route@11 __puya_arc4_router___deploy_app_route@12 __puya_arc4_router___arc4_deploy_app_route@13 __puya_arc4_router___noop_app_call_route@14" + ], + [ + "220: __puya_arc4_router___noop_app_call_route@14:", + "221: txn OnCompletion", + "222: !", + "223: assert", + "224: txn ApplicationID", + "225: assert", + "226: txna ApplicationArgs 1", + "227: btoi", + "228: txnas Applications", + "229: callsub noop_app_call" + ], + [ + "519: noop_app_call:", + "520: proto 1 2", + "521: itxn_begin", + "522: method hello(string)string", + "523: itxn_field ApplicationArgs", + "524: byte 0x0005576f726c64", + "525: itxn_field ApplicationArgs", + "526: frame_dig -1", + "527: itxn_field ApplicationID", + "528: int appl", + "529: itxn_field TypeEnum", + "530: int 0", + "531: itxn_field Fee", + "532: itxn_submit", + "533: itxn LastLog", + "534: dup", + "535: extract 4 0", + "536: swap", + "537: extract 0 4", + "538: byte 0x151f7c75", + "539: ==", + "540: assert", + "541: itxn_begin", + "542: frame_dig -1", + "543: itxn_field ApplicationID", + "544: method hello(string)string", + "545: itxn_field ApplicationArgs", + "546: byte 0x0005616761696e", + "547: itxn_field ApplicationArgs", + "548: int appl", + "549: itxn_field TypeEnum", + "550: int 0", + "551: itxn_field Fee", + "552: itxn_submit", + "553: itxn LastLog", + "554: dup", + "555: extract 4 0", + "556: swap", + "557: extract 0 4", + "558: byte 0x151f7c75", + "559: ==", + "560: assert", + "561: extract 2 0", + "562: retsub" + ], + [ + "230: dup", + "231: len", + "232: itob", + "233: extract 6 2", + "234: swap", + "235: concat", + "236: swap", + "237: dup", + "238: len", + "239: int 4", + "240: +", + "241: itob", + "242: extract 6 2", + "243: byte 0x0004", + "244: swap", + "245: concat", + "246: swap", + "247: concat", + "248: swap", + "249: concat", + "250: byte 0x151f7c75", + "251: swap", + "252: concat", + "253: log", + "254: int 1", + "255: retsub" ], [ "5: return" @@ -6389,7 +6925,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 31 -> 2", + "short": "0 -> 1 -> 3 -> 32 -> 33 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -6402,19 +6938,19 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" ], [ - "244: txn ApplicationID", - "245: !", - "246: assert", - "247: int 1", - "248: retsub" + "260: txn ApplicationID", + "261: !", + "262: assert", + "263: int 1", + "264: retsub" ], [ "5: return" @@ -6422,7 +6958,7 @@ ] }, { - "short": "0 -> 1 -> 3 -> 30 -> 32 -> 2", + "short": "0 -> 1 -> 3 -> 32 -> 34 -> 2", "blocks": [ [ "1: #pragma version 10" @@ -6435,17 +6971,17 @@ "9: __puya_arc4_router__:", "10: proto 0 1", "11: txn NumAppArgs", - "12: bz __puya_arc4_router___bare_routing@16" + "12: bz __puya_arc4_router___bare_routing@17" ], [ - "241: __puya_arc4_router___bare_routing@16:", - "242: txn OnCompletion", - "243: bnz __puya_arc4_router___after_if_else@20" + "257: __puya_arc4_router___bare_routing@17:", + "258: txn OnCompletion", + "259: bnz __puya_arc4_router___after_if_else@21" ], [ - "250: __puya_arc4_router___after_if_else@20:", - "251: int 0", - "252: retsub" + "266: __puya_arc4_router___after_if_else@21:", + "267: int 0", + "268: retsub" ], [ "5: return" diff --git a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal index f231141..f3cce1a 100644 --- a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal +++ b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal @@ -293,7 +293,7 @@ fungible_asset_create: itxn_field ConfigAssetName byte "RP" itxn_field ConfigAssetUnitName - int 10 + int 2 itxn_field ConfigAssetDecimals int 100000000000 itxn_field ConfigAssetTotal diff --git a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json index 050af61..6ec3e1b 100644 --- a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json +++ b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc32.json @@ -67,7 +67,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNwogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X29wdF9pbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF90cmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9mcmVlemUoYWNjb3VudCxhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9yZXZva2UoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfY29uZmlnKGFzc2V0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2RlbGV0ZShhc3NldCl2b2lkIgogICAgbWV0aG9kICJtdWx0aV9pbm5lcl90eG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIKICAgIG1ldGhvZCAiZGVwbG95X2FwcCgpdWludDY0IgogICAgbWV0aG9kICJhcmM0X2RlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAibm9vcF9hcHBfY2FsbChhcHBsaWNhdGlvbikoc3RyaW5nLHN0cmluZykiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwIF9fcHV5YV9hcmM0X3JvdXRlcl9fX211bHRpX2lubmVyX3R4bnNfcm91dGVAMTEgX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hcmM0X2RlcGxveV9hcHBfcm91dGVAMTMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9vcF9hcHBfY2FsbF9yb3V0ZUAxNAogICAgaW50IDAKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVAMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZnVuZ2libGVfYXNzZXRfY3JlYXRlCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2RlbGV0ZQogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgY2FsbHN1YiBtdWx0aV9pbm5lcl90eG5zCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9kZXBsb3lfYXBwCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDE0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG5vb3BfYXBwX2NhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50IDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDE3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjE6CiAgICBpbnQgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnQgNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludCBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJSUCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDEwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIGludCAxMDAwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZToKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGJ5dGUgImh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIGJ5dGUgIk1vbmEgTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJNTCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgaW50IDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9vcHRfaW4oYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfb3B0X2luOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3RyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgcHJvdG8gMyAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZnJlZXplKGFjY3RfdG9fYmVfZnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZnJlZXplOgogICAgcHJvdG8gMiAwCiAgICBpdHhuX2JlZ2luCiAgICBpbnQgMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEZyb3plbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRBY2NvdW50CiAgICBpbnQgYWZyegogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9yZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudF90b19iZV9yZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3Jldm9rZToKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2RlbGV0ZShhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9kZWxldGU6CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubXVsdGlfaW5uZXJfdHhucyhhcHBfaWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlfaW5uZXJfdHhuczoKICAgIHByb3RvIDEgMgogICAgdHhuIFNlbmRlcgogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50IDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnQgcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fbmV4dAogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgZ2l0eG4gMCBBbW91bnQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5kZXBsb3lfYXBwKCkgLT4gdWludDY0OgpkZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXJjNF9kZXBsb3lfYXBwKCkgLT4gdWludDY0OgphcmM0X2RlcGxveV9hcHA6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGJ5dGUgYmFzZTY0IENvRUJRdz09CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGUgYmFzZTY0IENpQUNBQUdJQUFGRGlnQUJNUnRCQURLQUJBSyt6aEUyR2dDT0FRQUNJb2t4R1JSRU1SaEVOaG9CVndJQWlBQWdTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWppVEVaUUFBR01SZ1VSQ09KSW9tS0FRR0FCMGhsYkd4dkxDQ0wvMUNKCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub29wX2FwcF9jYWxsKGFwcF9pZDogdWludDY0KSAtPiBieXRlcywgYnl0ZXM6Cm5vb3BfYXBwX2NhbGw6CiAgICBwcm90byAxIDIKICAgIGl0eG5fYmVnaW4KICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTYxNjc2MTY5NmUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNwogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X29wdF9pbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF90cmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9mcmVlemUoYWNjb3VudCxhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9yZXZva2UoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfY29uZmlnKGFzc2V0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2RlbGV0ZShhc3NldCl2b2lkIgogICAgbWV0aG9kICJtdWx0aV9pbm5lcl90eG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIKICAgIG1ldGhvZCAiZGVwbG95X2FwcCgpdWludDY0IgogICAgbWV0aG9kICJhcmM0X2RlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAibm9vcF9hcHBfY2FsbChhcHBsaWNhdGlvbikoc3RyaW5nLHN0cmluZykiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwIF9fcHV5YV9hcmM0X3JvdXRlcl9fX211bHRpX2lubmVyX3R4bnNfcm91dGVAMTEgX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hcmM0X2RlcGxveV9hcHBfcm91dGVAMTMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9vcF9hcHBfY2FsbF9yb3V0ZUAxNAogICAgaW50IDAKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVAMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZnVuZ2libGVfYXNzZXRfY3JlYXRlCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2RlbGV0ZQogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgY2FsbHN1YiBtdWx0aV9pbm5lcl90eG5zCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9kZXBsb3lfYXBwCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDE0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG5vb3BfYXBwX2NhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50IDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDE3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjE6CiAgICBpbnQgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnQgNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludCBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJSUCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgaW50IDEwMDAwMDAwMDAwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCkgLT4gdWludDY0Ogpub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwbiAzCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgYnl0ZSAiaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVSTAogICAgYnl0ZSAiTW9uYSBMaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIGJ5dGUgIk1MIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICBpbnQgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICBpbnQgMTAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X29wdF9pbihhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9vcHRfaW46CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfdHJhbnNmZXIoYXNzZXQ6IHVpbnQ2NCwgcmVjZWl2ZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfdHJhbnNmZXI6CiAgICBwcm90byAzIDAKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9mcmVlemUoYWNjdF90b19iZV9mcm96ZW46IGJ5dGVzLCBhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9mcmVlemU6CiAgICBwcm90byAyIDAKICAgIGl0eG5fYmVnaW4KICAgIGludCAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIGludCBhZnJ6CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3Jldm9rZShhc3NldDogdWludDY0LCBhY2NvdW50X3RvX2JlX3Jldm9rZWQ6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfcmV2b2tlOgogICAgcHJvdG8gMyAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRTZW5kZXIKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2NvbmZpZyhhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9jb25maWc6CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkdXAKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZGVsZXRlKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2RlbGV0ZToKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5tdWx0aV9pbm5lcl90eG5zKGFwcF9pZDogdWludDY0KSAtPiB1aW50NjQsIGJ5dGVzOgptdWx0aV9pbm5lcl90eG5zOgogICAgcHJvdG8gMSAyCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnQgNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludCBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9uZXh0CiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU1NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAwIEFtb3VudAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmRlcGxveV9hcHAoKSAtPiB1aW50NjQ6CmRlcGxveV9hcHA6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGJ5dGUgYmFzZTY0IENvRUJRdz09CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGUgYmFzZTY0IENpQUNBQUdJQUFGRGlnQUJNUnRCQURLQUJBSyt6aEUyR2dDT0FRQUNJb2t4R1JSRU1SaEVOaG9CVndJQWlBQWdTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWppVEVaUUFBR01SZ1VSQ09KSW9tS0FRR0FCMGhsYkd4dkxDQ0wvMUNKCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hcmM0X2RlcGxveV9hcHAoKSAtPiB1aW50NjQ6CmFyYzRfZGVwbG95X2FwcDoKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgYnl0ZSBiYXNlNjQgQ29FQlF3PT0KICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZSBiYXNlNjQgQ2lBQ0FBR0lBQUZEaWdBQk1SdEJBREtBQkFLK3poRTJHZ0NPQVFBQ0lva3hHUlJFTVJoRU5ob0JWd0lBaUFBZ1NSVVdWd1lDVEZDQUJCVWZmSFZNVUxBamlURVpRQUFHTVJnVVJDT0pJb21LQVFHQUIwaGxiR3h2TENDTC8xQ0oKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm5vb3BfYXBwX2NhbGwoYXBwX2lkOiB1aW50NjQpIC0+IGJ5dGVzLCBieXRlczoKbm9vcF9hcHBfY2FsbDoKICAgIHByb3RvIDEgMgogICAgaXR4bl9iZWdpbgogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NjE2NzYxNjk2ZQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGV4dHJhY3QgMiAwCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py index 3168143..852848d 100644 --- a/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py +++ b/projects/python-contract-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py @@ -90,7 +90,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNwogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X29wdF9pbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF90cmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9mcmVlemUoYWNjb3VudCxhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9yZXZva2UoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfY29uZmlnKGFzc2V0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2RlbGV0ZShhc3NldCl2b2lkIgogICAgbWV0aG9kICJtdWx0aV9pbm5lcl90eG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIKICAgIG1ldGhvZCAiZGVwbG95X2FwcCgpdWludDY0IgogICAgbWV0aG9kICJhcmM0X2RlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAibm9vcF9hcHBfY2FsbChhcHBsaWNhdGlvbikoc3RyaW5nLHN0cmluZykiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwIF9fcHV5YV9hcmM0X3JvdXRlcl9fX211bHRpX2lubmVyX3R4bnNfcm91dGVAMTEgX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hcmM0X2RlcGxveV9hcHBfcm91dGVAMTMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9vcF9hcHBfY2FsbF9yb3V0ZUAxNAogICAgaW50IDAKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVAMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZnVuZ2libGVfYXNzZXRfY3JlYXRlCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2RlbGV0ZQogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgY2FsbHN1YiBtdWx0aV9pbm5lcl90eG5zCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9kZXBsb3lfYXBwCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDE0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG5vb3BfYXBwX2NhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50IDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDE3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjE6CiAgICBpbnQgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnQgNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludCBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJSUCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDEwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIGludCAxMDAwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZToKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGJ5dGUgImh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKICAgIGJ5dGUgIk1vbmEgTGlzYSIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJNTCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgaW50IDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9vcHRfaW4oYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfb3B0X2luOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3RyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgcHJvdG8gMyAwCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZnJlZXplKGFjY3RfdG9fYmVfZnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZnJlZXplOgogICAgcHJvdG8gMiAwCiAgICBpdHhuX2JlZ2luCiAgICBpbnQgMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEZyb3plbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRBY2NvdW50CiAgICBpbnQgYWZyegogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9yZXZva2UoYXNzZXQ6IHVpbnQ2NCwgYWNjb3VudF90b19iZV9yZXZva2VkOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3Jldm9rZToKICAgIHByb3RvIDMgMAogICAgaXR4bl9iZWdpbgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgcHJvdG8gMSAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2RlbGV0ZShhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9kZWxldGU6CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubXVsdGlfaW5uZXJfdHhucyhhcHBfaWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlfaW5uZXJfdHhuczoKICAgIHByb3RvIDEgMgogICAgdHhuIFNlbmRlcgogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50IDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnQgcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fbmV4dAogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgZ2l0eG4gMCBBbW91bnQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5kZXBsb3lfYXBwKCkgLT4gdWludDY0OgpkZXBsb3lfYXBwOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlIGJhc2U2NCBDb0VCUXc9PQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlIGJhc2U2NCBDaUFDQUFHSUFBRkRpZ0FCTVJ0QkFES0FCQUsremhFMkdnQ09BUUFDSW9reEdSUkVNUmhFTmhvQlZ3SUFpQUFnU1JVV1Z3WUNURkNBQkJVZmZIVk1VTEFqaVRFWlFBQUdNUmdVUkNPSklvbUtBUUdBQjBobGJHeHZMQ0NMLzFDSgogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXJjNF9kZXBsb3lfYXBwKCkgLT4gdWludDY0OgphcmM0X2RlcGxveV9hcHA6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGJ5dGUgYmFzZTY0IENvRUJRdz09CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGUgYmFzZTY0IENpQUNBQUdJQUFGRGlnQUJNUnRCQURLQUJBSyt6aEUyR2dDT0FRQUNJb2t4R1JSRU1SaEVOaG9CVndJQWlBQWdTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWppVEVaUUFBR01SZ1VSQ09KSW9tS0FRR0FCMGhsYkd4dkxDQ0wvMUNKCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub29wX2FwcF9jYWxsKGFwcF9pZDogdWludDY0KSAtPiBieXRlcywgYnl0ZXM6Cm5vb3BfYXBwX2NhbGw6CiAgICBwcm90byAxIDIKICAgIGl0eG5fYmVnaW4KICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwNTYxNjc2MTY5NmUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFwcHJvdmFsX3Byb2dyYW06CiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLl9fcHV5YV9hcmM0X3JvdXRlcl9fKCkgLT4gdWludDY0OgpfX3B1eWFfYXJjNF9yb3V0ZXJfXzoKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0AxNwogICAgbWV0aG9kICJwYXltZW50KCl1aW50NjQiCiAgICBtZXRob2QgImZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IgogICAgbWV0aG9kICJub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCl1aW50NjQiCiAgICBtZXRob2QgImFzc2V0X29wdF9pbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF90cmFuc2Zlcihhc3NldCxhY2NvdW50LHVpbnQ2NCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9mcmVlemUoYWNjb3VudCxhc3NldCl2b2lkIgogICAgbWV0aG9kICJhc3NldF9yZXZva2UoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIKICAgIG1ldGhvZCAiYXNzZXRfY29uZmlnKGFzc2V0KXZvaWQiCiAgICBtZXRob2QgImFzc2V0X2RlbGV0ZShhc3NldCl2b2lkIgogICAgbWV0aG9kICJtdWx0aV9pbm5lcl90eG5zKGFwcGxpY2F0aW9uKSh1aW50NjQsc3RyaW5nKSIKICAgIG1ldGhvZCAiZGVwbG95X2FwcCgpdWludDY0IgogICAgbWV0aG9kICJhcmM0X2RlcGxveV9hcHAoKXVpbnQ2NCIKICAgIG1ldGhvZCAibm9vcF9hcHBfY2FsbChhcHBsaWNhdGlvbikoc3RyaW5nLHN0cmluZykiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBfX3B1eWFfYXJjNF9yb3V0ZXJfX19wYXltZW50X3JvdXRlQDIgX19wdXlhX2FyYzRfcm91dGVyX19fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3RyYW5zZmVyX3JvdXRlQDYgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZnJlZXplX3JvdXRlQDcgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfcmV2b2tlX3JvdXRlQDggX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfY29uZmlnX3JvdXRlQDkgX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwIF9fcHV5YV9hcmM0X3JvdXRlcl9fX211bHRpX2lubmVyX3R4bnNfcm91dGVAMTEgX19wdXlhX2FyYzRfcm91dGVyX19fZGVwbG95X2FwcF9yb3V0ZUAxMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hcmM0X2RlcGxveV9hcHBfcm91dGVAMTMgX19wdXlhX2FyYzRfcm91dGVyX19fbm9vcF9hcHBfY2FsbF9yb3V0ZUAxNAogICAgaW50IDAKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fcGF5bWVudF9yb3V0ZUAyOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBwYXltZW50CiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVAMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZnVuZ2libGVfYXNzZXRfY3JlYXRlCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X29wdF9pbl9yb3V0ZUA1OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X29wdF9pbgogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfdHJhbnNmZXJfcm91dGVANjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X3Jldm9rZV9yb3V0ZUA4OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgY2FsbHN1YiBhc3NldF9yZXZva2UKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2Fzc2V0X2NvbmZpZ19yb3V0ZUA5OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYXNzZXRfZGVsZXRlX3JvdXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICBjYWxsc3ViIGFzc2V0X2RlbGV0ZQogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fbXVsdGlfaW5uZXJfdHhuc19yb3V0ZUAxMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgY2FsbHN1YiBtdWx0aV9pbm5lcl90eG5zCiAgICBzd2FwCiAgICBpdG9iCiAgICBieXRlIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2RlcGxveV9hcHBfcm91dGVAMTI6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9kZXBsb3lfYXBwCiAgICBpdG9iCiAgICBieXRlIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnQgMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19ub29wX2FwcF9jYWxsX3JvdXRlQDE0OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICBjYWxsc3ViIG5vb3BfYXBwX2NhbGwKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgaW50IDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYmFyZV9yb3V0aW5nQDE3OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIGludCAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX2FmdGVyX2lmX2Vsc2VAMjE6CiAgICBpbnQgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnQgNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludCBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBieXRlICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICBieXRlICJSUCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgaW50IDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgaW50IDEwMDAwMDAwMDAwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCkgLT4gdWludDY0Ogpub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgcHJvdG8gMCAxCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwbiAzCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgYnl0ZSAiaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVSTAogICAgYnl0ZSAiTW9uYSBMaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIGJ5dGUgIk1MIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICBpbnQgMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICBpbnQgMTAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIGludCBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X29wdF9pbihhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9vcHRfaW46CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfdHJhbnNmZXIoYXNzZXQ6IHVpbnQ2NCwgcmVjZWl2ZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfdHJhbnNmZXI6CiAgICBwcm90byAzIDAKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9mcmVlemUoYWNjdF90b19iZV9mcm96ZW46IGJ5dGVzLCBhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9mcmVlemU6CiAgICBwcm90byAyIDAKICAgIGl0eG5fYmVnaW4KICAgIGludCAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIGludCBhZnJ6CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3Jldm9rZShhc3NldDogdWludDY0LCBhY2NvdW50X3RvX2JlX3Jldm9rZWQ6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfcmV2b2tlOgogICAgcHJvdG8gMyAwCiAgICBpdHhuX2JlZ2luCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRTZW5kZXIKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaW50IGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2NvbmZpZyhhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9jb25maWc6CiAgICBwcm90byAxIDAKICAgIGl0eG5fYmVnaW4KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBkdXAKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgaW50IGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZGVsZXRlKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2RlbGV0ZToKICAgIHByb3RvIDEgMAogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CiAgICBpbnQgYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5tdWx0aV9pbm5lcl90eG5zKGFwcF9pZDogdWludDY0KSAtPiB1aW50NjQsIGJ5dGVzOgptdWx0aV9pbm5lcl90eG5zOgogICAgcHJvdG8gMSAyCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpbnQgNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludCBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9uZXh0CiAgICBtZXRob2QgImhlbGxvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDU1NzZmNzI2YzY0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAwIEFtb3VudAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmRlcGxveV9hcHAoKSAtPiB1aW50NjQ6CmRlcGxveV9hcHA6CiAgICBwcm90byAwIDEKICAgIGl0eG5fYmVnaW4KICAgIGJ5dGUgYmFzZTY0IENvRUJRdz09CiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGUgYmFzZTY0IENpQUNBQUdJQUFGRGlnQUJNUnRCQURLQUJBSyt6aEUyR2dDT0FRQUNJb2t4R1JSRU1SaEVOaG9CVndJQWlBQWdTUlVXVndZQ1RGQ0FCQlVmZkhWTVVMQWppVEVaUUFBR01SZ1VSQ09KSW9tS0FRR0FCMGhsYkd4dkxDQ0wvMUNKCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hcmM0X2RlcGxveV9hcHAoKSAtPiB1aW50NjQ6CmFyYzRfZGVwbG95X2FwcDoKICAgIHByb3RvIDAgMQogICAgaXR4bl9iZWdpbgogICAgYnl0ZSBiYXNlNjQgQ29FQlF3PT0KICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZSBiYXNlNjQgQ2lBQ0FBR0lBQUZEaWdBQk1SdEJBREtBQkFLK3poRTJHZ0NPQVFBQ0lva3hHUlJFTVJoRU5ob0JWd0lBaUFBZ1NSVVdWd1lDVEZDQUJCVWZmSFZNVUxBamlURVpRQUFHTVJnVVJDT0pJb21LQVFHQUIwaGxiR3h2TENDTC8xQ0oKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm5vb3BfYXBwX2NhbGwoYXBwX2lkOiB1aW50NjQpIC0+IGJ5dGVzLCBieXRlczoKbm9vcF9hcHBfY2FsbDoKICAgIHByb3RvIDEgMgogICAgaXR4bl9iZWdpbgogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDA1NjE2NzYxNjk2ZQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGV4dHJhY3QgMiAwCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py b/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py index 0db95fb..0e09b32 100644 --- a/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py +++ b/projects/python-contract-examples/smart_contracts/inner_transactions/contract.py @@ -37,7 +37,7 @@ def payment(self) -> UInt64: def fungible_asset_create(self) -> UInt64: itxn_result = itxn.AssetConfig( total=100_000_000_000, - decimals=10, + decimals=2, unit_name="RP", asset_name="Royalty Points", ).submit()