From 6a71f4836ba22d993e57b7f345656a0e3db37b10 Mon Sep 17 00:00:00 2001 From: 0M3REXE Date: Sun, 5 May 2024 14:03:56 +0530 Subject: [PATCH] PYthon challenge 3 0M3REXE --- .../asa_vault/AsaVault.approval.teal | 91 ++++++++++++++----- .../artifacts/asa_vault/AsaVault.arc32.json | 2 +- .../artifacts/asa_vault/client.py | 2 +- .../smart_contracts/asa_vault/contract.py | 8 ++ 4 files changed, 78 insertions(+), 25 deletions(-) diff --git a/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.approval.teal b/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.approval.teal index 0ff937f..d579895 100644 --- a/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.approval.teal +++ b/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.approval.teal @@ -59,7 +59,7 @@ main_opt_in_to_asset_route@2: return main_deposit_asa_route@3: - // smart_contracts/asa_vault/contract.py:25 + // smart_contracts/asa_vault/contract.py:33 // @arc4.abimethod txn OnCompletion ! @@ -76,14 +76,14 @@ main_deposit_asa_route@3: int axfer == assert // transaction type is axfer - // smart_contracts/asa_vault/contract.py:25 + // smart_contracts/asa_vault/contract.py:33 // @arc4.abimethod callsub deposit_asa int 1 return main_withdraw_asa_route@4: - // smart_contracts/asa_vault/contract.py:33 + // smart_contracts/asa_vault/contract.py:41 // @arc4.abimethod txn OnCompletion ! @@ -95,14 +95,14 @@ main_withdraw_asa_route@4: txna ApplicationArgs 1 btoi txnas Assets - // smart_contracts/asa_vault/contract.py:33 + // smart_contracts/asa_vault/contract.py:41 // @arc4.abimethod callsub withdraw_asa int 1 return main_get_asa_balance_route@5: - // smart_contracts/asa_vault/contract.py:47 + // smart_contracts/asa_vault/contract.py:55 // @arc4.abimethod(readonly=True) txn OnCompletion ! @@ -175,6 +175,51 @@ opt_in_to_asset: + == assert + // smart_contracts/asa_vault/contract.py:25-31 + // itxn.AssetTransfer( + // xfer_asset=self.asset_id, + // asset_receiver=Global.current_application_address, + // sender=Global.current_application_address, + // asset_amount=0, + // fee=0, + // ).submit() + itxn_begin + // smart_contracts/asa_vault/contract.py:26 + // xfer_asset=self.asset_id, + int 0 + byte "asset_id" + app_global_get_ex + assert // check asset_id exists + // smart_contracts/asa_vault/contract.py:27 + // asset_receiver=Global.current_application_address, + global CurrentApplicationAddress + // smart_contracts/asa_vault/contract.py:28 + // sender=Global.current_application_address, + dup + // smart_contracts/asa_vault/contract.py:30 + // fee=0, + int 0 + itxn_field Fee + // smart_contracts/asa_vault/contract.py:29 + // asset_amount=0, + int 0 + itxn_field AssetAmount + itxn_field Sender + itxn_field AssetReceiver + itxn_field XferAsset + // smart_contracts/asa_vault/contract.py:25 + // itxn.AssetTransfer( + int axfer + itxn_field TypeEnum + // smart_contracts/asa_vault/contract.py:25-31 + // itxn.AssetTransfer( + // xfer_asset=self.asset_id, + // asset_receiver=Global.current_application_address, + // sender=Global.current_application_address, + // asset_amount=0, + // fee=0, + // ).submit() + itxn_submit retsub @@ -195,27 +240,27 @@ authorize_creator: // smart_contracts.asa_vault.contract.AsaVault.deposit_asa(deposit_txn: uint64) -> void: deposit_asa: - // smart_contracts/asa_vault/contract.py:25-26 + // smart_contracts/asa_vault/contract.py:33-34 // @arc4.abimethod // def deposit_asa(self, deposit_txn: gtxn.AssetTransferTransaction)-> None: proto 1 0 - // smart_contracts/asa_vault/contract.py:27 + // smart_contracts/asa_vault/contract.py:35 // self.authorize_creator() callsub authorize_creator - // smart_contracts/asa_vault/contract.py:28 + // smart_contracts/asa_vault/contract.py:36 // assert deposit_txn.asset_receiver == Global.current_application_address frame_dig -1 gtxns AssetReceiver global CurrentApplicationAddress == assert - // smart_contracts/asa_vault/contract.py:29 + // smart_contracts/asa_vault/contract.py:37 // assert deposit_txn.asset_amount > 0 frame_dig -1 gtxns AssetAmount dup assert - // smart_contracts/asa_vault/contract.py:31 + // smart_contracts/asa_vault/contract.py:39 // self.asa_balance += deposit_txn.asset_amount int 0 byte "asa_balance" @@ -230,14 +275,14 @@ deposit_asa: // smart_contracts.asa_vault.contract.AsaVault.withdraw_asa(asset: uint64) -> void: withdraw_asa: - // smart_contracts/asa_vault/contract.py:33-34 + // smart_contracts/asa_vault/contract.py:41-42 // @arc4.abimethod // def withdraw_asa(self, asset: Asset) -> None: proto 1 0 - // smart_contracts/asa_vault/contract.py:35 + // smart_contracts/asa_vault/contract.py:43 // self.authorize_creator() callsub authorize_creator - // smart_contracts/asa_vault/contract.py:37-43 + // smart_contracts/asa_vault/contract.py:45-51 // itxn.AssetTransfer( // xfer_asset=self.asset_id, // asset_receiver=Global.creator_address, @@ -246,34 +291,34 @@ withdraw_asa: // fee=0, // ).submit() itxn_begin - // smart_contracts/asa_vault/contract.py:38 + // smart_contracts/asa_vault/contract.py:46 // xfer_asset=self.asset_id, int 0 byte "asset_id" app_global_get_ex assert // check asset_id exists - // smart_contracts/asa_vault/contract.py:39 + // smart_contracts/asa_vault/contract.py:47 // asset_receiver=Global.creator_address, global CreatorAddress - // smart_contracts/asa_vault/contract.py:41 + // smart_contracts/asa_vault/contract.py:49 // asset_close_to=Global.creator_address, dup - // smart_contracts/asa_vault/contract.py:42 + // smart_contracts/asa_vault/contract.py:50 // fee=0, int 0 itxn_field Fee itxn_field AssetCloseTo - // smart_contracts/asa_vault/contract.py:40 + // smart_contracts/asa_vault/contract.py:48 // asset_amount=0, int 0 itxn_field AssetAmount itxn_field AssetReceiver itxn_field XferAsset - // smart_contracts/asa_vault/contract.py:37 + // smart_contracts/asa_vault/contract.py:45 // itxn.AssetTransfer( int axfer itxn_field TypeEnum - // smart_contracts/asa_vault/contract.py:37-43 + // smart_contracts/asa_vault/contract.py:45-51 // itxn.AssetTransfer( // xfer_asset=self.asset_id, // asset_receiver=Global.creator_address, @@ -282,7 +327,7 @@ withdraw_asa: // fee=0, // ).submit() itxn_submit - // smart_contracts/asa_vault/contract.py:45 + // smart_contracts/asa_vault/contract.py:53 // self.asa_balance = UInt64(0) byte "asa_balance" int 0 @@ -292,11 +337,11 @@ withdraw_asa: // smart_contracts.asa_vault.contract.AsaVault.get_asa_balance() -> uint64: get_asa_balance: - // smart_contracts/asa_vault/contract.py:47-48 + // smart_contracts/asa_vault/contract.py:55-56 // @arc4.abimethod(readonly=True) // def get_asa_balance(self) -> UInt64: proto 0 1 - // smart_contracts/asa_vault/contract.py:49 + // smart_contracts/asa_vault/contract.py:57 // return self.asa_balance int 0 byte "asa_balance" diff --git a/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.arc32.json b/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.arc32.json index e5eb6c1..7129d29 100644 --- a/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.arc32.json +++ b/projects/challenge/smart_contracts/artifacts/asa_vault/AsaVault.arc32.json @@ -28,7 +28,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBtZXRob2QgImNyZWF0ZV9hcHBsaWNhdGlvbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJvcHRfaW5fdG9fYXNzZXQocGF5KXZvaWQiCiAgICBtZXRob2QgImRlcG9zaXRfYXNhKGF4ZmVyKXZvaWQiCiAgICBtZXRob2QgIndpdGhkcmF3X2FzYShhc3NldCl2b2lkIgogICAgbWV0aG9kICJnZXRfYXNhX2JhbGFuY2UoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlX2FwcGxpY2F0aW9uX3JvdXRlQDEgbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMiBtYWluX2RlcG9zaXRfYXNhX3JvdXRlQDMgbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANCBtYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1CiAgICBlcnIgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCgptYWluX2NyZWF0ZV9hcHBsaWNhdGlvbl9yb3V0ZUAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICBjYWxsc3ViIGNyZWF0ZV9hcHBsaWNhdGlvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludCAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnQgcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgb3B0X2luX3RvX2Fzc2V0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfYXNhX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnQgMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50IGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZXBvc2l0X2FzYQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgd2l0aGRyYXdfYXNhCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hc2FfYmFsYW5jZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuY3JlYXRlX2FwcGxpY2F0aW9uKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmNyZWF0ZV9hcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6Ny05CiAgICAvLyAjIGNyZWF0ZSB0aGUgYXBwIGFuZCBjb25maWd1cmUgd2hhdCBBU0EgdGhpcyB2YXVsdCB3aWxsIGhvbGQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiTm9PcCJdLCBjcmVhdGU9InJlcXVpcmUiKQogICAgLy8gZGVmIGNyZWF0ZV9hcHBsaWNhdGlvbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTAKICAgIC8vIHNlbGYuYXNzZXRfaWQgPSBhc3NldC5pZAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjExCiAgICAvLyBzZWxmLmFzYV9iYWxhbmNlID0gVUludDY0KDApCiAgICBieXRlICJhc2FfYmFsYW5jZSIKICAgIGludCAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5vcHRfaW5fdG9fYXNzZXQobWJyX3BheTogdWludDY0KSAtPiB2b2lkOgpvcHRfaW5fdG9fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBvcHRfaW5fdG9fYXNzZXQoc2VsZiwgbWJyX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTkKICAgIC8vIHNlbGYuYXV0aG9yaXplX2NyZWF0b3IoKQogICAgY2FsbHN1YiBhdXRob3JpemVfY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMAogICAgLy8gYXNzZXJ0IG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKEFzc2V0KHNlbGYuYXNzZXRfaWQpKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMwogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IEdsb2JhbC5taW5fYmFsYW5jZSArIEdsb2JhbC5hc3NldF9vcHRfaW5fbWluX2JhbGFuY2UKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICArCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmF1dGhvcml6ZV9jcmVhdG9yKCkgLT4gdm9pZDoKYXV0aG9yaXplX2NyZWF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjEzLTE0CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGF1dGhvcml6ZV9jcmVhdG9yKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5kZXBvc2l0X2FzYShkZXBvc2l0X3R4bjogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0X2FzYToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUtMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlcG9zaXRfYXNhKHNlbGYsIGRlcG9zaXRfdHhuOiBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbiktPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI3CiAgICAvLyBzZWxmLmF1dGhvcml6ZV9jcmVhdG9yKCkKICAgIGNhbGxzdWIgYXV0aG9yaXplX2NyZWF0b3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjgKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI5CiAgICAvLyBhc3NlcnQgZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50ID4gMAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzEKICAgIC8vIHNlbGYuYXNhX2JhbGFuY2UgKz0gZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50CiAgICBpbnQgMAogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzYV9iYWxhbmNlIGV4aXN0cwogICAgKwogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC53aXRoZHJhd19hc2EoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdfYXNhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozMy0zNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgd2l0aGRyYXdfYXNhKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozNQogICAgLy8gc2VsZi5hdXRob3JpemVfY3JlYXRvcigpCiAgICBjYWxsc3ViIGF1dGhvcml6ZV9jcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM3LTQzCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgYXNzZXRfY2xvc2VfdG89R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzgKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM5CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NldF9jbG9zZV90bz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBmZWU9MCwKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDAKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozNy00MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGFzc2V0X2Nsb3NlX3RvPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NQogICAgLy8gc2VsZi5hc2FfYmFsYW5jZSA9IFVJbnQ2NCgwKQogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBpbnQgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuZ2V0X2FzYV9iYWxhbmNlKCkgLT4gdWludDY0OgpnZXRfYXNhX2JhbGFuY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ3LTQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNhX2JhbGFuY2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyByZXR1cm4gc2VsZi5hc2FfYmFsYW5jZQogICAgaW50IDAKICAgIGJ5dGUgImFzYV9iYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBhc2FfYmFsYW5jZSBleGlzdHMKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBtZXRob2QgImNyZWF0ZV9hcHBsaWNhdGlvbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJvcHRfaW5fdG9fYXNzZXQocGF5KXZvaWQiCiAgICBtZXRob2QgImRlcG9zaXRfYXNhKGF4ZmVyKXZvaWQiCiAgICBtZXRob2QgIndpdGhkcmF3X2FzYShhc3NldCl2b2lkIgogICAgbWV0aG9kICJnZXRfYXNhX2JhbGFuY2UoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlX2FwcGxpY2F0aW9uX3JvdXRlQDEgbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMiBtYWluX2RlcG9zaXRfYXNhX3JvdXRlQDMgbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANCBtYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1CiAgICBlcnIgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCgptYWluX2NyZWF0ZV9hcHBsaWNhdGlvbl9yb3V0ZUAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICBjYWxsc3ViIGNyZWF0ZV9hcHBsaWNhdGlvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludCAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnQgcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgb3B0X2luX3RvX2Fzc2V0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfYXNhX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnQgMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50IGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZXBvc2l0X2FzYQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgd2l0aGRyYXdfYXNhCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hc2FfYmFsYW5jZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuY3JlYXRlX2FwcGxpY2F0aW9uKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmNyZWF0ZV9hcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6Ny05CiAgICAvLyAjIGNyZWF0ZSB0aGUgYXBwIGFuZCBjb25maWd1cmUgd2hhdCBBU0EgdGhpcyB2YXVsdCB3aWxsIGhvbGQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiTm9PcCJdLCBjcmVhdGU9InJlcXVpcmUiKQogICAgLy8gZGVmIGNyZWF0ZV9hcHBsaWNhdGlvbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTAKICAgIC8vIHNlbGYuYXNzZXRfaWQgPSBhc3NldC5pZAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjExCiAgICAvLyBzZWxmLmFzYV9iYWxhbmNlID0gVUludDY0KDApCiAgICBieXRlICJhc2FfYmFsYW5jZSIKICAgIGludCAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5vcHRfaW5fdG9fYXNzZXQobWJyX3BheTogdWludDY0KSAtPiB2b2lkOgpvcHRfaW5fdG9fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBvcHRfaW5fdG9fYXNzZXQoc2VsZiwgbWJyX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTkKICAgIC8vIHNlbGYuYXV0aG9yaXplX2NyZWF0b3IoKQogICAgY2FsbHN1YiBhdXRob3JpemVfY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMAogICAgLy8gYXNzZXJ0IG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKEFzc2V0KHNlbGYuYXNzZXRfaWQpKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMwogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IEdsb2JhbC5taW5fYmFsYW5jZSArIEdsb2JhbC5hc3NldF9vcHRfaW5fbWluX2JhbGFuY2UKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICArCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI1LTMxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI2CiAgICAvLyB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICBpbnQgMAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzc2V0X2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyNwogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI4CiAgICAvLyBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozMAogICAgLy8gZmVlPTAsCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjkKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUtMzEKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmF1dGhvcml6ZV9jcmVhdG9yKCkgLT4gdm9pZDoKYXV0aG9yaXplX2NyZWF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjEzLTE0CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGF1dGhvcml6ZV9jcmVhdG9yKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5kZXBvc2l0X2FzYShkZXBvc2l0X3R4bjogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0X2FzYToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzMtMzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlcG9zaXRfYXNhKHNlbGYsIGRlcG9zaXRfdHhuOiBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbiktPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM1CiAgICAvLyBzZWxmLmF1dGhvcml6ZV9jcmVhdG9yKCkKICAgIGNhbGxzdWIgYXV0aG9yaXplX2NyZWF0b3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzYKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhc3NlcnQgZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50ID4gMAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzkKICAgIC8vIHNlbGYuYXNhX2JhbGFuY2UgKz0gZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50CiAgICBpbnQgMAogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzYV9iYWxhbmNlIGV4aXN0cwogICAgKwogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC53aXRoZHJhd19hc2EoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdfYXNhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0MS00MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgd2l0aGRyYXdfYXNhKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0MwogICAgLy8gc2VsZi5hdXRob3JpemVfY3JlYXRvcigpCiAgICBjYWxsc3ViIGF1dGhvcml6ZV9jcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ1LTUxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgYXNzZXRfY2xvc2VfdG89R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDYKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ3CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBhc3NldF9jbG9zZV90bz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjUwCiAgICAvLyBmZWU9MCwKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDgKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NS01MQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGFzc2V0X2Nsb3NlX3RvPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5hc2FfYmFsYW5jZSA9IFVJbnQ2NCgwKQogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBpbnQgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuZ2V0X2FzYV9iYWxhbmNlKCkgLT4gdWludDY0OgpnZXRfYXNhX2JhbGFuY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjU1LTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNhX2JhbGFuY2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjU3CiAgICAvLyByZXR1cm4gc2VsZi5hc2FfYmFsYW5jZQogICAgaW50IDAKICAgIGJ5dGUgImFzYV9iYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBhc2FfYmFsYW5jZSBleGlzdHMKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/challenge/smart_contracts/artifacts/asa_vault/client.py b/projects/challenge/smart_contracts/artifacts/asa_vault/client.py index 1f9af2b..6cde37c 100644 --- a/projects/challenge/smart_contracts/artifacts/asa_vault/client.py +++ b/projects/challenge/smart_contracts/artifacts/asa_vault/client.py @@ -51,7 +51,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBtZXRob2QgImNyZWF0ZV9hcHBsaWNhdGlvbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJvcHRfaW5fdG9fYXNzZXQocGF5KXZvaWQiCiAgICBtZXRob2QgImRlcG9zaXRfYXNhKGF4ZmVyKXZvaWQiCiAgICBtZXRob2QgIndpdGhkcmF3X2FzYShhc3NldCl2b2lkIgogICAgbWV0aG9kICJnZXRfYXNhX2JhbGFuY2UoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlX2FwcGxpY2F0aW9uX3JvdXRlQDEgbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMiBtYWluX2RlcG9zaXRfYXNhX3JvdXRlQDMgbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANCBtYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1CiAgICBlcnIgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCgptYWluX2NyZWF0ZV9hcHBsaWNhdGlvbl9yb3V0ZUAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICBjYWxsc3ViIGNyZWF0ZV9hcHBsaWNhdGlvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludCAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnQgcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgb3B0X2luX3RvX2Fzc2V0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfYXNhX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnQgMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50IGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZXBvc2l0X2FzYQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgd2l0aGRyYXdfYXNhCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hc2FfYmFsYW5jZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuY3JlYXRlX2FwcGxpY2F0aW9uKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmNyZWF0ZV9hcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6Ny05CiAgICAvLyAjIGNyZWF0ZSB0aGUgYXBwIGFuZCBjb25maWd1cmUgd2hhdCBBU0EgdGhpcyB2YXVsdCB3aWxsIGhvbGQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiTm9PcCJdLCBjcmVhdGU9InJlcXVpcmUiKQogICAgLy8gZGVmIGNyZWF0ZV9hcHBsaWNhdGlvbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTAKICAgIC8vIHNlbGYuYXNzZXRfaWQgPSBhc3NldC5pZAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjExCiAgICAvLyBzZWxmLmFzYV9iYWxhbmNlID0gVUludDY0KDApCiAgICBieXRlICJhc2FfYmFsYW5jZSIKICAgIGludCAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5vcHRfaW5fdG9fYXNzZXQobWJyX3BheTogdWludDY0KSAtPiB2b2lkOgpvcHRfaW5fdG9fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBvcHRfaW5fdG9fYXNzZXQoc2VsZiwgbWJyX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTkKICAgIC8vIHNlbGYuYXV0aG9yaXplX2NyZWF0b3IoKQogICAgY2FsbHN1YiBhdXRob3JpemVfY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMAogICAgLy8gYXNzZXJ0IG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKEFzc2V0KHNlbGYuYXNzZXRfaWQpKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMwogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IEdsb2JhbC5taW5fYmFsYW5jZSArIEdsb2JhbC5hc3NldF9vcHRfaW5fbWluX2JhbGFuY2UKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICArCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmF1dGhvcml6ZV9jcmVhdG9yKCkgLT4gdm9pZDoKYXV0aG9yaXplX2NyZWF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjEzLTE0CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGF1dGhvcml6ZV9jcmVhdG9yKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5kZXBvc2l0X2FzYShkZXBvc2l0X3R4bjogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0X2FzYToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUtMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlcG9zaXRfYXNhKHNlbGYsIGRlcG9zaXRfdHhuOiBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbiktPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI3CiAgICAvLyBzZWxmLmF1dGhvcml6ZV9jcmVhdG9yKCkKICAgIGNhbGxzdWIgYXV0aG9yaXplX2NyZWF0b3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjgKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI5CiAgICAvLyBhc3NlcnQgZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50ID4gMAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzEKICAgIC8vIHNlbGYuYXNhX2JhbGFuY2UgKz0gZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50CiAgICBpbnQgMAogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzYV9iYWxhbmNlIGV4aXN0cwogICAgKwogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC53aXRoZHJhd19hc2EoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdfYXNhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozMy0zNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgd2l0aGRyYXdfYXNhKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozNQogICAgLy8gc2VsZi5hdXRob3JpemVfY3JlYXRvcigpCiAgICBjYWxsc3ViIGF1dGhvcml6ZV9jcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM3LTQzCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgYXNzZXRfY2xvc2VfdG89R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzgKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM5CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBhc3NldF9jbG9zZV90bz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBmZWU9MCwKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDAKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozNy00MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGFzc2V0X2Nsb3NlX3RvPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NQogICAgLy8gc2VsZi5hc2FfYmFsYW5jZSA9IFVJbnQ2NCgwKQogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBpbnQgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuZ2V0X2FzYV9iYWxhbmNlKCkgLT4gdWludDY0OgpnZXRfYXNhX2JhbGFuY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ3LTQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNhX2JhbGFuY2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyByZXR1cm4gc2VsZi5hc2FfYmFsYW5jZQogICAgaW50IDAKICAgIGJ5dGUgImFzYV9iYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBhc2FfYmFsYW5jZSBleGlzdHMKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBtZXRob2QgImNyZWF0ZV9hcHBsaWNhdGlvbihhc3NldCl2b2lkIgogICAgbWV0aG9kICJvcHRfaW5fdG9fYXNzZXQocGF5KXZvaWQiCiAgICBtZXRob2QgImRlcG9zaXRfYXNhKGF4ZmVyKXZvaWQiCiAgICBtZXRob2QgIndpdGhkcmF3X2FzYShhc3NldCl2b2lkIgogICAgbWV0aG9kICJnZXRfYXNhX2JhbGFuY2UoKXVpbnQ2NCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlX2FwcGxpY2F0aW9uX3JvdXRlQDEgbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMiBtYWluX2RlcG9zaXRfYXNhX3JvdXRlQDMgbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANCBtYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1CiAgICBlcnIgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCgptYWluX2NyZWF0ZV9hcHBsaWNhdGlvbl9yb3V0ZUAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gaXMgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo3LTgKICAgIC8vICMgY3JlYXRlIHRoZSBhcHAgYW5kIGNvbmZpZ3VyZSB3aGF0IEFTQSB0aGlzIHZhdWx0IHdpbGwgaG9sZAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICBjYWxsc3ViIGNyZWF0ZV9hcHBsaWNhdGlvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl9vcHRfaW5fdG9fYXNzZXRfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludCAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnQgcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgb3B0X2luX3RvX2Fzc2V0CiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfYXNhX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgQXNhVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnQgMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50IGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZXBvc2l0X2FzYQogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19hc2Ffcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBBc2FWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgd2l0aGRyYXdfYXNhCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2dldF9hc2FfYmFsYW5jZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hc2FfYmFsYW5jZQogICAgaXRvYgogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50IDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuY3JlYXRlX2FwcGxpY2F0aW9uKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmNyZWF0ZV9hcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6Ny05CiAgICAvLyAjIGNyZWF0ZSB0aGUgYXBwIGFuZCBjb25maWd1cmUgd2hhdCBBU0EgdGhpcyB2YXVsdCB3aWxsIGhvbGQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiTm9PcCJdLCBjcmVhdGU9InJlcXVpcmUiKQogICAgLy8gZGVmIGNyZWF0ZV9hcHBsaWNhdGlvbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTAKICAgIC8vIHNlbGYuYXNzZXRfaWQgPSBhc3NldC5pZAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjExCiAgICAvLyBzZWxmLmFzYV9iYWxhbmNlID0gVUludDY0KDApCiAgICBieXRlICJhc2FfYmFsYW5jZSIKICAgIGludCAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5vcHRfaW5fdG9fYXNzZXQobWJyX3BheTogdWludDY0KSAtPiB2b2lkOgpvcHRfaW5fdG9fYXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBvcHRfaW5fdG9fYXNzZXQoc2VsZiwgbWJyX3BheTogZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTkKICAgIC8vIHNlbGYuYXV0aG9yaXplX2NyZWF0b3IoKQogICAgY2FsbHN1YiBhdXRob3JpemVfY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMAogICAgLy8gYXNzZXJ0IG5vdCBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmlzX29wdGVkX2luKEFzc2V0KHNlbGYuYXNzZXRfaWQpKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBhc3NlcnQgbWJyX3BheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyMwogICAgLy8gYXNzZXJ0IG1icl9wYXkuYW1vdW50ID09IEdsb2JhbC5taW5fYmFsYW5jZSArIEdsb2JhbC5hc3NldF9vcHRfaW5fbWluX2JhbGFuY2UKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQW1vdW50CiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCiAgICArCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI1LTMxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgc2VuZGVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI2CiAgICAvLyB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICBpbnQgMAogICAgYnl0ZSAiYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzc2V0X2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weToyNwogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI4CiAgICAvLyBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTozMAogICAgLy8gZmVlPTAsCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjkKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnQgYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MjUtMzEKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuYXNzZXRfaWQsCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBzZW5kZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmF1dGhvcml6ZV9jcmVhdG9yKCkgLT4gdm9pZDoKYXV0aG9yaXplX2NyZWF0b3I6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjEzLTE0CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGF1dGhvcml6ZV9jcmVhdG9yKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MTUKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC5kZXBvc2l0X2FzYShkZXBvc2l0X3R4bjogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0X2FzYToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzMtMzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlcG9zaXRfYXNhKHNlbGYsIGRlcG9zaXRfdHhuOiBndHhuLkFzc2V0VHJhbnNmZXJUcmFuc2FjdGlvbiktPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM1CiAgICAvLyBzZWxmLmF1dGhvcml6ZV9jcmVhdG9yKCkKICAgIGNhbGxzdWIgYXV0aG9yaXplX2NyZWF0b3IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzYKICAgIC8vIGFzc2VydCBkZXBvc2l0X3R4bi5hc3NldF9yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhc3NlcnQgZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50ID4gMAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBc3NldEFtb3VudAogICAgZHVwCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6MzkKICAgIC8vIHNlbGYuYXNhX2JhbGFuY2UgKz0gZGVwb3NpdF90eG4uYXNzZXRfYW1vdW50CiAgICBpbnQgMAogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIGFzYV9iYWxhbmNlIGV4aXN0cwogICAgKwogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzYV92YXVsdC5jb250cmFjdC5Bc2FWYXVsdC53aXRoZHJhd19hc2EoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdfYXNhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0MS00MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgd2l0aGRyYXdfYXNhKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0MwogICAgLy8gc2VsZi5hdXRob3JpemVfY3JlYXRvcigpCiAgICBjYWxsc3ViIGF1dGhvcml6ZV9jcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ1LTUxCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgeGZlcl9hc3NldD1zZWxmLmFzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgYXNzZXRfY2xvc2VfdG89R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDYKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIGludCAwCiAgICBieXRlICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgYXNzZXRfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ3CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBhc3NldF9jbG9zZV90bz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjUwCiAgICAvLyBmZWU9MCwKICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDgKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50IDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc2FfdmF1bHQvY29udHJhY3QucHk6NDUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludCBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo0NS01MQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGFzc2V0X2Nsb3NlX3RvPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FzYV92YXVsdC9jb250cmFjdC5weTo1MwogICAgLy8gc2VsZi5hc2FfYmFsYW5jZSA9IFVJbnQ2NCgwKQogICAgYnl0ZSAiYXNhX2JhbGFuY2UiCiAgICBpbnQgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc2FfdmF1bHQuY29udHJhY3QuQXNhVmF1bHQuZ2V0X2FzYV9iYWxhbmNlKCkgLT4gdWludDY0OgpnZXRfYXNhX2JhbGFuY2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjU1LTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNhX2JhbGFuY2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjU3CiAgICAvLyByZXR1cm4gc2VsZi5hc2FfYmFsYW5jZQogICAgaW50IDAKICAgIGJ5dGUgImFzYV9iYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBhc2FfYmFsYW5jZSBleGlzdHMKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgpzbWFydF9jb250cmFjdHMuYXNhX3ZhdWx0LmNvbnRyYWN0LkFzYVZhdWx0LmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNhX3ZhdWx0L2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEFzYVZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBpbnQgMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/challenge/smart_contracts/asa_vault/contract.py b/projects/challenge/smart_contracts/asa_vault/contract.py index 9ff62c4..74cc38b 100644 --- a/projects/challenge/smart_contracts/asa_vault/contract.py +++ b/projects/challenge/smart_contracts/asa_vault/contract.py @@ -21,6 +21,14 @@ def opt_in_to_asset(self, mbr_pay: gtxn.PaymentTransaction) -> None: assert mbr_pay.receiver == Global.current_application_address assert mbr_pay.amount == Global.min_balance + Global.asset_opt_in_min_balance + + itxn.AssetTransfer( + xfer_asset=self.asset_id, + asset_receiver=Global.current_application_address, + sender=Global.current_application_address, + asset_amount=0, + fee=0, + ).submit() @arc4.abimethod def deposit_asa(self, deposit_txn: gtxn.AssetTransferTransaction)-> None: